Skip to content

♾️ CI

Si vous n'avez pas fait les parties précédentes (issues et/ou Pages)

Créer un nouveau projet simple aka "Blank project"

NB: Gitlab fournit une aide pour initialiser ce type de fichier via Set up CI/CD.

Dans le cadre de ce workshop, nous allons créer le fichier from scratch pour bien comprendre les différents éléments 💪

🐥 Mon premier job

Toujours dans le repository:

  1. ajouter un fichier .gitlab-ci.yml en passant par le menu Build > Pipeline editor
    • L'avantage d'utiliser l'éditeur est qu'il valide en live la syntaxe du fichier .gitlab-ci.yml
  2. au sein de ce fichier:
    • supprimer les jobs/stages existants
    • ajouter un stage 👋_hello
    • ajouter un job 🌍_hello-world dans le stage 👋_hello
      • ce job doit afficher 👋 Hello Devfest Lille 2024 🍺 dans les logs
    • commiter le fichier sur la branche main directement
  3. aller dans le menu Build > Pipelines et constater qu'un pipeline s'est déclenché
    • les logs sont accessibles en cliquant sur le nom du job dans le pipeline

Success

Le pipeline doit s'exécuter avec succès 🎉

🧮 Utilisation des variables

Pour certaines données sensibles, ou dynamiques en fonction de la branche sur laquelle le pipeline va s'exécuter, il est nécessaire de variabiliser certaines données.

Ensuite, toujours dans le fichier gitlab-ci.yml depuis le menu Build > Pipeline editor:

  1. remplacer Devfest Lille 2024 🍺 par une variable définie au niveau du projet via le menu Settings > CI/CD > Variables et modifier sa valeur avec une autre phrase, par exemple Bienvenue chez les ch'tis 2024 🍟
  2. modifier également le message pour qu'il affiche le nom du projet et la branche sur laquelle s'exécute le pipeline grâce aux variables pré-définies
  3. commiter le fichier sur la branche main directement
  4. retourner dans le menu Build > Pipelines et constater qu'un pipeline s'est de nouveau déclenché

Success

  • Le pipeline doit s'exécuter avec succès 🎉
  • Dans le log du job doit être affiché :
Bienvenue chez les ch'tis 2024 🍟 from xxx_project on branch main

🪜 Plusieurs stages

Il est possible au sein de la CI:

  1. d'avoir plusieurs stages
  2. de définir l'image docker utilisée pour exécuter le job. Cela peut être une image officielle du hub docker ou une image custom

Dans le fichier .gitlab-ci.yml:

  1. ajouter un nouveau stage 🎨_ascii-art
  2. ajouter 3 jobs en lien avec ce stage:

    1. 🐮_meuh : en utilisant une image ubuntu, installer l'outil cowsay avant l'exécution du script du job (💡 astuce) et afficher une vache dans le log du job
      • 💡 On installe cowsay comme un package linux classique : apt-get update && apt-get install -y cowsay
      • 💡 Cowsay s'intalle dans /usr/games, il faut donc utiliser /usr/games/cowsay dans le job
      • 🐒 ou tout simplement en utilisant ce snippet
    2. 🐴_my-little-poney : en utilisant l'image mpepping/ponysay de l'outil ponysay, afficher un poney dans le log
      • 🐒 ou tout simplement en utilisant ce snippet
    3. 🦖_jurassic-park : en utilisant l'image python, installer dinosay et afficher un dinosaure dans le log
      • pour installer un package en python : pip install xxx
      • 🐒 ou tout simplement en utilisant ce snippet

Success

Le pipeline et les 4 jobs doivent s'exécuter avec succès 🎉

On peut voir que dans cet exemple, les jobs du stage 🎨_ascii-art attendent que le stage 👋_hello soit terminé, puis ils s'exécutent en parallèle sans ordre précis.

Dans cette étape, nous allons forcer l'ordre des jobs:

  • 🐮_meuh ne doit pas attendre que le job 🌍_hello-world s'exécute
  • 🦖_jurassic-park doit attendre que 🐮_meuh et 🌍_hello-world soient terminés

👉 astuce

On peut voir simplement les liens entre les jobs soit via l'option Jobs dependencies soit via l'onglet Needs dans la page d'exécution du pipeline.

Success

Le pipeline et les 4 jobs doivent s'exécuter avec succès et dans le bon ordre 🎉

📐 Gestion des règles

Toujours dans le même projet:

  1. créer une issue 📏 Set up rules
  2. créer une MR et une branche pour cette issue
  3. sur la branche nouvellement créée, modifier le fichier .gitlab-ci.yml de manière à ce que le job 🐴_my-little-poney ne s'exécute que sur la branche main
  4. commiter sur la branche

    Success

    Le pipeline s'exécute correctement 🎉 et le job 🐴_my-little-poney ne s'exécute pas ✋

  5. via la MR, merger la branche sur main

  6. vérifier que le pipeline s'exécute

    Success

    Le pipeline s'exécute correctement 🎉 et le job 🐴_my-little-poney s'exécute sur la branche main 🤡