Compare commits
No commits in common. "eeea2e8dfda2661a7c25a4b66b2b1b6b7d0fbeef" and "2910e58a4c930f50cdbb387fa43643e90624fd57" have entirely different histories.
eeea2e8dfd
...
2910e58a4c
4
Makefile
4
Makefile
@ -44,8 +44,8 @@ public/${NAME}.html: public ${CONTENT_LIST}
|
|||||||
|
|
||||||
public/${NAME}.pdf: public ${CONTENT_LIST}
|
public/${NAME}.pdf: public ${CONTENT_LIST}
|
||||||
$Qecho "[PREPA] PDF : contenu"
|
$Qecho "[PREPA] PDF : contenu"
|
||||||
# Cf. https://pandoc.org/chunkedhtml-demo/8.17-images.html for implicit_figures explanations. Si activé : titre + centrées MAIS les images sont pas au bon endroit dans le texte. Si désactivé : pas de titre, pas centrées, MAIS images au BON ENDROIT.
|
# Cf. https://pandoc.org/chunkedhtml-demo/8.17-images.html for implicit_figures explanations (deactivated here)
|
||||||
$Qpandoc -V colorlinks -V fontfamily="${FONT_FAMILY}" -V fontsize="${FONT_SIZE}" -V classoption:twoside --number-sections -V graphics --template="${LATEX_TEMPLATE}" --toc -V toc-title:'${TOC_TITLE}' -V papersize:a4 --from=markdown+implicit_figures+fenced_code_attributes --highlight-style ${HL_THEME} --to=latex -o "public/${NAME}.pdf" ${CONTENT_LIST}
|
$Qpandoc -V colorlinks -V fontfamily="${FONT_FAMILY}" -V fontsize="${FONT_SIZE}" -V classoption:twoside --number-sections -V graphics --template="${LATEX_TEMPLATE}" --toc -V toc-title:'${TOC_TITLE}' -V papersize:a4 --from=markdown-implicit_figures+fenced_code_attributes --highlight-style ${HL_THEME} --to=latex -o "public/${NAME}.pdf" ${CONTENT_LIST}
|
||||||
|
|
||||||
# END
|
# END
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
Binary file not shown.
@ -4,7 +4,7 @@ subtitle: Dossier de projet - API Utilisateurs
|
|||||||
author: Olivier \textsc{Dossmann}
|
author: Olivier \textsc{Dossmann}
|
||||||
mail: <emploi@dossmann.net>
|
mail: <emploi@dossmann.net>
|
||||||
date: 05 mars 2025
|
date: 05 mars 2025
|
||||||
version: 1.0
|
version: 0.2
|
||||||
mentor: Jérémie \textsc{Tarot}
|
mentor: Jérémie \textsc{Tarot}
|
||||||
qrcode: https://odtre.gitlab.io/diapos/
|
qrcode: https://odtre.gitlab.io/diapos/
|
||||||
geometry:
|
geometry:
|
||||||
|
@ -2,32 +2,32 @@
|
|||||||
|
|
||||||
# Introduction {#introduction}
|
# Introduction {#introduction}
|
||||||
|
|
||||||
La **méthodologie Agile** étant de plus en plus adoptée, les **équipes de
|
La méthodologie Agile étant de plus en plus adoptée, les équipes de
|
||||||
développement** publient de nouvelles versions de leur application avec une
|
développement publient de nouvelles versions de leur application avec une
|
||||||
fréquence bien plus élevée. Les **équipes d'opération** ont désormais besoin d'un
|
fréquence bien plus élevée. Les équipes d'opération ont désormais besoin d'un
|
||||||
outillage plus conséquent pour déployer ces versions. C'est pour cette raison
|
outillage plus conséquent pour déployer ces versions. C'est pour cette raison
|
||||||
que l'**automatisation**, entre autre, est nécessaire pour soulager les équipes
|
que l'automatisation, entre autre, est nécessaire pour soulager les équipes
|
||||||
d'opération. Ainsi **le DevOps entre en jeu** : une culture et un
|
d'opération. Ainsi le DevOps entre en jeu : une culture et un
|
||||||
ensemble de **bonnes pratiques** pour faciliter l'échange entre les équipes
|
ensemble de bonnes pratiques pour faciliter l'échange entre les équipes
|
||||||
de développement et celles d'opérations. Mais également de favoriser un **flux
|
de développement et celles d'opérations. Mais également de favoriser un flux
|
||||||
continu** entre ces équipes.
|
continu entre ces équipes.
|
||||||
|
|
||||||
Au long de mon parcours, que ce soit en tant qu'**Ingénieur en Conception et
|
Au long de mon parcours, que ce soit en tant qu'Ingénieur en Conception et
|
||||||
Développement d’Environnements Distribués** ou **Responsable d'Applications**, j'ai
|
Développement d’Environnements Distribués ou Responsable d'Applications, j'ai
|
||||||
été sensibilisé aux besoin incessants de l'automatisation et de l'amélioration
|
été sensibilisé aux besoin incessants de l'automatisation et de l'amélioration
|
||||||
des processus de création logiciel. J'ai participé à la mise en place
|
des processus de création logiciel. J'ai participé à la mise en place
|
||||||
progressive d'une **chaîne de publication logicielle**, que ce soit dans le monde
|
progressive d'une chaîne de publication logicielle, que ce soit dans le monde
|
||||||
professionnel ou dans la sphère privée (pour publier mon blog). C'est donc tout
|
professionnel ou dans la sphère privée pour publier mon blog. C'est donc tout
|
||||||
naturellement que je me suis tourné vers ce domaine passionnant qu'est le
|
naturellement que je me suis tourné vers ce domaine passionnant qu'est le
|
||||||
DevOps. Et ce à travers la **formation DevOps en BootCamp** au sein de l'organisme
|
DevOps. Et ce à travers la formation DevOps en BootCamp au sein de l'organisme
|
||||||
de formation DataScientest.
|
de formation DataScientest.
|
||||||
|
|
||||||
Le présent document présentera principalement le projet étudié lors de cette
|
Le présent document présentera principalement le projet étudié lors de cette
|
||||||
formation. Nous commencerons par faire la corrélation entre les compétences
|
formation. Nous commencerons par faire la corrélation entre les compétences
|
||||||
attendues pour le *Titre Professionnel Administrateur Système DevOps* et le(s)
|
attendues pour le Titre Professionnel Administrateur Système DevOps et le(s)
|
||||||
projet(s) présenté(s) dans ce dossier. Après quoi nous continuerons avec le
|
projet(s) présenté(s) dans ce dossier. Après quoi nous continuerons avec le
|
||||||
cahier des charges et les spécifications techniques de ce(s) dernier(s). \
|
cahier des charges et les spécifications techniques de ce(s) dernier(s). \
|
||||||
Nous continuerons par expliquer la démarche suivie pour accomplir le projet,
|
Nous continuerons par expliquer la démarche suivi pour accomplir le projet,
|
||||||
quelques réalisations effectuées et d'une situation de travail qui mérite
|
quelques réalisations effectuées et d'une situation de travail qui mérite
|
||||||
d'être relevée.
|
d'être relevée.
|
||||||
|
|
||||||
|
@ -2,104 +2,49 @@
|
|||||||
|
|
||||||
# Remerciements
|
# Remerciements
|
||||||
|
|
||||||
Avant toute chose il y a une personne sans qui cette aventure n'aurait pas été
|
Avant toute chose il y a une personne sans qui cette aventure n'aurait pas été possible : Agnès \textsc{Schweitzer}. Elle a été l'**immense soutien** derrière les petites mains qui écrivent ces lignes. Présente quand les choses n'allaient pas, quand la voie semblait sans issue et que l'iceberg s'approchait du bateau ! En sa précense l'humilité n'a qu'à bien se tenir !
|
||||||
possible : **Agnès \textsc{Schweitzer}**. Elle a été l'**immense
|
|
||||||
soutien** derrière les petites mains qui écrivent ces lignes. Présente quand
|
|
||||||
les choses n'allaient pas, quand la voie semblait sans issue et que l'iceberg
|
|
||||||
s'approchait du bateau ! En sa précense l'**humilité** n'a qu'à bien se
|
|
||||||
tenir !
|
|
||||||
|
|
||||||
À **Madame \textsc{Schweitzer}** pour ses **conseils**, son aide
|
À Madame \textsc{Schweitzer} pour ses **conseils**, son aide **précieuse**, sa **présence d'esprit** et son **exceptionnelle intelligence** : MERCI !
|
||||||
**précieuse**, sa **présence d'esprit** et son **exceptionnelle
|
|
||||||
intelligence** : MERCI !
|
|
||||||
|
|
||||||
## À l'organisme de formation DataScientest
|
## À l'organisme de formation DataScientest
|
||||||
|
|
||||||
Nous avons parfois besoin d'un coup de pouce pour rejoindre les rails d'une
|
Nous avons parfois besoin d'un coup de pouce pour rejoindre les rails d'une autre ligne. C'est ce que permet l'organisme de formation **DataScientest** au travers de ses nombreux parcours proposés aux personnes qui, comme moi, souhaitent changer de métier.
|
||||||
autre ligne. C'est ce que permet l'organisme de formation **DataScientest**
|
|
||||||
au travers de ses nombreux parcours proposés aux personnes qui, comme moi,
|
|
||||||
souhaitent **changer de métier**.
|
|
||||||
|
|
||||||
Je remercie Sarah \textsc{Bouras} d'avoir été mon premier contact avec cet
|
Je remercie Sarah \textsc{Bouras} d'avoir été mon premier contact avec cet organisme. Elle a été **à l'écoute**, soucieuse de répondre **avec précision et parcimonie** à toutes mes questions et de me rassurer sur les sujets qui m'inquiétaient.
|
||||||
organisme. Elle a été **à l'écoute**, soucieuse de répondre **avec précision
|
|
||||||
et parcimonie** à toutes mes questions et de me rassurer sur les sujets qui
|
|
||||||
m'inquiétaient.
|
|
||||||
|
|
||||||
C'est ensuite Benjamin \textsc{Fiche}, **chef de cohorte**, qui a pris le pas
|
C'est ensuite Benjamin \textsc{Fiche}, chef de cohorte, qui a pris le pas en répondant consciencieusement à toutes mes questions ; même les plus triviales/simplettes/absurdes. Il a toujours fait preuve d'**un professionnalisme hors pair** et je me devais de le souligner.
|
||||||
en répondant **consciencieusement** à toutes mes questions ; même les plus
|
|
||||||
triviales/simplettes/absurdes. Il a toujours fait preuve d'**un
|
|
||||||
professionnalisme hors pair** et je me devais de le souligner.
|
|
||||||
|
|
||||||
Nous avons également Jérémie \textsc{Tarot}, notre **passionnant - et
|
Nous avons également Jérémie \textsc{Tarot}, notre passionnant - et passionné - Mentor qui détient une connaissance infinie des outils et des pratiques du monde du DevOps. Son savoir nous a donné de multiples pistes quand nous étions bloqués. Ses conseils ont été spécifiquement utiles lorsque les ressources venaient à manquer dans le projet, que ce soit en terme de ressources humaines ou de ressources temporelles. Il a cru en nous ; et ceci représente une aide précieuse.
|
||||||
passionné** - Mentor qui détient une **connaissance infinie** des outils
|
|
||||||
et des pratiques du monde du DevOps. Son savoir nous a donné de **multiples
|
|
||||||
pistes** quand nous étions bloqués. Ses conseils ont été spécifiquement utiles
|
|
||||||
lorsque les ressources venaient à manquer dans le projet, que ce soit en terme
|
|
||||||
de ressources humaines ou de ressources temporelles. Il a **cru en nous** ; et
|
|
||||||
ceci représente une aide précieuse.
|
|
||||||
|
|
||||||
Je remercie également **l'ensemble de l'équipe DataScientest** pour leur
|
Je remercie également l'ensemble de l'équipe DataScientest pour leur patience et leur savoir-vivre au regard de mes nombreux retours sur les cours, les examens et les machines virtuelles fournies.
|
||||||
patience et leur savoir-vivre au regard de mes nombreux retours sur les cours,
|
|
||||||
les examens et les machines virtuelles fournies.
|
|
||||||
|
|
||||||
## À l'équipe DevU42
|
## À l'équipe DevU42
|
||||||
|
|
||||||
Chaque membre de l'équipe a ses **difficultés**, une **vie sociale et
|
Chaque membre de l'équipe a ses difficultés, une vie sociale et familiale prenante, des obligations et des responsabilités à côté de la formation.
|
||||||
familiale** prenante, des **obligations** et des **responsabilités** à côté de
|
|
||||||
la formation.
|
|
||||||
|
|
||||||
Pris à part, nous avons **chacun nos particularités**. Ensemble ces problèmes
|
Pris à part, nous avons chacun nos particularités. Ensemble ces problèmes étaient amoindris. Nous aurions pu faire mieux et plus loin. Mais nous avons faits. Et rien que pour cela je remercie l'équipe d'y être parvenu.
|
||||||
étaient amoindris. Nous aurions pu faire mieux et plus loin. Mais nous avons
|
|
||||||
faits. Et rien que pour cela je remercie l'équipe d'y être parvenu.
|
|
||||||
|
|
||||||
À Eliel \textsc{Moncada} pour ses **trouvailles** Web et sa **patience** sur
|
À Eliel \textsc{Moncada} pour ses trouvailles Web et sa patience sur les schémas visuels qui prennent un temps considérable !
|
||||||
les schémas visuels qui prennent un temps considérable !
|
|
||||||
|
|
||||||
À Hrubech \textsc{Hombessa} pour sa **qualité d'échange** sur des **sujets
|
À Hrubech \textsc{Hombessa} pour sa qualité d'échange sur des sujets pointus et la pertinence de ses questions.
|
||||||
pointus** et la **pertinence** de ses questions.
|
|
||||||
|
|
||||||
À Julien \textsc{Sabiols} pour sa **détermination**, son **travail acharné**,
|
À Julien \textsc{Sabiols} pour sa détermination, son travail acharné, son intelligence et son énorme humilité. Il a su être un partenaire de pair-programming brillant avec un esprit affûté. C'est rare. Et très appréciable !
|
||||||
son **intelligence** et son énorme **humilité**. Il a su être un partenaire
|
|
||||||
de pair-programming **brillant** avec un **esprit affûté**. C'est rare. Et
|
|
||||||
très appréciable !
|
|
||||||
|
|
||||||
J'imagine que derrière chaque personne il y a également **un ou une partenaire
|
J'imagine que derrière chaque personne il y a également un ou une partenaire de vie qui a facilité l'organisation et la disponibilité autour de la formation. Pour ces personnes cachées dans l'ombre : MERCI ! Vous méritez de figurer dans ces lignes.
|
||||||
de vie** qui a facilité l'organisation et la disponibilité autour de la
|
|
||||||
formation. Pour ces personnes **cachées dans l'ombre** : MERCI !
|
|
||||||
Vous méritez de figurer dans ces lignes.
|
|
||||||
|
|
||||||
## Aux membres de la « cohorte »
|
## Au membres de la « cohorte »
|
||||||
|
|
||||||
Je tiens à remercier également **l'ensemble des membres de la cohorte**. À
|
Je tiens à remercier également l'ensemble des membres de la cohorte. À ceux qui ont participé aux discussions, à ceux qui ont bien voulu échanger, à ceux qui ont accepté de répondre à des questions, à ceux qui ont partagé des difficultés ou encore des solutions, à ceux qui étaient eux-même.
|
||||||
ceux qui ont participé aux discussions, à ceux qui ont bien voulu échanger,
|
|
||||||
à ceux qui ont accepté de répondre à des questions, à ceux qui ont partagé
|
|
||||||
des difficultés ou encore des solutions, à ceux qui étaient eux-même.
|
|
||||||
|
|
||||||
Une mention particulière aux personnes suivantes (ordre alphabétique -
|
Une mention particulière aux personnes suivantes (ordre alphabétique - prénom) :
|
||||||
prénom) :
|
|
||||||
|
|
||||||
* à Dorian \textsc{Roly} pour nos **échanges intéressants** sur de multiples
|
* à Dorian \textsc{Roly} pour nos échanges intéressants sur de multiples technologies et sur les archétypes des personnes dans l'informatique,
|
||||||
technologies et sur les archétypes des personnes dans l'informatique,
|
* à Maxime \textsc{Boulanghien} pour sa sérénité, son implication et son efficacité sur des sujets dûments travaillés ; notamment la promotion logicielle au sein d'une automatisation complète de déploiement d'une infrastructure,
|
||||||
* à Maxime \textsc{Boulanghien} pour sa **sérénité**, son **implication** et
|
* à Michael \textsc{Lachand} pour nos discussions sur l'importance de l'individu au sein du domaine professionnel plutôt que des chiffres et des compétences seules ; mais aussi des difficultés apportés par notre Société moderne à ce sujet,
|
||||||
son efficacité sur des sujets dûments travaillés ; notamment la promotion
|
* et enfin à Philippe \textsc{Risser-Maroix} avec qui j'ai pu discuter de notions informatiques poussées et de Logiciel Libre sans me sentir seul à ce sujet ; sa sensibilité au sujet de la sécurité informatique est un point fort !
|
||||||
logicielle au sein d'une automatisation complète de déploiement d'une
|
|
||||||
infrastructure,
|
|
||||||
* à Michael \textsc{Lachand} pour nos discussions sur **l'importance de
|
|
||||||
l'individu** au sein du domaine professionnel plutôt que des chiffres et des
|
|
||||||
compétences seules ; mais aussi des difficultés apportés par notre Société
|
|
||||||
moderne à ce sujet,
|
|
||||||
* et enfin à Philippe \textsc{Risser-Maroix} avec qui j'ai pu discuter de
|
|
||||||
**notions informatiques poussées** et de Logiciel Libre sans me sentir seul à
|
|
||||||
ce sujet ; sa sensibilité au sujet de la **sécurité informatique** est un
|
|
||||||
point fort !
|
|
||||||
|
|
||||||
## Et les autres
|
## Et les autres
|
||||||
|
|
||||||
D'autres personnes n'ayant aucun lien avec cette formation ont pourtant
|
D'autres personnes n'ayant aucun lien avec cette formation ont pourtant participé à leur façon. Je tiens à remercier notamment Grégoire \textsc{Stein}, en sa qualité de DevSecOps, pour ses précieux conseils tout au long de cette aventure !
|
||||||
participé à leur façon. Je tiens à remercier notamment Grégoire
|
|
||||||
\textsc{Stein}, en sa qualité de **DevSecOps**, pour ses **précieux
|
|
||||||
conseils** tout au long de cette aventure !
|
|
||||||
|
|
||||||
Si d'aventures j'avais oublié des personnes, je m'en excuse. Il y a pourtant
|
Si d'aventures j'aurais oublié des personnes, je m'en excuse. Il y a pourtant ici toute la place nécessaire, voilà pourquoi j'ai reservé ce paragraphe à toutes celles et ceux dont j'aurais omi le nom/prénom.
|
||||||
ici toute la place nécessaire, voilà pourquoi j'ai reservé ce paragraphe à
|
|
||||||
toutes celles et ceux dont j'aurais omis le nom/prénom.
|
|
||||||
|
@ -2,57 +2,42 @@
|
|||||||
|
|
||||||
# Liste de compétences couvertes par le projet
|
# Liste de compétences couvertes par le projet
|
||||||
|
|
||||||
Le référentiel de compétences du *Titre Professionnel Administrateur Système
|
Le référentiel de compétences du *Titre Professionnel Administrateur Système DevOps* liste 11 compétences réparties en 3 catégories :
|
||||||
DevOps* liste 11 compétences réparties en 3 catégories :
|
|
||||||
|
|
||||||
* Automatiser le déploiement d’une infrastructure dans le cloud
|
* Automatiser le déploiement d’une infrastructure dans le
|
||||||
* Compétence **n°1 : Automatiser la création de serveurs à l’aide de
|
cloud
|
||||||
scripts**
|
* Compétence **n°1 : Automatiser la création de serveurs à l’aide de scripts**
|
||||||
* Compétence **n°2 : Automatiser le déploiement d'une infrastructure**
|
* Compétence **n°2 : Automatiser le déploiement d'une infrastructure**
|
||||||
* Compétence **n°3 : Sécuriser l’infrastructure**
|
* Compétence **n°3 : Sécuriser l’infrastructure**
|
||||||
* Compétence **n°4 : Mettre l’infrastructure en production dans le
|
* Compétence **n°4 : Mettre l’infrastructure en production dans le cloud**
|
||||||
cloud**
|
|
||||||
* Déployer en continu une application
|
* Déployer en continu une application
|
||||||
* Compétence **n°5 : Préparer un environnement de test**
|
* Compétence **n°5 : Préparer un environnement de test**
|
||||||
* Compétence **n°6 : Gérer le stockage des données**
|
* Compétence **n°6 : Gérer le stockage des données**
|
||||||
* Compétence **n°7 : Gérer des containers**
|
* Compétence **n°7 : Gérer des containers**
|
||||||
* Compétence **n°8 : Automatiser la mise en production d’une
|
* Compétence **n°8 : Automatiser la mise en production d’une application avec une plateforme**
|
||||||
application avec une plateforme**
|
|
||||||
* Superviser les services déployés
|
* Superviser les services déployés
|
||||||
* Compétence **n°9 : Définir et mettre en place des statistiques de
|
* Compétence **n°9 : Définir et mettre en place des statistiques de services**
|
||||||
services**
|
|
||||||
* Compétence **n°10 : Exploiter une solution de supervision**
|
* Compétence **n°10 : Exploiter une solution de supervision**
|
||||||
* Compétence **n°11 : Échanger sur des réseaux professionnels
|
* Compétence **n°11 : Échanger sur des réseaux professionnels éventuellement en anglais**
|
||||||
éventuellement en anglais**
|
|
||||||
|
|
||||||
En utilisant les critères de performance fournis par chaque fiche de
|
En utilisant les critères de performance fournis par chaque fiche de compétence, nous avons pu établir le tableau suivant :
|
||||||
compétence, j'ai pu établir le tableau suivant :
|
|
||||||
|
|
||||||
: Couverture de compétences du projet
|
: Couverture de compétences par le projet
|
||||||
|
|
||||||
Compétence | Nbre critères perf. | Couverte ? | Note
|
Compétence | Nbre critères perf. | Couverte ? | Note
|
||||||
-----|:-----:|-----:|:-----
|
-----|:-----:|-----:|:-----
|
||||||
Compétence n°1 | 3/3 | Oui | EC2 / Terraform
|
Compétence n°1 | 3/3 | Oui | EC2 / Terraform
|
||||||
Compétence n°2 | 3/3 | Oui | Terraform
|
Compétence n°2 | 3/3 | Oui | Terraform
|
||||||
Compétence n°3 | 2/2 | Oui | Staging, Vaultwarden, Let's Encrypt
|
Compétence n°3 | 2/2 | Oui | Staging, Vaultwarden, Let's Encrypt
|
||||||
Compétence n°4 | **2**/3 | Oui | Terraform → « prod »
|
Compétence n°4 | 2/3 | Oui | Terraform → « prod »
|
||||||
Compétence n°5 | 4/4 | Oui | Gitlab CI
|
Compétence n°5 | 4/4 | Oui | Gitlab CI
|
||||||
Compétence n°6 | **1**/3 | Partiellement | postgresql-ha, Velero
|
Compétence n°6 | 1/3 | Non | postgresql-ha, Velero
|
||||||
Compétence n°7 | 4/4 | Oui | Docker
|
Compétence n°7 | 4/4 | Oui | Docker
|
||||||
Compétence n°8 | **3**/4 | Oui | Gitlab CI, Terraform, staging/prod
|
Compétence n°8 | 3/4 | Oui | Gitlab CI, Terraform, staging/prod
|
||||||
Compétence n°9 | **0**/3 | Non | Aucun interlocuteur
|
Compétence n°9 | 0/3 | Non | Aucun interlocuteur
|
||||||
Compétence n°10 | **1**/3 | Partiellement | Datadog
|
Compétence n°10 | 1/3 | Non | Datadog
|
||||||
Compétence n°11 | 3/3 | Oui | Tout au long du projet
|
Compétence n°11 | 3/3 | Oui | Tout au long du projet
|
||||||
|
|
||||||
La couverture de la **compétence n°6** (Gérer le stockage de données) manque de
|
La couverture de la compétence n°6 (Gérer le stockage de données) manque de tests concernant le système de sauvegarde qui a été développé mais pas déployé, faute de tests et de temps. \
|
||||||
tests concernant le système de sauvegarde qui a été développé mais pas
|
La compétence n°9 (Définir et mettre en place des statistiques de services) ne semble pas pertinente dans un projet où nous n'avons eu aucun autre interlocuteur que le « mentor ». \
|
||||||
déployé, **faute de tests et de temps**.
|
La compétence n°10 (Exploiter une solution de supervision) est en lien avec la compétence précédente, ce qui influe sur la pertinence des moniteurs mis en place dans la solution. Ce qui, à mon sens, ne résoud pas totalement cette compétence.
|
||||||
|
|
||||||
La **compétence n°9** (Définir et mettre en place des statistiques de
|
|
||||||
services) ne semble pas pertinente dans un projet où nous n'avons eu **aucun
|
|
||||||
autre interlocuteur que le « mentor »**.
|
|
||||||
|
|
||||||
La **compétence n°10** (Exploiter une solution de supervision) est **en lien
|
|
||||||
avec la compétence précédente**, ce qui influe sur la pertinence des moniteurs
|
|
||||||
mis en place dans la solution. Ce qui, à mon sens, ne résoud pas totalement
|
|
||||||
cette compétence.
|
|
||||||
|
@ -2,49 +2,36 @@
|
|||||||
|
|
||||||
# Cahier des charges
|
# Cahier des charges
|
||||||
|
|
||||||
Dans le cadre d'une **formation, dans l'école DataScientest**, il a été
|
Premier élément du projet sur lequel travailler : le cahier des charges.
|
||||||
demandé à des équipes composées de 3 à 5 personnes de travailler sur un
|
|
||||||
**projet défini, cadré** et suivant un certain nombre de contraintes dont nous
|
|
||||||
allons parler ici.
|
|
||||||
|
|
||||||
Le cahier des charges a été la première réflexion sur le projet.
|
|
||||||
|
|
||||||
## Contexte
|
## Contexte
|
||||||
|
|
||||||
Commençons par le contexte du projet avec l'ensemble des intervenants et des
|
Dans le cadre d'une formation, dans l'école DataScientest, il a été demandé à des équipes composées de 3 à 5 personnes de travailler sur un projet défini, cadré et suivant un certain nombre de contraintes dont nous allons parler ici.
|
||||||
contraintes attenantes.
|
|
||||||
|
Le cahier des charges a été la première réflexion sur le projet.
|
||||||
|
|
||||||
### Dans le cadre d'une formation
|
### Dans le cadre d'une formation
|
||||||
|
|
||||||
**[Datascientest]{#datascientest}** est une **école de formation** créée en
|
[Datascientest]{#datascientest} est une école de formation créée en 2017, située sur Paris et proposant plus de 18 formations différentes, dont Administrateur Système DevOps.
|
||||||
2017, située sur Paris et proposant **plus de 18 formations différentes**,
|
|
||||||
dont *Administrateur Système DevOps*.
|
|
||||||
|
|
||||||
Plusieurs formats de formation existent parmi **Bootcamp**, continu et en
|
Plusieurs formats de formation existent parmi Bootcamp, continu et en alternance. Ce projet est un exercice de fin de formation proposé à tous les élèves de la « cohorte » (équivalent d'une classe).
|
||||||
alternance. **Ce projet est un exercice de fin de formation** proposé à tous
|
|
||||||
les élèves de la « cohorte » (équivalent d'une classe).
|
|
||||||
|
|
||||||
Plusieurs élèves se regroupent autour d'un projet auquel ils ont un **intérêt
|
Plusieurs élèves se regroupent autour d'un projet auquel ils ont un intérêt commun.
|
||||||
commun**.
|
|
||||||
|
|
||||||
### L'équipe DevU42 {#devu42}
|
### L'équipe DevU42 {#devu42}
|
||||||
|
|
||||||
Le **groupe DevU42** s'est formé le **17 octobre 2024**. Il est composé de
|
Le groupe DevU42 s'est formé le 17 octobre 2024. Il est composé de quatre étudiants participant à la formation **Administrateur Système DevOps** de l’organisme de formation **DataScientest**.
|
||||||
**quatre étudiants** participant à la formation **Administrateur Système
|
|
||||||
DevOps** de l’organisme de formation [DataScientest](#datascientest).
|
|
||||||
|
|
||||||
Ses membres sont, par ordre alphabétique (prénom) :
|
Ses membres sont, par ordre alphabétique (prénom) :
|
||||||
|
|
||||||
* **Eliel MONCADA**
|
* Eliel MONCADA
|
||||||
* **Hrubech HOMBESSA**
|
* Hrubech HOMBESSA
|
||||||
* **Julien SABIOLS**
|
* Julien SABIOLS
|
||||||
* Olivier DOSSMANN
|
* Olivier DOSSMANN
|
||||||
|
|
||||||
Ils interviennent sur le projet en qualité d’**Administrateur Système DevOps**.
|
Ils interviennent sur le projet en qualité d’**Administrateur Système DevOps**.
|
||||||
|
|
||||||
L'équipe a été supervisée et suivie par [**Jérémie Tarot** sous la
|
L'équipe a été supervisée et suivie par [Jérémie Tarot sous la dénomination de « Mentor »]{#mentor}. Et ainsi en sera-t-il dans le présent document.
|
||||||
dénomination de **« Mentor »**]{#mentor}. Et ainsi en sera-t-il dans le
|
|
||||||
présent document.
|
|
||||||
|
|
||||||
### Organisation d'équipe
|
### Organisation d'équipe
|
||||||
|
|
||||||
@ -52,315 +39,232 @@ Pour s'organiser, l'équipe s'est doté de plusieurs outils et suivi quelques m
|
|||||||
|
|
||||||
#### Rapports hiérarchiques
|
#### Rapports hiérarchiques
|
||||||
|
|
||||||
L’équipe s'articule autour de membres ayant le **même degré de
|
L’équipe s'articule autour de membres ayant le même degré de responsabilités et d'objectifs. Leur périmètre et leur champ d'action est similaire qu'il s'agisse de déterminer les tickets à prendre en charge, les axes de travail à rajouter au projet ou bien de nouveaux objectifs.
|
||||||
responsabilités** et d'objectifs. Leur périmètre et leur champ d'action est
|
|
||||||
similaire qu'il s'agisse de déterminer les tickets à prendre en charge, les
|
|
||||||
axes de travail à rajouter au projet ou bien de nouveaux objectifs.
|
|
||||||
|
|
||||||
En cas de désaccord sur un sujet, une décision est prise à la majorité
|
En cas de désaccord sur un sujet, une décision est prise à la majorité votante, avec pour ultime recours l’avis du [Mentor](#mentor).
|
||||||
votante, avec pour ultime recours l’avis du [Mentor](#mentor).
|
|
||||||
|
|
||||||
#### Moyens de communication
|
#### Moyens de communication
|
||||||
|
|
||||||
La géolocalisation des membres de l'**équipe étant éparse**, plusieurs moyens
|
La géolocalisation des membres de l'équipe étant éparse, plusieurs moyens de communication en ligne ont été nécessaires, parmi :
|
||||||
de communication **en ligne** ont été nécessaires, parmi :
|
|
||||||
|
|
||||||
* Canaux de **discussions sur [Slack](https://slack.com/intl/fr-fr/)** fournis
|
* Canaux de discussions sur [Slack](https://slack.com/intl/fr-fr/) fournis initialement par [Datascientest](#datascientest) :
|
||||||
initialement par [Datascientest](#datascientest) :
|
* canal du projet - sep24_bootcamp_devops : favorise l'échange entre [DevU42](#devu42) et le [Mentor](#mentor),
|
||||||
* canal du projet - **sep24_bootcamp_devops** : favorise l'échange
|
* canal d'équipe - devu42 : pour les discussions techniques, les choix déccisifs et de la bonne humeur !
|
||||||
entre [DevU42](#devu42) et le [Mentor](#mentor),
|
|
||||||
* canal d'équipe - **devu42** : pour les **discussions techniques**,
|
|
||||||
les choix décisifs et de la bonne humeur !
|
|
||||||
* Un nom de domaine, **devu42.fr**,
|
* Un nom de domaine, **devu42.fr**,
|
||||||
* Une boîte courriel, **<team@devu42.fr>** partagée pour la **gestion des
|
* Une boîte courriel, <team@devu42.fr> partagée pour la gestion des services,
|
||||||
services**,
|
* [**Gitlab**, DevU42](https://gitlab.com/devu42/), un outil intégré avec gestion d'équipe, gestion de projet, gestion de tickets, gestion de tableau de bord (kanban), gestion de dépôts, gestion de paquets, etc.
|
||||||
* [**Groupe DevU42 sur Gitlab**](https://gitlab.com/devu42/), un outil intégré
|
* Un [wiki, DevU42](https://gitlab.com/devu42/projet/-/wikis/home) (fourni par Gitlab) permettant de rassembler les connaissances de l'équipe en un seul endroit,
|
||||||
avec gestion d'équipe, gestion de projet, gestion de tickets, gestion de
|
* [**Framapad**](https://framapad.org/abc/fr/), un éditeur de texte collaboratif pour les divers travaux de rédaction.
|
||||||
tableau de bord (kanban), gestion de dépôts, gestion de paquets, etc.
|
|
||||||
* Un [**wiki**, DevU42 sur
|
|
||||||
Gitlab](https://gitlab.com/devu42/projet/-/wikis/home) (fourni par Gitlab)
|
|
||||||
permettant de rassembler les **connaissances de l'équipe** en un seul endroit,
|
|
||||||
* [**Framapad**](https://framapad.org/abc/fr/), un éditeur de **texte
|
|
||||||
collaboratif** pour les divers travaux de rédaction.
|
|
||||||
|
|
||||||
### Contraintes initiales
|
### Contraintes initiales
|
||||||
|
|
||||||
Deux principales contraintes initiales avaient été imposées dans le cadre de
|
Deux principales contraintes initiales avaient été imposées dans le cadre de la formation :
|
||||||
la formation :
|
|
||||||
|
|
||||||
* le **budget**,
|
* le budget,
|
||||||
* le **temps**.
|
* le temps.
|
||||||
|
|
||||||
#### Budget
|
#### Budget
|
||||||
|
|
||||||
Le budget alloué au projet est de **150€ mensuel** pour couvrir l'intégralité
|
Le budget alloué au projet est de **150€ mensuel** pour couvrir l'intégralité des frais issus de l'utilisation de services Amazon (AWS).
|
||||||
des frais issus de l'utilisation de **services Amazon** (AWS).
|
|
||||||
|
|
||||||
C'est une limite configurée par [Datascientest](#datascientest) sur l'espace
|
C'est une limite configurée par [Datascientest](#datascientest) sur l'espace Amazon qu'ils nous partagent.
|
||||||
Amazon qu'ils nous partagent.
|
|
||||||
|
|
||||||
#### Temps
|
#### Temps
|
||||||
|
|
||||||
Le temps alloué pour réaliser ce projet avant un premier lancement officiel
|
Le temps alloué pour réaliser ce projet avant un premier lancement officiel est fixé à **7 semaines**.
|
||||||
est fixé à **7 semaines**.
|
|
||||||
|
|
||||||
Au terme des 7 semaines, un support visuel de présentation du projet pour son
|
Après livraison, l’amélioration du projet en continu se fera sur **6 semaines supplémentaires** durant lesquelles un dossier professionnel et un support de présentation est demandé à chacun des [membres de l'équipe](#devu42).
|
||||||
lancement est attendu (Cf. [Section du présent chapitre sur les
|
|
||||||
Livrables](#livrables)).
|
|
||||||
|
|
||||||
Après livraison, l’amélioration du projet est possible, bien qu'un dossier
|
|
||||||
professionnel, un dossier de projet (ci-présent) et un support de présentation
|
|
||||||
est demandé à chacun des [membres de l'équipe DevU42](#devu42).
|
|
||||||
|
|
||||||
## Le projet
|
## Le projet
|
||||||
|
|
||||||
Le point de départ du projet est un dépôt de version contenant une application
|
Le point de départ du projet est un dépôt de version contenant une application à mettre en ligne. Justification du projet, l'application elle-même, ambitions et objectifs sont des points à soulever.
|
||||||
à mettre en ligne. Justification du projet, l'application elle-même, ambitions
|
|
||||||
et objectifs sont des points à soulever.
|
|
||||||
|
|
||||||
### Justification du projet
|
### Justification du projet
|
||||||
|
|
||||||
L'école de formation [DataScientest](#datascientest) s'évertue à proposer une
|
L'école de formation [DataScientest](#datascientest) s'éverture à proposer une situation proche de la réalité afin que l'équipe nouvellement formée puisse apprendre par la pratique.
|
||||||
**situation proche de la réalité** afin que l'équipe nouvellement formée
|
|
||||||
puisse **apprendre par la pratique**.
|
|
||||||
|
|
||||||
On imagine facilement le cadre :
|
On imagine ainsi le cadre suivant :
|
||||||
|
|
||||||
> Une entreprise ayant une application de gestion d’utilisateur souhaite
|
> Une entreprise ayant une application de gestion d’utilisateur souhaite déployer et faire évoluer son service en favorisant les bonnes pratiques suivies dans la culture DevOps.
|
||||||
> déployer et faire évoluer son service en favorisant les bonnes pratiques
|
|
||||||
> suivies dans la culture DevOps.
|
|
||||||
|
|
||||||
De la même manière, l'entreprise pourrait rencontrer de nombreux
|
De la même manière, on imagine de l'entreprise une façon de fonctionner ayant de nombreux problèmes :
|
||||||
**problèmes** :
|
|
||||||
|
|
||||||
* **Reprise d’activité** lente, coûteuse et avec pertes d’informations,
|
* Reprise d’activité lente, coûteuse et avec pertes d’informations,
|
||||||
* Service instable, **disponibilité** non garantie, **vulnérabilité** du
|
* Service instable, disponibilité non garantie, vulnérabilité du service,
|
||||||
service,
|
* Capacité limitée pour encaisser des augmentations ponctuelles de la charge et du trafic,
|
||||||
* Capacité limitée pour encaisser des **augmentations** ponctuelles de la
|
* Absence de supervision et faible capacité à prévoir les problèmes,
|
||||||
**charge** et du **trafic**,
|
* Manque de contrôle sur la qualité du code ; procédures de développement pouvant être améliorées par l'automatisation,
|
||||||
* Absence de **supervision** et faible capacité à prévoir les problèmes,
|
|
||||||
* Manque de contrôle sur la **qualité du code** ; procédures de
|
|
||||||
développement pouvant être améliorées par l'**automatisation**,
|
|
||||||
* Perte de temps et erreurs humaines liées aux actions manuelles,
|
* Perte de temps et erreurs humaines liées aux actions manuelles,
|
||||||
* Manque de **portabilité de l'application** d'un système à l'autre,
|
* Manque de portabilité de l'application d'un système à l'autre,
|
||||||
* Lenteurs d’implémentation de **nouvelles fonctionnalités** avec
|
* Lenteurs d’implémentation de nouvelles fonctionnalité avec interruptions de service.
|
||||||
interruptions de service.
|
|
||||||
|
|
||||||
Pour bien saisir l'état des lieux de ladite application, regardons de plus
|
Pour bien saisir l'état des lieux de ladite application, regardons de plus près.
|
||||||
près.
|
|
||||||
|
|
||||||
### Application existante
|
### Application existante
|
||||||
|
|
||||||
L'**application FastAPI-Træfik** est fournie avec les éléments principaux
|
L’application FastAPI-Træfik est fournie avec les éléments principaux suivants :
|
||||||
suivants :
|
|
||||||
|
|
||||||
* Backend utilisant le framework **FastAPI** (en Python),
|
* BackEnd FastAPI (en Python),
|
||||||
* Frontend statique (en **React**, **Vite.js** et **Chakra UI**) :
|
* FrontEnd (Interface de gestion et d’enregistrement d’utilisateurs. Statique, Utilise React, Vite.js, Chakra UI.),
|
||||||
Interface de gestion et d'enregistrement d’utilisateurs utilisant l'API du
|
* Base de données postgreSQL,
|
||||||
backend,
|
* et Traefik (Proxy inverse).
|
||||||
* Base de données **postgreSQL**,
|
|
||||||
* et **Traefik** (Proxy inverse).
|
|
||||||
|
|
||||||
Tout ceci est déposé dans un **dépôt de version** avec de la **documentation**
|
Tout ceci est déposé dans un dépôt de version avec de la documentation en fichier Markdown (*.md) bruts.
|
||||||
en fichier *Markdown* (*.md) bruts.
|
|
||||||
|
|
||||||
De simples fichiers **Docker** et **docker-compose.yml** permettent aux
|
De simples fichiers Docker et docker-compose.yml permettent aux développeurs de lancer l'application localement.
|
||||||
développeurs de **lancer l'application localement**.
|
|
||||||
|
|
||||||
**Une procédure manuelle existe** pour expliquer comment mettre l'application
|
Une procédure existe pour expliquer comment manuellement mettre l'application en production sur une machine serveur dédiée.
|
||||||
en production sur une machine serveur dédiée.
|
|
||||||
|
|
||||||
Mais **le projet voit plus loin**.
|
Mais le projet voit plus loin.
|
||||||
|
|
||||||
### Ambitions
|
### Ambitions
|
||||||
|
|
||||||
En dehors des objectifs à atteindre, le projet vise à :
|
En dehors des objectifs à atteindre, le projet vise à :
|
||||||
|
|
||||||
* répondre aux problématiques de l’entreprise sur l'application existante par
|
* répondre aux problématiques de l’entreprise sur l'application existante par la méthode DevOps,
|
||||||
**la méthode DevOps**,
|
* répondre aux attentes de l’examen en matière de compétences attendues (méthode d'apprentissage par la pratique),
|
||||||
* répondre aux attentes de l’examen en matière de compétences attendues
|
* démontrer un savoir-faire technique sur les sujets principaux du DevOps, notamment vis à vis du Cloud en utilisant AWS,
|
||||||
(méthode d'**apprentissage par la pratique**),
|
* appliquer une méthode de travail qui optimise l’efficacité de la production des livrables.
|
||||||
* démontrer un **savoir-faire technique** sur les sujets principaux du DevOps,
|
|
||||||
notamment vis à vis du Cloud **en utilisant AWS** (Amazon Web Services),
|
|
||||||
* appliquer une méthode de travail qui optimise l’efficacité de la production
|
|
||||||
des livrables.
|
|
||||||
|
|
||||||
C'est de ces **ambitions** que naîssent plusieurs objectifs spécifiques.
|
C'est de ces ambitions que naîssent plusieurs objectifs spécifiques.
|
||||||
|
|
||||||
### Objectifs
|
### Objectifs
|
||||||
|
|
||||||
D'après moi, ce projet à plusieurs objectifs :
|
D'après moi, ce projet à plusieurs objectifs :
|
||||||
|
|
||||||
* balayer l'ensemble des **sujets liés à la culture DevOps et ses méthodes**,
|
* balayer l'ensemble des sujets liés à la culture DevOps et ses méthodes,
|
||||||
* porter, puis **déployer** une application **sur le cloud**,
|
* porter, puis déployer une application sur le cloud,
|
||||||
* préparer une **architecture complète** pour accueillir une à plusieurs
|
* préparer une architecture complète pour accueillir une à plusieurs applications,
|
||||||
applications,
|
* respecter un budget et des limites de temps,
|
||||||
* respecter un **budget** et des **limites de temps**,
|
* déployer en continu un projet en passant par une phase de test, de pré-production puis de production,
|
||||||
* **déployer en continu** un projet en passant par une phase de test, de
|
* penser à la gestion de la donnée,
|
||||||
pré-production puis de production,
|
* superviser un système déployé en production avec des tableaux de bord efficaces,
|
||||||
* penser à la **gestion de la donnée**,
|
* rendre un système résilient en prenant en compte les augmentations ET les diminution de charges et par une haute disponibilité,
|
||||||
* **superviser** un système déployé en production avec des tableaux de bord
|
* automatiser la plupart des actions afin de limiter les erreurs humaines,
|
||||||
efficaces,
|
* procéder, de manière automatique, à des vérifications sur la sécurité des éléments produits et déployés,
|
||||||
* rendre un système **résilient** en prenant en compte les augmentations ET
|
* favoriser une collaboration plus fluide entre les équipes de développements et les équipes d'opérations,
|
||||||
les diminution de **charges** et par une **haute disponibilité**,
|
* et obtenir des alertes en cas de défaillance d'un ou plusieurs éléments du système.
|
||||||
* **automatiser** la plupart des actions afin de **limiter les erreurs
|
|
||||||
humaines**,
|
|
||||||
* procéder, de manière automatique, à des vérifications sur **la sécurité**
|
|
||||||
des éléments produits et déployés,
|
|
||||||
* favoriser une **collaboration** plus fluide entre les équipes de
|
|
||||||
développements et les équipes d'opérations,
|
|
||||||
* et obtenir des **alertes** en cas de défaillance d'un ou plusieurs éléments
|
|
||||||
du système.
|
|
||||||
|
|
||||||
Ce sont des **objectifs plutôt ambitieux pour un temps aussi court**. Un
|
Ce sont des objectifs plutôt ambitieux pour un temps aussi court. Un travail d'équipe et une organisation sont totalement nécessaires.
|
||||||
travail d'équipe et une organisation de cette dernière sont totalement
|
|
||||||
primordiaux.
|
|
||||||
|
|
||||||
## Planification
|
## Planification
|
||||||
|
|
||||||
C'est par le [mentor](#mentor) que nous avons reçu le plan d'action pour les 7
|
C'est par le [mentor](#mentor) que nous avons reçu un plan d'action pour les 7 semaines de travail et une liste de livrables attendus. Nous avons adapté ce plan d'action pour nous correspondre.
|
||||||
semaines de travail à venir et une liste de livrables attendus. Nous avons
|
|
||||||
adapté ce plan d'action pour nous correspondre.
|
|
||||||
|
|
||||||
### Étapes de travail
|
### Étapes de travail
|
||||||
|
|
||||||
Commençons par le détail de chaque étape. Pour les 7 semaines à venir.
|
Voici le détail de chaque étape de travail.
|
||||||
|
|
||||||
#### Semaine 1 : Cadrage
|
#### Semaine 1 : Cadrage
|
||||||
|
|
||||||
Sous le signe de l'**encadrement**, cette première semaine est dite « douce » :
|
Sous le signe de l'encadrement, cette première semaine est dite « douce » :
|
||||||
|
|
||||||
* **réunion** de prise de contact, présentation et cadrage,
|
* réunion de prise de contact, présentation et cadrage,
|
||||||
* introduction de chaque membre du projet,
|
* introduction de chaque membre du projet,
|
||||||
* **découverte** de l'application,
|
* découverte de l'application,
|
||||||
* **analyse** du sujet,
|
* analyse du sujet,
|
||||||
* évaluation du contexte, des objectifs et du **périmètre** du projet,
|
* évaluation du contexte, des objectifs et du périmètre du projet,
|
||||||
* et **rédaction** du premier jet du présent **cahier des charges**.
|
* et rédaction du premier jet du présent cahier des charges.
|
||||||
|
|
||||||
Il faut ce temps pour découvrir de quoi il retourne.
|
Il faut ce temps pour découvrir de quoi il retourne.
|
||||||
|
|
||||||
#### Semaine 2 : Planification
|
#### Semaine 2 : Planification
|
||||||
|
|
||||||
Vient ensuite une **phase d'organisation** avec :
|
Vient ensuite une phase d'organisation avec :
|
||||||
|
|
||||||
* définition du contexte, des objectifs et du périmètre du projet,
|
* définition du contexte, des objectifs et du périmètre du projet,
|
||||||
* **organisation** des exigences,
|
* organisation des exigences,
|
||||||
* **identification des composants** d'architecture,
|
* identification des composants d'architecture,
|
||||||
* choix de **solutions à implémenter**,
|
* choix de solutions à implémenter,
|
||||||
* et **définition de l'architecture** et les **spécifications** du système
|
* et définition de l'architecture et les spécifications du système cible.
|
||||||
cible.
|
|
||||||
|
|
||||||
Ce qui amène à **compléter le cahier des charges**.
|
Ce qui amène à compléter le cahier des charges.
|
||||||
|
|
||||||
Nous prévoyons aussi :
|
Nous prévoyons aussi :
|
||||||
|
|
||||||
* une **configuration de Gitlab**, des principaux dépôts, des branches, etc.,
|
* une configuration de Gitlab, des principaux dépôts Gitlab, des branches, etc.,
|
||||||
* de s'organiser en équipe : définir des **méthodologies** à suivre.
|
* de s'organiser en équipe : définir des méthodologies à suivre.
|
||||||
|
|
||||||
#### Semaine 3 : Automatisation de la chaine d’intégration et de livraison
|
#### Semaine 3 : Automatisation de la chaine d’intégration et de livraison
|
||||||
|
|
||||||
Une fois les outils principaux mis en place, il s'agit d'**automatiser**
|
Une fois les outils principaux mis en place, il s'agit d'automatiser certaines choses :
|
||||||
plusieurs parties :
|
|
||||||
|
|
||||||
* automatisation des **tests pour le backend et le frontend**,
|
* automatisation des tests pour le backend et le frontend,
|
||||||
* création d'**image Docker pour le backend**,
|
* création d'image Docker pour le backend,
|
||||||
* création d'**image Docker pour le frontend**,
|
* création d'image Docker pour le frontend,
|
||||||
* automatisation des images Docker et de leur **publication sur des
|
* automatisation des images Docker et de leur publication sur des registres,
|
||||||
registres d'images**,
|
* création de chart Helm pour le backend,
|
||||||
* création de **chart Helm pour le backend**,
|
* création de chart Helm pour le frontend,
|
||||||
* création de **chart Helm pour le frontend**,
|
* automatisation de la création des chart Helm et de leur publication,
|
||||||
* automatisation de la création des chart Helm et de leur **publication sur
|
* et automatisation de la création de l'infrastructure (même si elle n'est pas encore clairement définie).
|
||||||
des registres d'images**,
|
|
||||||
* et **automatisation de la création de l'infrastructure** (même si elle n'est
|
|
||||||
pas encore clairement définie).
|
|
||||||
|
|
||||||
L'**adoption d'un workflow Git** pour la gestion des branches est la bienvenue.
|
L'adoption d'un workflow pour la gestion des branches Git est la bienvenue.
|
||||||
|
|
||||||
#### Semaine 4 : Conception de l’infrastructure
|
#### Semaine 4 : Conception de l’infrastructure
|
||||||
|
|
||||||
Vient ensuite la création de la **couche basse de l'infrastructure** :
|
Vient ensuite la création de la couche basse de l'infrastructure :
|
||||||
|
|
||||||
* **création d'un schéma** de la couche basse de l'infrastructure,
|
* création d'un schéma de la couche basse de l'infrastructure,
|
||||||
* description de cette infrastructure via des modules adaptés et en adoptant
|
* description de cette infrastructure via des modules adaptés et en adoptant l'Infrastructure as Code (IaC),
|
||||||
l'**Infrastructure as Code (IaC)**,
|
* premiers choix de solutions pour le stockage, les sauvegardes, la supervision et l'environnement d'accueil de l'application,
|
||||||
* premiers **choix de solutions** pour le **stockage**, les **sauvegardes**,
|
* activation des certificats Let's Encrypt,
|
||||||
la **supervision** et l'**environnement d'accueil** de l'application,
|
* liaison avec le nom de domaine,
|
||||||
* activation des **certificats** Let's Encrypt,
|
* et mise à l'échelle automatique.
|
||||||
* liaison avec le **nom de domaine**,
|
|
||||||
* et **mise à l'échelle automatique**.
|
|
||||||
|
|
||||||
Une semaine n'est pas suffisante pour traiter tous les sujets. En revanche
|
Une semaine n'est pas suffisante pour traiter tous les sujets. En revanche cela permet de les aborder et d'échanger sur ces derniers.
|
||||||
cela permet de les aborder et d'échanger sur ces derniers.
|
|
||||||
|
|
||||||
#### Semaine 5 : Gestion des données
|
#### Semaine 5 : Gestion des données
|
||||||
|
|
||||||
Possiblement en parallèle du [sujet de la semaine 6 sur l'Observabilité et des
|
La semaine 5 passe par :
|
||||||
alertes](#semaine6), la gestion des données est importante et passe par :
|
|
||||||
|
|
||||||
* créer et configurer des **ressources de stockage de données**,
|
* créer et configurer des ressources de stockage de données,
|
||||||
* mise en place de **politique d'authentification** et d'autorisation,
|
* mise en place de politique d'authentification et d'autorisation,
|
||||||
* **import des données**,
|
* import des données,
|
||||||
* et installer/configurer une solution de **sauvegarde** et de **restauration
|
* et installer et configurer une solution de sauvegarde et de restauration de données.
|
||||||
de données**.
|
|
||||||
|
|
||||||
C'est un sujet bien à part. D'où la possibilité de la **faire en parallèle**
|
Rien de très particulier à ce niveau là.
|
||||||
d'un autre.
|
|
||||||
|
|
||||||
#### Semaine 6 : Observabilité et alertes {#semaine6}
|
#### Semaine 6 : Observabilité et alertes
|
||||||
|
|
||||||
Quant à la semaine 6, nous avons **principalement la supervision** à
|
Quant à la semaine 6, nous avons principalement la supervision à gérer :
|
||||||
gérer :
|
|
||||||
|
|
||||||
* configuration du **système de supervision centralisé**,
|
* configuration du système de supervision centralisé,
|
||||||
* mise en place d'une **collecte** de surveillance **pertinente** pour
|
* mise en place d'une collecte de surveillance pertinente pour l'application,
|
||||||
l'application,
|
* choix des métriques à utiliser pour la création de tableaux de bords,
|
||||||
* **choix des métriques** à utiliser pour la création de tableaux de bords,
|
* création des tableaux de bords,
|
||||||
* création des **tableaux de bords**,
|
* définition des niveaux d'alertes pour les métriques choisis,
|
||||||
* **définition des niveaux d'alertes** pour les métriques choisis,
|
* mise en place des alertes,
|
||||||
* mise en place des **alertes**,
|
* et envoi des alertes sur les canaux choisis.
|
||||||
* et envoi des alertes sur **les canaux choisis**.
|
|
||||||
|
|
||||||
Ces éléments pourront être complétés et étendus une fois la solution
|
Ces éléments pourront être complétés et étendus une fois la solution principale de supervision configurée.
|
||||||
principale de supervision configurée.
|
|
||||||
|
|
||||||
#### Semaine 7 : Présentation de la solution finale
|
#### Semaine 7 : Présentation de la solution finale
|
||||||
|
|
||||||
Cette dernière semaine ciblera la **présentation et** le **lancement officiel
|
Cette dernière semaine ciblera la présentation et le lancement officiel de l'application. Il faudra donc :
|
||||||
de l'application**. Il faudra donc :
|
|
||||||
|
|
||||||
* compléter les **documentations**,
|
* compléter les documentations,
|
||||||
* **mettre à jour les schémas** en fonction d'éventuels changements,
|
* mettre à jour les schémas en fonction d'éventuels changements,
|
||||||
* préparer un **support visuel de présentation du projet**,
|
* préparer un support visuel de présentation du projet,
|
||||||
* veiller à ce que l'**application tourne sans accrocs** pour la présentation,
|
* veiller à ce que l'application tourne sans accrocs pour la présentation,
|
||||||
* et résoudre les derniers problèmes majeurs connus - s'ils existent.
|
* et résoudre les derniers problèmes majeurs connus - s'ils existent.
|
||||||
|
|
||||||
C'est un **plan ambitieux** quand on considère que **les membres de l'équipe
|
C'est un plan assez ambitieux quand on considère que les membres de l'équipe proviennent d'horizons et de formations variées.
|
||||||
proviennent d'horizons et de formations variées**.
|
|
||||||
|
|
||||||
### Livrables {#livrables}
|
### Livrables
|
||||||
|
|
||||||
Sont attendus les **livrables** suivants :
|
Sont attendus les éléments suivants :
|
||||||
|
|
||||||
* un **cahier des charges**,
|
* un cahier des charges,
|
||||||
* une **présentation par diapositives** pour le lancement de l'application,
|
* une présentation par diapositives pour le lancement de l'application,
|
||||||
* une application **déployée en production**, sans bugs,
|
* une application déployée en production, sans bugs,
|
||||||
* un **système de supervision** de la production,
|
* un système de supervision de la production,
|
||||||
* une **gestion des données** avec un **système de sauvegarde**,
|
* une gestion des données avec un système de sauvegarde,
|
||||||
* un **schéma de la couche basse de l'infrastructure** utilisée dans le Cloud
|
* un schéma de la couche basse de l'infrastructure utilisée dans le Cloud pour la production,
|
||||||
pour la production,
|
* un accès aux dépôts et scripts permettant l'automatisation du déploiement de l'application et de la génération des différents éléments (images Docker, Chart Helm, registres, etc.),
|
||||||
* un **accès aux dépôts et scripts** permettant l'automatisation du
|
* et un fonctionnement en haute disponibilité de l'application.
|
||||||
déploiement de l'application et de la génération des différents éléments
|
|
||||||
(images Docker, Chart Helm, registres, etc.),
|
|
||||||
* et un **fonctionnement en haute disponibilité** de l'application.
|
|
||||||
|
|
||||||
## Conclusion
|
## Conclusion
|
||||||
|
|
||||||
Le projet **couvre beaucoup de situations** et **domaines** autour de
|
Le projet couvre beaucoup de situations et domaines autour de l'automatisation et la mise en production, dans le Cloud, d'une application avec une supervision et une mise à l'échelle de cette dernière.
|
||||||
**l'automatisation** et la **mise en production**, dans le Cloud, d'une
|
|
||||||
application avec une **supervision** et une **mise à l'échelle** de cette
|
|
||||||
dernière.
|
|
||||||
|
|
||||||
En groupe, c'est un projet idéal pour suivre l'« **apprentissage par la
|
En groupe, c'est un projet idéal pour suivre l'« apprentissage par la pratique » proposée par [DataScientest](#datascientest) et couvrir un maximum de compétences demandées pour le Titre Professionnel d'Administrateur Système DevOps.
|
||||||
pratique** » proposé par [DataScientest](#datascientest) et couvrir un maximum
|
|
||||||
de compétences demandées pour le *Titre Professionnel d'Administrateur
|
|
||||||
Système* DevOps.
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -3,69 +3,54 @@
|
|||||||
# Démarche suivie {#demarche}
|
# Démarche suivie {#demarche}
|
||||||
|
|
||||||
La réalisation de ce projet va plus loin que la simple mise en place d'une
|
La réalisation de ce projet va plus loin que la simple mise en place d'une
|
||||||
application dans le Cloud. C'est une **nouvelle équipe**, dans un **nouvel
|
application dans le Cloud. C'est une nouvelle équipe, dans un nouvel
|
||||||
environnement** avec une application inconnue et **des savoirs à acquérir**.
|
environnement avec une application inconnue et des savoirs à acquérir.
|
||||||
|
|
||||||
En pareille situation, c'est tout un **écosystème DevOps** qu'il faut mettre
|
En pareille situation, c'est tout un **écosystème DevOps** qu'il faut mettre
|
||||||
en place. Nous allons donc avant tout parler de **méthodologie utilisées**
|
en place. Nous allons donc avant tout parler de méthodologie utilisés pour
|
||||||
pour ce faire, puis des **outils utilisés** et enfin aborder le sujet de
|
ce faire, puis des outils utilisés et enfin aborder le sujet de
|
||||||
**collaborations** avec d'autres équipes.
|
collaborations avec d'autres équipes.
|
||||||
|
|
||||||
## Méthodologie
|
## Méthodologie
|
||||||
|
|
||||||
### Agile
|
### Agile
|
||||||
|
|
||||||
Le choix d'une **méthodologie agile** « basique » s'est offerte à nous,
|
Le choix d'une méthodologie agile « basique » s'est offerte à nous, notamment par :
|
||||||
notamment par :
|
|
||||||
|
|
||||||
* des **comptes-rendus journaliers rapides de 10mn** en respectant les points
|
* des **comptes-rendus journaliers rapides de 10mn** en respectant les points suivants :
|
||||||
suivants :
|
|
||||||
* ce que j'ai fais hier,
|
* ce que j'ai fais hier,
|
||||||
* ai-je rencontré un/des problème(s) qui vaille(nt) d'être cité(s),
|
* ai-je rencontré un/des problème(s) qui vaille(nt) d'être cité(s),
|
||||||
* ce que je compte faire aujourd'hui,
|
* ce que je compte faire aujourd'hui,
|
||||||
* la **création de jalons** avec un ensemble de tâches sur une période d'une
|
* la **création de jalons** avec un ensemble de tâches sur une période d'une semaine,
|
||||||
semaine,
|
* des échanges réguliers en **pair-programming** sur des sujets difficiles **via [la plateforme Slack](slack.com)**,
|
||||||
* des échanges réguliers en **pair-programming** sur des sujets difficiles
|
* et l'utilisation d'un **tableau façon Kanban** (méthode de gestion de production en flux tendus).
|
||||||
**via [la plateforme Slack](slack.com)**,
|
|
||||||
* et l'utilisation d'un **tableau façon Kanban** (méthode de gestion de
|
|
||||||
production en flux tendus).
|
|
||||||
|
|
||||||
C'est ainsi que les **jalons** ont parsemés la durée du projet en **objectifs à
|
C'est ainsi que les jalons ont parsemés la durée du projet en objectifs à atteindre.
|
||||||
atteindre**.
|
|
||||||
|
|
||||||
### Jalons
|
### Jalons
|
||||||
|
|
||||||
Les **jalons** (milestones en anglais) permettent de savoir si le projet
|
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 :
|
||||||
dérive de l'objectif attendu. Voici les jalons qui ont été utilisés :
|
|
||||||
|
|
||||||
* Étape 1 : **préparation** - outils (configuration de gitlab, des projets, du
|
* Étape 1 : préparation - outils (config. gitlab, projets, wiki, etc.), **cahier des charges**
|
||||||
wiki, etc.), **cahier des charges**,
|
* Étape 2 (avec 3) : **CI/CD** sur le projet principal
|
||||||
* Étape 2 (avec 3) : **CI/CD** sur le projet principal,
|
* Étape 3 (avec 2) : **Infrastructure** (Terraform)
|
||||||
* Étape 3 (avec 2) : **Infrastructure** (Terraform),
|
* Étape 4 (avec 5) : Données (**postgreSQL**)
|
||||||
* Étape 4 (avec 5) : Données (**postgreSQL**),
|
* Étape 5 (avec 4) : **Observabilité**
|
||||||
* Étape 5 (avec 4) : **Supervision** (observabilité, alertes),
|
* Étape 6 : **extras** (s'il y a du temps restant)
|
||||||
* Étape 6 : **extras** (s'il reste du temps).
|
|
||||||
|
|
||||||
Les jalons n'étaient pas suffisants, d'autres éléments ont dû être pris en
|
Les jalons n'étaient pas suffisants, d'autres éléments ont dû être pris en compte.
|
||||||
compte.
|
|
||||||
|
|
||||||
### Choix de standards et normes
|
### Choix de standards et normes
|
||||||
|
|
||||||
Plusieurs standards/normes ont été choisies pour **rassembler plutôt que
|
Plusieurs standards/normes ont été choisies pour rassembler plutôt que diviser le groupe : SemVer, Git OneFlow et Conventional commit.
|
||||||
diviser le groupe** : SemVer, Git OneFlow et Conventional commit.
|
|
||||||
|
|
||||||
#### SemVer
|
#### SemVer
|
||||||
|
|
||||||
[SemVer](https://semver.org/) ou **Semantic Versioning** est un standard
|
[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).
|
||||||
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).
|
|
||||||
|
|
||||||
Respecter SemVer, c'est permettre d'utiliser des outils conçus pour cela mais
|
Respecter SemVer, c'est permettre d'utiliser des outils conçus pour cela mais aussi et surtout **faciliter la gestion des dépendances**.
|
||||||
aussi et surtout **faciliter la gestion des dépendances**.
|
|
||||||
|
|
||||||
Nous ne détaillerons pas l'ensemble du standard, mais voici **quelques
|
Nous ne détaillerons pas l'ensemble du standard, mais voici quelques exemples de versions :
|
||||||
exemples de versions** :
|
|
||||||
|
|
||||||
```
|
```
|
||||||
1.0.0
|
1.0.0
|
||||||
@ -75,38 +60,24 @@ exemples de versions** :
|
|||||||
1.5.2-rc.2
|
1.5.2-rc.2
|
||||||
```
|
```
|
||||||
|
|
||||||
Cela fonctionne donc sous la forme **Majeur**.*Mineur*.`Correctif`.
|
Cela fonctionne donc sous la forme `Majeur`.`Mineur`.`Correctif`.
|
||||||
|
|
||||||
#### Git OneFlow
|
#### Git OneFlow
|
||||||
|
|
||||||
[**Git OneFlow**](
|
[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/).
|
||||||
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/).
|
|
||||||
|
|
||||||
Il se base principalement sur un objectif simple : avoir un arbre Git
|
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.
|
||||||
dont la **branche principale** est **la plus linéaire possible**. C'est à dire
|
|
||||||
avec le moins d'embranchements possibles.
|
|
||||||
|
|
||||||
En somme on va favoriser le **rebase** sur les branches dédiées à une nouvelle
|
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 :
|
||||||
fonctionnalité **avant de fusionner sur la branche principale**. Cela aura
|
|
||||||
l'avantage :
|
|
||||||
|
|
||||||
* de réduire le travail de la personne qui fusionne la branche de
|
* de réduire le travail de la personne qui fusionne la branche de fonctionnalités,
|
||||||
fonctionnalités,
|
* et de favoriser la résolution des conflits de fusion aux développeurs responsables de 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.
|
|
||||||
|
|
||||||
{width=50%}\
|
||||||
OneFlow](./media/feature-branch-rebase-final.png){width=50%}
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
|
|
||||||
#### Conventional commit
|
#### Conventional commit
|
||||||
|
|
||||||
Dans le cadre de la **rédaction de message de commit** pour chaque changement
|
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).
|
||||||
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)**.
|
|
||||||
|
|
||||||
Cela se résume à peu près à cela :
|
Cela se résume à peu près à cela :
|
||||||
|
|
||||||
@ -118,7 +89,7 @@ Cela se résume à peu près à cela :
|
|||||||
[pied optionnel]
|
[pied optionnel]
|
||||||
```
|
```
|
||||||
|
|
||||||
Qui donne **par exemple** :
|
Qui donne par exemple :
|
||||||
|
|
||||||
```markdown {.numberLines}
|
```markdown {.numberLines}
|
||||||
feat(backend): include postgreSQL BDD + backend
|
feat(backend): include postgreSQL BDD + backend
|
||||||
@ -136,180 +107,111 @@ feat(backend): include postgreSQL BDD + backend
|
|||||||
ref projet#18
|
ref projet#18
|
||||||
```
|
```
|
||||||
|
|
||||||
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*.
|
|
||||||
|
|
||||||
## Outils
|
## Outils
|
||||||
|
|
||||||
Au delà d'une à plusieurs méthodologies/normes/standards, nous avons utilisés
|
Au delà d'une à plusieurs méthodologies/normes/standards, nous avons utilisés des outils afférents.
|
||||||
des outils afférents.
|
|
||||||
|
|
||||||
### Nom de domaine
|
### Nom de domaine
|
||||||
|
|
||||||
Afin d'avoir une **boîte courriel commune** (team@devu42.fr) et des **noms de
|
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**.
|
||||||
domaine** qui pointent sur le résultat de nos travaux, nous avons opté pour la
|
|
||||||
location d'un nom de domaine : **devu42.fr**.
|
|
||||||
|
|
||||||
Ce domaine fait référence à notre cursus de DevOps dans un centre de formation
|
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 ».
|
||||||
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 ».
|
|
||||||
|
|
||||||
Nous avons ainsi pu avoir des **noms de domaines spécifiques** pour :
|
Nous avons ainsi pu avoir des noms de domaines spécifiques pour :
|
||||||
|
|
||||||
* le backend (API) dans l'environnement de pré-production,
|
* le backend (API) dans l'environnement de pré-production,
|
||||||
**api.staging**.devu42.fr,
|
* le backend (API) dans l'environnement de production,
|
||||||
* le backend (API) dans l'environnement de production, **api.r53**.devu42.fr,
|
|
||||||
* le frontend dans l'environnement de pré-production,
|
* le frontend dans l'environnement de pré-production,
|
||||||
**www.staging**.devu42.fr,
|
* et le frontend dans l'environnement de production.
|
||||||
* et le frontend dans l'environnement de production, **www.r53**.devu42.fr.
|
|
||||||
|
|
||||||
C'était donc un bon départ.
|
C'était donc un bon départ.
|
||||||
|
|
||||||
### Plateforme DevOps
|
### Plateforme DevOps
|
||||||
|
|
||||||
Notre outil principal a été la **plateforme Gitlab**. C'est une plateforme
|
Notre outils principal a été la **plateforme Gitlab**. C'est une plateforme complète de DevOps qui couvre bon nombre de besoins DevOps parmi :
|
||||||
complète de DevOps qui couvre bon nombre de besoins DevOps parmi :
|
|
||||||
|
|
||||||
* des dépôts de code source (**dépôts Git**),
|
* des dépôts de code source (dépôts Git),
|
||||||
* un système d'**intégration continue** (**GitlabCI**),
|
* un système d'intégration continu (GitlabCI),
|
||||||
* une gestion des **rôles utilisateurs** pour une granularité de **gestion de
|
* une gestion des rôles utilisateurs pour une granularité de gestion de permissions tout en finesse,
|
||||||
permissions** tout en finesse,
|
* des dépôts pour :
|
||||||
* des dépôts/**registres** pour :
|
* les Chart Helm,
|
||||||
* les **Chart Helm**,
|
* les images Docker,
|
||||||
* les **images Docker**,
|
* les modules Terraform,
|
||||||
* les **modules Terraform**,
|
* les états Terraform,
|
||||||
* les **états Terraform**,
|
* les librairies Python, PHP, JS,
|
||||||
* les bibliothèques Python, PHP, JS,
|
|
||||||
* etc.,
|
* etc.,
|
||||||
* un **système de gestion de tickets** pour le retour régulier (feedback) des
|
* un système de gestion de tickets pour le retour régulier (feedback) des utilisateurs,
|
||||||
utilisateurs,
|
* l'usage de jalons, kanban et métriques des équipes pour une gestion efficace d'une à plusieurs équipe dans un projet,
|
||||||
* l'usage de **jalons**, **kanban** et **métriques des équipes** pour une
|
* la gestion des versions (release),
|
||||||
gestion efficace d'**une à plusieurs équipes** dans un projet,
|
* l'intégration avec Kubernetes pour un suivi depuis Gitlab de nos clusters Kubernetes,
|
||||||
* la gestion des versions (**releases**),
|
|
||||||
* l'**intégration avec Kubernetes** pour un suivi depuis Gitlab de nos
|
|
||||||
clusters Kubernetes,
|
|
||||||
* etc.
|
* etc.
|
||||||
|
|
||||||
De nombreuses fonctionnalités supplémentaires existent dans Gitlab. Cela en
|
De nombreuses fonctionnalités supplémentaires existent dans Gitlab. Cela en fait donc un outil de choix pour notre projet.
|
||||||
fait donc un outil de choix pour notre projet.
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
|
|
||||||
#### Base de connaissance
|
#### Base de connaissance
|
||||||
|
|
||||||
Une des premières choses qui a été faite sur cette plateforme a été la **mise
|
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.
|
||||||
en place d'une base de connaissances** sous la forme d'un Wiki.
|
|
||||||
|
|
||||||
Pour plusieurs raisons :
|
Pour plusieurs raisons :
|
||||||
|
|
||||||
* **partager nos découvertes** sur les outils (liens web, procédures
|
* partager nos découvertes sur les outils (liens web, procédures d'installation, etc.),
|
||||||
d'installation, etc.),
|
* détailler nos diverses installations,
|
||||||
* détailler nos diverses **installations**,
|
* partager nos travaux,
|
||||||
* **partager nos travaux**,
|
* rédaction de contenu concernant les réunions, des outils, etc.
|
||||||
* rédaction de contenu concernant les **réunions**, des **outils**, etc.
|
|
||||||
|
|
||||||
{width=100%}\
|
||||||
Wiki](./media/screenshot_wiki_projet.png){width=100%}
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
|
|
||||||
#### Workflow des tickets
|
#### Workflow des tickets
|
||||||
|
|
||||||
Autre exemple de configuration de la plateforme Gitlab afin de suivre notre
|
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.
|
||||||
organisation : la **création d'un workflow de l'état d'un ticket**, que
|
|
||||||
vous trouverez ci-après.
|
|
||||||
|
|
||||||
{width=50%}\
|
||||||
tickets](./media/schema_workflow_ticket.png){height=70%}
|
|
||||||
|
|
||||||
Il permet à chaque membre de l'équipe de prendre connaissance des habitudes en
|
Il permet à chaque membre de l'équipe de prendre connaissance des habitudes en matière de gestion de ticket.
|
||||||
matière de gestion de ticket.
|
|
||||||
|
|
||||||
Il est utile si jamais nous changions de plateforme DevOps : il suffirait
|
Il est utile si jamais nous changerions de plateforme DevOps : il suffirait d'appliquer à nouveau le même workflow.
|
||||||
d'appliquer à nouveau le même workflow.
|
|
||||||
|
|
||||||
## Cas d'une collaboration inter-équipe {#collab}
|
## Cas d'une collaboration inter-équipe {#collab}
|
||||||
|
|
||||||
Dans le cadre de nos diverses **réflexions** nous avons eu un contact **avec
|
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é.
|
||||||
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
|
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/).
|
||||||
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
|
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 ajoute également de faire la promotion des versions entre ces différents environnements/dossiers. Avec une procédure « humaine » pour limiter de trop nombreuses promotions.
|
||||||
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.
|
|
||||||
|
|
||||||
Pour reprendre le schéma de l'article :
|
Pour reprendre le schéma de l'article :
|
||||||
|
|
||||||
{width=100%}\
|
||||||
versions](./media/article_schema_promotion.png){width=100%}
|
|
||||||
|
|
||||||
Après moultes discussions, **nous sommes tombés d'accord** sur quelques
|
Après moultes discussions, nous sommes tombés d'accord sur quelques points, parmi :
|
||||||
points, parmi :
|
|
||||||
|
|
||||||
* **ne pas utiliser une branche par environnement**,
|
* ne PAS utiliser une branche par environnement,
|
||||||
* essayer au maximum d'**avoir des dépôts indépendants** (favoriser la
|
* essayer au maximum d'avoir des dépôts indépendants (favoriser la modularité),
|
||||||
modularité),
|
* faire de la promotion logicielle par la CI plutôt que manuellement,
|
||||||
* 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).
|
||||||
* 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é
|
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).
|
||||||
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 :
|
Mon idéal serait :
|
||||||
|
|
||||||
* avoir des **dépôts indépendants pour chaque application** avec des **tests
|
* 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,
|
||||||
de sécurité**, des **tests du code**, vérification de la **couverture de
|
* avoir une gestion de chacun de ces dépôts d'un système de versionnement (les fameuses « releases »),
|
||||||
code** et **tests sur la compilation** - éventuelle - de l'outil et/ou des
|
* avoir la même chose pour chaque module Terraform que nous avons fabriqué (par exemple notre module « networking »),
|
||||||
**images Docker** puis **publication sur un registre**,
|
* puis utiliser, dans un dépôt **infra** par exemple, nos modules situés sur des registres avec une version donnée,
|
||||||
* 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),
|
|
||||||
* de là on peut imaginer :
|
* de là on peut imaginer :
|
||||||
* soit de la promotion des versions par une intégration continue entre
|
* 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,
|
||||||
dépôts (pré-production vers production par exemple) OU entre dossiers
|
* soit de la promotion des versions par une validation manuelle entre la pré-production et la production,
|
||||||
représentant un environnement,
|
* ajouter des tests de sécurité des images (comme le contrôle de somme) avant utilisation dans d'autres dépôts.
|
||||||
* 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.
|
|
||||||
|
|
||||||
À noter que Maxime et moi étions également arrivés sur le fait qu'il y a déjà
|
À 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 :
|
||||||
2 types de promotions dans tout cela :
|
|
||||||
|
|
||||||
* la promotion des versions des logiciels/modules/charts utilisés,
|
* la promotion des versions des logiciels/modules/charts utilisés,
|
||||||
* et la promotion des configurations de ces derniers au sein de nos
|
* et la promotion des configurations de ces derniers au sein de nos infrastructures.
|
||||||
infrastructures.
|
|
||||||
|
|
||||||
C'est un autre sujet très intéressant que nous ne détaillerons pas ici.
|
C'est un autre sujet très intéressant que nous ne détaillerons pas ici.
|
||||||
|
|
||||||
## Conclusion
|
## Conclusion
|
||||||
|
|
||||||
La **démarche entreprise** a été structurée autour de **méthodologies** et
|
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 logiciel 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.
|
||||||
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.
|
|
||||||
|
|
||||||
A contrario, la **gestion d'équipe** lors de ce projet **a fait défaut** et
|
Cependant 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é.
|
||||||
nous aurions pu nous organiser bien mieux qu'il n'a été.
|
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -2,22 +2,10 @@
|
|||||||
|
|
||||||
# Conclusion
|
# Conclusion
|
||||||
|
|
||||||
Ma **passion anticipée pour l'automatisation** et l'**amélioration des
|
Ma passion anticipée pour l'automatisation et l'amélioration des processus de création logiciel m'ont amené à ce moment, aujourd'hui, où j'écris ces lignes pour embrasser le métier d'Administrateur Système DevOps. La formation, puis le projet de fin de formation ont été bénéfique à la prise d'expérience, mais pas que.
|
||||||
processus** de **création logiciel** m'ont amené à ce moment, aujourd'hui, où
|
|
||||||
j'écris ces lignes pour **embrasser le métier d'Administrateur Système
|
|
||||||
DevOps**. La formation, puis **le projet de fin de formation** ont été
|
|
||||||
**bénéfique à la prise d'expérience**, mais pas que.
|
|
||||||
|
|
||||||
En effet, **il est question de nouvelles compétences**, que le projet, à
|
En effet il est question de nouvelles compétences que le projet, à travers la rédaction d'un cahier des charges, de spécifications fonctionnelles, d'une approche (démarche) suivie, de plusieurs réalisations et de situations diverses qu'ont permis d'acquérir tout au long de ces derniers mois.
|
||||||
travers la rédaction d'un cahier des charges, de spécifications
|
|
||||||
fonctionnelles, d'une approche (démarche) suivie, de plusieurs réalisations et
|
|
||||||
de situations diverses, a permis d'**acquérir tout au long de ces derniers
|
|
||||||
mois**.
|
|
||||||
|
|
||||||
Ainsi **je ressors riche de nouvelles expériences**, de **nouveaux outils**,
|
Ainsi je ressors riche de nouvelles expériences, de nouveaux outils, de nouvelles méthodes et de nouveaux collaborateurs dans un monde sans cesse grandissant qu'est le monde du DevOps.
|
||||||
de **nouvelles méthodes** et de **nouveaux collaborateurs** dans un monde sans
|
|
||||||
cesse grandissant qu'est **le monde du DevOps**.
|
|
||||||
|
|
||||||
Bien que ne sachant ce que l'avenir me réserve, j'espère qu'il continuera sur
|
Bien que ne sachant ce que l'avenir me réserve, j'espère qu'il continuera sur la voie du DevOps et de l'enrichissement par de nouvelles connaissances et perspéctives professionnelles d'avenir !
|
||||||
la voie du DevOps et de l'enrichissement par de nouvelles connaissances et
|
|
||||||
perspéctives professionnelles d'avenir !
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 198 KiB |
BIN
media/screenshot_fluxcd_doc.png
Normal file
BIN
media/screenshot_fluxcd_doc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 183 KiB |
@ -173,7 +173,6 @@ $if(colorlinks)$
|
|||||||
\usepackage{xcolor}
|
\usepackage{xcolor}
|
||||||
$endif$
|
$endif$
|
||||||
\usepackage{hyperref}
|
\usepackage{hyperref}
|
||||||
\usepackage{rotating}
|
|
||||||
\hypersetup{
|
\hypersetup{
|
||||||
$if(title-meta)$
|
$if(title-meta)$
|
||||||
pdftitle={$title-meta$},
|
pdftitle={$title-meta$},
|
||||||
|
Loading…
Reference in New Issue
Block a user