En este documento, se describe cómo invocar tu canalización de entrega de Cloud Deploy de tu sistema de integración continua (CI).
Integrar Cloud Deploy en tu sistema de CI es tan simple como agregar un
llamada a la gcloud
de Cloud Deploy
CLI Esta llamada se realiza en el momento de la
Canalización de CI en la que tu aplicación está lista para implementarse.
Antes de comenzar
En las instrucciones de esta página, se supone que ya cumples con las siguientes condiciones:
Tienes al menos una canalización de publicación definida y registrada con Cloud Deploy.
Tienes al menos un objetivo definido, y las referencias de la canalización de entrega a ese destino.
Llama a Cloud Deploy desde tu canalización de CI
El siguiente comando crea una versión nueva, 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 el nombre que le asignas a este lanzamiento. Es obligatorio ingresar este valor.
Para especificar nombres de versiones dinámicos, incluye
'$DATE'
o'$TIME'
. 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 tu canalización de entrega registrada. Es obligatorio ingresar este valor.
REGION
es la región en la que creas esta versión. La región no tiene que ser la misma en la que, en última instancia, implementarás tu aplicación.
[KEY=VALUE,...]
es una lista opcional de una o más anotaciones para aplicar a la versión, en el de pares clave-valor.
Puedes usar anotaciones para hacer un seguimiento de la procedencia del lanzamiento, por ejemplo, pasando una anotación como
commitId=0065ca0
Todas las anotaciones de la versión se muestran cuando lalist
oget
, y se muestran con la versión en la consola de Google Cloud, de modo que también puedes ver la procedencia de la versión allí.[IMAGE_LIST]
es una lista separada por comas de reemplazos de nombre de imagen a 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 pasas
--build-artifacts
, que identifica un Archivo de salida de los artefactos de compilación de Skaffold.Cuando Cloud Deploy renderiza el manifiesto, el nombre de la imagen en el manifiesto sin renderizar se reemplaza por la referencia de la imagen completa en el manifiesto renderizado. Es decir,
image1
, en este ejemplo, se encuentra en el manifiesto no renderizado. y se reemplaza en el manifiesto renderizado porpath/to/image1:v1@sha256:45db24
.
Ejemplo con referencia directa de 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 quieres generar un
nombre de la versión en función de la fecha o la hora, puedes incluir '$DATE'
, 'TIME'
o
ambos. La hora es la hora UTC de la máquina en la que invocas el comando. '$DATE'
y '$TIME'
deben estar entre comillas simples.
A continuación, se presenta 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 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 el nombre de una versión. Consulta la 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 a un archivo de artefactos de compilación.
Usa
--images=[NAME=TAG,...]
para hacer referencia a uno o más contenedores individuales imágenes de contenedores.Este valor es una referencia a una colección de nombres de imágenes individuales reemplazos completos de la ruta de acceso. A continuación, se presenta 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 pasar un archivo de artefactos de compilación
Ejemplo de compilación de Docker
En el siguiente archivo YAML, se muestra Cloud Build para un Compilación de Docker enviar imágenes y, en última instancia, crear un lanzamiento de Cloud Deploy.
En este ejemplo, se compila y se envía una imagen a un repositorio de artefactos y se construye
un comando para crear una versión, cuyo nombre se basa en la confirmación breve
SHA Este ejemplo se debe usar como SCM de Cloud Build
activador porque
se basa en la variable $COMMIT_SHA
.
En este ejemplo, se envía una imagen a una etiqueta de Docker que es igual a la confirmación. hash del repositorio fuente. Luego, se hace referencia al mismo hash de confirmación, como una 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 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 Cloud Build configuración de compilación que incluye una llamada a Cloud Deploy para crear un lanzamiento, con un nombre basado en la fecha. En este ejemplo, también se muestra Skaffold que se usó 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 GitHub Actions a Cloud Deploy
Si usas GitHub Actions para integración continua o algún otro software
relacionadas con la entrega, puedes conectarte a Cloud Deploy para
y la entrega continua
create-cloud-deploy-release
Acción de GitHub.
Conecta GitLab con Cloud Deploy
Si usas GitLab para la integración continua, puedes usar el componente create-cloud-deploy-release de GitLab Cloud Deploy para crear una versión de Cloud Deploy.
También puedes probar el instructivo de extremo a extremo para usar GitLab con Google Cloud.
Para obtener más información, consulta la Descripción general de GitLab en Google Cloud.
Cómo usar anotaciones para hacer un seguimiento de la procedencia 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. Agregarías esta marca a la
Comando gcloud deploy releases create
.
Por ejemplo, puedes usar los siguientes pares clave-valor para hacer 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.