formations/cesi/metiers_devops/presentation/slides.md

182 lines
5.9 KiB
Markdown

<!-- $theme: default -->
<style>pre, table { font-size: 0.6em !important; }</style>
# DevOps
William Petit - S.C.O.P. Cadoles
---
<!-- page_number: true -->
## 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](https://www.youtube.com/watch?v=Y_u84PNrX9g)"
- 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](http://agilemanifesto.org/)"
- 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
![](./img/devops-toolchain.svg)
<p style="text-align:center"><a href="https://commons.wikimedia.org/wiki/File:Devops-toolchain.svg">CC BY-SA 4.0</a></p>
---
## 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](https://en.wikipedia.org/wiki/Scrum_%28software_development%29), [Kanban](https://en.wikipedia.org/wiki/Kanban), [Extreme Programming](https://fr.wikipedia.org/wiki/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](https://git-scm.com/), [Bazaar](http://bazaar.canonical.com/en/), [Mercurial](https://www.mercurial-scm.org/)...). **Il est central dans le processus DevOps.**.
- Sélectionner une **forge logicielle** pour gestionnaire de version des sources ([Gitlab](https://about.gitlab.com/), [Gitea](https://gitea.io/en-US/)...).
- 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](https://jenkins.io/), [Gitlab CI](https://about.gitlab.com/features/gitlab-ci-cd/)...).
---
### Mise en pratique
- Un point sur la qualification en général
- Les tests unitaires Javascript avec [Mocha](https://mochajs.org/#installation)
- Découverte des tests fonctionnels web avec [NightmareJS](https://github.com/segmentio/nightmare) et [Mocha](https://mochajs.org/#installation)
- Validation des règles de style Javascript avec [ESLint](https://eslint.org/)
- Mise en place d'un pipeline de validation avec [Gitlab CI](https://docs.gitlab.com/ee/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](https://www.docker.com/)
- Empaquetage pour GNU/Linux - découverte de l'empaquetage pour [Debian](https://www.debian.org/index.fr.html)
- Création d'images de machines virtuelles - découverte de [Packer](https://www.packer.io/)
---
## 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](https://gnupg.org/)
- Étiquettage d'images Docker et publication sur le dépôt [DockerHub](https://hub.docker.com/).
---
## 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](https://www.ansible.com/)
- Utilisation d'[Ansible Pull](https://docs.ansible.com/ansible/2.4/ansible-pull.html) 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
---
## Conclusion