Neste documento, descrevemos como invocar o pipeline de entrega do Cloud Deploy do seu sistema de integração contínua (CI).
Integrar o Cloud Deploy ao sistema de CI é tão simples quanto adicionar uma
chamada para o gcloud
do Cloud Deploy
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:
Você tem pelo menos um pipeline de entrega definido. e registrado com o Cloud Deploy.
você tem pelo menos um destino definido, e o pipeline de entrega referencia esse destino;
Como chamar o Cloud Deploy a partir do seu 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.
É possível especificar nomes dinâmicos de versão incluindo
'$DATE'
,'$TIME'
ou os dois. Por exemplo, se você invocar esse comando às 15h07 UTC,'rel-$TIME'
se refere arel-1507
.'$DATE'
e'$TIME'
precisam estar entre aspas simples.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 retornados quando vocêlist
ouget
na versão e são exibidos com o lançamento no console do Google Cloud, para consultar a procedência da versão também.[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 SkaffoldQuando o Cloud Deploy renderiza o manifesto, o nome da imagem no o manifesto não renderizado é substituído pela referência da imagem completa na manifesto do aplicativo. Ou seja,
image1
, neste exemplo, está no manifesto não renderizado e é substituído no manifesto renderizado porpath/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
Neste exemplo, my-release
é o nome da versão. Se você quer gerar uma
da versão com base na data ou hora, é possível incluir '$DATE'
ou 'TIME'
ou
os dois. O horário é o horário UTC no computador em que você invoca o comando. '$DATE'
e '$TIME'
precisam estar entre aspas simples.
Veja um exemplo:
gcloud deploy releases create rel-'$DATE'-'$TIME' \
--delivery-pipeline=web-app \
--region=us-central1 \
--images=image1=path/to/image1:v1@sha256:45db24
Neste exemplo, o comando gera um nome de lançamento com o prefixo rel-
.
além da data e hora, por exemplo: rel-20220131-1507
.
Também é comum usar o SHA do Git no nome da versão. Consulte os exemplos do Cloud Build e do Docker neste documento.
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 de um Versão do Docker envio de imagem e, por fim, cria uma versão do 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 uma tag do Docker que é a mesma do commit do repositório de origem. Em seguida, o mesmo hash de confirmação, como uma tag do Docker, será referenciado nos argumentos de comando de lançamento.
steps:
# 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 um Cloud Build configuração do build que inclua uma chamada ao Cloud Deploy para criar um lançamento, com um nome baseado na data. Este exemplo também mostra o Skaffold usado para o build.
steps:
- 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"
]
Conectar ações do GitHub ao Cloud Deploy
Se você estiver usando o GitHub Actions para integração contínua ou outras atividades relacionadas ao
desenvolvimento de software, poderá se conectar ao Cloud Deploy para
entrega contínua usando a ação do GitHub
create-cloud-deploy-release
.
Conectar o GitLab ao Cloud Deploy
Se você usa o GitLab para integração contínua, é possível usar o componente do Cloud Deploy do GitLab create-cloud-deploy-release para criar uma versão do Cloud Deploy.
Você também pode testar o tutorial completo para usar o GitLab com o Google Cloud.
Para mais informações, acesse a visão geral do GitLab no Google Cloud.
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 Cloud Deploy.