Como integrar com o 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 não existir um repositório de destino, crie um novo repositório.
  2. 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 compilações, conceda o papel de gravador do Artifact Registry } à conta de serviço do build no projeto com os repositórios.

    A conta de serviço padrão do Cloud Build tem permissões para fazer upload e download de repositórios no mesmo projeto.

Como configurar uma versão do Docker

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

Para configurar seu build:

  1. No arquivo de configuração da versão, adicione a etapa para criar e marcar a imagem.

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ]
    images:
    - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
    

    Este snippet usa substituições do Cloud Build. Isso pode ser útil se você quiser usar o mesmo arquivo de configuração da compilação para enviar imagens para repositórios em diferentes ambientes, como testes, preparo ou produção.

    • ${_LOCATION}, ${_REPOSITORY} e ${_IMAGE} são substituição definida pelo usuário para o local do repositório, o nome do repositório e a imagem. Especifique os valores dessas variáveis no tempo de compilação.
    • $PROJECT_ID é uma substituição padrão que o Cloud Build resolve com o ID do projeto do 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 do gcloud.
      • Se você usar um gatilho de compilação, o Cloud Build usará o ID do projeto em que o Cloud Build está sendo executado.

      Outra opção é usar uma substituição definida pelo usuário, em vez de $PROJECT_ID, para especificar um ID do projeto no tempo de compilação.

  2. Quando estiver pronto para executar o build, 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" .
    

Como configurar um build Java

Depois de conceder permissões ao repositório de destino, você estará pronto para configurar sua versão. As instruções a seguir descrevem a configuração da versão 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']
    

Como configurar um build do Node.js

Depois de conceder permissões ao repositório de destino, você estará pronto para configurar sua versão. As instruções a seguir descrevem a configuração da versão para fazer upload de um pacote Node.js para um repositório npm.

Para configurar seu build:

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

  2. Adicione um script ao arquivo package.json no seu projeto que atualiza o token de acesso para autenticação com o repositório.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  3. 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', '${_NPMRC}']
    - name: gcr.io/cloud-builders/npm
      args: ['publish', '${_PACKAGE}']
    

    Neste snippet:

    • ${_PACKAGE} é o local do pacote, a pasta ou um tarball compactado com gzip que contém package.json e outros arquivos no pacote.
    • ${_NPMRC} é o caminho para o arquivo .npmrc.

    Especifique os valores dessas variáveis com substituições do Cloud Build no tempo de compilação.

    Por exemplo, este comando faz upload de um pacote em um diretório chamado src com configuração em /home/username/.npmrc:

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_PACKAGE="src",_NPMRC="/home/username/.npmrc" .
    

Como configurar um build do Python

Depois de conceder permissões ao repositório de destino, você estará pronto para configurar sua versão. As instruções a seguir descrevem a configuração da versão para fazer upload de um pacote do Python para um repositório do Python e instalá-lo usando o pip.

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

Para configurar seu build:

  1. No diretório com o arquivo de configuração da versão do Cloud Build, crie um arquivo chamado requirements.txt com as seguintes dependências:

    twine
    keyrings.google-artifactregistry-auth
    
    • O Twine serve 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 Python para seu repositório Python na sua versão, adicione as seguintes etapas ao arquivo de configuração de 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, o primeiro passo instala o Twine e o back-end do keyring do Artifact Registry. A segunda etapa faz upload dos arquivos Python criados no subdiretório dist. Ajuste os caminhos para requirements.txt e seus arquivos Python compilados 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 da compilação para fazer upload de pacotes para repositórios para diferentes ambientes, como testes, preparação 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. Especifique 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 o build.

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

      Outra opção é usar uma substituição definida pelo usuário, em vez de $PROJECT_ID, para especificar um ID do projeto no tempo de compilação.

  3. Para instalar o pacote do repositório do Python, adicione as etapas apropriadas ao arquivo de configuração da compilação.

    • Se ambos os serviços estiverem no mesmo projeto, você só precisará executar o comando pip install.

      steps:
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
      
    • Se o Cloud Build e o Artifact Registry estiverem em projetos diferentes, instale as dependências em requirements.txt antes de instalar pacotes.

      steps:
      - name: python
        entrypoint: pip
        args: ["install", "-r", "requirements.txt", "--user"]
      - 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} adicional para o nome do pacote.

  4. Quando estiver pronto para executar o build, 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" .