♾️ 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.yml
en 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 > 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
:
- remplacer
Devfest Lille 2024 🍺
par une variable définie au niveau du projet via le menuSettings > CI/CD > Variables
et 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
main
directement - 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é :
🪜 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'outilcowsay
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
- 💡 On installe cowsay comme un package linux classique :
🐴_my-little-poney
: en utilisant l'imagempepping/ponysay
de 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:
🐮_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:
- 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.yml
de manière à ce que le job🐴_my-little-poney
ne 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 🤡