¿Cómo ejecutar despliegues (deployments) manuales?
Recapitulando nuestro pipeline actual podemos ver que todas las partes de la sección de CD suceden de forma automática. Sin embargo si es requerida realizar una intervención manual para verificar que el sistema funcione antes de pasar a la siguiente fase, es necesario realizar algunos cambios para efectuar los deployments de forma manual.
Vamos al bloque de producción y agregamos el valor when: manual
para indicar que este despliegue se debe realizar de manera manual.
deploy production:
stage: deploy production
environment:
name: production
url: https://$PRODUCTION_DOMAIN
when: manual
script:
- npm i -g surge
- surge --project ./public --domain $PRODUCTION_DOMAIN
Empujamos los cambios y veremos como nuestra pipeline se despliega hasta completar staging, pero el entorno de producción no se ejecutará. Sin embargo si damos clic sobre el botón Play (triángulo) comenzará dicho proceso. A esto es lo que conocemos como un deployment manual (despliegue manual) dentro de production.
Un problema que tenemos en este momento es que si bien la ejecución de production se encuentra detenida y esperando a su ejecución manual, el siguiente bloque test production se ejecuta automáticamente. Para condicionar la ejecución de este siguiente stage utilizamos la opción allow_failure: false
dentro de production.
deploy production:
...
when: manual
allow_failure: false
...
Al empujar los cambios podremos ver que tanto el entorno production como test production no se ejecutan automáticamente, sino que requieren de la intervención manual del usuario.
Los deployments manuales en GitLab permiten tener un control mas riguroso de que se libera a producción y/u otro ambiente que requiera de una revisión manual. Este proceso es muy común en una compañía en donde se construye software y hay un grupo de Ingenieros de calidad revisando que el software cumpla con los requerimientos solicitados. Otra finalidad de este ambiente es poder mostrar al cliente final las nuevas implementaciones del producto previo a que este salga a producción.