En este documento, se describe cómo ejecutar operaciones o programas arbitrarios antes de y/o después de la implementación.
Puedes configurar Cloud Deploy y Skaffold para ejecutar acciones que realicen acciones previas a la implementación o posteriores a ella, o ambas. A estos programas, que se ejecutan de esta manera, se los llama "hooks". Los hooks previos a la implementación y posteriores a ella se ejecutan como un proceso previo y posterior a la implementación trabajos en el lanzamiento.
Puedes configurar cada hook para que se ejecute en un entorno de ejecución de Cloud Deploy especificado, pero si realizas la implementación en Google Kubernetes Engine, puedes configurarlo de manera opcional para que se ejecute en el clúster de GKE en el que implementas tu aplicación.
Se supone que los hooks de implementación son idempotentes. Si se ejecuta una acción determinada más de una vez, no se produce ningún efecto adicional.
¿Cómo funcionan los hooks de implementación?
A continuación, se describen los pasos para configurar hooks de implementación, y las Procesos de Skaffold y Cloud Deploy para ejecutar esos hooks:
Debes configurar los
skaffold.yaml
que se usan en una versión determinada para incluircustomActions
que identifican las imágenes de contenedor que se usarán para ejecutar la hooks y el comando o la secuencia de comandos específico que se ejecutará en cada contenedor.Configura hooks en una o más etapas en tu canalización de entrega progresión, cada uno de los cuales hace referencia a uno de los
customActions
que configuraste enskaffold.yaml
.Antes de que se ejecute el trabajo de implementación del lanzamiento, Skaffold ejecuta los comandos configurados en
skaffold.yaml
a las que se hace referencia en una estrofapredeploy
de la canalización progresión.El hook
predeploy
siempre se ejecuta como el primer trabajo de la fase.Después de que se ejecute el trabajo de implementación del lanzamiento, Cloud Deploy ejecutará Comandos configurados en
skaffold.yaml
a los que se hace referencia en unpostdeploy
en la progresión de la canalización.
Los hooks de implementación se ejecutan en la ejecución predeterminada de Cloud Deploy entorno de ejecución o en un entorno de ejecución alternativo especificado. En el caso de las implementaciones en GKE y GKE Enterprise, puedes ejecutar los hooks en el mismo clúster en el que se implementa la aplicación.
Usa hooks de implementación con una implementación de versiones canary
Cuando configuras hooks de implementación para una implementación de versiones canary, hay varios cosas que debes saber:
En la etapa de canalización de publicación, la configuración del hook (
predeploy
ypostdeploy
) se encuentra enstrategy.canary.canaryDeployment
ostrategy.canary.customCanaryDeployment.phaseConfigs
, en lugar destrategy.standard
.Para un canario automatizado, los hooks de
predeploy
se ejecutan antes de la implementación solo en la primera fase, y los hooks depostdeploy
se ejecutan después de la implementación solo en la última fase (estable).
Configura acciones en Skaffold
En tu archivo skaffold.yaml
, la estrofa customActions
toma una o más estrofas customActions
, configuradas de la siguiente manera:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
En esta estrofa de customerActions
:
ACTION_NAME
Es un nombre para esta acción. Este nombre puede ser el que desees, pero debe ser únicos en este
skaffold.yaml
. Este es el nombre al que se hará referencia desde las acciones previas y posteriores a la implementación definidas en la etapa de la canalización de publicación.CONTAINER_NAME
Es un nombre para el contenedor específico. Este nombre puede ser el que quieras, pero debe ser único en este
skaffold.yaml
.IMAGE
Es el nombre de la imagen del contenedor en la que se ejecutará tu comando.
COMMANDS_TO_RUN
Es una lista de puntos de entrada que se ejecutarán en ese contenedor.
"/bin/sh"
es un valor normal para especificar aquí, para invocar un shell, y deberías incluir el comando para que se ejecute en ese shell en los argumentos.LIST_OF_ARGS
Es una lista de argumentos para proporcionar al comando. Los valores están separados por comas list, con cada argumento entre comillas. Si tu COMMAND_TO_RUN es
"/bin/sh"
, uno de los argumentos aquí sería"-c"
y otro sería el comando completo que deseas ejecutar en la shell que invocas.A continuación, se presenta un ejemplo:
command: ["/bin/sh"] args: ["-c", `echo "This command ran!"`]
Para obtener más información sobre las acciones personalizadas de Skaffold, consulta el Documentación de Skaffold.
Configura la canalización para hacer referencia a las acciones
Para terminar de configurar tus hooks de implementación, debes configurar la canalización de entrega para que haga referencia a las acciones personalizadas que definiste en tu archivo skaffold.yaml
. Las acciones previas y posteriores a la implementación se configuran en un
o etapas más específicas en la canalización
progreso.
A continuación, se muestra cómo configurar los hooks previos y posteriores a la implementación en una etapa de canalización cuando se usa una estrategia de implementación de standard
:
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
actions: ["PREDEPLOY-ACTION"]
postdeploy:
actions: ["POSTDEPLOY-ACTION"]
En este YAML, se incluye lo siguiente:
PREDEPLOY_ACTION
Sea el mismo que el ACTION_NAME que usaste en tu
skaffold.yaml
para definir la acción personalizada que deseas ejecutar antes de la implementación.POSTDEPLOY_ACTION
Es la misma que la ACTION_NAME que usaste en tu
skaffold.yaml
para definir la acción personalizada que deseas ejecutar después de la implementación.
Puedes especificar más de una acción para predeploy
y postdeploy
, separadas por comas. Cuando se especifica más de una acción, estas se ejecutan de forma serial, en el orden en que se especifican. El trabajo (implementación previa o posterior) falla en la primera
acción que falla, y las acciones restantes no se ejecutan.
De forma predeterminada, si ejecutas más de un contenedor en paralelo y falla una tarea, ambos contenedores se detienen. Puedes configurar este comportamiento con el Estrategia de falla personalizada de acciones personalizadas de Skaffold.
Ejecuta los hooks en el clúster de la aplicación
De forma predeterminada, los hooks de implementación se ejecutan en Cloud Deploy
entorno de ejecución. También puedes configurar Skaffold para que ejecute esas acciones personalizadas en el mismo clúster en el que se ejecuta tu aplicación. Cuando configuras acciones personalizadas en skaffold.yaml
y las habilitas en una etapa de canalización, la acción se ejecuta automáticamente en el clúster de ese destino.
Esta capacidad está disponible para implementaciones en GKE y Solo para GKE Enterprise, no para Cloud Run. Las implementaciones en Cloud Run solo pueden ejecutar hooks en el entorno de ejecución de Cloud Deploy.
Para ejecutar tu hook en el clúster, incluye un executionMode.kubernetesCluster
.
en tu archivo de configuración skaffold.yaml
, dentro de customActions
Estrofa para la acción personalizada específica:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
executionMode:
kubernetesCluster: {}
La siguiente es una estrofa customActions
de ejemplo que incluye executionMode
para invocar el contenedor de hook en el clúster de la aplicación:
customActions:
- name: predeploy-action
containers:
- name: predeploy-echo
image: ubuntu
command: ["/bin/sh"]
args: ["-c", 'echo "this is a predeploy action"' ]
executionMode:
kubernetesCluster: {}
La estrofa executionMode
es opcional y, si la omites, Skaffold ejecuta la
contenedor de acciones personalizadas en el entorno de ejecución de Cloud Deploy.
Variables de entorno disponibles
Cloud Deploy proporciona y propaga las siguientes variables de entorno en el entorno de ejecución, que puedes usar para tus hooks:
ANTHOS_MEMBERSHIP
Para destinos de tipo
ANTHOS
, el nombre del recurso completamente especificado de Anthos membresía.CLOUD_RUN_LOCATION
Para los destinos de tipo
RUN
, la región en la que se encuentra el servicio de Cloud Run implementar en la nube.CLOUD_RUN_PROJECT
Para destinos de tipo
RUN
, el proyecto en el que se Cloud Run servicio se creó.CLOUD_RUN_SERVICE
Para los destinos de tipo
RUN
, el nombre del servicio de Cloud Run cuando se implementa un plan.CLOUD_RUN_SERVICE_URLS
Para los destinos de tipo
RUN
, las URLs (lista separada por comas) que los usuarios finales usarán para acceder a tu servicio. Puedes encontrarlas en la Detalles del servicio de Cloud Run para tu servicio, en la Consola de Google CloudCLOUD_RUN_REVISION
Para los destinos de tipo
RUN
, la revisión específica del servicio de Cloud RunGKE_CLUSTER
Para destinos de tipo
GKE
, el nombre del recurso especificado por completo del El clúster de Google Kubernetes Engine, por ejemploprojects/p/locations/us-central1/clusters/dev
.TARGET_TYPE
Es el tipo de entorno de ejecución específico del destino.
GKE
,ANTHOS
oRUN
. No se establecerá esta opción para los destinos personalizados.CLOUD_DEPLOY_LOCATION
La región que contiene los recursos de Cloud Deploy.
CLOUD_DEPLOY_DELIVERY_PIPELINE
Es el ID de la canalización de entrega.
CLOUD_DEPLOY_TARGET
El ID del objetivo.
CLOUD_DEPLOY_PROJECT
El proyecto de Google Cloud que contiene los recursos de Cloud Deploy.
CLOUD_DEPLOY_RELEASE
El ID de la versión en la que se ejecutarán los hooks.
CLOUD_DEPLOY_ROLLOUT
El ID del lanzamiento que contiene los trabajos de los hooks.
CLOUD_DEPLOY_JOB_RUN
Es el ID de la ejecución de trabajo que representa la ejecución actual del trabajo.
CLOUD_DEPLOY_PHASE
La fase del lanzamiento que contiene el trabajo de los hooks.
Implementa 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.
¿Qué sigue?
Prueba la guía de inicio rápido: Ejecuta hooks antes y después de la implementación.
Obtén más información sobre Skaffold.