Un lanzamiento de Cloud Deploy incluye fases. Una fase es una agrupación lógica y ordenada de tareas que se deben realizar en una implementación.
Cada fase incluye tareas, que son las acciones que se deben llevar a cabo en cada fase (por ejemplo, deploy
o verify
). Cada tarea puede tener cero o más ejecuciones.
Una ejecución de una tarea es una instancia de una tarea. Si el trabajo no se ha ejecutado, no habrá ninguna ejecución.
En este documento se describen las fases, los trabajos y las ejecuciones de trabajos, así como la forma de gestionarlos.
Estructura de un lanzamiento
Un lanzamiento es un recurso de Cloud Deploy que asocia una versión con un destino.
Fases
Un lanzamiento consta de una o varias fases.
En el caso de una estrategia de implementación estándar, solo hay una fase: stable
.
En una estrategia de implementación canaria, hay una fase independiente para cada porcentaje configurado. Por ejemplo, si configuras una versión canary que implementa el 25%, el 50 % y el 100%, habrá tres fases:
canary-25
canary-50
stable
Estos nombres de fase son estándar: canary-[PERCENTAGE]
para las fases de lanzamiento canary y stable
para la fase del 100 %. Sin embargo, si configuras una prueba canary personalizada automatizada o una prueba canary personalizada, puedes controlar los nombres de las fases.
Tareas y ejecuciones de tareas
Cada fase de lanzamiento incluye uno o varios trabajos.
En una implementación estándar, con la estrategia de lanzamiento, sin la verificación de la implementación habilitada, hay una fase (stable
).
En el caso de un lanzamiento Canary, habrá una fase para cada parte del Canary (por ejemplo, canary-25
, canary-50
y stable
) y, en cada fase, habrá un trabajo deploy
. Si la verificación está habilitada, también hay una tarea verify
para cada fase.
Una ejecución de una tarea es una instancia de una tarea. Por ejemplo, se ejecuta un trabajo de deploy
y, si se completa correctamente, no se vuelve a ejecutar. Si falla, se puede volver a intentar como otra ejecución de trabajo.
Saltar fases la primera vez
Algunas estrategias de implementación (por ejemplo, la canaria) reparten el tráfico entre las versiones antigua y nueva. Si es la primera vez que implementas una versión en un destino, no hay ninguna versión antigua, por lo que no podemos repartir el tráfico.
Por este motivo, cuando implementas una versión canary por primera vez, nos saltamos la fase o las fases canary y ejecutamos la fase stable
. Después, la aplicación se implementa y las futuras implementaciones canary incluirán las fases canary.
En una situación real, normalmente se ejecuta una implementación canary en la que la aplicación ya está en funcionamiento, por lo que esta fase se omitirá en raras ocasiones.
Estados de un lanzamiento
Los lanzamientos, las fases, los trabajos y las ejecuciones de trabajos tienen estados. En esta sección se describen los estados de cada uno.
Estados de lanzamiento
Una publicación tendrá uno de los siguientes estados:
APPROVAL_REJECTED
El lanzamiento requería aprobación, pero se ha rechazado.
CANCELLED
Estado final de los lanzamientos que han sido cancelados por un usuario.
CANCELLING
Un usuario ha cancelado el lanzamiento, pero la cancelación no ha terminado de procesarse.
HALTED
En una implementación paralela, si falla una o más implementaciones secundarias, pero al menos una se completa correctamente, la implementación del controlador se DETIENE si hay más fases después de la actual.
Para reanudar el lanzamiento de una versión de controlador que se ha detenido, puedes hacer lo siguiente:
Cancelar el lanzamiento del controlador
Reintentar o ignorar los trabajos fallidos de las implementaciones secundarias
IN_PROGRESS
Se está procesando una ejecución de trabajo.
FAILED
Un trabajo ha fallado y el usuario no ha elegido ignorar el fallo.
PENDING
El lanzamiento aún no ha empezado a procesarse. Este estado pasa a
IN_PROGRESS
oCANCELED
.PENDING_APPROVAL
El lanzamiento requiere aprobación, pero aún no se ha aprobado.
PENDING_RELEASE
El lanzamiento está pendiente de que se renderice la versión.
SUCCEEDED
El lanzamiento se ha completado sin errores.
Estados de las fases
Una fase puede tener uno de los siguientes estados:
PENDING
La fase está esperando a que termine otra fase del lanzamiento.
IN_PROGRESS
La fase ha comenzado.
SUCCEEDED
La fase se ha completado correctamente.
FAILED
Se ha producido un error en un trabajo de la fase y el usuario no ha elegido ignorar el error.
ABORTED
Se ha producido un error en una fase anterior.
SKIPPED
Cuando ejecutas una estrategia de despliegue, como un canario, Cloud Deploy pasa a la fase
stable
en los casos en los que aún no hay una versión en ejecución de la aplicación con la que dividir el tráfico. En este caso, el estado se define comoSKIPPED
.
Estados de la tarea
Un trabajo tendrá uno de los siguientes estados:
ABORTED
Si falla una fase, se cancelan las fases posteriores.
Si falla un trabajo y ese fallo no se ignora, se cancelan los trabajos posteriores. Por ejemplo, si una fase incluye un trabajo de implementación y un trabajo de verificación, y el trabajo de implementación falla, el trabajo de verificación se cancela.
DISABLED
Puede que algunas tareas de una fase estén inhabilitadas. Por ejemplo, las fases siempre incluyen la verificación de los trabajos, independientemente de si la verificación está habilitada o no. Si la verificación no está habilitada, el trabajo de verificación se establece en
DISABLED
.FAILED
Se ha producido un error en la ejecución de esta tarea y el usuario no ha elegido ignorar el error.
El usuario ha decidido finalizar la ejecución de la tarea.
IGNORED
Se ha producido un error en la ejecución de esta tarea y el usuario ha decidido ignorar el error.
IN_PROGRESS
Actualmente, se está ejecutando una tarea de este tipo.
PENDING
La ejecución de este trabajo está esperando a que empiece porque otra fase u otro trabajo no ha terminado.
SKIPPED
Cuando ejecutas una estrategia de despliegue, como un canario, Cloud Deploy pasa a la fase
stable
en los casos en los que aún no hay una versión en ejecución de la aplicación con la que dividir el tráfico. En este caso, el estado se define comoSKIPPED
en los trabajos de la fase o las fases omitidas.SUCCEEDED
El trabajo se ha completado correctamente y ha empezado el siguiente trabajo de la fase, o ha empezado la siguiente fase o está lista para empezar (posiblemente pendiente de la entrada del usuario) o el lanzamiento ha finalizado.
Estados de ejecución de la tarea
FAILED
La ejecución de la tarea ha fallado.
IN_PROGRESS
La ejecución del trabajo ha comenzado, pero no ha terminado.
TERMINATED
El usuario ha finalizado la ejecución del trabajo.
TERMINATING
El usuario ha finalizado la ejecución del trabajo, pero aún no ha terminado de finalizar.
SUCCEEDED
Cuando una ejecución de un trabajo finaliza correctamente, sin fallar ni ser finalizada por un usuario, se pone en estado
SUCCEEDED
, que
Gestionar el lanzamiento
Con la Google Cloud consola o el SDK de Google Cloud, puedes hacer lo siguiente con un lanzamiento de Cloud Deploy:
Si usas la implementación paralela con una estrategia de implementación canary, consulta cómo gestionar las implementaciones canary paralelas.
Avanzar un lanzamiento
En los destinos configurados para usar una estrategia de implementación que no sea "estándar", debes avanzar en la implementación de fase en fase.
Por ejemplo, si tienes un destino configurado para realizar una implementación canary sencilla con solo las fases 50% y stable
(100%), tendrías que avanzar la implementación una vez, de la fase canary-50
a la fase stable
(100%).
gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION
Donde:
ROLLOUT_NAME
es el nombre del lanzamiento actual
al que vas a pasar a la siguiente fase.
RELEASE_NAME
es el nombre de la versión a la que pertenece esta
implementación.
PIPELINE_NAME
es el nombre de la canalización de distribución que usas para gestionar la implementación de esta versión.
REGION
es el nombre de la región en la que se creó la versión, por ejemplo, us-central1
. Este campo es obligatorio.
Consulta la referencia del SDK de Google Cloud para obtener más información sobre el comando gcloud deploy rollouts advance
.
Consola
Haga clic en la canalización que aparece en la lista de canalizaciones de entrega.
La página de detalles de la canalización de entrega muestra una representación gráfica del progreso de la canalización.
En la pestaña Lanzamientos, en Detalles de la canalización de entrega, haga clic en el nombre del lanzamiento.
Se muestra la página de detalles del lanzamiento.
En este ejemplo, la implementación tiene una fase
canary-50
y una fasestable
. Tu lanzamiento puede tener más fases o fases diferentes.Haz clic en Avanzar lanzamiento.
El lanzamiento pasa a la siguiente fase.
Cancelar un lanzamiento
Puedes cancelar cualquier lanzamiento que no haya finalizado. También puedes cancelar una implementación fallida para evitar que se realicen más acciones en ella (como ignorar o volver a intentar). El lanzamiento debe tener uno de los siguientes estados:
FAILED
HALTED
IN_PROGRESS
PENDING
PENDING_APPROVAL
PENDING_RELEASE
Después de cancelar un lanzamiento, este tendrá el estado CANCELLING
hasta que se hayan completado todas las ejecuciones de tareas pendientes. Puedes finalizar
ejecuciones de trabajos pendientes que no quieras esperar. Una vez que se haya completado el lanzamientoCANCELLED
, no se podrá avanzar ni modificar.
Para cancelar un lanzamiento:
gcloud
gcloud deploy rollouts cancel ROLLOUT_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION
Donde:
ROLLOUT_NAME
es el nombre del lanzamiento actual
al que vas a pasar a la siguiente fase.
RELEASE_NAME
es el nombre de la versión a la que pertenece esta
implementación.
PIPELINE_NAME
es el nombre de la canalización de distribución que usas para gestionar la implementación de esta versión.
REGION
es el nombre de la región en la que se creó la versión, por ejemplo, us-central1
. Este campo es obligatorio.
Consulta la referencia del SDK de Google Cloud para obtener más información sobre el comando gcloud deploy rollouts cancel
.
Consola
Haga clic en la canalización que aparece en la lista de canalizaciones de entrega.
La página de detalles de la canalización de entrega muestra una representación gráfica del progreso de la canalización.
En la pestaña Lanzamientos, en Detalles de la canalización de entrega, haga clic en el nombre del lanzamiento.
Se muestra la página de detalles del lanzamiento.
En este ejemplo, la implementación tiene una fase
canary-50
y una fasestable
. Tu lanzamiento puede tener más fases o fases diferentes.Haz clic en Cancelar lanzamiento.
El lanzamiento se cancela.
Finalizar una ejecución de una tarea
Puedes finalizar un trabajo que esté en curso. Por ejemplo, puedes hacerlo si una ejecución de un trabajo parece que está tardando demasiado o no funciona como se esperaba. La ejecución de la tarea debe estar en estado IN_PROGRESS
para poder finalizarla.
gcloud
gcloud deploy job-runs terminate JOB_RUN_ID \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--rollout=ROLLOUT_NAME \
--region=REGION
Donde:
JOB_RUN_ID
es el UUID de la ejecución del trabajo que quieres terminar. Puedes encontrar el ID de ejecución del trabajo en la Google Cloud consola de Cloud Deploy, en la página de lanzamiento:
También puedes obtener el ID de las ejecuciones de trabajos con el comando gcloud deploy rollouts
describe
.
RELEASE_NAME
es el nombre de la versión a la que pertenece esta ejecución del trabajo.
PIPELINE_NAME
es el nombre de la canalización de distribución que usas para gestionar la implementación de esta versión.
ROLLOUT_NAME
es el nombre del lanzamiento al que pertenece este trabajo.
REGION
es el nombre de la región en la que se creó la versión, por ejemplo, us-central1
. Este campo es obligatorio.
Consulta la referencia del SDK de Google Cloud para obtener más información sobre el comando gcloud deploy job-runs terminate
.
Consola
Haga clic en la canalización que aparece en la lista de canalizaciones de entrega.
La página Detalles del flujo de procesamiento de entrega muestra una representación gráfica del progreso del flujo de procesamiento de entrega.
En la pestaña Lanzamientos, en Detalles de la canalización de entrega, haga clic en el nombre del lanzamiento.
Se muestra la página de detalles del lanzamiento.
En este ejemplo, la implementación tiene una fase
canary-50
y una fasestable
. Es posible que tu lanzamiento tenga más fases o fases diferentes.En Fases, haz clic en la fase que incluye la tarea cuya ejecución quieres finalizar.
En Ejecuciones de trabajo, selecciona la ejecución de trabajo específica que quieras finalizar y, a continuación, haz clic en Finalizar.
La ejecución de la tarea se termina y el estado de la tarea, tal como se muestra en la tabla Fases, es
Failure
.
Después de finalizar una ejecución de un trabajo, se considera que el trabajo ha fallado y puedes hacer lo siguiente:
- Déjalo así y no tengas en cuenta el lanzamiento fallido
- Volver a intentar la tarea
- Ignora el trabajo y continúa con el siguiente trabajo o fase de la implementación.
Ignorar una tarea
Puedes ignorar un trabajo fallido y pasar inmediatamente al siguiente trabajo de la fase. Es posible que el trabajo haya fallado por cualquier motivo, incluido que tú u otra persona haya finalizado una ejecución del trabajo.
Si falla un trabajo, también fallarán la fase y el lanzamiento. Sin embargo, si ignoras el error, tanto la fase como el lanzamiento se pueden completar y, en última instancia, pueden tener estados SUCCEEDED
.
gcloud
gcloud deploy rollouts ignore-job ROLLOUT_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--job-id=JOB_ID \
--phase-id=PHASE_ID \
--region=REGION
Donde:
ROLLOUT_NAME
es el nombre del lanzamiento al que pertenece este trabajo.
RELEASE_NAME
es el nombre de la versión actual
que incluye este trabajo.
PIPELINE_NAME
es el nombre de la canalización de distribución que usas para gestionar la implementación de esta versión.
JOB_ID
es el nombre de la tarea que se va a ignorar. Por ejemplo, DEPLOY
. Puedes encontrar el nombre del trabajo en la tabla Fases del lanzamiento en la consola de Google Cloud :
PHASE_ID
es el nombre de la fase que incluye el trabajo que estás ignorando.
REGION
es el nombre de la región en la que se creó la versión, por ejemplo, us-central1
.
Consulta la referencia del SDK de Google Cloud para obtener más información sobre el comando gcloud deploy rollouts ignore-job
.
Consola
Haga clic en la canalización que aparece en la lista de canalizaciones de entrega.
La página Detalles del flujo de procesamiento de entrega muestra una representación gráfica del progreso del flujo de procesamiento de entrega.
En la pestaña Lanzamientos, en Detalles de la canalización de entrega, haga clic en el nombre del lanzamiento.
Se muestra la página de detalles del lanzamiento.
Selecciona la tarea fallida que quieras ignorar.
Haz clic en el botón Ignorar errores.
Se ignora la ejecución de la tarea fallida y la implementación continúa como si la tarea se hubiera completado correctamente. Es decir, si hay otros trabajos en la misma fase, se ejecutan. De lo contrario, la implementación estará lista para pasar a la siguiente fase.
Reintentar una tarea fallida
Puedes volver a intentar ejecutar un trabajo que haya fallado. El trabajo puede fallar por cualquiera de los siguientes motivos:
No se ha podido completar una ejecución de un trabajo.
Por ejemplo, puede que se haya producido un error con los permisos.
Un usuario ha finalizado una ejecución de un trabajo de ese trabajo.
Si finalizas una ejecución de un trabajo, este fallará, pero podrás volver a intentarlo.
Ha fallado una prueba de verificación.
En una tarea de verificación, no se ha superado una prueba de verificación. Aunque el trabajo de verificación se ha completado correctamente, una de las pruebas de verificación ha fallado y se ha propagado al trabajo de verificación. En este caso, volverías a intentar ejecutar el trabajo como parte de la depuración de la prueba fallida en tu aplicación.
Para volver a intentar una tarea fallida, sigue estos pasos:
gcloud
gcloud deploy rollouts retry-job JOB_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--rollout=ROLLOUT_NAME \
--phase=PHASE_ID \
--region=REGION
Donde:
JOB_NAME
es el nombre del trabajo que estás
volviendo a intentar. Por ejemplo, si vuelves a intentar verificar un trabajo después de que la verificación haya fallado, sería verify
.
RELEASE_NAME
es el nombre de la versión a la que pertenece esta ejecución del trabajo.
PIPELINE_NAME
es el nombre de la canalización de distribución que usas para gestionar la implementación de esta versión.
ROLLOUT_NAME
es el nombre del lanzamiento al que pertenece este trabajo.
PHASE_ID
es el nombre de la fase de la que forma parte este trabajo. Por ejemplo, canary-50
o stable
.
REGION
es el nombre de la región en la que se creó la versión, por ejemplo, us-central1
. Este campo es obligatorio.
Consulta la referencia del SDK de Google Cloud para obtener más información sobre el comando gcloud deploy rollouts retry-job
.
Consola
Haga clic en la canalización que aparece en la lista de canalizaciones de entrega.
La página Detalles del flujo de procesamiento de entrega muestra una representación gráfica del progreso del flujo de procesamiento de entrega.
En la pestaña Lanzamientos, en Detalles de la canalización de entrega, haga clic en el nombre del lanzamiento.
Se muestra la página de detalles del lanzamiento.
En Fases y tareas, haz clic en la fase que incluye la tarea que quieres volver a intentar.
Selecciona el trabajo que quieras volver a intentar.
Haz clic en Reintentar y confirma la acción.
La ejecución de la tarea se vuelve a realizar y el estado de la tarea, tal como se muestra en la tabla Fases, es "en curso". Si hay otros trabajos en la misma fase, se ejecutan. De lo contrario, la implementación estará lista para pasar a la siguiente fase.
Siguientes pasos
Consulta más información sobre cómo funcionan las estrategias de despliegue en Cloud Deploy.
Consulta la documentación sobre la arquitectura de servicio de Cloud Deploy para obtener más información sobre cómo se ajustan los lanzamientos, las fases, los trabajos y las ejecuciones de trabajos al resto de Cloud Deploy.