Aller au contenu principal

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 .prod se déclenchent sur un tag de la forme x.y.z (x, y et z étant des nombres entiers).
  • Les jobs qui étendent .preprod se déclenchent sur un push sur la branche de préproduction : preprod par défaut, ou celle que désigne PREPROD_BRANCH.

Désactiver un environnement ou une sauvegarde​

VariableEffet
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.