Integra Google Cloud Deploy en tu sistema de CI

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En este documento, se describe cómo invocar la canalización de entrega de Google Cloud Deploy desde el sistema de integración continua (CI).

La integración de Google Cloud Deploy en tu sistema de CI es tan simple como agregar una llamada a la CLI de Google Cloud Deploy gcloud. Esta llamada se produce en el punto de la canalización de CI en el que la aplicación está lista para implementarse.

Antes de comenzar

En las instrucciones de esta página, se supone que ya cumples las siguientes condiciones:

Llama a Google Cloud Deploy desde tu canalización de CI

El siguiente comando crea una versión nueva, por lo 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 un nombre que le asignas a esta versión. Es obligatorio ingresar este valor.

    Puedes especificar nombres de versiones dinámicas si incluyes '$DATE', '$TIME' o ambos. Por ejemplo, si invocas este comando a las 3:07 p.m. UTC, 'rel-$TIME' se resuelve en rel-1507. '$DATE' y '$TIME' deben estar entre comillas simples.

  • PIPELINE_NAME

    es el nombre de su 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 región en la que implementas tu aplicación en última instancia.

  • [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 hacer un seguimiento de la procedencia de la versión, por ejemplo, pasando una anotación como commitId=0065ca0. Todas las anotaciones en la versión se muestran cuando list o get la versión y se muestran con la versión en Google Cloud Console, por lo que también puedes ver la procedencia de la versión.

  • IMAGE_LIST

    es una lista separada por comas de reemplazos de imágenes a rutas de imágenes. Por ejemplo: --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18

    Este valor no es obligatorio si pasas --build-artifacts, que identifica un archivo de salida de artefactos de compilación de Skaffold.

    Cuando Google Cloud Deploy renderiza el manifiesto, el nombre de la imagen del manifiesto que no se renderiza se reemplaza por la referencia de la imagen completa. Es decir, en este ejemplo, image1 está en el manifiesto no renderizado y se reemplaza en el manifiesto renderizado por path/to/image1:v1@sha256:45db24.

Ejemplo con referencia directa a una imagen

El siguiente comando crea una versión nueva 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 deseas generar un nombre de versión en función de la fecha o la hora, puedes incluir '$DATE', 'TIME' o ambos. La hora es UTC en la máquina en la que se invoca 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 Git SHA en el nombre de una versión. Consulta los ejemplos de Cloud Build y Docker en este documento.

Artefactos de compilación en comparación con 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 más imágenes de contenedor individuales.

    Este valor es una referencia a una colección de nombres de imágenes individuales para reemplazar reemplazos de rutas de acceso completas. 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 y transferencia de 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 Google Cloud Deploy.

En este ejemplo, se compila y se envía una imagen a un repositorio de artefactos y se crea un comando para crear una versión, con un nombre de versión basado en el SHA de confirmación breve. Este ejemplo se debe usar como un activador de SCM de Cloud Build porque se basa en la variable $COMMIT_SHA.

En este ejemplo, se envía una imagen a una etiqueta de Docker que es lo mismo que el 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 de los comandos de actualización.

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 Google Cloud Deploy para crear una versión, con un nombre de actualizació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"
    ]

El uso de las anotaciones para hacer un seguimiento del origen de la versión

La marca --annotations= te permite aplicar uno o más pares clave-valor arbitrarios a la versión que crea este comando. Debes agregar esta marca al comando gcloud deploy releases create.

Por ejemplo, puedes usar los siguientes pares clave-valor para hacer un seguimiento del origen 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

Por ejemplo, también puedes crear una anotación cuyo valor sea la URL que apunta a la solicitud de extracción. Para obtener más información, consulta Usa etiquetas y anotaciones con Google Cloud Deploy.