Esta página explica como pode armazenar artefactos de compilação no Cloud Storage.
Recomendamos que use o Artifact Registry para armazenar artefactos de compilação. O Artifact Registry é um Google Cloud produto que pode integrar com o Cloud Build para armazenar e gerir os seus artefactos de forma segura em repositórios privados ou públicos. O armazenamento de artefactos no Artifact Registry permite-lhe:
- Faça a gestão dos metadados dos contentores e procure vulnerabilidades nos contentores com a análise de artefactos.
- Aplique políticas de implementação com a autorização binária.
- Use o streaming de imagens no Google Kubernetes Engine, o que é particularmente vantajoso para imagens de contentores grandes.
Para obter instruções sobre como configurar o Cloud Build para armazenar pacotes e imagens das suas compilações no Artifact Registry, consulte Armazene artefactos no Artifact Registry.
Armazenar artefactos no Cloud Storage
Para armazenar artefactos não contentorizados no Cloud Storage, adicione um campo artifacts
no ficheiro de configuração da compilação com a localização do contentor para armazenar o artefacto e o caminho para um ou mais artefactos:
YAML
artifacts:
objects:
location: [STORAGE_LOCATION]
paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]
Onde,
[STORAGE_LOCATION]
: um contentor do Cloud Storage ou uma pasta no contentor onde o Cloud Build tem de armazenar o artefacto, comogs://mybucket
ougs://mybucket/myproject/builds
. Para encontrar os nomes dos contentores existentes, consulte listar contentores ou criar um novo contentor.[ARTIFACT_PATH]
: caminho para um ou mais artefactos.[ARTIFACT_PATH]
é relativo ao seu diretório de trabalho. Pode ser/workspace
, que é o diretório de trabalho predefinido do Cloud Build, ou o diretório de trabalho que definiu através do campodir
.
JSON
{
"artifacts": {
"objects": {
"location": [
"[STORAGE_LOCATION]"
],
"paths": [
[
"[ARTIFACT_PATH]"
],
[
"[ARTIFACT_PATH]"
],
"..."
]
}
}
}
Onde,
[STORAGE_LOCATION]
: um contentor do Cloud Storage ou uma pasta no contentor onde o Cloud Build tem de armazenar o artefacto, comogs://mybucket
ougs://mybucket/myproject/builds
. Para encontrar os nomes dos contentores existentes, consulte listar contentores ou criar um novo contentor.[ARTIFACT_PATH]
: caminho para um ou mais artefactos.[ARTIFACT_PATH]
é relativo ao seu diretório de trabalho. Pode ser/workspace
, que é o diretório de trabalho predefinido do Cloud Build, ou o diretório de trabalho que definiu através do campodir
.
Tenha em atenção as seguintes ressalvas ao armazenar artefactos no Cloud Storage:
Só pode especificar um contentor para carregar os artefactos e tem de ser o proprietário do contentor. Pode especificar um caminho de diretório válido no contentor.
Pode carregar qualquer número de artefactos, mas só pode especificar até cem caminhos de artefactos.
Se carregar um artefacto para um contentor que já tenha um artefacto com o mesmo nome, o novo artefacto substitui o artefacto existente. Pode ativar a versão de objetos para o seu contentor se não quiser que o artefacto mais recente substitua um artefacto existente com o mesmo nome.
Depois de a compilação ser concluída com êxito, pode encontrar os resultados do carregamento no ficheiro de manifesto JSON localizado em [STORAGE_LOCATION]/artifacts-$BUILD_ID.json
.
O ficheiro de manifesto JSON tem os seguintes campos:
location
: especifica a localização no Cloud Storage onde um artefacto é armazenado e tem o formatogs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]
. Pode usar o número de geração para identificar de forma exclusiva uma versão dos dados no contentor do Cloud Storage.file_hash
: especifica o tipo de hash e o valor. O tipo de hash é sempre 2, o que especifica que foi realizado um hash MD5.
Exemplos de artefactos
Os exemplos seguintes mostram como pode usar o campo Artifacts
num ficheiro de configuração de compilação. Em todos estes exemplos, substitua [VALUES_IN_BRACKETS]
pelos valores adequados.
Carregar ficheiros e pastas
O ficheiro de configuração de compilação abaixo carrega helloworld.class
para:
gs://[STORAGE_LOCATION]/
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['HelloWorld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"HelloWorld.class"
]
}
}
}
Para carregar mais do que um artefacto, especifique o caminho para cada artefacto separado por uma vírgula. O exemplo seguinte carrega HelloWorld.java
, HelloWorld.class
e cloudbuild.yaml
para gs://[STORAGE_LOCATION]/
:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"HelloWorld.java",
"HelloWorld.class",
"cloudbuild.yaml"
]
}
}
}
Também pode carregar os artefactos para um caminho de diretório válido no contentor. O exemplo seguinte carrega HelloWorld.java
e HelloWorld.class
para gs://[BUCKET_NAME]/[FOLDER_NAME]
:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
paths: ['HelloWorld.java', 'HelloWorld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
"paths": [
"HelloWorld.java",
"HelloWorld.class"
]
}
}
}
Usar carateres universais para carregar mais do que um artefacto
Quando carregar vários artefactos, pode usar carateres universais em paths
para especificar vários ficheiros.
O exemplo seguinte usa como argumento um ficheiro denominado classes
, que
contém os nomes dos ficheiros .java
a compilar. Em seguida, carrega qualquer ficheiro .class
para o contentor do Cloud Storage especificado:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['@classes']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['*.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"@classes"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"*.class"
]
}
}
}
Usar variáveis de substituição na localização do contentor
Pode usar variáveis de substituição para especificar uma pasta no contentor do Cloud Storage. Se a pasta que especificou não existir, o Cloud Build cria-a para si.
O exemplo abaixo carrega os artefactos para um caminho do Cloud Storage que inclui o nome do seu Google Cloud projeto a partir do qual a compilação foi executada Google Cloud (como gs://mybucket/myproject/):
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['@classes']
artifacts:
objects:
location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
paths: ['helloworld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"@classes"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[BUCKET_NAME]/$PROJECT_ID",
"paths": [
"helloworld.class"
]
}
}
}
O que se segue?
- Saiba como criar
Go
projetos. - Saiba como iniciar uma compilação manualmente e usando acionadores.
- Saiba como resolver problemas de erros de compilação.