Introduction DevOps pour les débutants



Le terme DevOps est omniprésent aujourd’hui, mais sa signification varie grandement d’une personne à l’autre.

Il est parfois difficile de saisir la véritable essence de DevOps et de le définir avec précision. C’est pourquoi, comprendre les concepts fondamentaux qui y sont associés, ainsi que son évolution historique, permet d’en avoir une vision d’ensemble plus claire.

Genèse de DevOps

DevOps est un exemple typique de développement logiciel agile. Cette approche est née de la nécessité de suivre le rythme toujours plus rapide du développement logiciel, un objectif atteignable grâce aux méthodes agiles. Au cours de la dernière décennie, les avancées significatives en matière de culture et de pratiques agiles ont mis en lumière l’importance d’une vision plus globale du cycle de vie de la livraison de logiciels, de bout en bout.

Peut-être vous demandez-vous ce qu’est précisément le développement logiciel agile ?

Le développement agile est un terme générique qui englobe diverses méthodologies de développement logiciel itératives et incrémentales. Les méthodologies agiles populaires incluent Scrum, Kanban, Scaled Agile Framework® (SAFe®), Lean Development et Extreme Programming (XP).

Bien que ces méthodologies partagent des valeurs fondamentales et une vision commune, chacune adopte une approche unique. Elles intègrent toutes des cycles d’itération et de rétroaction continus, dans le but d’améliorer et de fournir un logiciel évolutif. Ces méthodologies impliquent une planification, des tests, une intégration continues et d’autres adaptations constantes pour le projet et le logiciel.

Contrairement aux approches traditionnelles en cascade, ces méthodologies agiles sont légères et intrinsèquement adaptables. Un avantage majeur est qu’elles mettent l’accent sur l’autonomisation des individus pour collaborer et prendre des décisions rapidement, ensemble.

Image par Segue

Les principes de DevOps étendent la pratique du développement agile pour perfectionner la gestion du changement logiciel, en passant par la construction, la validation, le déploiement et les différentes phases de livraison. DevOps donne à l’équipe pluridisciplinaire la pleine responsabilité du produit logiciel, de sa conception à sa production.

Défis relevés par DevOps

Le processus de déploiement : Les applications distribuées exigent souvent le déploiement de fichiers binaires et de configuration sur plusieurs serveurs. Cette tâche devient encore plus complexe lorsqu’il s’agit d’un grand nombre de serveurs. Il devient difficile de déterminer quoi, comment et où déployer. La conséquence évidente ?

Une longue attente pour intégrer les artefacts dans l’environnement suivant du circuit de mise en service, ce qui retarde les tests, la mise en service, et d’autres étapes.

DevOps permet aux développeurs de logiciels ou web et aux équipes opérationnelles de déployer des processus dans un cadre de collaboration fluide. Cela permet d’identifier ce qui fonctionne et de passer à l’étape supérieure avec l’automatisation, afin de mettre en œuvre un développement continu, ouvrant la voie à des déploiements plus fréquents.

Objectifs de DevOps

DevOps améliore la collaboration entre toutes les parties prenantes, de la planification à la livraison, et met en œuvre l’automatisation du processus de livraison afin de :

  • Accroître la fréquence des déploiements
  • Réduire le délai de mise sur le marché du produit final
  • Diminuer le taux d’échec des nouvelles versions
  • Raccourcir le délai entre les correctifs
  • Améliorer les délais de récupération

Scénario DevOps typique

L’ensemble de l’équipe se réunit avant le début d’un nouveau projet logiciel. Cette équipe est composée de développeurs, de testeurs, d’équipes opérationnelles et de professionnels du support. Ensemble, ils élaborent le plan de création d’un logiciel entièrement fonctionnel et prêt à être déployé.

Chaque jour, un nouveau code est déployé après que les développeurs l’ont terminé. Une procédure de test automatisée vérifie que le code est prêt à être mis en œuvre. Une fois validé par les tests d’automatisation, le code est déployé auprès d’un petit groupe d’utilisateurs. Le code est surveillé pendant une courte période afin de vérifier sa stabilité et l’absence de problèmes imprévus. Une fois cette surveillance finale confirmant la stabilité du code, il est déployé pour l’ensemble des utilisateurs. Une grande partie des étapes postérieures à la planification et au développement est réalisée sans intervention humaine.

Les différentes phases de maturité DevOps

La maturité DevOps se caractérise par plusieurs phases distinctes. Voici les principales phases à connaître :

Développement en cascade

Avant l’ère de l’intégration continue, les équipes de développement rédigeaient de grandes quantités de code, qui étaient ensuite fusionnées pour la version finale. Les versions du code étaient si différentes qu’elles nécessitaient de nombreuses modifications.

La mise en œuvre de ces nombreuses modifications prenait plusieurs mois, ce qui rendait le processus peu productif.

Intégration continue

L’intégration continue consiste à intégrer rapidement le nouveau code développé avec le code principal prêt à être publié. Ce processus permet de gagner beaucoup de temps lors de la publication du code.

Ce terme n’a pas été introduit par DevOps. L’intégration continue est une pratique de l’ingénierie agile issue de la méthodologie Extreme Programming. DevOps a adopté cette pratique car l’automatisation est essentielle à la réussite de l’intégration continue. Souvent, l’intégration continue constitue la première étape vers la maturité DevOps.

Du point de vue de DevOps, l’intégration continue comprend des étapes telles que la vérification du code, sa compilation en un code utilisable et l’exécution de certains tests de validation nécessaires.

Livraison continue

La livraison continue est un prolongement de l’intégration continue et constitue la deuxième étape de DevOps.

La livraison continue permet d’ajouter des automatisation et des tests supplémentaires afin non seulement de fusionner rapidement le code avec la ligne de code principale, mais aussi de rendre le code presque prêt à être déployé sans intervention humaine.

Cette pratique consiste à maintenir la base de code dans un état presque prêt à être déployé.

Déploiement continu

Le déploiement continu est l’étape avancée de la livraison continue. Cette pratique permet de déployer tous les changements en production sans intervention humaine.

L’équipe travaillant sur le développement continu ne déploie jamais de code sans le tester. Tout code nouvellement créé est soumis à des tests automatisés avant d’entrer en phase de production. Le code est déployé auprès d’un petit groupe d’utilisateurs, et une boucle de rétroaction automatisée surveille sa qualité et son utilisation avant qu’il ne passe à l’étape suivante.

Seules quelques entreprises, telles que Netflix, Etsy, Amazon, Pinterest, Flicker, IMVU, Google, etc., ont mis en œuvre le déploiement continu.

La valeur

DevOps met l’accent sur le développement d’une culture collaborative et sur l’amélioration de l’efficacité grâce à l’automatisation à l’aide de différents outils DevOps. Pour implémenter DevOps dans votre solution logicielle, vous devez combiner culture et outils.

Culture DevOps

DevOps est une culture particulière qui vise à améliorer la collaboration, à réduire le chaos, à mieux gérer les responsabilités partagées, à mettre en œuvre l’automatisation, à améliorer la qualité, à valoriser la rétroaction et à accroître l’automatisation.

Les méthodes agiles ont toujours constitué la meilleure approche globale pour fournir des logiciels. Lorsqu’il s’agit d’évaluer les progrès, l’équipe de développement agile le fait en termes de logiciels fonctionnels. La méthode agile de la culture DevOps permet aux propriétaires de produits, aux développeurs, aux testeurs et aux experts UX de travailler en étroite collaboration avec le même objectif en tête.

Outils DevOps

Les outils DevOps englobent la gestion de la configuration, les tests et la construction de systèmes, le développement d’applications, le contrôle des versions et la surveillance. L’implémentation de l’intégration continue, de la livraison continue et du déploiement continu nécessite des outils différents, tout en utilisant certains outils communs. Le nombre d’outils à utiliser augmente au fur et à mesure de la progression dans la chaîne de livraison.

Examinons certains des outils et pratiques les plus courantes.

Référentiel de code source : C’est un emplacement où les développeurs peuvent enregistrer et modifier le code. Le référentiel de code source gère différentes versions du code qui sont archivées pour s’assurer que les développeurs travaillent sur le code des autres.

Git, Apache Subversion, IBM Rational, Artifactory, Nexus, Eclipse, etc. sont quelques-uns des outils de référentiel de code les plus utilisés.

Serveur de construction : Le serveur de construction est un outil d’automatisation utilisé pour compiler le code source en une base de code exécutable. Jenkins, SonarQube et Artifactory sont parmi les outils de serveur de construction les plus utilisés.

Gestion de la configuration : Des outils tels que Puppet, Chef, Ansible, SaltStack, Run Deck, etc. facilitent la gestion de la configuration de l’application et de l’infrastructure afin de maintenir la cohérence entre les environnements.

Infrastructure virtuelle : AWS, GCP et Azure sont les trois principaux fournisseurs de cloud public, proposant presque tous les services d’infrastructure. Ils fournissent une API qui permet de provisionner l’infrastructure et de la gérer comme du code.

Conclusion

J’espère que cela vous donne une idée claire de DevOps. Si vous êtes intéressé par le sujet, vous pouvez essayer un cours en ligne spécialisé.

Article de Payal Goyal