Introduction Pipeline Runner Keywords Variables Deploy
CI / CD pipeline avec GitLab
F. M ICHEL
Introduction Pipeline Runner Keywords Variables Deploy
Plan
1 GitLab vs. Dev(Sec)Ops
2 GitLab pipeline
3 Configuration de l’environnement du pipeline
4 Keywords
5 Variables
6 Deploy ; un exemple simple
2
Introduction Pipeline Runner Keywords Variables Deploy
Plan
1 GitLab vs. Dev(Sec)Ops
2 GitLab pipeline
3 Configuration de l’environnement du pipeline
4 Keywords
5 Variables
6 Deploy ; un exemple simple
3
Introduction Pipeline Runner Keywords Variables Deploy
Le Dev(Sec)Ops
4
Introduction Pipeline Runner Keywords Variables Deploy
Le Dev(Sec)Ops
5
Introduction Pipeline Runner Keywords Variables Deploy
Principes et difficultés liés au DevOps
Démarche DevOps ⇒ création d’une DevOps tool chain pour
automatiser au maximum chaque étape, ainsi que le processus
englobant
Problème : The DevOps toolchain tax
nécessite de connaître, manipuler et intégrer de nombreux outils
⇒ induit des coûts financiers et temporels importants :
achats des services
apprentissage sur les outils
intégration des outils
administration des outils
nécessite de passer régulièrement d’un outil à un autre
⇒ induit des risques liés à la sécurité
6
Introduction Pipeline Runner Keywords Variables Deploy
GitLab pour le Dev(Sec)Ops
7
Introduction Pipeline Runner Keywords Variables Deploy
GitLab CI/CD worflow focus
[Building → Testing → Releasing] ⇒ GitLab pipeline 8
Introduction Pipeline Runner Keywords Variables Deploy
GitLab / GitLab Inc. / [Link]
GitLab
créé en 2011 par Dmytro Zaporozhets et Sytse Sijbrandij
initialement : open-source code-sharing platform basée sur Git
GitLab Inc.
Créée en 2014 : développement de GitLab et services associés
[Link] : instance gérée par GitLab Inc.
services associés proposés sur le modèle freemium
Clients : AIRBUS, Nvidia, . . .
Instance de GitLab à l’IUT
9
Introduction Pipeline Runner Keywords Variables Deploy
Plan
1 GitLab vs. Dev(Sec)Ops
2 GitLab pipeline
3 Configuration de l’environnement du pipeline
4 Keywords
5 Variables
6 Deploy ; un exemple simple
10
Introduction Pipeline Runner Keywords Variables Deploy
GitLab pipeline : principe et prérequis
Un GitLab pipeline est un script définissant différentes tâches
liées au CI/CD et leur enchaînement
Besoins
Un projet hébergé par une instance de GitLab !
Être owner ou maintainer sur le projet
Au moins un GitLab runner enregistré sur l’instance GitLab
pour exécuter les tâches du pipeline
11
Introduction Pipeline Runner Keywords Variables Deploy
Application exécutant des tâches GitLab CI sur une
plateforme cible
installée indépendamment sur une machine cible
des runners sont disponibles en mode SaaS sur [Link]
peut être spécifique à un projet ou partagée
entièrement configurable : OS, temps maximum, variables
d’environnement, etc.
la configuration peut être créée via l’interface de GitLab
plus d’information
12
Introduction Pipeline Runner Keywords Variables Deploy
Le fichier de script .[Link]
À placer à la racine du projet. Il est écrit avec le langage YAML
Il définit
le contenu et l’ordre des tâches (job) à exécuter par le runner
les actions à entreprendre suivant certaines conditions
13
Introduction Pipeline Runner Keywords Variables Deploy
Définir un pipeline : au moins un job
On définit le nom du job, e.g. build-job, puis son script :
14
Introduction Pipeline Runner Keywords Variables Deploy
Visualisation du résultat : View pipeline
Passed or failed ?
15
Introduction Pipeline Runner Keywords Variables Deploy
16
Introduction Pipeline Runner Keywords Variables Deploy
Ajout d’un job de test
17
Introduction Pipeline Runner Keywords Variables Deploy
Le pipeline a échoué. . . sur le job test
⇒ Sans plus de code, les jobs s’exécutent en parallèle
18
Introduction Pipeline Runner Keywords Variables Deploy
Définition des stages d’un pipeline
En général, il est nécessaire de définir l’ordre dans lequel
les jobs sont réalisés
mot-clé stages : définit les étapes (stage) du pipeline et leur
ordre d’exécution
chaque job est attaché à un stage particulier
19
Introduction Pipeline Runner Keywords Variables Deploy
OK mais. . . no such file or directory !
Par défaut, rien n’est partagé entre les jobs
20
Introduction Pipeline Runner Keywords Variables Deploy
mot-clés artifacts et paths
artifacts artifacts:paths
spécifient les fichiers sauvegardés pour un job réussi
(défaut) → archivés sur le GitLab
⇒ liste de fichiers et dossiers définie par paths
artifacts créés ⇒ téléchargés par les jobs suivants (défaut)
les Wildcards peuvent être utilisés pour définir les paths
Fichiers accessibles dans l’UI de GitLab (Build → Artifacts)
21
Introduction Pipeline Runner Keywords Variables Deploy
mot-clés artifacts et paths
22
Introduction Pipeline Runner Keywords Variables Deploy
Parallélisme des jobs d’un stage
23
Introduction Pipeline Runner Keywords Variables Deploy
Production d’un package, i.e. release
24
Introduction Pipeline Runner Keywords Variables Deploy
Production d’un package, i.e. release
25
Introduction Pipeline Runner Keywords Variables Deploy
Configuration de stages par défaut
Par défaut, stages est défini avec un ordre et des noms de
stage prédéfinis
Définition par défaut de stages
.pre → build → test → deploy → .post
par défaut, un job est associé au stage test
26
Introduction Pipeline Runner Keywords Variables Deploy
Plan
1 GitLab vs. Dev(Sec)Ops
2 GitLab pipeline
3 Configuration de l’environnement du pipeline
4 Keywords
5 Variables
6 Deploy ; un exemple simple
27
Introduction Pipeline Runner Keywords Variables Deploy
Un peu de Java !
28
Introduction Pipeline Runner Keywords Variables Deploy
A propos des GitLab runners
Environnement d’un GitLab runner ?
Un GitLab runner peut être installé sur n’importe quel OS
Il réalise les jobs via un Executor
Par défaut, l’Executor est le shell de l’OS : Shell Executor
Pour être fiable, un pipeline ne doit pas dépendre d’un
environnement d’exécution
Solution : configurer le runner pour qu’il utilise un docker
container
⇒ permet de choisir l’image docker où sera exécuté le pipeline,
ou même un job
rappel : un conteneur Docker est basé sur une docker image
plus d’information
29
Introduction Pipeline Runner Keywords Variables Deploy
Sélectionner l’image docker
Comment choisir ? images hébergées sur DockerHub
Une image docker contient un certain nombre de programmes
mais pas tous !
⇒ nécessite d’utiliser une image contenant les dépendances
nécessaires pour les jobs, e.g. Java 17
il sera aussi possible d’installer d’autres programmes au
démarrage de l’image, avant les jobs, e.g. avec apt-get
Importance de prendre une version avec un tag
certaines images ont un nom générique : eclipse-temurin
(OpenJDK)
elle fait référence à la dernière version : elle va donc évoluer
⇒ mieux vaut choisir une version précise et s’y tenir :
eclipse-temurin:11-jdk-alpine image eclipse-temurin
30
Introduction Pipeline Runner Keywords Variables Deploy
En pratique
31
Introduction Pipeline Runner Keywords Variables Deploy
Plan
1 GitLab vs. Dev(Sec)Ops
2 GitLab pipeline
3 Configuration de l’environnement du pipeline
4 Keywords
5 Variables
6 Deploy ; un exemple simple
32
Introduction Pipeline Runner Keywords Variables Deploy
.[Link] keywords
Global keywords configure le pipeline dans son ensemble
plus d’information
33
Introduction Pipeline Runner Keywords Variables Deploy
Jobs keywords
34
Introduction Pipeline Runner Keywords Variables Deploy
Jobs keywords
35
Introduction Pipeline Runner Keywords Variables Deploy
Plan
1 GitLab vs. Dev(Sec)Ops
2 GitLab pipeline
3 Configuration de l’environnement du pipeline
4 Keywords
5 Variables
6 Deploy ; un exemple simple
36
Introduction Pipeline Runner Keywords Variables Deploy
GitLab CI/CD variables documentation
Les variables CI/CD sont un type de variable d’environnement.
Elles sont accéder avec le signe $ ⇒ $CI_JOB_NAME
cas d’utilisation
contrôler le comportement des jobs dans un pipeline
stocker des valeurs utilisées à différents endroits du pipeline
éviter de coder en dur des valeurs dans le .[Link]
Il existe de nombreuses variables prédéfinies
Predefined CI/CD variables
37
Introduction Pipeline Runner Keywords Variables Deploy
Définir de nouvelles variables avec le
mot-clé variables
Elles peuvent être locales à un job ou partagées par tout le
pipeline :
38
Introduction Pipeline Runner Keywords Variables Deploy
Ignorer les variables globales localement
39
Introduction Pipeline Runner Keywords Variables Deploy
Définir des variables dans l’UI de GitLab
La valeur de certaines variables ne doit pas être codée dans le
fichier : mots de passe, token, etc. ⇒ on les définit directement
dans GitLab. Elles ne sont visibles qu’aux rôles maintainer+
40
Introduction Pipeline Runner Keywords Variables Deploy
Définir des variables dans l’UI de GitLab
Mask variable : valeur cachée dans la sortie du job ⇒
41
Introduction Pipeline Runner Keywords Variables Deploy
Attention à la sécurité des variables
42
Introduction Pipeline Runner Keywords Variables Deploy
Variable référençant des fichiers
Dans l’UI, il est possible de définir des variables qui sont des
fichiers, e.g. une clé SSH
Pour finir sur les variables : Where variables can be used
43
Introduction Pipeline Runner Keywords Variables Deploy
Plan
1 GitLab vs. Dev(Sec)Ops
2 GitLab pipeline
3 Configuration de l’environnement du pipeline
4 Keywords
5 Variables
6 Deploy ; un exemple simple
44
Introduction Pipeline Runner Keywords Variables Deploy
Exemple de déploiement
On a tout ce qu’il faut pour un premier déploiement : une
simple mise à disposition de l’archive sur le net
45
Introduction Pipeline Runner Keywords Variables Deploy
Exemple de déploiement
46
Introduction Pipeline Runner Keywords Variables Deploy
Conclusion
À connaître
stages : définit les étapes du pipeline de CI/CD
stage : définit le nom d’une étape
job : tâche associée à un stage
artifacts : fichiers et dossiers produits par un job
GitLab runner : application exécutant les jobs
variables : permet une programmation avancée du pipeline
Bonnes pratiques
utiliser les stages par défaut : build, test, deploy
données sensibles ⇒ définition de variables/fichiers via l’UI
utiliser des images précises pour les runners
Ce cours est largement inspiré de la documentation fournie par GitLab Get started with GitLab CI/CD
47