Documentation DevOps
Le but de cette documentation est de fournir une présentation de la méthode DevOps, ainsi que des outils et des infrastructures permettant de l'appliquer à différents projets.
Méthode DevOps
Le but de la méthode DevOps est de d'automatiser la mise en production de code écrit par des développeurs, transformant le développement d'un projet en une boucle infinie de développement, d'intégration continue (CI) et de déploiement continu (CD).
Celle-ci peut-être résumée via le diagramme suivant :
L'idée est que le code des développeurs soit, une fois envoyé sur un gestionnaire de code source, compilé, testé, empaqueté puis mis en production où le programme pourra renvoyer des métriques aux développeurs qui pourront alors travailler sur les prochaines fonctionnalités. Un diagramme fonctionnel de ce fonctionnement est le suivant :
On retrouve ici la notion de boucle, où les seuls ajouts par rapport au diagramme précédent sont un processus de signalement, permettant aux développeurs de savoir si un test a échoué, et un utilisateur (à droite) accédant au programme sur le serveur de production. Adapté à la notion d'intégration continue et de dépoloiement continu, ce diagramme peut être simplifié en :
Outils disponibles dans la documentation
Les outils présentés dans cette documentation ne sont pas exhaustifs, et correspondent à 3 chaînes d'exemple, toutes à une échelle différente. Il existe cependant une myriade d'outils permettant de mettre en place les différentes étapes et, avant chaque projet, il convient de prendre le temps d'évaluer et de choisir les outils adaptés à celui-ci. Par exemple, un projet en Java pourra favoriser Jenkins pour la partie CI à cause de son intégration de Maven, alors qu'un projet hébergé sur Gitlab, lui, pourra préférer Gitlab CI.
Certains outils présentés dans cette documentation n'ont pas un rapport direct avec la chaîne DevOps, mais sont nécessaires ou facilitent l'utilisation des différents outils. C'est par exemple le cas de CoreDNS qui permet de donner un nom de domaine à chaque machine de l'environnement de développement et production, ou encore de Ceph qui permet un stockage réseau redondant.
Mise en place de l'infrastructure
Au delà de leur pertinence par rapport au projet, on peut aussi choisir des outils par rapport à l'infrastructure que l'on veut mettre en place. Ainsi, pour mettre en place un projet rapidement, on pourra choisir des outils disponibles en ligne ; si l'on a une infrastructure avec une seule machine, on se contentera d'utiliser Docker alors qu'on préfèrera docker swarm ou Kubernetes pour une infrastructure répartie sur plusieurs serveurs. Ci-dessous sont présentées 3 infrastructures d'exemple.
Chaîne n°1
Cette première chaîne utilise principalement des outils disponibles en ligne :
- Gitlab.com est utilisé comme dépôt de code, ainsi que comme outil de tests et d'intégration via Gitlab CI ;
- Docker Hub est utilisé comme dépôt d'image Docker ;
- Un VPS est utilisé comme serveur de production, faisant tourner un conteneur Docker de l'application, utilisant Ouroboros pour le déploiement continu et Prometheus, Node Exporter et Grafana pour la supervision.
Ordre d'installation des différents outils de cette chaîne :
1 - GitLab
2 - GitLab-CI
3 - DockerHub
4 - Docker
5 - Ouroboros
6 - Prometheus
7 - Node Exporter
8 - Grafana
Chaîne n°2
Cette seconde chaîne convient à une infrastructure contenant plusieurs machines :
- Un Gitlab local est installé en guise de dépôt de code ;
- Jenkins est utilisé pour les tests et l'intégration ;
- Les images Docker sont stockées sur un Docker Registry ;
- Docker Swarm permet de déployer le conteneur sur plusieurs machines et Ceph permet de synchroniser les volumes des différents conteneurs ;
- Prometheus, Node Exporter et Grafana sont utilisés pour la supervision. Ici Node Exporter est installé sur chaque machine de l'infrastructure.
Ordre d'installation des différents outils de cette chaîne :
1 - Ceph
2 - GitLab
3 - Jenkins
4 - Docker Registry
5 - Docker Swarm
6 - Prometheus
7 - Node Exporter
8 - Grafana
Chaîne n°3
Cette dernière chaîne est un second exemple d'infrastructure pour plusieurs machines :
- Gogs remplace Gitlab pour le dépôt de code ;
- Drone remplace Jenkins pour les tests et l'intégration ;
- Harbor remplace Docker Registry pour la livraison ;
- Kubernetes remplace Docker Swarm pour le déploiement et l'exploitation des images.
Ordre d'installation des différents outils de cette chaîne :
2 - Kubernetes
3 - Gogs
4 - Drone
5 - Harbor
6 - Prometheus
7 - Node Exporter
8 - Grafana