En este documento se describe cómo invocar tu flujo de trabajo de entrega de Cloud Deploy desde tu sistema de integración continua (CI).
Integrar Cloud Deploy con tu sistema de CI es tan sencillo como añadir una llamada a la gcloud
CLI de Cloud Deploy. Esta llamada se produce en el punto de tu
pipeline de CI en el que tu aplicación está lista para implementarse.
Antes de empezar
En las instrucciones de esta página se da por hecho que ya cumples las siguientes condiciones:
Tienes al menos una canalización de distribución definida y registrada en Cloud Deploy.
Tienes al menos un destino definido y tu canal de distribución hace referencia a ese destino.
Llamar a Cloud Deploy desde tu flujo de procesamiento de integración continua
El siguiente comando crea una nueva versión, lo que invoca una instancia de flujo de procesamiento de entrega:
gcloud deploy releases create RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION \
--annotations=[KEY=VALUE,...] \
--images=[IMAGE_LIST]
¿Dónde...?
RELEASE_NAME
es el nombre que le das a esta versión. Este valor es obligatorio.
Puedes especificar nombres de lanzamiento dinámicos incluyendo
'$DATE'
o'$TIME'
o ambos. Por ejemplo, si invocas este comando a las 15:07 (UTC),'rel-$TIME'
se resuelve comorel-1507
.'$DATE'
y'$TIME'
deben ir entre comillas simples.PIPELINE_NAME
es el nombre de tu flujo de procesamiento de entrega registrado. Este valor es obligatorio.
REGION
es la región en la que estás creando esta versión. No es necesario que la región sea la misma en la que vayas a implementar tu aplicación.
[KEY=VALUE,...]
es una lista opcional de una o varias anotaciones que se aplican a la versión en forma de pares clave-valor.
Puedes usar anotaciones para hacer un seguimiento de la procedencia de las versiones. Por ejemplo, puedes añadir una anotación como
commitId=0065ca0
. Todas las anotaciones de la versión se devuelven cuandolist
oget
la versión y se muestran con la versión en la Google Cloud consola, por lo que también puedes ver la procedencia de la versión.[IMAGE_LIST]
es una lista separada por comas de sustituciones de nombre de imagen por ruta de imagen. Por ejemplo:
--images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18
.Este valor no es obligatorio si envía
--build-artifacts
, que identifica un archivo de salida de artefactos de compilación de Skaffold.Cuando Cloud Deploy renderiza el manifiesto, el nombre de la imagen del manifiesto sin renderizar se sustituye por la referencia completa de la imagen en el manifiesto renderizado. Es decir,
image1
, en este ejemplo, está en el manifiesto sin renderizar y se sustituye en el manifiesto renderizado porpath/to/image1:v1@sha256:45db24
.
Ejemplo con referencia directa a la imagen
El siguiente comando crea una versión y 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 quieres generar un nombre de lanzamiento basado en la fecha o la hora, puedes incluir '$DATE'
o 'TIME'
, o ambos. La hora es la hora UTC del ordenador en el que invocas el comando. '$DATE'
y '$TIME'
deben ir entre comillas simples.
Veamos un 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 lanzamiento con el prefijo rel-
, además de la fecha y la hora. Por ejemplo: rel-20220131-1507
.
También es habitual usar el SHA de Git en el nombre de una versión. Consulta los ejemplos de Cloud Build y Docker de este documento.
Artefactos de compilación frente a imágenes
En el comando gcloud deploy releases create
, puedes pasar un conjunto de referencias de imágenes o una referencia de archivo de artefactos de compilación.
Usa
--images=[NAME=TAG,...]
para hacer referencia a una o varias imágenes de contenedor individuales.Este valor es una referencia a una colección de nombres de imágenes individuales y a sustituciones de rutas completas de imágenes. Veamos un 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 para transferir un archivo de artefactos de compilación
Ejemplo de compilación de Docker
El siguiente archivo YAML muestra Cloud Build para un envío de imagen de compilación de Docker y, en última instancia, crea una versión de Cloud Deploy.
En este ejemplo se crea y se inserta una imagen en un repositorio de artefactos, y se genera un comando para crear una versión con un nombre basado en el SHA de confirmación abreviado. Este ejemplo debe usarse como un activador de SCM de Cloud Build porque depende de la variable $COMMIT_SHA
.
En este ejemplo, se envía una imagen a una etiqueta de Docker que es la misma que el hash de confirmación del repositorio de origen. A continuación, se hace referencia al mismo hash de confirmación, como etiqueta de Docker, desde los argumentos del comando de lanzamiento.
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 renderizado por la referencia completa de la imagen.
Ejemplo de configuración de Cloud Build con 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 Skaffold usado 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"
]
Conectar GitHub Actions a Cloud Deploy
Si usas GitHub Actions para la integración continua u otras actividades relacionadas con la entrega de software, puedes conectarte a Cloud Deploy para la entrega continua mediante la create-cloud-deploy-release
acción de GitHub.
Conectar GitLab con Cloud Deploy
Si usas GitLab para la integración continua, puedes usar el componente de GitLab Cloud Deploy create-cloud-deploy-release para crear un lanzamiento de Cloud Deploy.
También puedes probar el tutorial completo para usar GitLab con Google Cloud.
Usar anotaciones para hacer un seguimiento de la procedencia de la versión
La marca --annotations=
te permite aplicar uno o varios pares clave-valor arbitrarios a la versión que crea este comando. Añadirías esta marca al comando gcloud deploy releases create
.
Por ejemplo, puede usar los siguientes pares clave-valor para hacer un seguimiento de la fuente de la imagen que se va a implementar.
Veamos un 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 el artículo sobre cómo usar etiquetas y anotaciones con Cloud Deploy.