Dans la version 13 de Gitlab CI qui sortira le 22/05/2020, les instructions only / exept ne fonctionneront plus dans nos fichiers .gitlab-ci.yml.
Ces instructions permettaient d’exécuter un job en fonction d'une branche / tag / autre qui déclanchait la CI.
Je suis en train de préparer la montée de version et remplacer donc mes différents cas d'utilisation que je vais lister ci-dessous. Tous les exemples présentés sont des cas réels d'utilisation que j'ai testé. Si vous rencontrez un soucis ou que vous cherchez à migrer un cas non présent, n'hésitez-pas à en parler en commentaire.
Voici donc quelques exemples de règles avec l'ancienne syntaxe, puis la nouvelle.
Exécuter un job uniquement lors sur un push sur master
À noter que ce job, sera aussi executé sur vous avez paramétré des pipelines planifiées (scheduled) voir l'exemple suivant pour les exclure.
only:
- master
Devient :
rules:
- if: $CI_COMMIT_BRANCH == "master"
Exécuter un job uniquement lors sur un push sur master en excluant les pipelines planifiées
only:
- master
except:
- schedules
Devient :
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE != "schedule"
Exécuter un job uniquement lors sur un push sur la branche preprod en excluant les pipelines planifiées
only:
- preprod
except:
- schedules
Devient :
rules:
- if: $CI_COMMIT_BRANCH == "preprod" && $CI_PIPELINE_SOURCE != "schedule"
Exécuter un job uniquement lors de la création d'un tag en excluant les pipelines planifiées
only:
- tags
except:
- schedules
Devient :
rules:
- if: $CI_COMMIT_TAG != null && $CI_PIPELINE_SOURCE != "schedule"
Exécuter un job quand certains fichiers sont modifiés
Petit truc pratique, permet de ne déclencher une tache que quand certains fichiers sont changés, pour la génération d'assets par exemple.
Traduction de la règle : ne s'execute qu'au push sur master et quand des fichiers ET que des fichiers de type scss, js, png ou svg sont changés dans le dossier web/themes/mon_theme/src/assets/
only:
refs:
- master
changes:
- web/themes/mon_theme/src/assets/css/**/*.scss
- web/themes/mon_theme/src/assets/js/**/*.js
- web/themes/mon_theme/src/assets/img/**/*.png
- web/themes/mon_theme/src/assets/img/**/*.svg
except:
refs:
- schedules
Devient :
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE != "schedule"
changes:
- web/themes/mon_theme/src/assets/css/**/*.scss
- web/themes/mon_theme/src/assets/js/**/*.js
- web/themes/mon_theme/src/assets/img/**/*.png
- web/themes/mon_theme/src/assets/img/**/*.svg
Exécuter un job quand certains fichiers sont modifiés ou qu'un mot clé est présent dans le message de commit
Ici uniquement la nouvelle syntaxe, car c'est quelque chose que je viens de tester.
Comme pour l'exemple précédent, le but est ici de déclencher les taches gulp uniquement quand c'est nécessaire, c'est à dire quand un fichier est modifié. Mais aussi de pouvoir déclencher le job via un mot clé dans le message de commit.
Ici, si le message de commit le plus récent contient « ci-assets » alors le job sera lancé, même si aucun fichier n'est modifié.
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE != "schedule"
changes:
- web/themes/mon_theme/src/assets/css/**/*.scss
- web/themes/mon_theme/src/assets/js/**/*.js
- web/themes/mon_theme/src/assets/img/**/*.png
- web/themes/mon_theme/src/assets/img/**/*.svg
when: always
- if: $CI_COMMIT_MESSAGE =~ /ci-assets/
when: always
Exécuter un job lors des pipelines planifiées
fonctionnalité de gitlab qui permet de lancer des taches de maintenance ou de backup
only:
- schedules
Devient :
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
Ajouter un commentaire