Armazene artefactos no Artifact Registry

Esta página descreve como configurar o Cloud Build para armazenar artefactos criados num repositório do Artifact Registry.

Antes de começar

  1. Se o repositório de destino não existir no Artifact Registry, crie um novo repositório.
  2. 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:

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:

  1. 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.

  2. 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ório
    • my-repo para o nome do repositório
    • my-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:

  1. 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.

      • $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.

  2. 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 para go build para compilar o módulo, go test para executar testes ou go mod tidy para transferir as dependências.

    Para o passo do comando go, o GOPROXY está definido para o repositório do Cloud Build que aloja dependências privadas. Pode adicionar o proxy público à lista GOPROXY 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}'
    
  3. 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ório
    • my-project para o ID do projeto
    • my-repo para o nome do repositório
    • example.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:

  1. 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.

  2. 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']
    
  3. 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:

  1. 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 ficheiro package.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.
  2. 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"
    }
    
  3. 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:

  1. 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.
  2. 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 para requirements.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.

  3. 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.

  4. 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ório
    • my-repo para o nome do repositório
    • my-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?