Como armazenar artefatos de versão

Nesta página, explicamos como armazenar artefatos de versão no Artifact Registry e no Cloud Storage.

Recomendamos o uso do Artifact Registry para gerenciar imagens de contêiner e pacotes de linguagem. Dessa forma, é possível usar a integração com as ferramentas e os ambientes de execução do Google Cloud.

Como armazenar artefatos no Artifact Registry

O Artifact Registry é um produto do Google Cloud que permite armazenar e gerenciar com segurança seus artefatos em repositórios privados ou públicos. É possível configurar o Cloud Build para armazenar pacotes e imagens de builds no Artifact Registry. Para ver instruções sobre como armazenar imagens de compilação, consulte Diferentes maneiras de armazenar imagens no Artifact Registry. Para instruções sobre como armazenar artefatos que não sejam contêineres no Artifact Registry, consulte a documentação do 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/some/folder.
  • [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/some/folder.
  • [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 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"
            ]
        }
    }
}

A seguir