Nesta página, explicamos como armazenar artefatos de versão no Cloud Storage.
Recomendamos o uso do Artifact Registry para armazenar artefatos de build. O Artifact Registry é um Produto do Google Cloud que pode ser integrado ao Cloud Build para armazenar e gerenciar seus artefatos com segurança em repositórios privados ou públicos. Com o armazenamento de artefatos no Artifact Registry, você pode:
- Gerencie metadados de contêineres e verifique vulnerabilidades de contêineres com o Artifact Analysis.
- Aplique políticas de implantação com a autorização binária.
- Usar o streaming de imagens no Google Kubernetes Engine, o que é particularmente benéfico para imagens de contêiner grandes.
Para instruções sobre como configurar o Cloud Build para armazenar pacotes e imagens dos builds no Artifact Registry, consulte Armazenar artefatos no Artifact Registry.
Como armazenar artefatos no Cloud Storage
Para armazenar artefatos que não sejam de contêineres no Cloud Storage, adicione um campo artifacts
no arquivo de configuração de versão com o local do bucket para armazenar o artefato e o caminho para um ou mais artefatos:
YAML
artifacts:
objects:
location: [STORAGE_LOCATION]
paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]
Em que,
[STORAGE_LOCATION]
: um bucket do Cloud Storage ou uma pasta no bucket em que o Cloud Build precisa armazenar o artefato, comogs://mybucket
ougs://mybucket/myproject/builds
. Para encontrar os nomes de buckets existentes, consulte listar buckets ou crie um novo bucket.[ARTIFACT_PATH]
é o caminho para um ou mais artefatos.[ARTIFACT_PATH]
é relativo ao diretório de trabalho. Isso pode ser/workspace
, que é o diretório de trabalho padrão do Cloud Build ou o diretório de trabalho definido usando o campodir
.
JSON
{
"artifacts": {
"objects": {
"location": [
"[STORAGE_LOCATION]"
],
"paths": [
[
"[ARTIFACT_PATH]"
],
[
"[ARTIFACT_PATH]"
],
"..."
]
}
}
}
Em que,
[STORAGE_LOCATION]
: um bucket do Cloud Storage ou uma pasta no bucket em que o Cloud Build precisa armazenar o artefato, comogs://mybucket
ougs://mybucket/myproject/builds
. Para encontrar os nomes dos buckets existentes, consulte listar buckets ou criar um novo bucket.[ARTIFACT_PATH]
é o caminho para um ou mais artefatos.[ARTIFACT_PATH]
é relativo ao diretório de trabalho. Isso pode ser/workspace
, que é o diretório de trabalho padrão do Cloud Build ou o diretório de trabalho definido usando o campodir
.
Observe as seguintes condições ao armazenar artefatos no Cloud Storage:
Você só pode especificar um bucket para fazer upload dos artefatos e precisa ser o proprietário do bucket. Você pode especificar um caminho de diretório válido no bucket.
Você pode fazer upload de um número qualquer de artefatos, mas só pode especificar até cem caminhos de artefatos.
Se você fizer upload de um artefato em um bucket que já tenha um artefato com o mesmo nome, o novo artefato substituirá o artefato existente. É possível ativar o Controle de versão do objeto do bucket se você não quiser que o artefato mais novo substitua um artefato atual com o mesmo nome.
Depois que a versão tiver sido concluída com êxito, será possível encontrar os resultados de upload no arquivo de manifesto JSON, localizado em [STORAGE_LOCATION]/artifacts-$BUILD_ID.json
.
O arquivo de manifesto JSON tem os seguintes campos:
location
: especifica o local no Cloud Storage em que um artefato é armazenado e está no formatogs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]
. É possível usar o número de geração para identificar de maneira exclusiva uma versão dos dados no bucket do Cloud Storage.file_hash
: especifica o tipo de hash e o valor. O tipo de hash é sempre 2, que especifica que o hash MD5 foi realizado.
Exemplos de artefatos
Os exemplos a seguir mostram como usar o campo Artifacts
em um arquivo de configuração de versão. Em todos esses exemplos, substitua [VALUES_IN_BRACKETS]
pelos valores apropriados.
Como fazer upload de arquivos e pastas
O arquivo de configuração de versão abaixo faz uploads de 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 fazer upload de mais de um artefato, especifique o caminho para cada artefato separado por uma vírgula. O exemplo a seguir faz uploads de 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 é possível fazer upload dos artefatos para um caminho de diretório válido no bucket. O exemplo a seguir faz upload de 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"
]
}
}
}
Como usar caracteres curinga para fazer upload de mais de um artefato
Ao fazer o upload de vários artefatos, é possível usar
caracteres curinga em paths
para especificar vários
.
O argumento usado no exemplo a seguir é um arquivo chamado classes
, contendo os nomes dos arquivos .java
a serem compilados. Em seguida, é feito o upload de qualquer arquivo .class
para o bucket especificado do Cloud Storage:
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"
]
}
}
}
Como usar variáveis de substituição no local do bucket
Use variáveis de substituição para especificar uma pasta no bucket do Cloud Storage. Se a pasta especificada não existir, o Cloud Build a criará para você.
O exemplo abaixo faz upload dos artefatos em um caminho do Cloud Storage que inclui o nome do projeto do Google Cloud em que o build foi executado (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"
]
}
}
}
A seguir
- Saiba como criar projetos
Go
. - Saiba como iniciar uma versão manualmente e usando acionadores.
- Saiba como resolver erros de build.