Les déclencheurs
Le fichier stages-variables-extends.yml contient deux extends qui portent les règles de déclenchement des jobs :
.prod:
rules:
- if: '$ENV_PROD_DISABLED != "1" && $CI_COMMIT_TAG =~ /^\d+.\d+.\d+/'
environment:
name: prod
.preprod:
rules:
- if: $ENV_PREPROD_DISABLED != "1" && $CI_COMMIT_BRANCH == $PREPROD_BRANCH && $CI_PIPELINE_SOURCE != "schedule"
environment:
name: preprod
- Les jobs qui étendent
.prodse déclenchent sur un tag de la formex.y.z(x, y et z étant des nombres entiers). - Les jobs qui étendent
.preprodse déclenchent sur un push sur la branche de préproduction :preprodpar défaut, ou celle que désignePREPROD_BRANCH.
Désactiver un environnement ou une sauvegarde
| Variable | Effet |
|---|---|
ENV_PROD_DISABLED: "1" | aucun job de production |
ENV_PREPROD_DISABLED: "1" | aucun job de préproduction |
DISABLE_PROD_DUMP_ON_DEPLOY: "1" | pas de sauvegarde avant un déploiement en production |
DISABLE_PREPROD_DUMP_ON_DEPLOY: "1" | pas de sauvegarde avant un déploiement en préproduction |
Les jobs QA
Les jobs QA (phpcs, phpstan, phpunit) tournent sur les pushs de branche et les merge requests. Ils ne tournent jamais sur un tag ni sur une pipeline planifiée, et sont ignorés sur la branche de préproduction, sauf avec QA_ON_PREPROD: "true".
Les jobs planifiés
Les jobs du stage scheduled ne tournent que sur une pipeline planifiée ($CI_PIPELINE_SOURCE == "schedule"). Les jobs de déploiement, eux, ne tournent jamais sur une pipeline planifiée.
Variables protégées
Si les variables sensibles (SSH_PRIVATE_KEY…) sont protégées, la branche de préproduction et les tags *.*.* doivent l'être aussi (Settings / Repository). Sinon les jobs démarrent sans ces variables, et échouent à la connexion SSH.
Surcharger un job : attention aux rules
Des rules posées sur un job remplacent celles qu'il hérite de .prod ou .preprod, elles ne s'y ajoutent pas. Un job de projet qui ajoute une condition doit donc répéter celle du tag ou de la branche :
prod:mon-job:
extends:
- .prod
rules:
- if: $ENV_PROD_DISABLED != "1" && $CI_COMMIT_TAG =~ /^\d+.\d+.\d+/ && $MA_CONDITION == "1"
Autre piège : dans rules:if, une variable entre guillemets ("$PREPROD_BRANCH") est une chaîne littérale, elle n'est pas remplacée par sa valeur. Écrire $CI_COMMIT_BRANCH == $PREPROD_BRANCH.