Road to DevOps
Cet article a pour but de détailler mon cheminement quant à mon apprentissage des technologies en lien avec le DevOps. Je partagerais donc avec vous les différentes étapes qui m'amènent à me former sur le sujet. Cet article servira de squelette et vous redirigera vers les différents articles abordant les technologies utilisé au cours de ce voyage vers la maîtrise de la philosophie DevOps.
Qu'est-ce que le DevOps?
Le DevOps est avant tout un mouvement, une philosophie en ingénierie informatique qui unifie le développement logiciel (dev) avec l'administration système et réseaux (ops).
Il est aujourd'hui, de par sa nature compliquée de définir avec exactitude ce que représente le DevOps tant celui-ci se transforme à mesure que de nouvelles technologies s'offrent à nous.
Cependant, si nous devions définir le DevOps dans sa vision la plus globale, celui-ci tendrait vers la promotion de l'automatisation et du monitoring de toutes les étapes de la création d'un logiciel. En l'occurrence, nous pourrions découper ces étapes en 5.
Chaque étape pourrait être divisée en sous-catégories et forme dans sa globalité, la chaîne du CI/CD pour Continuous Intégration/ Continuous Deployment (intégration et Déploiement Continue) ou plus communément appeler un Pipeline.
Si l'on devait résumer en d'autres mots ce qu'est le DevOps et son pipeline nous pourrions dire de par l'automatisation et la standardisation qu'il apporte, qu'il s'agit de l'entrée dans l'aire de l'industrialisation de l'IT, une aire ou la création artisanal d'une infrastructure s'effectue de manière industrielle, comme le furent les industries Ford à l'époque.
Pour qui?
Le DevOps s'adresse aussi bien aux développeurs soucieux d'en comprendre plus sur la chaîne de développement d'une application en adoptant une vision plus globale du SI que des administrateurs féru d'automatisation et de nouvelles technologies.
Les méthodes
Scrum
Scrum est un méthode agile destiné à contrôler les projets informatiques, facilitant la communication et les virages en temps opportun. Aujourd'hui, c'est une méthode privilégié en entreprise afin d'adopter l'approche dite "agile". Forte de son succès dans le monde de l'informatique, elle s'impose aujourd'hui comme une nouvelle organisation d'entreprise en « mode projet ».
Agile
La méthode agile est quant à elle basé sur le manifest agile qui prone quatre valeurs fondamentales : l’individu et interactions plutôt que processus. Les fonctionnalités opérationnelles plutôt que documentation exhaustive. La Collaboration avec le client plutôt que la contractualisation des relations. L’Acceptation du changement plutôt que la conformité aux plans.
Boite à outils
Un administrateur système DevOps n'est pas nécessairement obligé de connaitre chaques technologies sur le bout des doigts, il doit avant tout être capable de piocher dans une boite à outil et connaitre à minima un outil pour travailler sur chaques étapes du pipeline devops. En l'occurence, nous pourrions définir qu'un DevOps à besoins de maitriser sommairement des outils comme:
- un orchestrateur
- un ordonnanceur de tâches
- des outils de gestion de dépôts
- des outils de test unitaires
- des outils de monitoring
- avoir des connaissances en virtualisation (conteneurs, cloud, hyperviseur...)
- posséder des notions de base de données
Dans notre cas, si nous reprenons notre shéma de pipeline, voici les outils sur lesquelles nous allons nous concentrer durant ce tutoriel.
(Des outils se rajouterons à ce shéma au fur à mesure du temps)
Git flow
Il est important de comprendre la notion de git flow car celle-ci va définir les différents serveurs qui vont régir notre pipeline devops, notamment via un serveur de dev, de test, et de production.
Je vous invite à vous intéresser à git, notamment au travers du sheet cheat git en lien ci-dessous qui ne rentre pas dans les details de comment fonctionne git mais vous présente sommairement les différentes commandes et leur utilitée.
Infrastructure
Notre intrastructure sera composé de 6 serveurs:
- Serveur jenkins : jenkins / docker / docker-compose / ansible
- Serveur gitlab
- Serveur BDD : postgresql
- Serveur dev : debian 11
- Serveur stage : debian 11
- Serveur prod : debian 11
Installation de l'infrastructure avec Vagrant
Vagrant est un logiciel libre et open-source permmant la création et la configuration d'envrionnements de développement virtuels. En l'occurence, celui-ci nous servira à generer les différentes VM (sur VirtualBox) afin de mettre en place l'infrastructure qui recevra notre pipeline.
Installation de virtualbox
sudo apt install virtualbox
Installation de vagrant
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vagrant
Commandes à retenir:
- vagrant up : télécharge et lance l'image
- vagrant up
: telecharge et lance l'image définit dans le vagrant file. - vagrant snapshot push : fait un snapshot de la VM
- vagrant snapshot list : listes les snapshots
- vagrant snapshot pop : charge le snapshot
- vagrant halt : arrête la ou les machines
- vagrant destroy : détruit la ou les machines
- vagrant status : listes les machines
- cat Vagrantfile | grep -ri "ip" : liste les ips des machines
- Documentation : https://www.vagrantup.com/docs
Installation des VMs
- Serveur Jenkins, Dev, Stage, Prod:
(Git) Configuration Vagrant - Serveur Jenkins, Dev, Stage, Prod - Serveur DDB