Conectar-se ao Cloud Build

Nesta página, descrevemos como configurar o Cloud Build para armazenar artefatos criados em um 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 seu 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 Gravador do Artifact Registry à conta de serviço de build no projeto com os repositórios.

    A conta de serviço padrão do Cloud Build tem acesso para executar as seguintes ações com um repositório no mesmo projeto do Google Cloud:

Configurar um build do Docker

Depois de conceder permissões ao repositório de destino, você estará pronto para configurar o build.

Para configurar seu build:

  1. 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 do build para enviar imagens a repositórios de ambientes diferentes, como testes, preparo ou produção.

    • ${_LOCATION}, ${_REPOSITORY} e ${_IMAGE} são substituições definidas pelo usuário para o local, o nome do repositório e a imagem. Você especifica os valores dessas variáveis no momento da criação.
    • $PROJECT_ID é uma substituição padrão que o Cloud Build resolve com o ID do projeto do Google Cloud para a versão.

      • Se você executar o comando gcloud builds submit, o Cloud Build usará o ID do projeto ativo na sessão da gcloud.
      • Se você usar um gatilho de compilação, o Cloud Build usará o ID do projeto em que ele está em execução.

      Como alternativa, você pode usar uma substituição definida pelo usuário em vez de $PROJECT_ID para que você possa especificar um ID do projeto no tempo de compilação.

  2. Quando estiver pronto para executar a versão, especifique valores para as substituições definidas pelo usuário. Por exemplo, este comando substitui:

    • us-east1 para o local do repositório
    • my-repo como o nome do repositório
    • my-image como 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 a configuração do build para fazer upload de um módulo Go para um repositório Go.

Para configurar seu build:

  1. Para fazer upload de um módulo do Go para o repositório do Go na sua versão, adicione as seguintes etapas ao seu arquivo de configuração da versã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'
    

    Esse arquivo inclui substituições do Cloud Build. Essa abordagem é útil se você quiser usar o mesmo arquivo de configuração do build para fazer upload de pacotes em repositórios para diferentes ambientes, como teste, preparo ou produção.

    • ${_LOCATION}, ${_REPOSITORY} e ${_MODULE_PATH} são substituições definidas pelo usuário para o local do repositório, o nome do repositório e o caminho do módulo. Você especifica os valores dessas variáveis no tempo de build.
    • $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 do Google Cloud para a versão.

        • Se você executar o comando gcloud builds submit, o Cloud Build usará o ID do projeto ativo na sessão da gcloud.
        • Se você usar um gatilho de compilação, o Cloud Build usará o ID do projeto em que ele está em execução.

        Como alternativa, você pode usar uma substituição definida pelo usuário em vez de $PROJECT_ID para que você possa especificar um ID do projeto no tempo de compilação.

      • $TAG_NAME foi substituído pelo nome da sua tag para oferecer suporte à convenção do Go de usar tags do Git como números de versão.

  2. Para instalar o pacote a partir do repositório do Go, adicione as seguintes etapas ao seu arquivo de configuração de build para:

    • Adicione um endpoint regional do Artifact Registry no local do repositório ao arquivo .netrc.
    • Execute a ferramenta auxiliar de credenciais para atualizar os tokens OAuth.
    • Execute o comando go run. Também é possível mudar para go build para compilar o módulo, go test para executar testes ou go mod tidy para fazer o download das dependências.

    Para a etapa de comando go, o GOPROXY é definido como o repositório do Artifact Registry que hospeda dependências particulares. É possível adicionar o proxy público à lista de 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 pronto para executar a versão, especifique valores para as substituições definidas pelo usuário. Por exemplo, este comando substitui:

    • us-east1 para o local do repositório
    • my-project como o ID do projeto.
    • my-repo como o nome do repositório
    • example.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 a configuração do build para fazer upload de um pacote Java para um repositório Maven.

Para configurar seu build:

  1. Configure a autenticação para Maven. Certifique-se de especificar o projeto de destino e o repositório corretos no arquivo pom.xml.

  2. 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']
    
  3. Quando o arquivo de configuração da versão estiver pronto, inicie sua versão 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 a configuração da versão para fazer upload de um pacote Node.js em um repositório npm.

Para configurar seu build:

  1. Adicione o repositório do Artifact Registry ao arquivo .npmrc no projeto Node.js. O arquivo está localizado no diretório que contém o arquivo 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 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 projeto no Google Cloud.
    • LOCATION é o local regional ou multirregional do repositório.
    • REPOSITORY é o nome do repositório.
  2. 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"
    }
    
  1. 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 Node.js. Você pode especificar o diretório ao executar o comando para executar a versão.

    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 a configuração do build para fazer upload de um pacote Python para um repositório Python e instalar o pacote usando pip.

Para criar e conteinerizar um aplicativo Python e enviá-lo para um repositório do Docker, consulte Como criar aplicativos Python na documentação do Cloud Build.

Para configurar seu build:

  1. No diretório com seu arquivo de configuração de 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 do keyring do Artifact Registry que processa a autenticação com o Artifact Registry para pip e Twine.
  2. Para fazer upload de um pacote do Python para o repositório do Python no build, adicione as seguintes etapas ao arquivo de configuração da versã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 snippet, a primeira etapa instala o Twine e o back-end de keyring do Artifact Registry. A segunda etapa faz o upload dos arquivos Python criados no subdiretório dist. Ajuste os caminhos para requirements.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 do build para fazer upload de pacotes em repositórios para diferentes ambientes, como teste, preparo ou produção.

    • ${_LOCATION} e ${_REPOSITORY} são substituições definidas pelo usuário para o local do repositório, o nome do repositório e o nome do pacote. Você especifica os valores dessas variáveis no tempo de criação.
    • $PROJECT_ID é uma substituição padrão que o Cloud Build resolve com o ID do projeto do Google Cloud para a versão.

      • Se você executar o comando gcloud builds submit, o Cloud Build usará o ID do projeto ativo na sessão da gcloud.
      • Se você usar um gatilho de compilação, o Cloud Build usará o ID do projeto em que ele está em execução.

      Como alternativa, você pode usar uma substituição definida pelo usuário em vez de $PROJECT_ID para que você possa especificar um ID do projeto no tempo de compilação.

  3. Para instalar o pacote do repositório do Python, adicione uma etapa ao arquivo de configuração de build que executa 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 snippet inclui uma substituição ${_PACKAGE} extra para o nome do pacote.

  4. Quando estiver pronto para executar a versão, especifique valores para as substituições definidas pelo usuário. Por exemplo, este comando substitui:

    • us-east1 para o local do repositório
    • my-repo como o nome do repositório
    • my-package como o nome do pacote.
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .