Pourquoi DevOps ?
Le cycle de développement en cascade a été pendant de nombreuses années le standard de l’industrie du développement logiciel. Ce dernier prône le découpage du cycle de développement en phases, devant être effectuées de façon séquentielle.
La première étape dans ce modèle est la définition du produit, ensuite l’équipe peut se lancer dans la conception, avant de débuter avec l’implémentation. C’est lorsque la solution logicielle a été mise en place que débutent les tests et vérifications, qui vont permettre de découvrir des bogues qui seront corrigés dans la phase de maintenance.
Ce modèle a rapidement montré ses limites : détection tardive des anomalies, gros retard dans la livraison de la solution, livraison d’un produit qui ne correspond pas aux besoins des utilisateurs, etc.
Pour pallier les faiblesses du modèle en cascade, plusieurs autres modèles traditionnels ont vu le jour, dont le modèle en V ou encore le modèle itératif.
Toutefois, ces modèles appliqués aux projets informatiques donnent toujours lieu à un taux d’échec considérable. Forts de ce constat, d'imminents informaticiens ont travaillé en commun pour produire un document définissant des principes simples et réalistes pour la mise en place d’une application.
C’est alors que le mouvement agile a commencé à prendre de l’ampleur. En prônant un cycle de développement centré sur l’utilisateur et ses rétrospections, l’agilité permet de livrer des solutions qui répondent aux besoins des utilisateurs et détecter et corriger les anomalies plus tôt.
Parallèlement l’écosystème de l’IT a continué à évoluer, avec des mutations considérables liées à l’essor d’internet. Ce dernier est présent dans pratiquement tous les domaines et touche toutes les couches sociales. C’est désormais un élément clé utilisé par les entreprises pour être proche de leurs clients.
La digitalisation vient accélérer le rythme de l’innovation technologique. Les entreprises pour rester compétitives et saisir les opportunités du marché doivent non seulement réduire le Time To Market (TTM), mais également s'assurer de livrer une solution robuste correspondant aux besoins des utilisateurs.
L’agilité permet de gagner en robustesse et qualité. Cependant, les équipes projets ne sont pas en mesure de livrer rapidement les applications. Le principal goulot d’étranglement est la barrière qui existe entre les développeurs et les chargés d’opération. Les développeurs veulent déployer en production rapidement, et ceci à moindre cout. De leur côté, les chargés de l’infrastructure veulent maintenir l’état et la stabilité du système. D’un côté, la livraison rapide peut se faire au détriment de la qualité, ce qui impacte la stabilité du système, alors que de l’autre côté, les contraintes imposées par les chargés d’opération se font au détriment des coûts et du temps.
Pour briser cette barrière, le concept du DevOps a vu le jour. Ce dernier s’appuie sur l’agilité et la démarche Lean pour offrir plusieurs méthodes permettant une meilleure cohésion entre l’ensemble des équipes du système d’information, favorisant ainsi l’atteinte d’un objectif commun : livrer rapidement une solution fiable et robuste. « Les équipes du système d’information » fait référence à la fois aux développeurs, aux chargés d’infrastructures et toute autre personne pouvant intervenir dans la chaîne de livraison. Ce qui n’est pas le cas avec l’agilité, qui n’intègre pas les chargés d’opération dans les équipes agiles.
DevOps c’est quoi ?
Le terme DevOps est la concaténation entre Dev (qui fait référence aux équipes de développement) et Ops (pour les chargés d’opération). Cependant, il existe de nombreuses divergences dans la définition et la description du terme. Les marketeurs vont faire passer celui-ci pour une boite à outils qu’on peut acheter et utiliser, certaines personnes pour un processus ou une méthodologie. DevOps, c’est avant tout une culture, qui fait intervenir des personnes, des processus et des outils, dans le but de réaliser un objectif commun. La définition qui résume parfaitement DevOps selon moi est la suivante : « DevOps c’est l’union des personnes, des processus et des outils pour livrer de façon continue et efficace de la valeur ajoutée aux clients. »
Les cinq piliers du DevOps
DevOps repose sur cinq piliers qui ont été définis autour de l’acronyme CALMS (Culture, Automation, Lean, Measurement, Sharing).
La culture
DevOps est une approche extrêmement centrée sur les personnes. La mise en place de DevOps se fait avec des personnes qui sont prêtes à faire face aux changements. Si des outils d’automation et des processus ont été adoptés par l’entreprise, sans des personnes capables d’exploiter de façon efficiente ces derniers, ils ne seront d’aucune utilité. C’est pourquoi il est primordial avant toute mise en place de DevOps d’accompagner au changement. Cela permettra de briser l’organisation héritée des modèles traditionnels (Waterfall, Cycle en V, etc.). Les équipes doivent également être sensibilisées sur l’intérêt des tests (unitaires, intégrations, performances, etc.), l’automatisation, etc.
L’automatisation
L’automatisation est l’un des aspects clés de la mise ne place de DevOps. Des outils doivent être disponibles pour mettre en place une chaine de livraison, du développement jusqu’à la production, passant par des environnements de tests. De ce fait, il est indispensable d’avoir une infrastructure d’intégration et de la livraison continue.
Par ailleurs, il est recommandé de maintenir une similitude entre les différents environnements (Dev, Test, Pré-prod, Prod). Le meilleur moyen d’y parvenir c’est le recours à des environnements scriptables (Infrastructure as Code) et procéder à leur configuration en ayant recours à des scripts (Configuration as Code). Toute intervention manuelle doit être proscrite.
Lean
Comme je l’ai dit plus haut, DevOps s’inspire en partie de la culture Lean. Cette dernière est centrée sur l’objectif à atteindre, tout en évitant les pertes de temps. DevOps se focalise donc sur la livraison de la valeur ajoutée aux utilisateurs, en éliminant tout ce qui n’est pas utile pour ceux-ci. Les livraisons doivent être fréquentes et Just in Time.
Mesure
Dans un projet DevOps, les parties prenantes doivent s’améliorer de façon continue. Il est quasi impossible d’apporter des améliorations sans être en mesure d’évaluer de façon fiable ce qui a été fait. C’est pourquoi il est recommandé de disposer des indicateurs permettant de mesurer les performances de l’application, d’évaluer la qualité des livrables, etc. Même lorsque l’application est en production, des indicateurs de performances et de qualité doivent permettre de mesurer la qualité de l’application.
Partage
DevOps vise une meilleure cohésion entre les équipes autour du même but. La circulation des informations entre celles-ci est donc primordiale pour l’atteinte de l’objectif commun. Les équipes doivent communiquer et être soudées. Un problème ne doit pas être imputé à une personne. Mais, l’ensemble des parties prenantes doit collaborer pour offrir une solution rapide et fiable.
Les différentes pratiques de DevOps
Faire du DevOps c’est appliquer un ensemble de bonnes pratiques et recettes. Parmi celles-ci, il y en a qui existent depuis belle lurette. Il s’agit notamment de l’intégration continue ou encore des tests automatisés. Ci-dessous un ensemble de pratiques pouvant être appliquées par une équipe DevOps.
Dans les prochaines parties, je reviendrai de façon plus détaillée sur certaines de ces pratiques et comment elles peuvent être mises en œuvre en utilisant des services offerts par la plateforme Cloud Microsoft Azure.
DevOps et Cloud
Les précurseurs du DevOps sont les géants du Web. NetFlix est l’une des premières firmes à adopter DevOps. L’approche a été largement adoptée par la suite par les acteurs du cloud, qui se livrent une concurrence féroce. D’ailleurs, pendant un certain moment, DevOps était perçu comme un marché de niche pour les acteurs du cloud et les géants du Web.
Sur une infrastructure traditionnelle, les équipes DevOps sont confrontées à plusieurs situations qui peuvent avoir un impact non négligeable sur le temps de livraison et sur la qualité de l’application. Il s’agit entre autres du temps d’automatisation, du provisionnement des environnements, ou encore le maintien des états identiques entre les environnements. Les plateformes cloud offrent des outils permettant de mieux surmonter ces contraintes.
Temps d’automatisation
DevOps nécessite le recours à des outils qui vont permettre la gestion de versions, l’automatisation des builds, l’exécution des tests unitaires, l’exécution des tests de performance, la génération des artefacts, le déploiement, etc. Ces outils exécutent de nombreuses tâches qui, selon la taille de l’application, peuvent être gourmandes en ressources. Sans une infrastructure adéquate, le temps d’automatisation peut devenir un véritable goulot d’étranglement pour l’équipe. Ce qui va impacter le temps de livraison des nouveautés.
La mise en place d’une infrastructure locale peut être assez dispendieuse. De nos jours, de nombreux éditeurs de logiciels offrent des plateformes d’intégration et de la livraison continue hébergées dans le cloud. On peut citer entre autres Visual Studio Team Services, Pipelines ou encore Travis.
Ces plateformes offrent d’assez bonnes performances avec des tarifications souples.
Provisionnement des environnements
Dans une infrastructure traditionnelle, le provisionnement des environnements est parfois très long. Lorsqu’une demande est faite par l’équipe projet, le retour des chargés d’opération avec l’environnement demandé peut facilement prendre quelques jours. DevOps vise la réduction de toute perte de temps inutile. Avec une plateforme cloud, en quelques étapes, il est possible de créer et provisionner un environnement qui correspond à ses besoins.
Maintien des états identiques entre les environnements
Dans un projet DevOps, les environnements de développement, de tests, de préproduction et de production doivent être identiques. Une différence entre ces environnements peut entraîner des problèmes de qualité, car le développeur ne sera pas en mesure d’évaluer son application telle qu’elle sera en environnement de production, par exemple. Maintenir le même état dans une infrastructure traditionnelle n’est pas évident.
Le cloud, par contre, offre une certaine flexibilité et agilité permettant de provisionner et maintenir un état identique entre les environnements assez facilement.
Quelques services DevOps de Microsoft Azure
La plateforme cloud de Microsoft offre plusieurs services permettant de mettre en place un pipeline de développement et de livraison DevOps. Parmi ceux-ci, on peut citer :
- Azure ARM ;
- Azure Automation DSC ;
- Azure Application Insights ;
- Visual Studio Team Services ;
- Azure Container Services;
- Azure Container Registry ;
- etc.
Dans les prochains billets de blogs, je vais revenir en détail sur chaque service, avec des implémentations concrètes.
Restez connecté !