Como armazenar artefatos de build no Cloud Storage
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Nesta página, explicamos como armazenar artefatos de build no Cloud Storage.
Recomendamos o uso do Artifact Registry para armazenar artefatos de build. O Artifact Registry é um
produtoGoogle Cloud que pode ser integrado ao Cloud Build
para armazenar e gerenciar com segurança seus artefatos em repositórios privados ou públicos.
Com o armazenamento de artefatos no Artifact Registry, você pode:
Gerencie os metadados do contêiner e procure vulnerabilidades com o
Artifact Analysis.
Para instruções sobre como configurar o Cloud Build para armazenar pacotes e imagens
dos seus 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:
[STORAGE_LOCATION]: um bucket do Cloud Storage ou uma pasta no bucket em que o Cloud Build precisa armazenar o artefato, como gs://mybucket ou gs://mybucket/myproject/builds. Para encontrar os nomes dos buckets, consulte listar buckets ou criar um 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 campo dir.
[STORAGE_LOCATION]: um bucket do Cloud Storage ou uma pasta no bucket em que o Cloud Build precisa armazenar o artefato, como gs://mybucket ou gs://mybucket/myproject/builds. Para encontrar os nomes dos buckets, 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 campo dir.
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 formato
gs://[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]/:
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]/:
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]:
Como usar caracteres curinga para fazer upload de mais de um artefato
Ao fazer upload de vários artefatos, use
caracteres curinga em paths para especificar vários
arquivos.
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:
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 Google Cloud em que o build foi executado
(como gs://mybucket/myproject/):
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-18 UTC."],[[["\u003cp\u003eThis document explains how to store non-container build artifacts in Cloud Storage by adding an \u003ccode\u003eartifacts\u003c/code\u003e field to your build config file, which includes the storage location and artifact paths.\u003c/p\u003e\n"],["\u003cp\u003eWhen storing artifacts in Cloud Storage, you can only specify one bucket, you must be the owner, you can upload up to one hundred artifact paths, and new artifacts with the same name will replace the old one unless object versioning is enabled.\u003c/p\u003e\n"],["\u003cp\u003eThe build's upload results are stored in a JSON manifest file with the \u003ccode\u003elocation\u003c/code\u003e of the artifact and its \u003ccode\u003efile_hash\u003c/code\u003e available once the build is successful.\u003c/p\u003e\n"],["\u003cp\u003eYou can upload single or multiple artifacts, including folders, using specified paths or wildcard characters in the build configuration.\u003c/p\u003e\n"],["\u003cp\u003eThe storage location in Cloud Storage can include substitution variables, allowing for dynamic path creation, like including the project ID in the folder name.\u003c/p\u003e\n"]]],[],null,["# Storing build artifacts in Cloud Storage\n\nThis page explains how you can store build artifacts in Cloud Storage.\n\nWe recommend using Artifact Registry for storing build artifacts. Artifact Registry is a\nGoogle Cloud product that you can integrate with Cloud Build\nto securely store and manage your artifacts in private or public repositories.\nStoring artifacts in Artifact Registry enables you to:\n\n- Manage container metadata and scan for container vulnerabilities with [Artifact Analysis](/artifact-analysis/docs).\n- Enforce deployment policies with [Binary Authorization](/binary-authorization/docs).\n- [Use image streaming in Google Kubernetes Engine](/kubernetes-engine/docs/how-to/image-streaming), which is particularly beneficial for large container images.\n\nFor instructions on configuring Cloud Build to store packages and images\nfrom your builds in Artifact Registry, see\n[Store artifacts in Artifact Registry](/build/docs/building/store-artifacts-in-artifact-registry).\n\nStoring artifacts in Cloud Storage\n----------------------------------\n\n**To store non-container artifacts in Cloud Storage** , add an `artifacts`\nfield in your build config file with the location of the bucket to store the\nartifact and the path to one or more artifacts: \n\n### YAML\n\n artifacts:\n objects:\n location: [STORAGE_LOCATION]\n paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]\n\nWhere,\n\n- `[STORAGE_LOCATION]`: A Cloud Storage bucket or a folder within the bucket where Cloud Build must store the artifact, such as `gs://mybucket` or `gs://mybucket/myproject/builds`. To find the names of existing buckets, see [list buckets](/storage/docs/listing-buckets) or [create a new bucket](/storage/docs/creating-buckets).\n- `[ARTIFACT_PATH]`: Path to one or more artifacts. `[ARTIFACT_PATH]` is relative to your working directory. This can be either `/workspace`, which is Cloud Build's default working directory or the working directory you set using the [`dir`](/build/docs/build-config-file-schema#build_steps) field.\n\n### JSON\n\n {\n \"artifacts\": {\n \"objects\": {\n \"location\": [\n \"[STORAGE_LOCATION]\"\n ],\n \"paths\": [\n [\n \"[ARTIFACT_PATH]\"\n ],\n [\n \"[ARTIFACT_PATH]\"\n ],\n \"...\"\n ]\n }\n }\n }\n\nWhere,\n\n- `[STORAGE_LOCATION]`: A Cloud Storage bucket or a folder within the bucket where Cloud Build must store the artifact, such as `gs://mybucket` or `gs://mybucket/myproject/builds`. To find the names of existing buckets, see [list buckets](/storage/docs/listing-buckets) or [create a new bucket](/storage/docs/creating-buckets).\n- `[ARTIFACT_PATH]`: Path to one or more artifacts. `[ARTIFACT_PATH]` is relative to your working directory. This can be either `/workspace`, which is Cloud Build's default working directory or the working directory you set using the [`dir`](/build/docs/build-config-file-schema#build_steps) field.\n\nNote the following caveats when storing artifacts in Cloud Storage:\n\n- You can specify only one bucket to upload the artifacts and you must be the\n owner of the bucket. You can specify a valid directory path in the bucket.\n\n- You can upload any number of artifacts, but you can specify only up to one\n hundred artifact paths.\n\n- If you upload an artifact to a bucket that already has an artifact with the same\n name, the new artifact will replace the existing artifact. You can enable\n [Object Versioning](/storage/docs/object-versioning) for your bucket if you\n don't want the newer artifact to replace an existing artifact with the same\n name.\n\nAfter the build completes successfully, you can find the upload results in the\nJSON manifest file located at `[STORAGE_LOCATION]/artifacts-$BUILD_ID.json`.\n\nThe JSON manifest file has the following fields:\n\n- `location`: this specifies the location in Cloud Storage where an artifact is stored and is of the form `gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]`. You can use the [generation number](/storage/docs/metadata#generation-number) to uniquely identify a version of the data in Cloud Storage bucket.\n- `file_hash`: this specifies the hash type and the value. The hash type is always 2, which specifies that MD5 hash was performed.\n\nArtifacts examples\n------------------\n\nThe following examples show how you can use the `Artifacts` field in a build\nconfig file. In all of these examples replace `[VALUES_IN_BRACKETS]` with the\nappropriate values.\n\n### Uploading files and folders\n\nThe build config file below uploads `helloworld.class` to\nthe`gs://[STORAGE_LOCATION]/`: \n\n### YAML\n\n steps:\n - name: 'gcr.io/cloud-builders/javac'\n args: ['HelloWorld.java']\n artifacts:\n objects:\n location: 'gs://[STORAGE_LOCATION]/'\n paths: ['HelloWorld.class']\n\n### JSON\n\n {\n \"steps\": [\n {\n \"name\": \"gcr.io/cloud-builders/javac\",\n \"args\": [\n \"HelloWorld.java\"\n ]\n }\n ],\n \"artifacts\": {\n \"objects\": {\n \"location\": \"gs://[STORAGE_LOCATION]/\",\n \"paths\": [\n \"HelloWorld.class\"\n ]\n }\n }\n }\n\nTo upload more than one artifact, specify the path to each artifact separated by\na comma. The following example uploads `HelloWorld.java`, `HelloWorld.class`,\nand `cloudbuild.yaml` to `gs://[STORAGE_LOCATION]/`: \n\n### YAML\n\n steps:\n - name: 'gcr.io/cloud-builders/javac'\n args: ['HelloWorld.java']\n artifacts:\n objects:\n location: 'gs://[STORAGE_LOCATION]/'\n paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']\n\n### JSON\n\n {\n \"steps\": [\n {\n \"name\": \"gcr.io/cloud-builders/javac\",\n \"args\": [\n \"HelloWorld.java\"\n ]\n }\n ],\n \"artifacts\": {\n \"objects\": {\n \"location\": \"gs://[STORAGE_LOCATION]/\",\n \"paths\": [\n \"HelloWorld.java\",\n \"HelloWorld.class\",\n \"cloudbuild.yaml\"\n ]\n }\n }\n }\n\nYou can also upload the artifacts to a valid directory path in the bucket. The\nfollowing example uploads `HelloWorld.java` and `HelloWorld.class` to\n`gs://[BUCKET_NAME]/[FOLDER_NAME]`: \n\n### YAML\n\n steps:\n - name: 'gcr.io/cloud-builders/javac'\n args: ['HelloWorld.java']\n artifacts:\n objects:\n location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'\n paths: ['HelloWorld.java', 'HelloWorld.class']\n\n### JSON\n\n {\n \"steps\": [\n {\n \"name\": \"gcr.io/cloud-builders/javac\",\n \"args\": [\n \"HelloWorld.java\"\n ]\n }\n ],\n \"artifacts\": {\n \"objects\": {\n \"location\": \"gs://[BUCKET_NAME]/[FOLDER_NAME]\",\n \"paths\": [\n \"HelloWorld.java\",\n \"HelloWorld.class\"\n ]\n }\n }\n }\n\n### Using wildcard characters to upload more than one artifact\n\nWhen uploading multiple artifacts, you can use\n[wildcard characters](/storage/docs/wildcards) in `paths` to specify multiple\nfiles.\n\nThe following example takes as an argument a file named `classes`, which\ncontains the names of the `.java` files to compile. It then uploads any `.class`\nfile to the specified Cloud Storage bucket: \n\n### YAML\n\n steps:\n - name: 'gcr.io/cloud-builders/javac'\n args: ['@classes']\n artifacts:\n objects:\n location: 'gs://[STORAGE_LOCATION]/'\n paths: ['*.class']\n\n### JSON\n\n {\n \"steps\": [\n {\n \"name\": \"gcr.io/cloud-builders/javac\",\n \"args\": [\n \"@classes\"\n ]\n }\n ],\n \"artifacts\": {\n \"objects\": {\n \"location\": \"gs://[STORAGE_LOCATION]/\",\n \"paths\": [\n \"*.class\"\n ]\n }\n }\n }\n\n### Using substitution variables in the bucket location\n\nYou can use [substitution\nvariables](/build/docs/configuring-builds/substitute-variable-values)\nto specify a folder within the Cloud Storage bucket. If the folder you've\nspecified doesn't exist, Cloud Build will create it for you.\n\nThe example below uploads the artifacts to a Cloud Storage path that\nincludes the name of your Google Cloud project from which the build was run\n(such as gs://mybucket/myproject/): \n\n### YAML\n\n steps:\n - name: 'gcr.io/cloud-builders/javac'\n args: ['@classes']\n artifacts:\n objects:\n location: 'gs://[BUCKET_NAME]/$PROJECT_ID'\n paths: ['helloworld.class']\n\n### JSON\n\n {\n \"steps\": [\n {\n \"name\": \"gcr.io/cloud-builders/javac\",\n \"args\": [\n \"@classes\"\n ]\n }\n ],\n \"artifacts\": {\n \"objects\": {\n \"location\": \"gs://[BUCKET_NAME]/$PROJECT_ID\",\n \"paths\": [\n \"helloworld.class\"\n ]\n }\n }\n }\n\nWhat's next\n-----------\n\n- Learn how to [build `Go` projects](/build/docs/building/build-go).\n- Learn how to start a build [manually](/build/docs/running-builds/start-build-manually) and [using triggers](/build/docs/running-builds/automate-builds).\n- Learn how to [troubleshoot build errors](/build/docs/troubleshooting)."]]