En este documento, se describe cómo verificar una implementación de Cloud Deploy.
Puedes configurar Cloud Deploy y Skaffold para verificar que una aplicación que implementaste en cualquier destino funcione correctamente. La verificación se realiza con tu propia imagen de prueba, y configuras Cloud Deploy y Skaffold para que ejecuten esas pruebas una vez que finalice la implementación.
De forma predeterminada, la verificación de implementación se ejecuta en el entorno de ejecución de Cloud Deploy, pero también puedes configurarla para que se ejecute en el mismo clúster en el que se ejecuta la aplicación.
¿Cómo funciona la verificación de implementación?
Configuras Skaffold para la verificación.
Esta configuración identifica la o las imágenes de contenedor que se usarán para ejecutar pruebas y los comandos específicos (secuencia de comandos, por ejemplo) que se ejecutarán desde esa imagen de contenedor.
Configuras uno o más destinos en tu canalización de entrega para la verificación de la implementación.
Esta configuración habilita la verificación de las cargas de trabajo que se implementan en ese objetivo.
Después de que se implementa un lanzamiento (
skaffold apply), Cloud Deploy ejecuta el comandoskaffold verifyen el entorno de ejecución de Cloud Deploy.En el caso de las implementaciones en Google Kubernetes Engine y GKE Enterprise, puedes ejecutar el contenedor de verificación de forma opcional en el mismo clúster en el que se ejecuta el contenedor de la aplicación.
Skaffold invoca la prueba o las pruebas especificadas en la estrofa
verifyde tuskaffold.yamlpara ejecutarlas en la aplicación implementada.El éxito o el fracaso de las pruebas ejecutadas indican el éxito o el fracaso de la verificación.
El código de salida del contenedor ejecutado determina el éxito de la verificación.
0indica que se realizó correctamente. Un código de salida distinto de cero indica un error. Para generar el resultado de verificación deseado, asegúrate de que el contenedor salga con el código de salida adecuado. Si se ejecuta más de un contenedor como parte de la verificación, todos deben tener éxito para que la verificación se realice correctamente.Si la verificación falla, el lanzamiento también falla.
Si una implementación falla durante la verificación, puedes ver esto inspeccionando el lanzamiento:
Puedes ignorar o reintentar una verificación fallida.
También puedes finalizar un trabajo de verificación en curso.
Componentes que se usan para la verificación
El recurso lanzamiento incluye los siguientes objetos, que admiten la verificación de la implementación:
Fase
Es la colección de operaciones (tareas) de un lanzamiento que se agrupan de forma lógica, por ejemplo, una implementación o una implementación y verificación.
Trabajo
Es la operación específica que se realizará en un lanzamiento, como implementar o verificar.
Ejecución de trabajo
Es un elemento secundario del recurso de lanzamiento. La ejecución de trabajo es una instancia de un trabajo, por ejemplo, un intento de implementación.
Para obtener más información sobre los recursos de Cloud Deploy, consulta la arquitectura del servicio de Cloud Deploy.
Notificaciones generadas por la verificación de la implementación
Cloud Deploy genera mensajes de Pub/Sub y los publica para los siguientes eventos:
Creación, actualización y eliminación de ejecuciones de trabajos
Estas notificaciones se publican en el tema
clouddeploy-resourcesy contienen los siguientes atributos:ResourceResourceType(JobRun)Action(Create,Update,Delete)ProjectNumberLocationTargetIdDeliveryPipelineIdReleaseIdRolloutIdJobRunId
El siguiente es un ejemplo de mensaje de Pub/Sub para la creación de una ejecución de trabajo, publicado en el tema clouddeploy-resources:
{
"ackId": "UAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRAGAE8CKF15MFcrQVh9Dz4NGXJ9YXRiWRIJBkUHeF9cEQ1iXE5EB0nq0KDVV1dKXxYGAExQeVhbHQVoWVh0Bnn7h5nK-8HjYwk9OqKarPdtO4PY2fNHZiI9XhJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FU0Q",
"message": {
"attributes": {
"Action": "Create",
"DeliveryPipelineId": "dv-pipeline",
"JobRunId": "634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
"Location": "us-central1",
"ProjectNumber": "253401481285",
"ReleaseId": "test-release-100",
"Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-100/rollouts/test-release-100-to-dev-0001/jobRuns/634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
"ResourceType": "JobRun",
"RolloutId": "test-release-100-to-dev-0001"
},
"messageId": "5572937706805411",
"publishTime": "2022-09-07T14:00:46.040Z"
}
},
Inicio, éxito y fracaso de la ejecución de trabajos
Estas notificaciones se publican en el tema
clouddeploy-operationsy contienen los siguientes atributos:ResourceResourceType(JobRun)Action(Start,Succeed,Failure)ProjectNumberLocationTargetIdDeliveryPipelineIdReleaseIdRolloutIdJobRunIdPhaseIdJobIdJobType(DeployuVerify)
El siguiente es un ejemplo de mensaje de Pub/Sub para una ejecución de trabajo que falló, publicado en el tema clouddeploy-operations:
{
"ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUUBAgUBXx9cEFPdVhec2hRDRlyfWB9aVsbCAUXU3cJURsHaE5tdR-6xcvaS0NVb18UAgRFWndfXhMEblhfcy-fkK3HwvT9U0AvOemNgdZpe6jHiulvZiM9XxJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FUw",
"message": {
"attributes": {
"Action": "Failure",
"DeliveryPipelineId": "dv-pipeline",
"JobId": "verify",
"JobRunId": "b389224a-c259-4a00-ab75-c22e48bc3136",
"JobType": "Verify",
"Location": "us-central1",
"PhaseId": "stable",
"ProjectNumber": "253401481285",
"ReleaseId": "test-release-101",
"Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-101/rollouts/test-release-101-to-dev-0001/jobRuns/b389224a-c259-4a00-ab75-c22e48bc3136",
"ResourceType": "JobRun",
"RolloutId": "test-release-101-to-dev-0001",
"TargetId": "dev"
},
"messageId": "5573609905896436",
"publishTime": "2022-09-07T15:35:37.906Z"
}
},
Configura Cloud Deploy para la verificación de implementación
Habilitar la verificación de implementación para un destino de Cloud Deploy consiste en agregar una propiedad verify: true a un destino (o destinos) determinado en una progresión de canalización de entrega, como se muestra en este ejemplo:
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-demo-app
description: main application pipeline
serialPipeline:
stages:
- targetId: dev
profiles: []
strategy:
standard:
verify: true
- targetId: prod
profiles: []
strategy:
standard:
verify: false
En esta configuración, la verificación de implementación está habilitada en el destino dev, pero no en el destino prod. verify: false equivale a omitir la propiedad verify o toda la estrofa strategy.
La operación de verificación se ejecuta dentro de su propio entorno de ejecución.
Este entorno de ejecución se puede configurar para VERIFY de la misma manera que para RENDER y DEPLOY.
Configura Skaffold para la verificación de la implementación
Para habilitar la verificación de implementación de un destino, se requiere una estrofa verify en el archivo de configuración skaffold.yaml de tu implementación. Esta configuración puede ser para un perfil de Skaffold específico, si usas perfiles independientes por destino.
Esta estrofa verify identifica un contenedor para ejecutar la verificación, por ejemplo, una prueba de integración.
El siguiente es un ejemplo de skaffold.yaml que incluye una estrofa verify:
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: integration-test
context: integration-test
manifests:
rawYaml:
- kubernetes.yaml
deploy:
kubectl: {}
verify:
- name: verify-integration-test
container:
name: integration-test
image: integration-test
command: ["./test-systems.sh"]
- name: verify-endpoint-test
container:
name: alpine
image: alpine
command: ["/bin/sh"]
args: ["-c", "wget #ENDPOINT_URL"]
En este ejemplo simple, se muestra una estrofa verify que identifica un contenedor para usar y una secuencia de comandos de prueba para ejecutar en ese contenedor.
#ENDPOINT_URL en este ejemplo es solo un marcador de posición para la URL de tu aplicación y no es una variable de entorno disponible de Cloud Deploy.
Ejecuta el contenedor de verificación en el clúster de aplicaciones
De forma predeterminada, la verificación de implementación se ejecuta en el entorno de ejecución de Cloud Deploy. También puedes configurar Skaffold para que ejecute el contenedor de verificación en el mismo clúster en el que se ejecuta tu aplicación. Cuando configuras la verificación en el clúster en skaffold.yaml y habilitas la verificación en un destino, esta se ejecuta automáticamente en el clúster de ese destino.
Esta función solo está disponible para implementaciones en GKE y GKE Enterprise, no en Cloud Run. Las implementaciones en Cloud Run solo pueden ejecutar la verificación en el entorno de ejecución de Cloud Deploy.
La verificación en el clúster requiere Skaffold versión 2.3 o posterior.
Para ejecutar tu contenedor de verificación en el clúster, incluye una stanza executionMode.kubernetesCluster en tu archivo de configuración skaffold.yaml, dentro de la stanza verify del contenedor de verificación específico:
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
El siguiente es un ejemplo de una estrofa de verificación que incluye executionMode para invocar el contenedor de verificación en el clúster de aplicaciones:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
La estrofa executionMode es opcional y, si la omites, Skaffold ejecutará el contenedor de verificación en el entorno de ejecución de Cloud Deploy.
Vuelve a intentar la verificación
Cuando falla un trabajo de verificación, puedes volver a intentar la verificación y crear una nueva ejecución de trabajo:
gcloud deploy rollouts retry-job ROLLOUT_NAME \
--job-id=JOB_ID \
--phase-id=PHASE_ID \
--delivery-pipeline=PIPELINE_NAME \
--release=RELEASE_NAME \
--region=REGION
Si vuelves a intentar la verificación, el estado de la actualización progresiva cambiará de FAILED a IN_PROGRESS.
Solo puedes volver a intentar una verificación para una implementación cuyo trabajo de verificación falló.
Variables de entorno disponibles
Cloud Deploy proporciona y propaga las siguientes variables de
entorno en el entorno de ejecución VERIFY,
que puedes usar para tus pruebas:
ANTHOS_MEMBERSHIPPara los destinos de tipo
ANTHOS, el nombre de recurso completamente especificado de la membresía de Anthos.CLOUD_RUN_LOCATIONPara los destinos de tipo
RUN, la región en la que se implementa el servicio de Cloud RunCLOUD_RUN_PROJECTPara los destinos de tipo
RUN, el proyecto en el que se creó el servicio de Cloud Run.CLOUD_RUN_SERVICEPara los destinos de tipo
RUN, el nombre de recurso completamente especificado del servicio de Cloud Run implementado, por ejemplo,projects/p/locations/us-central1/services/dev.CLOUD_RUN_SERVICE_URLSPara los destinos de tipo
RUN, las URLs (lista separada por comas) que los usuarios finales usarán para acceder a tu servicio. Puedes encontrar estos datos en los detalles del servicio de Cloud Run de tu servicio, en la consola deGoogle Cloud .CLOUD_RUN_REVISIONPara los destinos de tipo
RUN, la revisión específica del servicio de Cloud RunGKE_CLUSTERPara los destinos de tipo
GKE, el nombre de recurso completamente especificado del clúster de Google Kubernetes Engine, por ejemplo,projects/p/locations/us-central1/clusters/dev.TARGET_TYPEEs el tipo de entorno de ejecución específico del destino.
GKE,ANTHOSoRUN.CLOUD_DEPLOY_LOCATIONEs la región en la que se ejecuta el entorno de ejecución.
CLOUD_DEPLOY_DELIVERY_PIPELINEEs la canalización de entrega de ID que ejecuta el entorno de ejecución.
CLOUD_DEPLOY_TARGETEs el ID del destino en el que se ejecuta el entorno de ejecución.
CLOUD_DEPLOY_PROJECTEs el número del proyecto Google Cloud en el que se ejecuta el entorno de ejecución.
CLOUD_DEPLOY_PROJECT_IDEl Google Cloud ID del proyecto que contiene los recursos de Cloud Deploy.
CLOUD_DEPLOY_RELEASEEs el ID de la versión en la que se ejecutará la verificación.
CLOUD_DEPLOY_ROLLOUTEl ID del lanzamiento que contiene los trabajos para verificar.
CLOUD_DEPLOY_JOB_RUNEs el ID de la ejecución de trabajo que representa la ejecución actual del trabajo.
CLOUD_DEPLOY_PHASELa fase del lanzamiento que contiene el trabajo para verificar.
Cómo implementar parámetros como variables de entorno
Además de las variables de entorno que se enumeran en esta sección, Cloud Deploy puede pasar a tus contenedores personalizados cualquier parámetro de implementación que hayas establecido.