Esta página descreve como configurar o Cloud Build para armazenar artefactos criados num 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 seu repositório estiverem em projetos diferentes ou se estiver a usar uma conta de serviço especificada pelo utilizador para executar compilações, conceda a função de escritor do Artifact Registry à conta de serviço de compilação no projeto com os repositórios.
A conta de serviço predefinida do Cloud Build tem acesso para realizar as seguintes ações com um repositório no mesmo Google Cloud projeto:
- Carregue e transfira artefactos
- Crie repositórios gcr.io no Artifact Registry
Configure uma compilação do Docker
Depois de conceder autorizações ao repositório de destino, pode configurar a compilação.
Para configurar a compilação:
No ficheiro de configuração de compilação, adicione o passo para compilar e etiquetar 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 fragmento usa substituições do Cloud Build. Esta abordagem é útil se quiser usar o mesmo ficheiro de configuração de compilação para enviar imagens para repositórios para diferentes ambientes, como testes, preparação ou produção.
${_LOCATION}
,${_REPOSITORY}
e${_IMAGE}
são substituições definidas pelo utilizador para a localização do repositório, o nome do repositório e a imagem. Especifica os valores destas variáveis no momento da compilação.$PROJECT_ID
é uma substituição predefinida que o Cloud Build resolve com o Google Cloud ID do projeto para a compilação.- Se executar o comando
gcloud builds submit
, o Cloud Build usa o ID do projeto ativo na sessão do gcloud. - Se usar um acionador de compilação, o Cloud Build usa o ID do projeto onde o Cloud Build está a ser executado.
Em alternativa, pode usar uma substituição definida pelo utilizador em vez de
$PROJECT_ID
para poder especificar um ID do projeto no momento da compilação.- Se executar o comando
Quando estiver tudo pronto para executar a compilação, especifique valores para as substituições definidas pelo utilizador. Por exemplo, este comando substitui:
us-east1
para a localização 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" .
Configure uma compilação Go
Depois de conceder autorizações ao repositório de destino, pode configurar a compilação. As instruções seguintes descrevem a configuração da compilação para carregar um módulo Go para um repositório Go.
Para configurar a compilação:
Para carregar um módulo Go para o seu repositório Go na compilação, adicione os seguintes passos ao ficheiro de configuração da compilação:
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 ficheiro de configuração da compilação inclui substituições do Cloud Build. Esta abordagem é útil se quiser usar o mesmo ficheiro de configuração de compilação para carregar pacotes para repositórios para diferentes ambientes, como testes, preparação ou produção.
${_LOCATION}
,${_REPOSITORY}
e${_MODULE_PATH}
são substituições definidas pelo utilizador para a localização do repositório, o nome do repositório e o caminho do módulo. Especifica os valores destas variáveis no momento da criação.$PROJECT_ID
e$TAG_NAME
são substituições predefinidas que o Cloud Build substitui pelo seguinte:$PROJECT_ID
é substituído pelo Google Cloud ID do projeto para a compilação.- Se executar o comando
gcloud builds submit
, o Cloud Build usa o ID do projeto ativo na sessão do gcloud. - Se usar um acionador de compilação, o Cloud Build usa o ID do projeto onde o Cloud Build está a ser executado.
Em alternativa, pode usar uma substituição definida pelo utilizador em vez de
$PROJECT_ID
para poder especificar um ID do projeto no momento da compilação.- Se executar o comando
$TAG_NAME
é substituído pelo nome da sua etiqueta para suportar a convenção Go de usar etiquetas Git como números de versão.
Para instalar o pacote a partir do repositório Go, adicione os seguintes passos ao ficheiro de configuração da compilação para:
- Adicione um ponto final do Cloud Build regional na localização do repositório ao ficheiro
.netrc
. - Execute a ferramenta auxiliar de credenciais para atualizar os tokens OAuth.
- Execute o comando
go run
. Também pode alterar esta opção parago build
para compilar o módulo,go test
para executar testes ougo mod tidy
para transferir as dependências.
Para o passo do comando
go
, oGOPROXY
está definido para o repositório do Cloud Build que aloja dependências privadas. Pode 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 ponto final do Cloud Build regional na localização do repositório ao ficheiro
Quando estiver tudo pronto para executar a compilação, especifique valores para as substituições definidas pelo utilizador. Por exemplo, este comando substitui:
us-east1
para a localização do repositóriomy-project
para o ID do projetomy-repo
para o nome do repositórioexample.com/greetings
para o percurso 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" .
Configure uma compilação Java
Depois de conceder autorizações ao repositório de destino, pode configurar a compilação. As instruções seguintes descrevem a configuração da compilação para carregar um pacote Java para um repositório Maven.
Para configurar a compilação:
Configure a autenticação para o Maven. Certifique-se de que especifica o projeto e o repositório de destino corretos no ficheiro
pom.xml
.No ficheiro de configuração de compilação do Cloud Build, adicione o passo para carregar o pacote com o Maven:
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
Quando o ficheiro de configuração da compilação estiver pronto, inicie a compilação com o seguinte comando:
gcloud builds submit
Configure uma compilação Node.js
Depois de conceder autorizações ao repositório de destino, pode configurar a compilação. As instruções seguintes descrevem a configuração da compilação para carregar um pacote Node.js para um repositório npm.
Para configurar a compilação:
Adicione o seu repositório do Artifact Registry ao ficheiro
.npmrc
no seu projeto Node.js. O ficheiro está localizado no diretório com o seu ficheiropackage.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 âmbito do npm a associar ao repositório. A utilização de âmbitos garante que publica e instala sempre pacotes a partir do repositório correto.
- PROJECT_ID é o ID do seu Google Cloud projeto.
- LOCATION é a localização regional ou multirregional do repositório.
- REPOSITORY é o nome do repositório.
Adicione um script ao ficheiro
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 ficheiro de configuração de compilação, adicione o passo para carregar o 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 seu projeto Node.js. Pode especificar o diretório quando executar o comando para executar a compilação.Por exemplo, este comando carrega o pacote a partir de um diretório denominado
src
:gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_PACKAGE="src" .
Configure uma compilação Python
Depois de conceder autorizações ao repositório de destino, pode configurar a compilação. As instruções seguintes descrevem a configuração da compilação para carregar um pacote Python para um repositório Python e instalar o pacote através do pip.
Para criar e colocar num contentor uma aplicação Python e, em seguida, enviá-la para um repositório do Docker, consulte o artigo Criar aplicações Python na documentação do Cloud Build.
Para configurar a compilação:
No diretório com o ficheiro de configuração de compilação do Cloud Build, crie um ficheiro denominado
requirements.txt
com as seguintes dependências:twine keyrings.google-artifactregistry-auth
- O Twine destina-se a carregar pacotes para o Artifact Registry.
- keyrings.google-artifactregistry-auth é o back-end do conjunto de chaves do Artifact Registry que processa a autenticação com o Artifact Registry para o pip e o Twine.
Para carregar um pacote Python para o seu repositório Python na compilação, adicione os seguintes passos ao ficheiro de configuração da compilação:
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 fragmento, o primeiro passo instala o Twine e o back-end do conjunto de chaves do Artifact Registry. O segundo passo carrega os ficheiros Python criados no subdiretório
dist
. Ajuste os caminhos pararequirements.txt
e os seus ficheiros Python criados se não corresponderem ao fragmento.O caminho do repositório inclui substituições do Cloud Build. Esta abordagem é útil se quiser usar o mesmo ficheiro de configuração de compilação para carregar pacotes para repositórios para diferentes ambientes, como testes, preparação ou produção.
${_LOCATION}
e${_REPOSITORY}
são substituições definidas pelo utilizador para a localização do repositório, o nome do repositório e o nome do pacote. Especifica os valores destas variáveis no momento da compilação.$PROJECT_ID
é uma substituição predefinida que o Cloud Build resolve com o Google Cloud ID do projeto para a compilação.- Se executar o comando
gcloud builds submit
, o Cloud Build usa o ID do projeto ativo na sessão do gcloud. - Se usar um acionador de compilação, o Cloud Build usa o ID do projeto onde o Cloud Build está a ser executado.
Em alternativa, pode usar uma substituição definida pelo utilizador em vez de
$PROJECT_ID
para poder especificar um ID do projeto no momento da compilação.- Se executar o comando
Para instalar o pacote a partir do repositório do Python, adicione um passo ao ficheiro de configuração de compilação 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'
Este fragmento inclui uma substituição
${_PACKAGE}
adicional para o nome do pacote.Quando estiver tudo pronto para executar a compilação, especifique valores para as substituições definidas pelo utilizador. Por exemplo, este comando substitui:
us-east1
para a localização 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" .
Armazene artefactos num registo privado com certificados autoassinados
Se tiver uma autoridade de certificação privada e precisar de armazenar artefactos num registo privado, pode configurar o ficheiro de configuração de compilação para usar certificados autoassinados. Para o fazer, adicione um passo de compilação que envie o certificado para o sistema anfitrião, para que o certificado esteja disponível para os passos de compilação subsequentes. Por 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
O que se segue?
- Saiba como implementar no Cloud Run.
- Saiba como implementar no Google Kubernetes Engine.