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_IDpara 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-east1para a localização do repositóriomy-repopara o nome do repositóriomy-imagepara 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_IDe$TAG_NAMEsã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_IDpara 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 Artifact Registry 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 buildpara compilar o módulo,go testpara executar testes ougo mod tidypara transferir as dependências.
Para o passo do comando
go, oGOPROXYestá definido para o repositório do Artifact Registry que aloja dependências privadas. Pode adicionar o proxy público à listaGOPROXYseparada 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 Artifact Registry 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-east1para a localização do repositóriomy-projectpara o ID do projetomy-repopara o nome do repositórioexample.com/greetingspara 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
.npmrcno 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.jsonno 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.txtcom 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.txte 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_IDpara 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-east1para a localização do repositóriomy-repopara o nome do repositóriomy-packagepara 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