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 : devops

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 :

alt text

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 :

alt text

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.

outils disponibles

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 :

Chaîne n°1

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.

Chaîne n°2

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 :

Chaîne n°3

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