Como implantar no Cloud Run usando o Cloud Build

Nesta página, explicamos como implantar automaticamente serviços do Cloud Run usando o Cloud Build. Se você não estiver familiarizado com o Cloud Build, leia os guias de início rápido e a visão geral da configuração do build primeiro.

O Cloud Run permite executar imagens sem estado em um ambiente sem servidor. Com o Cloud Build, é possível implantar imagens do Artifact Registry no Cloud Run. Implante uma imagem atual, crie e implante uma imagem ou automatize a implantação.

Antes de começar

  • Ative as APIs Cloud Build, Cloud Run, Artifact Registry e Resource Manager, se alguma delas ainda não estiver ativada.

    Funções necessárias para ativar APIs

    Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

    Ativar as APIs

Permissões de gerenciamento de identidade e acesso obrigatórias

  1. No console Google Cloud , acesse a página Permissões do Cloud Build:

    Acessar Permissões

  2. Para a conta de serviço do Cloud Build especificada ou a conta de serviço padrão do Cloud Build, defina o status dos seguintes papéis como Ativado:

    • Administrador do Cloud Run (roles/run.admin): permite que o Cloud Build implante novos serviços no Cloud Run.
    • Administrador do Storage (roles/storage.admin): permite ler e gravar no Cloud Storage.
    • Gravador do Artifact Registry (roles/artifactregistry.writer): permite extrair imagens do Artifact Registry e gravar nele.
    • Gravador de registros (roles/logging.logWriter): permite que entradas de registro sejam gravadas no Cloud Logging.
    • Editor do Cloud Build (roles/cloudbuild.builds.editor): permite que sua conta de serviço execute builds.

Como criar e implantar uma imagem

Com o Cloud Build, é possível criar uma imagem, armazená-la no Artifact Registry e implantá-la no Cloud Run.

Para criar e implantar uma imagem:

  1. No diretório raiz do projeto, crie um arquivo de configuração chamado cloudbuild.yaml.

  2. No arquivo de configuração de build, adicione etapas de build docker para criar a imagem e enviá-la ao Artifact Registry. Em seguida, adicione uma etapa de build gcloud para invocar o comando gcloud run deploy e implantar a imagem no Cloud Run:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION']
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
    

    Em que:

    • REPOSITORY é o nome do repositório do Artifact Registry de onde você implanta a imagem.
    • LOCATION é o local do repositório do Artifact Registry, como us-east1.
    • PROJECT_ID é o ID do projeto do Google Cloud em que a imagem está armazenada.
    • SERVICE_NAME é o nome do serviço do Cloud Run.
    • SERVICE_REGION é a região do serviço do Cloud Run que você está implantando.
    • IMAGE é o nome da sua imagem no Artifact Registry.
  3. Navegue até o diretório raiz do projeto e execute o seguinte comando, em que LOCATION é uma das regiões de build compatíveis para executar o build:

     gcloud builds submit --region=LOCATION
    

Após a conclusão, uma mensagem de sucesso será exibida com o URL do serviço implantado.

Implantação contínua

É possível automatizar a implantação de seu software no Cloud Run criando gatilhos do Cloud Build. Configure os acionadores para criar e implantar imagens sempre que atualizar o código-fonte.

Para automatizar a implantação:

  1. Na raiz do repositório, adicione um arquivo de configuração chamado cloudbuild.yaml com etapas para criar a imagem, enviá-la ao Artifact Registry e invocar o comando gcloud run deploy:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: 
        - 'run'
        - 'deploy'
        - 'SERVICE_NAME'
        - '--image'
        - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
        - '--region'
        - 'SERVICE_REGION'
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
    

    Em que:

    • REPOSITORY é o nome do repositório do Artifact Registry de onde você implanta a imagem.
    • LOCATION é o local do repositório do Artifact Registry, como us-east1.
    • PROJECT_ID é o ID do projeto do Google Cloud em que a imagem está armazenada.
    • SERVICE_NAME é o nome do serviço do Cloud Run.
    • SERVICE_REGION é a região do serviço do Cloud Run que você está implantando.
    • IMAGE é o nome da sua imagem no Artifact Registry.

    A variável de substituição $COMMIT_SHA é preenchida pelo Cloud Build quando acionada de um repositório Git.

  2. Crie um gatilho de compilação com o arquivo de configuração criado na etapa anterior:

    1. Acesse a página Gatilhos:

      Acessar a página "Gatilhos"

    2. Clique em Criar gatilho.

    3. No campo Nome, insira um nome para o gatilho.

    4. Em Região, selecione a região do gatilho.

    5. Em Evento, selecione o evento do repositório para iniciar o gatilho.

    6. Em Origem, selecione o repositório e o nome da ramificação ou da tag que iniciará o gatilho. Para mais informações sobre como especificar quais ramificações precisam ser criadas automaticamente, consulte Como criar um gatilho de compilação.

    7. Em Configuração, selecione Arquivo de configuração do Cloud Build (YAML ou JSON).

    8. No campo local do arquivo de configuração do Cloud Build, digite cloudbuild.yaml depois do /.

    9. Clique em Criar para salvar o gatilho de compilação.

    Agora, quando você envia um novo código para o repositório, o Cloud Build invoca uma build e implanta o serviço no Cloud Run.

Para mais informações sobre como criar gatilhos do Cloud Build, consulte Como criar e gerenciar gatilhos de build.

Exemplos de código

Veja alguns repositórios de amostra, cada um com um aplicativo de amostra e um arquivo de configuração de build para implantar o aplicativo no Cloud Run:

  • deploy-prebuilt: um exemplo de código que mostra como implantar uma imagem pré-criada no Cloud Run.
  • run-example-builddeploy: um exemplo de código que mostra como criar e implantar uma imagem no Cloud Run.

A seguir