Gitlab CI - Migrer depuis les only / exept vers les rules

Posté le Lundi 18 mai 2020 - 16:50
Dernière mise à jour le Mardi 19 mai 2020 - 09:48

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.

  1. only:
  2. - master

Devient :

  1. rules:
  2.   - if: $CI_COMMIT_BRANCH == "master"

 

Exécuter un job uniquement lors sur un push sur master en excluant les pipelines planifiées

  1. only:
  2. - master
  3.   except:
  4. - schedules
  5.  

Devient :

  1. rules:
  2.   - 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

  1. only:
  2. - preprod
  3.   except:
  4. - schedules

Devient :

  1. rules:
  2.   - 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

  1. only:
  2. - tags
  3.   except:
  4. - schedules

Devient :

  1. rules:
  2.   - 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/

  1. only:
  2.   refs:
  3. - master
  4.   changes:
  5. - web/themes/mon_theme/src/assets/css/**/*.scss
  6. - web/themes/mon_theme/src/assets/js/**/*.js
  7. - web/themes/mon_theme/src/assets/img/**/*.png
  8. - web/themes/mon_theme/src/assets/img/**/*.svg
  9.   except:
  10.   refs:
  11. - schedules

Devient :

  1. rules:
  2.   - if: $CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE != "schedule"
  3.   changes:
  4. - web/themes/mon_theme/src/assets/css/**/*.scss
  5. - web/themes/mon_theme/src/assets/js/**/*.js
  6. - web/themes/mon_theme/src/assets/img/**/*.png
  7. - 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é.

  1. rules:
  2.   - if: $CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE != "schedule"
  3.   changes:
  4. - web/themes/mon_theme/src/assets/css/**/*.scss
  5. - web/themes/mon_theme/src/assets/js/**/*.js
  6. - web/themes/mon_theme/src/assets/img/**/*.png
  7. - web/themes/mon_theme/src/assets/img/**/*.svg
  8.   when: always
  9.   - if: $CI_COMMIT_MESSAGE =~ /ci-assets/
  10.   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

  1. only:
  2. - schedules

Devient :

  1. rules:
  2.   - if: $CI_PIPELINE_SOURCE == "schedule"

 

Aller plus loin ?

 

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...