Este documento descreve como invocar o pipeline de fornecimento do Cloud Deploy a partir do sistema de integração contínua (CI).
A integração do Cloud Deploy com o seu sistema de CI é tão simples quanto adicionar uma chamada à gcloud
CLI do Cloud Deploy . Esta chamada ocorre no ponto do pipeline de CI em que a sua aplicação está pronta para ser implementada.
Antes de começar
As instruções nesta página pressupõem que já cumpre as seguintes condições:
Tem, pelo menos, um pipeline de implementação definido e registado no Cloud Deploy.
Tem, pelo menos, um alvo definido, e o seu pipeline de entrega faz referência a esse alvo.
Chamar o Cloud Deploy a partir do pipeline de CI
O comando seguinte cria um novo lançamento, invocando assim uma instância da pipeline de entrega:
gcloud deploy releases create RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION \
--annotations=[KEY=VALUE,...] \
--images=[IMAGE_LIST]
Onde…
RELEASE_NAME
é um nome que atribui a este lançamento. Este valor é obrigatório.
Pode especificar nomes de lançamentos dinâmicos incluindo
'$DATE'
ou'$TIME'
ou ambos. Por exemplo, se invocar este comando às 15:07 UTC,'rel-$TIME'
é resolvido comorel-1507
.'$DATE'
e'$TIME'
têm de estar entre aspas simples.PIPELINE_NAME
é o nome do seu pipeline de fornecimento registado. Este valor é obrigatório.
REGION
É a região na qual está a criar esta versão. A região não tem de ser a mesma região na qual está a implementar a sua aplicação.
[KEY=VALUE,...]
é uma lista opcional de uma ou mais anotações a aplicar ao lançamento, no formato de pares de chave/valor.
Pode usar anotações para acompanhar a proveniência dos lançamentos, por exemplo, transmitindo uma anotação como
commitId=0065ca0
. Todas as anotações no lançamento são devolvidas quandolist
ouget
o lançamento e são apresentadas com o lançamento na Google Cloud consola, para que também possa ver a proveniência do lançamento.[IMAGE_LIST]
é uma lista separada por vírgulas de substituições de nome da imagem para caminho da imagem. Por exemplo:
--images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18
.Este valor não é obrigatório se transmitir
--build-artifacts
, que identifica um ficheiro de saída de artefactos de compilação do Skaffold.Quando o 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
, deste exemplo, está no manifesto não renderizado e é substituído no manifesto renderizado porpath/to/image1:v1@sha256:45db24
.
Exemplo com referência direta à imagem
O comando seguinte cria um novo lançamento, transmitindo uma referência de imagem diretamente, em vez de um ficheiro de artefactos de compilaçã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 do lançamento. Se quiser gerar um nome de lançamento com base na data ou na hora, pode incluir '$DATE'
ou 'TIME'
ou ambos. A hora é a hora UTC na máquina onde invoca o comando. '$DATE'
e '$TIME'
têm de estar entre aspas simples.
Segue-se 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-
,
mais a data e a hora, por exemplo: rel-20220131-1507
.
Também é comum usar o SHA do Git num nome de lançamento. Consulte os exemplos do Cloud Build e do Docker neste documento.
Artefactos de compilação versus imagens
No comando gcloud deploy releases create
, pode transmitir um conjunto de referências de imagens ou uma referência de ficheiro de artefactos de compilação.
Use
--images=[NAME=TAG,...]
para se referir a uma ou mais imagens de contentores individuais.Este valor é uma referência a uma coleção de substituições individuais do nome da imagem para o caminho completo da imagem. Segue-se um exemplo:
gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24
Use
--build-artifacts=
para apontar para um ficheiro de saída de artefactos de compilação do Skaffold.
Exemplos do Cloud Build, transmitindo um ficheiro de artefactos de compilação
Exemplo de criação de Docker
O ficheiro YAML seguinte demonstra o Cloud Build para um envio de imagem de compilação do Docker e, em última análise, cria um lançamento do Cloud Deploy.
Este exemplo cria e envia uma imagem para um repositório de artefactos e cria um comando para criar uma versão com um nome baseado no SHA de confirmação curto. Este exemplo tem de ser usado como um acionador de SCM do Cloud Build porque depende da variável $COMMIT_SHA
.
Este exemplo envia uma imagem para uma etiqueta do Docker que é igual ao hash de confirmação do repositório de origem. Em seguida, a mesma hash de confirmação, como uma etiqueta do Docker, é referenciada a partir dos argumentos do 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}"
]
Tenha em atenção que 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 seguinte ficheiro YAML é o conteúdo de uma configuração de compilação do Cloud Build que inclui uma chamada para o 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 a compilação.
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"
]
Associe o GitHub Actions ao Cloud Deploy
Se estiver a usar o GitHub Actions para a integração contínua ou outras atividades relacionadas com a entrega de software, pode estabelecer ligação ao Cloud Deploy para a entrega contínua através da ação do GitHub create-cloud-deploy-release
.
Associe o GitLab ao Cloud Deploy
Se usar o GitLab para integração contínua, pode usar o componente GitLab Cloud Deploy create-cloud-deploy-release para criar uma versão do Cloud Deploy.
Também pode experimentar o tutorial completo para usar o GitLab com o Google Cloud.
Usar anotações para acompanhar a proveniência do lançamento
A flag --annotations=
permite-lhe aplicar um ou mais pares de chave/valor arbitrários à versão que este comando cria. Adicionaria esta flag ao comando gcloud deploy releases create
.
Por exemplo, pode usar os seguintes pares de chave-valor para acompanhar a origem da imagem a implementar.
Segue-se 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 pode criar uma anotação cujo valor seja o URL que aponta para o pedido de obtenção, por exemplo. Para mais informações, consulte o artigo Usar etiquetas e anotações com o Cloud Deploy.