Esta página descreve como configurar o Cloud Build para armazenar artefatos criados em um repositório do Artifact Registry.
Antes de começar
- Se o repositório de destino não existir no Artifact Registry, crie um novo repositório.
Se o Cloud Build e o repositório estiverem em projetos diferentes ou se você estiver usando uma conta de serviço especificada pelo usuário para executar builds, conceda o papel de escritor do registro de artefatos à conta de serviço do build no projeto com os repositórios.
A conta de serviço padrão do Cloud Build tem acesso para realizar as seguintes ações com um repositório no mesmo projeto Google Cloud :
- Fazer upload e download de artefatos
- Criar repositórios gcr.io no Artifact Registry
Configurar um build do Docker
Depois de conceder permissões ao repositório de destino, você estará pronto para configurar o build.
Para configurar o build:
No arquivo de configuração de build, adicione a etapa para criar e marcar a imagem.
steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ] images: - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
Este snippet usa substituições do Cloud Build. Essa abordagem é útil se você quiser usar o mesmo arquivo de configuração de build para enviar imagens a repositórios de ambientes diferentes, como teste, preparo ou produção.
${_LOCATION}
,${_REPOSITORY}
e${_IMAGE}
são substituições definidas pelo usuário para o local, o nome e a imagem do repositório. Você especifica os valores dessas variáveis no momento da build.$PROJECT_ID
é uma substituição padrão que o Cloud Build resolve com o ID do projeto Google Cloud do build.- Se você executar o comando
gcloud builds submit
, o Cloud Build usará o ID do projeto ativo na sessão gcloud. - Se você usar um gatilho de compilação, o Cloud Build vai usar o ID do projeto em que ele está sendo executado.
Como alternativa, use uma substituição definida pelo usuário em vez de
$PROJECT_ID
para especificar um ID do projeto no momento do build.- Se você executar o comando
Quando estiver tudo pronto para executar o build, especifique os valores para as substituições definidas pelo usuário. Por exemplo, este comando substitui:
us-east1
para o local do repositóriomy-repo
para o nome do repositóriomy-image
para o nome da imagem
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
Configurar um build do Go
Depois de conceder permissões ao repositório de destino, você estará pronto para configurar o build. As instruções a seguir descrevem como configurar seu build para fazer upload de um módulo Go para um repositório Go.
Para configurar o build:
Para fazer upload de um módulo Go para o repositório Go no build, adicione as seguintes etapas ao arquivo de configuração do build:
steps: - name: gcr.io/cloud-builders/gcloud args: - 'artifacts' - 'go' - 'upload' - '--project=$PROJECT_ID' - '--location=${_LOCATION}' - '--repository=${_REPOSITORY}' - '--module-path=${_MODULE_PATH}' - '--version=$TAG_NAME'
O arquivo de configuração de build inclui substituições do Cloud Build. Essa abordagem é útil se você quiser usar o mesmo arquivo de configuração de build para fazer upload de pacotes para repositórios de ambientes diferentes, como teste, preparo ou produção.
${_LOCATION}
,${_REPOSITORY}
e${_MODULE_PATH}
são substituições definidas pelo usuário para o local, o nome e o caminho do módulo do repositório. Você especifica os valores dessas variáveis no momento da criação.$PROJECT_ID
e$TAG_NAME
são substituições padrão que o Cloud Build substitui pelo seguinte:$PROJECT_ID
é substituído pelo ID do projeto Google Cloud para o build.- Se você executar o comando
gcloud builds submit
, o Cloud Build usará o ID do projeto ativo na sessão gcloud. - Se você usar um gatilho de compilação, o Cloud Build vai usar o ID do projeto em que ele está sendo executado.
Como alternativa, use uma substituição definida pelo usuário em vez de
$PROJECT_ID
para especificar um ID do projeto no momento do build.- Se você executar o comando
$TAG_NAME
é substituído pelo nome da tag para oferecer suporte à convenção do Go de usar tags do Git como números de versão.
Para instalar o pacote do repositório Go, adicione as seguintes etapas ao arquivo de configuração do build para:
- Adicione um endpoint regional do Cloud Build no local do repositório ao arquivo
.netrc
. - Execute a ferramenta de auxiliar de credenciais para atualizar os tokens OAuth.
- Execute o comando
go run
. Também é possível mudar parago build
para compilar o módulo,go test
para executar testes ougo mod tidy
para fazer o download das dependências.
Para a etapa de comando
go
, oGOPROXY
é definido como o repositório do Cloud Build que hospeda dependências particulares. É possível adicionar o proxy público à listaGOPROXY
separada por vírgulas se o módulo tiver dependências públicas.steps: - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', '.'] env: - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}' options: env: # Disable GO sumdb checks for private modules. - 'GONOSUMDB=${_MODULE_PATH}'
- Adicione um endpoint regional do Cloud Build no local do repositório ao arquivo
Quando estiver tudo pronto para executar o build, especifique os valores para as substituições definidas pelo usuário. Por exemplo, este comando substitui:
us-east1
para o local do repositóriomy-project
para o ID do projetomy-repo
para o nome do repositórioexample.com/greetings
para o caminho do módulo
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
Configurar um build Java
Depois de conceder permissões ao repositório de destino, você estará pronto para configurar o build. As instruções a seguir descrevem como configurar seu build para fazer upload de um pacote Java para um repositório Maven.
Para configurar o build:
Configure a autenticação para Maven. Certifique-se de especificar o projeto de destino e o repositório corretos no arquivo
pom.xml
.No arquivo de configuração de versão do Cloud Build, adicione a etapa para fazer upload do pacote com o Maven:
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
Quando o arquivo de configuração de build estiver pronto, inicie o build com o seguinte comando:
gcloud builds submit
Configurar um build do Node.js
Depois de conceder permissões ao repositório de destino, você estará pronto para configurar o build. As instruções a seguir descrevem como configurar seu build para fazer upload de um pacote do Node.js para um repositório do npm.
Para configurar o build:
Adicione o repositório do Artifact Registry ao arquivo
.npmrc
no projeto do Node.js. Ele fica no diretório com o arquivopackage.json
.@SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY/:always-auth=true
- SCOPE-NAME é o nome do escopo do npm a ser associado ao repositório. O uso de escopos garante que você sempre publique e instale pacotes do repositório correto.
- PROJECT_ID é o ID do Google Cloud projeto.
- LOCATION é o local regional ou multirregional do repositório.
- REPOSITORY é o nome do repositório.
Adicione um script ao arquivo
package.json
no seu projeto que atualize o token de acesso para autenticação com o repositório."scripts": { "artifactregistry-login": "npx google-artifactregistry-auth" }
No arquivo de configuração da versão, adicione a etapa para fazer upload do pacote para o repositório.
steps: - name: gcr.io/cloud-builders/npm args: ['run', 'artifactregistry-login'] - name: gcr.io/cloud-builders/npm args: ['publish', '${_PACKAGE}']
${_PACKAGE}
é uma substituição do Cloud Build que representa o diretório do projeto do Node.js. É possível especificar o diretório ao executar o comando para executar o build.Por exemplo, este comando faz upload do pacote de um diretório chamado
src
:gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_PACKAGE="src" .
Configurar um build do Python
Depois de conceder permissões ao repositório de destino, você estará pronto para configurar o build. As instruções a seguir descrevem como configurar seu build para fazer upload de um pacote Python em um repositório Python e instalar o pacote usando pip.
Para criar e contêinerizar um aplicativo Python e enviá-lo a um repositório do Docker, consulte Como criar aplicativos Python na documentação do Cloud Build.
Para configurar o build:
No diretório com o arquivo de configuração do build do Cloud Build, crie um arquivo chamado
requirements.txt
com as seguintes dependências:twine keyrings.google-artifactregistry-auth
- O Twine é usado para fazer upload de pacotes para o Artifact Registry.
- keyrings.google-artifactregistry-auth é o back-end de keyring do Artifact Registry que processa a autenticação com o Artifact Registry para pip e Twine.
Para fazer upload de um pacote Python para o repositório Python no build, adicione as seguintes etapas ao arquivo de configuração do build:
steps: - name: python entrypoint: pip args: ["install", "-r", "requirements.txt", "--user"] - name: python entrypoint: python args: - '-m' - 'twine' - 'upload' - '--repository-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/' - 'dist/*'
Neste snippet, a primeira etapa instala o Twine e o back-end do keyring do Artifact Registry. A segunda etapa faz o upload dos arquivos Python criados no subdiretório
dist
. Ajuste os caminhos pararequirements.txt
e seus arquivos Python criados se eles não corresponderem ao snippet.O caminho do repositório inclui substituições do Cloud Build. Essa abordagem é útil se você quiser usar o mesmo arquivo de configuração de build para fazer upload de pacotes para repositórios de ambientes diferentes, como teste, preparo ou produção.
${_LOCATION}
e${_REPOSITORY}
são substituições definidas pelo usuário para o local, o nome do repositório e o nome do pacote. Você especifica os valores dessas variáveis no momento do build.$PROJECT_ID
é uma substituição padrão que o Cloud Build resolve com o ID do projeto Google Cloud do build.- Se você executar o comando
gcloud builds submit
, o Cloud Build usará o ID do projeto ativo na sessão gcloud. - Se você usar um gatilho de compilação, o Cloud Build vai usar o ID do projeto em que ele está sendo executado.
Como alternativa, use uma substituição definida pelo usuário em vez de
$PROJECT_ID
para especificar um ID do projeto no momento do build.- Se você executar o comando
Para instalar o pacote do repositório Python, adicione uma etapa ao arquivo de configuração do build que execute o comando
pip install
.steps: - name: python entrypoint: pip args: - 'install' - '--index-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/' - '${_PACKAGE}' - '--verbose'
Esse snippet inclui uma substituição
${_PACKAGE}
adicional para o nome do pacote.Quando estiver tudo pronto para executar o build, especifique os valores para as substituições definidas pelo usuário. Por exemplo, este comando substitui:
us-east1
para o local do repositóriomy-repo
para o nome do repositóriomy-package
para o nome do pacote
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .
Armazenar artefatos em um registro privado usando certificados autoassinados
Se você tiver uma autoridade de certificação particular e precisar armazenar artefatos em um registro particular, configure o arquivo de configuração do build para usar certificados autoassinados. Para fazer isso, adicione uma etapa de build que envie seu certificado ao sistema host para que ele fique disponível para etapas de build subsequentes. Exemplo:
- name: gcr.io/cloud-builders/docker
args:
- run
- --rm
- --volume=/etc/docker/certs.d/:/etc/docker/certs.d/
- --volume=certificates:/certificates
- ubuntu
- bash
- -c
- |
cp /certificates/ca.crt /etc/docker/certs.d/quay.apps.cloud.inter
volumes:
- name: certificates
path: /certificates
A seguir
- Saiba como implantar no Cloud Run.
- Saiba como implantar no Google Kubernetes Engine.