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.

  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"

 

Aller plus loin ?

 

Ajouter un commentaire

Ne sera pas publié

CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...