En este documento, se describe cómo invocar la canalización de entrega de Cloud Deploy desde el sistema de integración continua (CI).
Integrar Cloud Deploy en tu sistema de CI es tan simple como agregar una llamada a la CLI gcloud
de Cloud Deploy. Esta llamada se realiza en el momento de la canalización de CI en el que tu aplicación está lista para implementarse.
Antes de comenzar
En las instrucciones de esta página, se da por sentado que ya cumples las siguientes condiciones:
Debes haber habilitado las APIs aplicables.
Tienes al menos una canalización de entrega definida y registrada en Cloud Deploy.
Tienes al menos un destino definido, y la canalización de entrega hace referencia a ese destino.
Llama a Cloud Deploy desde tu canalización de CI
Con el siguiente comando, se crea una versión nueva, que invoca una instancia de canalización de entrega:
gcloud deploy releases create RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION \
--annotations=[KEY=VALUE,...] \
--images=[IMAGE_LIST]
En el ejemplo anterior, se ilustra lo siguiente:
RELEASE_NAME
es el nombre que le asignas a esta versión. Es obligatorio ingresar este valor.
Para especificar nombres de versiones dinámicos, incluye
'$DATE'
,'$TIME'
o ambos. Por ejemplo, si invocas este comando a las 3:07 p.m. UTC,'rel-$TIME'
se resuelve comorel-1507
.'$DATE'
y'$TIME'
deben estar entre comillas simples.PIPELINE_NAME
es el nombre de la canalización de entrega registrada. Es obligatorio ingresar este valor.
REGION
es la región en la que crearás esta versión. No es necesario que la región sea la misma en la que finalmente implementarás tu aplicación.
[KEY=VALUE,...]
es una lista opcional de una o más anotaciones para aplicar a la versión, en forma de pares clave-valor.
Puedes usar anotaciones para realizar un seguimiento de la procedencia de la versión, por ejemplo, si pasas una anotación como
commitId=0065ca0
. Todas las anotaciones de la versión se muestran cuandolist
oget
la versión, y se muestran con la versión en la consola de Google Cloud, por lo que también puedes ver su procedencia allí.[IMAGE_LIST]
es una lista separada por comas de reemplazos de nombre de imagen por ruta de acceso de imagen. Por ejemplo:
--images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18
Este valor no es necesario si pasas
--build-artifacts
, que identifica un archivo de salida de artefactos de compilación de Skaffold.Cuando Cloud Deploy procesa el manifiesto, el nombre de la imagen en el manifiesto no renderizado se reemplaza por la referencia de la imagen completa en el manifiesto renderizado. Es decir,
image1
, de este ejemplo, está en el manifiesto no renderizado y se reemplaza en el manifiesto renderizado porpath/to/image1:v1@sha256:45db24
.
Ejemplo con referencia de imagen directa
Con el siguiente comando, se crea una versión nueva y se pasa una referencia de imagen directamente, en lugar de un archivo de artefactos de compilación:
gcloud deploy releases create my-release \
--delivery-pipeline=web-app \
--region=us-central1 \
--images=image1=path/to/image1:v1@sha256:45db24
En este ejemplo, my-release
es el nombre de la versión. Si deseas generar un nombre de versión basado en una fecha o una hora, puedes incluir '$DATE'
, 'TIME'
o ambos. La hora es la hora UTC en la máquina en la que invocas el comando. '$DATE'
y '$TIME'
deben estar entre comillas simples.
Por ejemplo:
gcloud deploy releases create rel-'$DATE'-'$TIME' \
--delivery-pipeline=web-app \
--region=us-central1 \
--images=image1=path/to/image1:v1@sha256:45db24
En este ejemplo, el comando genera un nombre de versión con el prefijo rel-
, más la fecha y la hora, por ejemplo: rel-20220131-1507
.
También es común usar el SHA de Git en un nombre de versión. Consulta los ejemplos de Cloud Build y Docker de este documento.
Diferencias entre artefactos de compilación y imágenes
En el comando gcloud deploy releases create
, puedes pasar un conjunto de referencias de imagen o una referencia de archivo de artefactos de compilación.
Usa
--images=[NAME=TAG,...]
para hacer referencia a una o más imágenes de contenedor individuales.Este valor es una referencia a una colección de nombres de imágenes individuales para reemplazos de rutas de acceso completos de imágenes. Por ejemplo:
gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24
Usa
--build-artifacts=
para apuntar a un archivo de salida de artefactos de compilación de Skaffold.
Ejemplos de Cloud Build, cuando se pasa un archivo de artefactos de compilación
Ejemplo de compilación de Docker
En el siguiente archivo YAML, se muestra Cloud Build para un envío de imágenes de compilación de Docker y, en última instancia, se crea una versión de Cloud Deploy.
En este ejemplo, se compila y envía una imagen a un repositorio de artefactos y se construye un comando para crear una versión, con un nombre de versión basado en el SHA de confirmación corto. Este ejemplo se debe usar como un activador de SCM de Cloud Build, ya que se basa en la variable $COMMIT_SHA
.
En este ejemplo, se envía una imagen a una etiqueta de Docker que es igual al hash de confirmación del repositorio de origen. Luego, se hace referencia al mismo hash de confirmación, como una etiqueta de Docker, desde los argumentos release-command.
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}"
]
Ten en cuenta que el nombre de la imagen al final de este ejemplo, "--images", "IMAGE_NAME=
se sustituye en el manifiesto procesado con la referencia de la imagen completa.
Ejemplo de configuración de Cloud Build mediante Skaffold
El siguiente archivo YAML es el contenido de una configuración de compilación de Cloud Build que incluye una llamada a Cloud Deploy para crear una versión, con un nombre de versión basado en la fecha. En este ejemplo, también se muestra el uso de Skaffold para la compilación.
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"
]
Conecta acciones de GitHub a Cloud Deploy
Si usas acciones de GitHub para la integración continua o para otras actividades relacionadas con la entrega de software, puedes conectarte a Cloud Deploy a fin de realizar una entrega continua mediante la acción create-cloud-deploy-release
de GitHub.
Uso de anotaciones para hacer un seguimiento de la procedencia del lanzamiento
La marca --annotations=
te permite aplicar uno o más pares clave-valor arbitrarios a la versión que crea este comando. Deberías agregar esta marca al comando gcloud deploy releases create
.
Por ejemplo, puedes usar los siguientes pares clave-valor para realizar un seguimiento de la fuente de la imagen que se implementará.
Por ejemplo:
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
También puedes crear una anotación cuyo valor sea la URL que apunta a la solicitud de extracción, por ejemplo. Para obtener más información, consulta Usa etiquetas y anotaciones con Cloud Deploy.