0% ont trouvé ce document utile (0 vote)
3 vues48 pages

Optimisation des Workflows GitLab CI/CD

Le document présente les workflows associés à Git, en se concentrant sur GitLab Flow, les environnements statiques et dynamiques, ainsi que l'utilisation de règles pour automatiser les déploiements. Il décrit les bonnes pratiques pour optimiser les pipelines CI/CD et les améliorations possibles pour la gestion des environnements. Enfin, il souligne l'importance de suivre un workflow standardisé pour faciliter le développement collaboratif et le suivi des modifications.

Transféré par

mariam.yammoun
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues48 pages

Optimisation des Workflows GitLab CI/CD

Le document présente les workflows associés à Git, en se concentrant sur GitLab Flow, les environnements statiques et dynamiques, ainsi que l'utilisation de règles pour automatiser les déploiements. Il décrit les bonnes pratiques pour optimiser les pipelines CI/CD et les améliorations possibles pour la gestion des environnements. Enfin, il souligne l'importance de suivre un workflow standardisé pour faciliter le développement collaboratif et le suivi des modifications.

Transféré par

mariam.yammoun
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Workflows Static env rules Dynamic env Améliorations

GitLab Flow
Pipelines avancés
F. Michel
Workflows Static env rules Dynamic env Améliorations

Plan

1 Les principaux workflows associés à Git

2 Environnements statiques

3 Rules

4 Environnements dynamiques

5 Amélioration du pipeline

2
Workflows Static env rules Dynamic env Améliorations

Plan

1 Les principaux workflows associés à Git

2 Environnements statiques

3 Rules

4 Environnements dynamiques

5 Amélioration du pipeline

3
Workflows Static env rules Dynamic env Améliorations

Nécessité d’adopter un workflow

Pour l’instant nos pipelines ne prennent pas en compte les


possibilités offertes par Git, à savoir le mécanisme de branches.

L’idée est d’organiser le flux du développement en respectant un


processus standardisé pour la création des features, releases, fixes,
etc. et d’organiser le CI/CD en conséquence.

Principes généraux d’un workflow basé sur Git


Permettre un travail collectif efficace
Suivre les modifications apportées au code source simplement
Introduire des points de relecture avant validation (merge requests)
Distinguer pré-production vs. production
Automatiser le déploiement et la création de releases, en fonction des
branches

4
Workflows Static env rules Dynamic env Améliorations

GitFlow

Basé sur 2 branches principales : master et develop


les branches de fonctionnalités sont créées à partir develop
puis fusionnées dans develop, une fois testées et validées
develop est fusionnée dans master lorsqu’on souhaite créer une release
les versions, commits tagués, sont créées sur master

5
Workflows Static env rules Dynamic env Améliorations

GitHub Flow

Basé sur une seule branche principale (e.g. master)


les branches de fonctionnalités sont créées à partir de master
puis fusionnées dans master, une fois testées et validées
les versions, commits tagués, sont créées sur master

6
Workflows Static env rules Dynamic env Améliorations

GitLab Flow
Une variante de GitFlow qui ne fixe pas le nom et le nombre de
branches pour la pré/production : pas de branche develop GitLab Flow

Il en existe deux variantes :


Avec des branches d’environnements : environment branches
Deux branches principales : main et production
les branches de fonctionnalités sont créées à partir de main
puis testées/déployées dans autant de branches d’environnements
(pré-production) que nécessaires : tests, acceptation, . . .
puis fusionnées dans la branche main, puis dans la branche production

Avec des branches releases


Idem mais avec une branche principale et des branches de version
(long terme)
⇒ convient lorsqu’on produit du logiciel téléchargeable

7
Workflows Static env rules Dynamic env Améliorations

GitLab Flow / Principes de mises en œuvre


Bonnes pratiques GitLab Flow best practices

1 Toujours utiliser des branches annexes pour développer


2 Effectuer tous les tests pour chaque commit : un push déclenche un
pipeline
3 Effectuer une code review pour chaque merge request
4 Le déploiement est automatisé en fonction des branches, e.g.
production
5 Les tags sont créés par les développeurs, pas par le CI
6 Les releases sont basées sur les tags : une release par tag
7 Éviter le rebase lors de push, pour un suivi clair de l’historique
8 Les développeurs partent de main et ciblent main pour chaque nouvelle
feature
9 Fixer les bugs dans main, puis dans les branches de releases
(cherry-pick)
10 Les messages de commit doivent dire explicitement pourquoi il a été
réalisé, pas seulement comment How to Write a Git Commit Message
8
Workflows Static env rules Dynamic env Améliorations

Plan

1 Les principaux workflows associés à Git

2 Environnements statiques

3 Rules

4 Environnements dynamiques

5 Amélioration du pipeline

9
Workflows Static env rules Dynamic env Améliorations

Environments

GitLab permet de définir des environnements Environments


Ils permettent de spécifier le contexte dans lequel un job
(déploiement/tests) s’exécute et de suivre facilement le résultat des
opérations

Par exemple pour le déploiement, on peut créer plusieurs


environnements :
staging : pré-production
production : version active
créés de façon dynamique et unique pour chaque pipeline, par ex. pour
tester une feature

10
Workflows Static env rules Dynamic env Améliorations

Création d’un environnement statique

Prérequis depuis l’UI de GitLab

11
Workflows Static env rules Dynamic env Améliorations

Conventions pour le nommage des


environnements

12
Workflows Static env rules Dynamic env Améliorations

Utilisation des environnements

13
Workflows Static env rules Dynamic env Améliorations

Visualisation des activités par


environnement

14
Workflows Static env rules Dynamic env Améliorations

Résultats du déploiement

Open permet d’aller directement sur l’URL

Exemple sur [Link] michel/cicd/staging/

15
Workflows Static env rules Dynamic env Améliorations

Plan

1 Les principaux workflows associés à Git

2 Environnements statiques

3 Rules

4 Environnements dynamiques

5 Amélioration du pipeline

16
Workflows Static env rules Dynamic env Améliorations

Mot-clé rules

Il permet de spécifier quand les jobs doivent être exécutés rules

Certains jobs ne doivent pas être exécutés tout le temps


deploy-production doit être exécuté uniquement pour un tag sur la
branche production
deploy-staging uniquement pour main

17
Workflows Static env rules Dynamic env Améliorations

Exemples d’utilisation 1

18
Workflows Static env rules Dynamic env Améliorations

Exemples d’utilisation 2

19
Workflows Static env rules Dynamic env Améliorations

Exemples d’utilisation 3

20
Workflows Static env rules Dynamic env Améliorations

Utilisation classiques de variables


prédéfinies

21
Workflows Static env rules Dynamic env Améliorations

Utilisation classiques de variables


prédéfinies

22
Workflows Static env rules Dynamic env Améliorations

Réutilisation de règles

Il est possible de réutiliser des règles afin de factoriser le code et


d’améliorer sa lisibilité

23
Workflows Static env rules Dynamic env Améliorations

Application sur notre pipeline

On modifie le pipeline pour s’aligner sur un GitLab Flow


(environment)

24
Workflows Static env rules Dynamic env Améliorations

Les jobs sont maintenant filtrés en fonction


du contexte
Les commits sur la branche feature ne déclenchent plus les
déploiements :

25
Workflows Static env rules Dynamic env Améliorations

Création d’une merge request sur main

26
Workflows Static env rules Dynamic env Améliorations

Déclenchement du déploiement sur staging

27
Workflows Static env rules Dynamic env Améliorations

Exécution du pipeline sur la branche main

28
Workflows Static env rules Dynamic env Améliorations

Fin du merge de la merge request ⇒


pré-prod OK

29
Workflows Static env rules Dynamic env Améliorations

Mise en production
Il faut maintenant faire une merge request de main vers production

30
Workflows Static env rules Dynamic env Améliorations

Mais on a une petite erreur dans le job. . .


Le bloc rules ne pouvait pas être déclenché par la création d’un tag
Une fois corrigée dans une branche feature, on recommence les MR,
puis la création d’un tag sur production déclenche bien le pipeline

31
Workflows Static env rules Dynamic env Améliorations

Déclencher un job manuellement

Il est possible de définir qu’un job est uniquement déclenché


manuellement, depuis l’UI de GitLab avec le mot-clé when dans le
bloc rules

Par exemple pour déclencher le déploiement en production au


moment le plus propice, et pas automatiquement en fin de pipeline
(les jobs précédents peuvent être longs)

32
Workflows Static env rules Dynamic env Améliorations

Déclencher un job manuellement

Le déploiement n’est plus automatique :

33
Workflows Static env rules Dynamic env Améliorations

Plan

1 Les principaux workflows associés à Git

2 Environnements statiques

3 Rules

4 Environnements dynamiques

5 Amélioration du pipeline

34
Workflows Static env rules Dynamic env Améliorations

Environnements dynamiques
Il est possible de créer des environnements éphémères
dynamiquement, e.g. pour tester le résultat d’une feature avant un
merge.

On a un squelette proposé dans la section environment de GitLab,


avec le bouton Enable Review Apps :

35
Workflows Static env rules Dynamic env Améliorations

Dans notre pipeline


On ajoute un job deploy-review qui sera déclenché par une
merge request :

36
Workflows Static env rules Dynamic env Améliorations

Création de la merge request


Elle déclenche bien le job, mais il reste quelque chose à faire. . .

37
Workflows Static env rules Dynamic env Améliorations

Ajout d’une règle au job build


Pour que notre job deploy-review fonctionne, il a besoin de
l’artefact produit par le job build : il faut qu’il soit lancé !
⇒ On utilise pour cela la règle when: always

38
Workflows Static env rules Dynamic env Améliorations

Nouveau résultat pour la merge request

Les deux jobs ont bien été lancés

39
Workflows Static env rules Dynamic env Améliorations

Stopper et nettoyer un environnement


dynamique
Une fois la MR validée ou fermée, l’environnement peut être stoppé,
puis effacé. Stop an environment

40
Workflows Static env rules Dynamic env Améliorations

Ajout du job stop_review dans le pipeline


Il consiste dans un simple nettoyage du répertoire correspondant

41
Workflows Static env rules Dynamic env Améliorations

Apparition du job stop_review dans la MR

42
Workflows Static env rules Dynamic env Améliorations

Déclenchement du job stop_review


Il sera déclenché manuellement : par (1) merge/close de la MR ou (2)
un clic sur le job.

Exemple avec un close de la MR

43
Workflows Static env rules Dynamic env Améliorations

Plan

1 Les principaux workflows associés à Git

2 Environnements statiques

3 Rules

4 Environnements dynamiques

5 Amélioration du pipeline

44
Workflows Static env rules Dynamic env Améliorations

Beaucoup de choses sont à améliorer

45
Workflows Static env rules Dynamic env Améliorations

Beaucoup de choses sont à améliorer

Défauts potentiels
1 Il y a trop de lignes semblables
2 Le numéro de version ne devrait pas être toujours identique
3 PRODUCTION_URL / STAGING_URL. . . ne devraient pas être là

Améliorations possibles
1 Solutions pour la factorisation
Utiliser le mot-clé include pour factoriser include

Utiliser un moteur de production comme Gradle


Chercher ou créer une image docker adaptée aux besoins de déploiement
2 Utiliser le contexte pour nommer la version : feature / pré-prod / tags
3 Utiliser des variables définies dans l’UI de GitLab

46
Workflows Static env rules Dynamic env Améliorations

Ce que nous n’avons pas vu

L’utilisation du mot-clé workflow pour définir le comportement du


pipeline en fonction du contexte workflow

47
Workflows Static env rules Dynamic env Améliorations

Conclusion

Nécessité de suivre un workflow


⇒ Le développement doit suivre un workflow
⇒ Le GitLab flow existe en deux versions : environnement et releases
⇒ Les environnements de GitLab permettent de simplifier le suivi du
workflow

Les rules permettent d’exécuter les jobs en fonction du workflow


L’exécution des jobs est en fonction du contexte : feature / pré-prod /
tags
On utilise pour ce la les variables prédéfinies, e.g. CI_COMMI_TAG

48

Vous aimerez peut-être aussi