♾️ 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:
- ajouter un fichier
.gitlab-ci.ymlen passant par le menuBuild > Pipeline editor- L'avantage d'utiliser l'éditeur est qu'il valide en live la syntaxe du fichier
.gitlab-ci.yml
- L'avantage d'utiliser l'éditeur est qu'il valide en live la syntaxe du fichier
- au sein de ce fichier:
- aller dans le menu
Build > Pipelineset 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:
- remplacer
Devfest Lille 2024 🍺par une variable définie au niveau du projet via le menuSettings > CI/CD > Variableset modifier sa valeur avec une autre phrase, par exempleBienvenue chez les ch'tis 2024 🍟 - 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
- commiter le fichier sur la branche
maindirectement - retourner dans le menu
Build > Pipelineset 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é :
🪜 Plusieurs stages
Il est possible au sein de la CI:
- d'avoir plusieurs stages
- 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:
- ajouter un nouveau stage
🎨_ascii-art -
ajouter 3 jobs en lien avec ce stage:
🐮_meuh: en utilisant une imageubuntu, installer l'outilcowsayavant 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/cowsaydans le job - 🐒 ou tout simplement en utilisant ce snippet
- 💡 On installe cowsay comme un package linux classique :
🐴_my-little-poney: en utilisant l'imagempepping/ponysayde l'outil ponysay, afficher un poney dans le log- 🐒 ou tout simplement en utilisant ce snippet
🦖_jurassic-park: en utilisant l'imagepython, 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
- pour installer un package en python :
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:
🐮_meuhne doit pas attendre que le job🌍_hello-worlds'exécute🦖_jurassic-parkdoit attendre que🐮_meuhet🌍_hello-worldsoient 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:
- créer une issue
📏 Set up rules - créer une MR et une branche pour cette issue
- sur la branche nouvellement créée, modifier le fichier
.gitlab-ci.ymlde manière à ce que le job🐴_my-little-poneyne s'exécute que sur la branchemain -
commiter sur la branche
Success
Le pipeline s'exécute correctement 🎉 et le job 🐴_my-little-poney ne s'exécute pas ✋
-
via la MR, merger la branche sur
main -
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 🤡