Como armazenar artefatos de build

É possível armazenar os artefatos produzidos pelo seu build, como binários ou tarballs, no Cloud Storage ou em qualquer repositório privado de terceiros.

Nesta página, explicamos como armazenar artefatos de build no Cloud Storage. Para informações sobre como armazenar imagens de contêiner, consulte Como criar imagens de contêiner.

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, como gs://mybucket ou gs://mybucket/some/folder.
  • [ARTIFACT_PATH] é o caminho para um ou mais artefatos.

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, como gs://mybucket ou gs://mybucket/some/folder.
  • [ARTIFACT_PATH] é o caminho para um ou mais artefatos.

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]/:

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, use caracteres curinga da gsutil 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:

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 a seguir faz upload dos artefatos em um caminho do Cloud Storage com o nome do projeto do Cloud em que o build foi gerado (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"
            ]
        }
    }
}

Como armazenar artefatos no Artifact Registry

O Artifact Registry é a evolução do Container Registry. Ele permite armazenar artefatos em um serviço de repositórios escalonável e integrado, compatível com imagens do Docker, pacotes do Maven e pacotes do npm. Para instruções sobre como configurar o Cloud Build para armazenar artefatos de build no Artifact Registry, consulte Como integrar com o Cloud Build.

A seguir