Como armazenar artefatos de versão no Cloud Storage

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 com segurança seus artefatos em repositórios privados ou públicos. Ao armazenar artefatos no Artifact Registry, é possível:

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:

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/myproject/builds. Para encontrar os nomes dos buckets atuais, 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.

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/myproject/builds. Para encontrar os nomes dos buckets atuais, 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]/:

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 abaixo faz upload dos artefatos para um caminho do Cloud Storage que inclui o nome do projeto do Google Cloud em que a versão foi executada (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