125 lines
4.3 KiB
Markdown
125 lines
4.3 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 (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).
|
||
|
|
||
|
---
|
||
|
|
||
|
## 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.
|
||
|
|
||
|
---
|
||
|
|
||
|
## 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 regréssion...). 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/)...).
|
||
|
|
||
|
---
|
||
|
|
||
|
## Empaqueter ("Package")
|
||
|
|
||
|
- Choisir un système d'empaquetage pour la diffusion du logiciel (Simple archive ? 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.
|
||
|
|
||
|
---
|
||
|
|
||
|
## 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).
|
||
|
|
||
|
---
|
||
|
|
||
|
## 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.
|
||
|
|
||
|
---
|
||
|
|
||
|
## 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.
|