Como integrar o Google Cloud Deploy ao seu sistema de CI

Este documento descreve como invocar o pipeline de entrega do Google Cloud Deploy a partir do sistema de integração contínua (CI).

A integração do Google Cloud Deploy com seu sistema de CI é tão simples quanto adicionar uma chamada ao Google Cloud Deploy gcloud CLI. Essa chamada ocorre no ponto do pipeline de CI em que o aplicativo está pronto para ser implantado.

Antes de começar

As instruções nesta página pressupõem que você já atende às seguintes condições:

Como chamar o Google Cloud Deploy a partir do pipeline de CI

O comando a seguir cria uma nova versão, invocando assim uma instância do pipeline de entrega:

gcloud deploy releases create RELEASE_NAME \
  --delivery-pipeline=PIPELINE_NAME \
  --region=REGION
  --annotations=[KEY=VALUE,...]
  --images=[IMAGE_LIST]

Em que…

  • RELEASE_NAME

    é um nome que você atribui a esta versão. Esse valor é obrigatório.

  • PIPELINE_NAME

    é o nome do pipeline de entrega registrado. Esse valor é obrigatório.

  • REGION

    é a região em que você está criando esta versão. A região não precisa ser a mesma em que você implantará o aplicativo.

  • [KEY=VALUE,...]

    é uma lista opcional de uma ou mais anotações para aplicar à versão, na forma de pares de chave-valor.

    É possível usar anotações para rastrear a procedência da versão, por exemplo, passando uma anotação como commitId=0065ca0. Todas as anotações na versão são retornadas quando você list ou get a versão e são exibidas com a versão no Console do Google Cloud para que você também possa ver a procedência da versão.

  • [IMAGE_LIST]

    é uma lista separada por vírgulas de substituições de imagem para nome de caminho de imagem. Por exemplo: --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18.

    Esse valor não será necessário se você transmitir --build-artifacts, que identifica um arquivo de saída de artefatos de versão do Skaffold

    Quando o Google Cloud Deploy renderiza o manifesto, o nome da imagem no manifesto não renderizado é substituído pela referência completa da imagem no manifesto renderizado. Ou seja, image1, neste exemplo, está no manifesto não renderizado e é substituído no manifesto renderizado por path/to/image1:v1@sha256:45db24.

Exemplo de uso da referência direta de imagem

O comando a seguir cria uma nova versão, transmitindo uma referência de imagem diretamente, em vez de um arquivo de artefatos de versão:

gcloud deploy releases create my-release \
  --delivery-pipeline=web-app \
  --region=us-central1
  --images=image1=path/to/image1:v1@sha256:45db24

Comparação entre artefatos e imagens

No comando gcloud deploy releases create, é possível transmitir um conjunto de referências de imagem ou uma referência de arquivo de artefatos de versão.

  • Use --images=[NAME=TAG,...] para se referir a uma ou mais imagens de contêiner individuais.

    Esse valor é uma referência a um conjunto de nomes de imagens individuais para substituições de caminhos completos de imagem. Veja um exemplo:

    gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24

  • Use --build-artifacts= para apontar para um arquivo de saída de artefatos de versão do Skaffold.

Exemplos do Cloud Build, como transmitir um arquivo de artefatos de versão

Exemplo de build do Docker

O arquivo YAML a seguir demonstra o Cloud Build para um envio de imagem de criação do Docker (em inglês) e cria exclusivamente uma versão do Google Cloud Deploy.

Este exemplo cria e envia uma imagem para um repositório de artefatos e cria um comando para criar uma versão, com um nome de versão baseado no SHA de commit curto. Esse exemplo precisa ser usado como um acionador do Cloud Build SCM porque depende da variável $COMMIT_SHA.

Este exemplo envia uma imagem para um rótulo do Docker que é igual ao hash de confirmação do repositório de origem. Assim, o mesmo hash de confirmação, como um rótulo do Docker, será referenciado nos argumentos de comando de lançamento.

# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
    ]

O nome da imagem no final deste exemplo, "--images", "IMAGE_NAME=, é substituído no manifesto renderizado pela referência completa da imagem.

Um exemplo de configuração do Cloud Build com o Skaffold

O arquivo YAML a seguir é o conteúdo de uma configuração de versão do Cloud Build que inclui uma chamada para o Google Cloud Deploy para criar uma versão, com um nome de versão baseado na data. Este exemplo também mostra o Skaffold usado para o build.

- name: gcr.io/k8s-skaffold/skaffold
  args:
    - skaffold
    - build
    - '--interactive=false'
    - '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--build-artifacts", "/workspace/artifacts.json"
    ]

Como usar anotações para acompanhar a procedência da versão

A sinalização --annotations= permite aplicar um ou mais pares de chave-valor arbitrários à versão criada por esse comando. Essa sinalização seria adicionada ao comando gcloud deploy releases create.

Por exemplo, é possível usar os seguintes pares de chave-valor para rastrear a origem da imagem a ser implantada.

Veja um exemplo:

gcloud deploy releases create web-app-1029rel \
  --delivery-pipeline=web-app \
  --region=us-central1
  --annotations=commitId=0065ca0,author=user@company.com
  --images=image1=path/to/image1:v1@sha256:45db24

Também é possível criar uma anotação com um valor, por exemplo, o URL que aponta para a solicitação de envio. Para mais informações, consulte Como usar rótulos e anotações com o Google Cloud Deploy.