2025-01-13 14:49:22 +00:00
|
|
|
\newpage
|
|
|
|
|
2025-01-27 16:05:57 +00:00
|
|
|
# Démarche suivie {#demarche}
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-21 09:07:12 +00:00
|
|
|
La réalisation de ce projet va plus loin que la simple mise en place d'une
|
2025-02-19 16:53:38 +00:00
|
|
|
application dans le Cloud. C'est une **nouvelle équipe**, dans un **nouvel
|
|
|
|
environnement** avec une application inconnue et **des savoirs à acquérir**.
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-21 09:07:12 +00:00
|
|
|
En pareille situation, c'est tout un **écosystème DevOps** qu'il faut mettre
|
2025-02-19 16:53:38 +00:00
|
|
|
en place. Nous allons donc avant tout parler de **méthodologie utilisées**
|
|
|
|
pour ce faire, puis des **outils utilisés** et enfin aborder le sujet de
|
|
|
|
**collaborations** avec d'autres équipes.
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-27 16:05:57 +00:00
|
|
|
## Méthodologie
|
|
|
|
|
|
|
|
### Agile
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Le choix d'une **méthodologie agile** « basique » s'est offerte à nous,
|
|
|
|
notamment par :
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* des **comptes-rendus journaliers rapides de 10mn** en respectant les points
|
|
|
|
suivants :
|
2025-01-27 16:05:57 +00:00
|
|
|
* ce que j'ai fais hier,
|
|
|
|
* ai-je rencontré un/des problème(s) qui vaille(nt) d'être cité(s),
|
|
|
|
* ce que je compte faire aujourd'hui,
|
2025-02-19 16:53:38 +00:00
|
|
|
* la **création de jalons** avec un ensemble de tâches sur une période d'une
|
|
|
|
semaine,
|
|
|
|
* des échanges réguliers en **pair-programming** sur des sujets difficiles
|
|
|
|
**via [la plateforme Slack](slack.com)**,
|
|
|
|
* et l'utilisation d'un **tableau façon Kanban** (méthode de gestion de
|
|
|
|
production en flux tendus).
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
C'est ainsi que les **jalons** ont parsemés la durée du projet en **objectifs à
|
|
|
|
atteindre**.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
### Jalons
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Les **jalons** (milestones en anglais) permettent de savoir si le projet
|
|
|
|
dérive de l'objectif attendu. Voici les jalons qui ont été utilisés :
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* Étape 1 : **préparation** - outils (configuration de gitlab, des projets, du
|
|
|
|
wiki, etc.), **cahier des charges**,
|
|
|
|
* Étape 2 (avec 3) : **CI/CD** sur le projet principal,
|
|
|
|
* Étape 3 (avec 2) : **Infrastructure** (Terraform),
|
|
|
|
* Étape 4 (avec 5) : Données (**postgreSQL**),
|
|
|
|
* Étape 5 (avec 4) : **Supervision** (observabilité, alertes),
|
|
|
|
* Étape 6 : **extras** (s'il reste du temps).
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Les jalons n'étaient pas suffisants, d'autres éléments ont dû être pris en
|
|
|
|
compte.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
### Choix de standards et normes
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Plusieurs standards/normes ont été choisies pour **rassembler plutôt que
|
|
|
|
diviser le groupe** : SemVer, Git OneFlow et Conventional commit.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
#### SemVer
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
[SemVer](https://semver.org/) ou **Semantic Versioning** est un standard
|
|
|
|
visant à codifier la manière d'écrire le numéro de version d'une application
|
|
|
|
et leur hiérarchisation (c'est à dire la façon dont on incrémente un numéro de
|
|
|
|
version).
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Respecter SemVer, c'est permettre d'utiliser des outils conçus pour cela mais
|
|
|
|
aussi et surtout **faciliter la gestion des dépendances**.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Nous ne détaillerons pas l'ensemble du standard, mais voici **quelques
|
|
|
|
exemples de versions** :
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
1.0.0
|
|
|
|
2.1.4
|
|
|
|
0.6.3-alpha
|
|
|
|
0.6.3-alpha.1
|
|
|
|
1.5.2-rc.2
|
|
|
|
```
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Cela fonctionne donc sous la forme **Majeur**.*Mineur*.`Correctif`.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
#### Git OneFlow
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
[**Git OneFlow**](
|
|
|
|
https://www.endoflineblog.com/oneflow-a-git-branching-model-and-workflow) est
|
|
|
|
un workflow Git conçu par Adam Ruka en alternative à [GitFlow](
|
|
|
|
https://nvie.com/posts/a-successful-git-branching-model/).
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Il se base principalement sur un objectif simple : avoir un arbre Git
|
|
|
|
dont la **branche principale** est **la plus linéaire possible**. C'est à dire
|
|
|
|
avec le moins d'embranchements possibles.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
En somme on va favoriser le **rebase** sur les branches dédiées à une nouvelle
|
|
|
|
fonctionnalité **avant de fusionner sur la branche principale**. Cela aura
|
|
|
|
l'avantage :
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* de réduire le travail de la personne qui fusionne la branche de
|
|
|
|
fonctionnalités,
|
|
|
|
* et de favoriser la résolution des conflits de fusion aux développeurs
|
|
|
|
responsables de la branche de fonctionnalités.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{width=50%}
|
|
|
|
|
|
|
|
\newpage
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
#### Conventional commit
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Dans le cadre de la **rédaction de message de commit** pour chaque changement
|
|
|
|
effectué sur un dépôt, nous avons choisi de suivre la **spécification [Commits
|
|
|
|
Conventionnels](https://www.conventionalcommits.org/fr/v1.0.0/#r%C3%A9sum%C3%A9)**.
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-27 16:05:57 +00:00
|
|
|
Cela se résume à peu près à cela :
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-29 09:31:33 +00:00
|
|
|
```
|
2025-01-27 16:05:57 +00:00
|
|
|
<type>[étendue optionnelle]: <description>
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-27 16:05:57 +00:00
|
|
|
[corps optionnel]
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-27 16:05:57 +00:00
|
|
|
[pied optionnel]
|
|
|
|
```
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Qui donne **par exemple** :
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-01-28 16:37:23 +00:00
|
|
|
```markdown {.numberLines}
|
2025-01-27 16:05:57 +00:00
|
|
|
feat(backend): include postgreSQL BDD + backend
|
|
|
|
|
|
|
|
* change EC2 instances to t3.large
|
|
|
|
* change min_size nodes to 2
|
|
|
|
* use backend version 0.0.1
|
2025-01-28 16:37:23 +00:00
|
|
|
* use annotations to have api.r53.devu42.fr as domain for backend
|
|
|
|
* use annotations to use Let's Encrypt with cert-manager
|
2025-01-27 16:05:57 +00:00
|
|
|
* update EBS CSI driver to v1.37.0-eksbuild.1
|
|
|
|
* declare a StorageClass EBS in gp3 for postgreSQL
|
|
|
|
* use this EBS StorageClass in our backend chart for postgreSQL
|
|
|
|
* set database size to 1Gi
|
|
|
|
|
|
|
|
ref projet#18
|
|
|
|
```
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
On notera aussi l'**usage des références Gitlab** en fin de message de commit
|
|
|
|
pour **faire un lien entre le commit et un ticket spécifique**, en l'occurence
|
|
|
|
l'exemple montre une référence vers le ticket #18 du dépôt nommé *projet*.
|
|
|
|
|
2025-01-27 16:05:57 +00:00
|
|
|
## Outils
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Au delà d'une à plusieurs méthodologies/normes/standards, nous avons utilisés
|
|
|
|
des outils afférents.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
### Nom de domaine
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Afin d'avoir une **boîte courriel commune** (team@devu42.fr) et des **noms de
|
|
|
|
domaine** qui pointent sur le résultat de nos travaux, nous avons opté pour la
|
|
|
|
location d'un nom de domaine : **devu42.fr**.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Ce domaine fait référence à notre cursus de DevOps dans un centre de formation
|
|
|
|
nommé **DevU**niversity. Le **nombre 42** est un chiffre connu lié aux
|
|
|
|
ouvrages de Douglas Adams dans sa trilogie en 5 volumes de « H2G2, Guide du
|
|
|
|
Voyageur Galactique ».
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Nous avons ainsi pu avoir des **noms de domaines spécifiques** pour :
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* le backend (API) dans l'environnement de pré-production,
|
|
|
|
**api.staging**.devu42.fr,
|
|
|
|
* le backend (API) dans l'environnement de production, **api.r53**.devu42.fr,
|
|
|
|
* le frontend dans l'environnement de pré-production,
|
|
|
|
**www.staging**.devu42.fr,
|
|
|
|
* et le frontend dans l'environnement de production, **www.r53**.devu42.fr.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
|
|
|
C'était donc un bon départ.
|
|
|
|
|
|
|
|
### Plateforme DevOps
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Notre outil principal a été la **plateforme Gitlab**. C'est une plateforme
|
|
|
|
complète de DevOps qui couvre bon nombre de besoins DevOps parmi :
|
|
|
|
|
|
|
|
* des dépôts de code source (**dépôts Git**),
|
|
|
|
* un système d'**intégration continue** (**GitlabCI**),
|
|
|
|
* une gestion des **rôles utilisateurs** pour une granularité de **gestion de
|
|
|
|
permissions** tout en finesse,
|
|
|
|
* des dépôts/**registres** pour :
|
|
|
|
* les **Chart Helm**,
|
|
|
|
* les **images Docker**,
|
|
|
|
* les **modules Terraform**,
|
|
|
|
* les **états Terraform**,
|
|
|
|
* les bibliothèques Python, PHP, JS,
|
2025-01-27 16:05:57 +00:00
|
|
|
* etc.,
|
2025-02-19 16:53:38 +00:00
|
|
|
* un **système de gestion de tickets** pour le retour régulier (feedback) des
|
|
|
|
utilisateurs,
|
|
|
|
* l'usage de **jalons**, **kanban** et **métriques des équipes** pour une
|
|
|
|
gestion efficace d'**une à plusieurs équipes** dans un projet,
|
|
|
|
* la gestion des versions (**releases**),
|
|
|
|
* l'**intégration avec Kubernetes** pour un suivi depuis Gitlab de nos
|
|
|
|
clusters Kubernetes,
|
2025-01-27 16:05:57 +00:00
|
|
|
* etc.
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
De nombreuses fonctionnalités supplémentaires existent dans Gitlab. Cela en
|
|
|
|
fait donc un outil de choix pour notre projet.
|
|
|
|
|
|
|
|
\newpage
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-01-28 16:37:23 +00:00
|
|
|
#### Base de connaissance
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Une des premières choses qui a été faite sur cette plateforme a été la **mise
|
|
|
|
en place d'une base de connaissances** sous la forme d'un Wiki.
|
2025-01-28 16:37:23 +00:00
|
|
|
|
|
|
|
Pour plusieurs raisons :
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* **partager nos découvertes** sur les outils (liens web, procédures
|
|
|
|
d'installation, etc.),
|
|
|
|
* détailler nos diverses **installations**,
|
|
|
|
* **partager nos travaux**,
|
|
|
|
* rédaction de contenu concernant les **réunions**, des **outils**, etc.
|
|
|
|
|
|
|
|
{width=100%}
|
2025-01-28 16:37:23 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
\newpage
|
2025-01-28 16:37:23 +00:00
|
|
|
|
2025-01-27 16:05:57 +00:00
|
|
|
#### Workflow des tickets
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Autre exemple de configuration de la plateforme Gitlab afin de suivre notre
|
|
|
|
organisation : la **création d'un workflow de l'état d'un ticket**, que
|
|
|
|
vous trouverez ci-après.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{height=70%}
|
2025-01-28 16:37:23 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Il permet à chaque membre de l'équipe de prendre connaissance des habitudes en
|
|
|
|
matière de gestion de ticket.
|
2025-01-27 16:05:57 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Il est utile si jamais nous changions de plateforme DevOps : il suffirait
|
|
|
|
d'appliquer à nouveau le même workflow.
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-29 11:07:55 +00:00
|
|
|
## Cas d'une collaboration inter-équipe {#collab}
|
2025-01-21 09:07:12 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Dans le cadre de nos diverses **réflexions** nous avons eu un contact **avec
|
|
|
|
l'équipe** qui se nomme **« Team Matrix »** dont le sujet était le déploiement
|
|
|
|
de serveurs Matrix en haute disponibilité.
|
|
|
|
|
|
|
|
Nous avons échangé sur le **sujet de la promotion des versions entre
|
|
|
|
environnements**. Maxime, de la Team Matrix, et moi avons principalement
|
|
|
|
discuté autour de l'article suivant : [How to model your GitOps
|
|
|
|
environments and promote releases between them](
|
|
|
|
https://codefresh.io/blog/how-to-model-your-gitops-environments-and-promote-releases-between-them/)
|
|
|
|
(
|
|
|
|
https://codefresh.io/blog/how-to-model-your-gitops-environments-and-promote-releases-between-them/
|
|
|
|
).
|
|
|
|
|
|
|
|
L'idée de l'article, en quelques mots, est de **favoriser l'utilisation d'un
|
|
|
|
dossier par environnement** plutôt qu'utiliser une branche Git pour chaque
|
|
|
|
environnement. Il conseille également de faire la promotion des versions entre
|
|
|
|
ces différents environnements/dossiers. Avec un protocole à suivre par les «
|
|
|
|
humains » pour limiter de trop nombreuses promotions logicielles en même temps.
|
2025-01-29 09:31:33 +00:00
|
|
|
|
|
|
|
Pour reprendre le schéma de l'article :
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{width=100%}
|
|
|
|
|
|
|
|
Après moultes discussions, **nous sommes tombés d'accord** sur quelques
|
|
|
|
points, parmi :
|
|
|
|
|
|
|
|
* **ne pas utiliser une branche par environnement**,
|
|
|
|
* essayer au maximum d'**avoir des dépôts indépendants** (favoriser la
|
|
|
|
modularité),
|
|
|
|
* favoriser la **promotion logicielle par la CI** plutôt que manuellement,
|
|
|
|
* et **utiliser les particularités des outils que nous avons** (Terragrunt
|
|
|
|
dans le cas de Maxime).
|
|
|
|
|
|
|
|
Notre réflexion a **evolué suite à ces échanges**. Et nous avons opté
|
|
|
|
initialement pour utiliser **un dossier par environnement dans un dépôt
|
|
|
|
unique** nommé **infra**. Puis nous avons adapté notre intégration continue
|
|
|
|
pour copier les valeurs communes de l'environnement de pré-production
|
|
|
|
(staging) vers l'environnement de production (prod).
|
|
|
|
|
|
|
|
**Mon idéal** serait :
|
|
|
|
|
|
|
|
* avoir des **dépôts indépendants pour chaque application** avec des **tests
|
|
|
|
de sécurité**, des **tests du code**, vérification de la **couverture de
|
|
|
|
code** et **tests sur la compilation** - éventuelle - de l'outil et/ou des
|
|
|
|
**images Docker** puis **publication sur un registre**,
|
|
|
|
* avoir une gestion de chacun de ces dépôts d'**un système de versionnement**
|
|
|
|
(les fameuses « releases »),
|
|
|
|
* avoir la **même chose pour chaque module Terraform** que nous avons fabriqué
|
|
|
|
(par exemple notre module « networking »),
|
|
|
|
* puis utiliser, dans un dépôt **infra** par exemple, seulement les versions
|
|
|
|
de nos modules (situés indépendamment sur des registres),
|
2025-01-29 09:31:33 +00:00
|
|
|
* de là on peut imaginer :
|
2025-02-19 16:53:38 +00:00
|
|
|
* soit de la promotion des versions par une intégration continue entre
|
|
|
|
dépôts (pré-production vers production par exemple) OU entre dossiers
|
|
|
|
représentant un environnement,
|
|
|
|
* soit de la promotion des versions par une validation manuelle entre la
|
|
|
|
pré-production et la production,
|
|
|
|
* ajouter des **tests de sécurité des images** (comme la somme de contrôle) avant
|
|
|
|
utilisation dans d'autres dépôts.
|
2025-01-29 09:31:33 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
À noter que Maxime et moi étions également arrivés sur le fait qu'il y a déjà
|
|
|
|
2 types de promotions dans tout cela :
|
2025-01-29 09:31:33 +00:00
|
|
|
|
|
|
|
* la promotion des versions des logiciels/modules/charts utilisés,
|
2025-02-19 16:53:38 +00:00
|
|
|
* et la promotion des configurations de ces derniers au sein de nos
|
|
|
|
infrastructures.
|
2025-01-13 14:49:22 +00:00
|
|
|
|
2025-01-29 09:31:33 +00:00
|
|
|
C'est un autre sujet très intéressant que nous ne détaillerons pas ici.
|
2025-01-21 09:07:12 +00:00
|
|
|
|
2025-01-29 09:31:33 +00:00
|
|
|
## Conclusion
|
2025-01-21 09:07:12 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
La **démarche entreprise** a été structurée autour de **méthodologies** et
|
|
|
|
d'**outils** et nous a permis de faire avancer le projet. L'apport des
|
|
|
|
**discussions autour de la promotion logicielle** avec une autre équipe a eu
|
|
|
|
un impact conséquent sur nos choix concernant l'automatisation et le
|
|
|
|
déploiement continu sur l'environnement de pré-production. Nous en parlerons
|
|
|
|
d'ailleurs dans le prochain chapitre un peu plus en détail.
|
2025-02-17 13:07:01 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
A contrario, la **gestion d'équipe** lors de ce projet **a fait défaut** et
|
|
|
|
nous aurions pu nous organiser bien mieux qu'il n'a été.
|