5.9 KiB
DevOps
William Petit - S.C.O.P. Cadoles
Qu'est que le "DevOps" ?
Contexte
-
Première apparition du terme en 2008/2009 lors de la conférence de Andrew Shafer et Patrick Debois intitulée "Agile Infrastructure"
-
Contraction de "Development" et "Operations"
Objectifs
-
Automatiser (et donc fluidifier) les étapes du cycle de vie d'un logiciel, du développement à la production.
-
Superviser l'ensemble de ces étapes afin d'obtenir des indicateurs concrets de la "santé" du projet.
Un mouvement
-
Intimement lié aux pratiques "Agile"
-
Un socle de valeurs et des pratiques en constante évolution
Une culture
-
Un rapprochement fort (voir fusion) des métiers du développement et du suivi opérationnel.
-
Un échange permanent (culture du partage) afin de continuer à améliorer les pratiques de développement et de suivi de production.
Cycle de vie
Planifier ("Plan")
-
Privilégier les cycles courts: "release often, release early".
-
S'appuyer sur les outils méthodologiques proposés par les méthodes agiles (SCRUM, Kanban, Extreme Programming...).
-
Définir les objectifs à court/moyen terme en gardant à l'idée les objectifs à long terme (découpage des tâches).
Mise en pratique
- Découverte de la méthode "Kanban" et de l'implémentation disponible dans Gitlab
Créer ("Create")
-
S'appuyer sur un gestionnaire de version des sources solide (Git, Bazaar, Mercurial...). Il est central dans le processus DevOps..
-
Sélectionner une forge logicielle pour gestionnaire de version des sources (Gitlab, Gitea...).
-
Choisir une méthodologie de travail commune à l'ensemble de l'équipe et cultiver la rigueur quant à son usage.
-
Former régulièrement les membres de l'équipe à l'usage de l'outil de gestion de version des sources.
-
Définir clairement les objectifs de qualité attendus par l'équipe pour sa base de code source.
Mise en pratique
- Utilisation de Git - commandes utiles
- La méthodologie "Git Flow"
- Intégration avec GitLab et outils méthodologiques associés
Vérifier ("Verify")
-
Maintenir un haut niveau de qualité du code en intégrant des mécanismes comme la revue de code et le travail en binôme.
-
Cultiver une approche du développement piloté par les tests.
-
Intégrer dans le processus de développement des outils permettant de vérifier l'état du projet de manière automatisée (qualité du code, tests de non régression...). Ces outils prennent aujourd'hui principalement la forme de serveurs d'intégration continue (Jenkins, Gitlab CI...).
Mise en pratique
- Un point sur la qualification en général
- Les tests unitaires Javascript avec Mocha
- Découverte des tests fonctionnels web avec NightmareJS et Mocha
- Validation des règles de style Javascript avec ESLint
- Mise en place d'un pipeline de validation avec Gitlab CI
Empaqueter ("Package")
-
Choisir un système d'empaquetage pour la diffusion du logiciel (Archive compressée ? Paquet GNU/Linux ? Images de conteneur, de machine virtuelle ?).
-
Implémenter l'empaquetage du logiciel à partir des sources.
-
Définir les évènements qui déclencheront un empaquetage du logiciel.
Mise en pratique
- Conteneurisation - découverte de Docker
- Empaquetage pour GNU/Linux - découverte de l'empaquetage pour Debian
- Création d'images de machines virtuelles - découverte de Packer
Délivrer ("Release")
-
Définir la méthodologie de diffusion des "artefacts" générés après la phase d'empaquetage.
-
Définir la méthodologie de versionnement de ces artefacts.
-
Mettre en place des mécanismes de traçabilité des artefacts (signature cryptographique, somme de contrôle).
Mise en pratique
- Calcul de somme de contrôle
- Signature cryptographique d'artefacts avec GPG
- Étiquettage d'images Docker et publication sur le dépôt DockerHub.
Configurer ("Configure")
-
Définir la méthodologie de déploiement du logiciel dans ses différentes cibles de déploiement (développement -> qualification -> production).
-
Automatiser la mise à jour de ces différentes cibles lorsqu'une nouvelle version du logiciel est disponible.
Mise en pratique
- Découverte d'Ansible
- Utilisation d'Ansible Pull pour le déploiement automatisé
Superviser ("Monitor")
-
Vérifier que toutes les phases précédentes se déroulent comme prévues.
-
Vérifier que les différentes cibles de déploiement sont opérationnelles avant et après mise à jour.
-
Générer des indicateurs concrets sur le comportement du logiciel afin d'améliorer ses fonctionnalités/performances dans la prochaine itération.
Mise en pratique
- Découverte de Prometheus et principe des sondes applicatives
- Supervision avec Grafana