Liste de contrôle DevOps

Le DevOps consiste à intégrer le développement, l’assurance qualité et les opérations informatiques dans une culture unifiée et dans un ensemble de processus pour la distribution de logiciels. Utilisez cette liste de contrôle comme point de départ pour évaluer votre culture et vos processus DevOps.

Culture

Vérifiez l’alignement des objectifs au sein des organisations et des équipes. Les conflits au sujet des ressources, des objectifs et des priorités au sein d’une organisation peuvent compromettre la réussite des opérations. Assurez-vous que les objectifs des équipes commerciales, de développement et des opérations sont alignés.

Assurez-vous que votre équipe comprend le cycle de vie de votre logiciel. Votre équipe doit comprendre le cycle de vie global de vos applications et la place de chaque application dans ce cycle de vie. Ces informations permettent à tous les membres de l’équipe de savoir ce qu’ils doivent faire maintenant et ce qu’ils doivent planifier et préparer pour plus tard.

Réduisez la durée du cycle. Essayez de réduire le temps nécessaire pour passer de l’idée d’origine au logiciel fini. Limitez la taille et la portée des différentes versions pour réduire la charge de travail imposée aux équipes de test. Automatisez aussi souvent que possible les processus de génération, de test, de configuration et de déploiement. Supprimez tous les obstacles à la communication entre les développeurs et entre l’équipe de développeurs et celle chargée des opérations.

Révisez et améliorez les processus. Vos processus et procédures, qu’ils soient automatisés ou manuels, ne sont jamais définitifs. Prévoyez des révisions régulières du workflow, des procédures et de la documentation existants, avec pour objectif de les améliorer.

Anticipez. Anticipez les pannes. Mettez en place des processus permettant d’identifier rapidement les problèmes lorsqu’ils se produisent, de les transmettre aux membres de l’équipe chargée de les résoudre et de confirmer leur résolution.

Exploitez les informations issues des pannes. Les pannes sont inévitables, mais il est important de savoir en tirer des informations pour éviter qu’elles ne se répètent. En cas de défaillance opérationnelle, triez le problème, documentez sa cause et sa solution et partagez les leçons apprises. Dans la mesure du possible, mettez à jour vos processus de génération pour détecter automatiquement de telles défaillances à l’avenir.

Accélérez vos processus et collectez des données. Chaque amélioration planifiée est une hypothèse. Faites des incréments aussi petits que possible. Considérez les nouvelles idées comme des expériences. Instrumentez les expériences afin de pouvoir collecter des données de production pour évaluer leur efficacité. Préparez-vous à effectuer un Fail-fast si l’hypothèse est incorrecte.

Prenez le temps d’apprendre. Vous pouvez apprendre de vos échecs aussi bien que de vos réussites. Avant de passer à de nouveaux projets, prenez le temps de tirer les leçons importantes de vos résultats et assurez-vous que votre équipe les assimile correctement. Donnez aussi à votre équipe le temps d’acquérir de nouvelles compétences, d’expérimenter et d’en apprendre plus sur les nouveaux outils et techniques.

Documentez vos opérations Documentez tous les outils, les processus et les tâches automatisées avec le même niveau de qualité que le code de votre produit. Documentez la conception et l’architecture actuelles de tous les systèmes que vous prenez en charge, ainsi que les processus de récupération et les autres procédures de maintenance. Concentrez-vous sur les étapes que vous effectuez réellement, et non sur les processus théoriquement optimaux. Révisez et mettez à jour régulièrement votre documentation. Pour le code, assurez-vous que des commentaires significatifs sont inclus, en particulier dans les API publiques. Utilisez des outils pour générer automatiquement la documentation du code chaque fois que cela est possible.

Partagez vos connaissances. La documentation n’est utile que si les utilisateurs connaissent son existence et savent où la trouver. Gardez votre documentation organisée et rendez-la facilement accessible. Soyez créatif : partagez votre documentation de façon informelle lors d’un déjeuner, créez des vidéos ou envoyez des bulletins d’informations.

Développement

Offrez aux développeurs des environnements qui reproduisent l’environnement de production. Si les environnements de développement et de test ne correspondent pas à votre environnement de production, il est difficile de tester et de diagnostiquer les problèmes. Essayez de fournir des environnements de développement et de test aussi similaires que possible à votre environnement de production. Assurez-vous que les données de test sont cohérentes avec les données utilisées en production, même s’il s’agit d’exemples de données et non de vraies données de production (pour des raisons de confidentialité ou de conformité). Prévoyez de générer et d’anonymiser des données de test.

Assurez-vous que tous les membres de l’équipe autorisés peuvent approvisionner l’infrastructure et déployer les applications. La configuration de ressources similaires à celles utilisées en production et le déploiement d’une application ne doivent pas impliquer de tâches manuelles complexes ni de connaissances techniques détaillées sur un système. Toute personne disposant des autorisations appropriées doit être en mesure de créer ou de déployer des ressources similaires à celles utilisées en production sans passer par votre équipe chargée des opérations.

Cette recommandation ne signifie pas que tout le monde peut envoyer des mises à jour automatiques pour un déploiement en production. Elle a pour but de réduire les difficultés que les équipes de développement et d’assurance qualité rencontrent pour créer des environnements qui reproduisent l’environnement de production.

Instrumentez chaque application pour obtenir des informations. Pour vérifier l’intégrité de votre application, vous devez savoir comment elle s’exécute et pouvoir reconnaître les erreurs ou les problèmes qui surviennent. Il faut toujours considérer l’instrumentation comme une exigence de conception et l’intégrer dans chaque application dès le début. L’instrumentation doit inclure la journalisation des événements pour l’analyse de la cause racine, mais également la télémétrie et les métriques pour surveiller l’intégrité et l’utilisation de chaque application.

Surveillez votre dette technique. De nombreux projets privilégient les calendriers de mise en production, à un degré ou à un autre, par rapport à la qualité du code. Indiquez toujours quand des raccourcis sont effectués ou d’autres implémentations sont non optimales, et planifiez le temps de réexaminer ces problèmes.

Envisagez d’envoyer des mises à jour directement en production. Pour réduire la durée globale de votre cycle de mise en production, envisagez d’envoyer la validation des codes dûment testés directement en production. Utilisez les bascules de fonctionnalité pour contrôler l’activation des fonctionnalités. Cela vous permet de passer rapidement du développement à la mise en production, en utilisant les boutons bascules pour activer ou désactiver les fonctionnalités. Les boutons bascules sont également utiles lorsque vous effectuez des tests comme les versions de contrôle de validité, où vous déployez une fonctionnalité particulière dans un sous-ensemble de l’environnement de production.

Test

Automatisez les tests. Le test manuel des logiciels est une tâche fastidieuse et sujette aux erreurs. Automatisez les tâches de test communes et intégrez les tests dans vos processus de génération. Les tests automatisés garantissent la cohérence et la reproductibilité des tests. Lorsque vous exécutez des tests d’interface utilisateur intégrés, utilisez également un outil automatisé. Azure propose des ressources de développement et de test qui peuvent vous aider à configurer et à exécuter vos tests. Pour plus d’informations, consultez Développer et tester sur Azure.

Test de détection des défaillances. Lorsqu’un système ne peut pas se connecter à un service, celui-ci doit répondre correctement. Et lorsque le service est à nouveau disponible, le système doit récupérer. Intégrez systématiquement des tests par injection d’erreurs à la phase de révision dans les environnements de test et intermédiaires. Lorsque vos processus et pratiques de test sont bien rodés, envisagez d’exécuter ces tests en production.

Testez en production. Un processus de mise en production ne s’arrête pas avec le déploiement en production. Mettez en place des tests pour vérifier que le code déployé fonctionne comme prévu. Pour les déploiements rarement mis à jour, intégrez des tests en production réguliers à votre procédure de maintenance.

Automatisez les tests de performance afin d’identifier rapidement les problèmes de performances. L’impact d’un grave problème de performances peut être aussi important que celui d’un bogue dans le code. Bien que les tests fonctionnels automatisés puissent prévenir les bogues d’application, il arrive qu’ils ne détectent pas les problèmes de performances. Il est donc important de définir des objectifs de performances acceptables pour les métriques telles que la latence, le temps de chargement et l’utilisation des ressources. Pensez à inclure des tests de performance automatisés dans votre pipeline de mise en production, pour vous assurer que votre application répond à ces objectifs.

Effectuez un test de capacité. Une application peut fonctionner parfaitement dans des conditions de test, puis avoir des problèmes une fois en production à cause du changement d’échelle ou des limitations de ressources. Veillez à toujours définir les limites maximales de capacité et d’utilisation attendues. Effectuez des tests pour vérifier que l’application peut gérer ces limites et pour savoir ce qu’il se passe lorsque ces limites sont dépassées. Effectuez des tests de capacité à intervalles réguliers.

Après une mise en production initiale, vous devez effectuer des tests de capacité et de performance à chaque mise à jour du code de production. Utilisez les données historiques pour affiner les tests et déterminer quels types de tests doivent être effectués.

Effectuez des tests de pénétration automatisés. La sécurité de votre application est aussi importante que le bon fonctionnement de ses fonctionnalités. Intégrez des tests de pénétration automatisés à vos processus de génération et de déploiement. Planifiez régulièrement des tests de sécurité et des analyses de vulnérabilité sur les applications déployées, et surveillez les ports ouverts, les points de terminaison et les attaques. Le test automatisé ne vous dispense pas d’effectuer des révisions de sécurité approfondies à intervalles réguliers.

Effectuez des tests automatisés de continuité de l’activité. Développez des tests pour vérifier la continuité de l’activité à grande échelle, notamment le basculement et la récupération des sauvegardes. Configurez des processus automatisés pour effectuer ces tests régulièrement.

Libérer

Automatisez les déploiements. L’automatisation offre de nombreux avantages, notamment :

  • Permettre des déploiements plus rapides et plus fiables.
  • Garantir des déploiements cohérents dans n’importe quel environnement pris en charge, y compris le test, la préproduction et la production.
  • Éliminer le risque d’erreur humaine que les déploiements manuels peuvent introduire.
  • Cela simplifie aussi la planification de la mise en production, afin de minimiser les effets des éventuels temps d’arrêt.

Automatiser le processus de déploiement de chaque application dans vos environnements de test, de préproduction et de production. Mettez en place des systèmes pour détecter les problèmes lors du déploiement, ainsi qu’un moyen automatisé pour restaurer les correctifs par progression ou restaurer les modifications.

Utilisez l’intégration continue. L’intégration continue (CI) consiste à fusionner le code du développeur dans un codebase centralisé selon un planning régulier, puis à effectuer automatiquement les processus de génération et de test. L’intégration continue permet à une équipe tout entière de travailler sur un codebase en même temps sans générer de conflits. L’intégration continue vous aide également à trouver les défauts de code le plus tôt possible. De préférence, un processus CI doit s’exécuter chaque fois que vous validez ou archivez du code. Il doit s’exécuter au moins une fois par jour.

Vous pouvez envisager l’adoption d’un modèle de développement « trunk ». Dans ce modèle, les développeurs n’effectuent leurs validations que sur une seule branche (le « trunk »). Les validations ne doivent jamais arrêter une génération. Ce modèle facilite l’intégration continue, car tout le travail sur les fonctionnalités est effectué sur le « trunk » et les conflits de fusion sont ensuite résolus lors de chaque validation.

Envisagez la livraison continue. La livraison continue (CD) consiste à s’assurer que le code est toujours prêt à être déployé, en automatisant la génération, le test et le déploiement du code dans des environnements similaires à l’environnement de production. Le fait d’ajouter la livraison continue pour créer un pipeline de CI/CD complet vous permet de détecter les défauts du code le plus tôt possible. Cela garantit également que des mises à jour correctement testées peuvent être publiées dans un délai court.

Le déploiement continu est un processus qui déploie automatiquement en production toutes les mises à jour qui ont traversé un pipeline de CI/CD. Le déploiement continu nécessite des tests automatiques robustes et une planification avancée du processus. Il peut ne pas convenir à toutes les équipes.

Effectuez de petites modifications incrémentielles. Les modifications de code volumineuses ont un plus grand potentiel d’introduction de bogues que les plus petites. Privilégiez les petites modifications. Cela limite les effets potentiels de chaque modification et simplifie la tâche de compréhension et de débogage des problèmes.

Gardez le contrôle sur la publication des modifications. Gardez le contrôle sur la publication des mises à jour pour vos utilisateurs finaux. Vous pouvez utiliser des bascules de fonctionnalité pour décider de l’activation des fonctionnalités pour les utilisateurs finaux.

Implémentez des stratégies de gestion des mises en production afin de réduire les risques liés au déploiement. Le déploiement d’une mise à jour applicative en production implique toujours des risques. Pour les réduire au maximum, vous pouvez recourir à des stratégies telles que les versions de contrôle de validité ou les déploiements bleu/vert pour déployer des mises à jour pour un sous-ensemble d’utilisateurs. Vérifiez que la mise à jour fonctionne comme prévu, puis déployez la mise à jour sur le reste du système.

Documentez toutes les modifications. Les modifications de configuration et les mises à jour mineures peuvent vite devenir sources de confusion et de conflit de version. C’est pourquoi il est important de toujours conserver une trace de toutes les modifications, quelle que soit leur importance. Prenez note de tout ce qui a été modifié, y compris les correctifs et les modifications apportées aux stratégies et à la configuration. Ces notes sur les modifications doivent être accessibles à toute votre équipe. Mais évitez d’inclure des données sensibles dans ces journaux d’activité. Par exemple, vous pouvez noter que des informations d’identification ont été mises à jour et indiquer le nom de la personne qui a apporté la modification, mais ne précisez pas de quelles informations d’identification il s’agit.

Envisagez une infrastructure immuable. L’infrastructure immuable repose sur le principe selon lequel vous ne devez pas modifier l’infrastructure après son déploiement en production. Si vous le faites, vous risquez de parvenir à un état dans lequel les modifications ad hoc ont été appliquées. Il est alors difficile de savoir avec exactitude ce qui a changé. Une infrastructure immuable fonctionne en remplaçant des serveurs entiers lors de tout nouveau déploiement. Avec cette approche, vous pouvez tester et déployer votre code et votre environnement d’hébergement en tant que bloc. Après le déploiement, vous ne modifiez pas les composants d’infrastructure avant le prochain cycle de génération et de déploiement.

Supervision

Améliorez la visibilité sur vos systèmes. Votre équipe chargée des opérations doit toujours bénéficier d’une bonne visibilité sur l’intégrité et sur l’état d’un système ou d’un service. Vous pouvez définir des points de terminaison d’intégrité externes pour contrôler l’état, et coder des applications pour instrumenter les métriques opérationnelles. Utilisez un schéma commun et cohérent qui contribue à mettre en corrélation les événements entre les systèmes. Diagnostics Azure et Application Insights représentent la méthode standard pour le suivi de l’intégrité et de l’état des ressources Azure. Azure Monitor fournit également des fonctions de supervision et de gestion centralisées pour les solutions cloud ou hybrides.

Agrégez et mettez en corrélation les métriques et journaux d’activité. Un système de télémétrie correctement instrumenté fournit une grande quantité de données de performances brutes ainsi que des journaux d’événements. Assurez-vous que la télémétrie et les données issues des journaux sont traitées et mises en corrélation rapidement par votre système, afin que l’équipe chargée des opérations ait toujours une image à jour de l’intégrité du système. Organisez et affichez les données afin d’avoir une vue cohérente des problèmes et de voir quand les événements sont liés les uns aux autres.

Consultez votre stratégie de rétention d’entreprise pour connaître les exigences relatives au traitement des données et à la durée de stockage des données.

Implémentez des alertes et notifications automatiques. Configurez des outils d’analyse comme Monitor pour détecter les modèles ou les conditions qui indiquent des problèmes potentiels ou actuels. Envoyez des alertes aux membres de l’équipe qui peuvent résoudre les problèmes. Vous pouvez configurer vos alertes pour éviter les faux positifs.

Surveillez le délai d’expiration des ressources. Certaines ressources, comme les certificats, expirent. Assurez-vous de suivre les dates d’expiration des ressources et de savoir quels services ou fonctionnalités en dépendent. Utilisez des processus automatisés pour surveiller ces ressources. Informez votre équipe chargée des opérations avant l’expiration d’une ressource et réaffectez-la si son expiration risque de perturber les applications.

Gestion

Automatisez les tâches opérationnelles. L’exécution manuelle des processus opérationnels répétitifs est sujette aux erreurs. Automatisez ces tâches aussi souvent que possible pour assurer la qualité et des exécutions cohérentes. Utilisez le contrôle de code source pour contrôler la version du code qui implémente l’automatisation. Comme pour tout autre code, testez vos outils d’automatisation.

Adoptez une approche d’approvisionnement de type infrastructure en tant que code. Réduisez le nombre de configurations manuelles nécessaires à l’approvisionnement des ressources. Privilégiez les scripts et les modèles Azure Resource Manager. Conservez les scripts et les modèles dans le contrôle de code source, comme tous les autres codes que vous gérez.

Envisagez l’utilisation de conteneurs. Les conteneurs fournissent une interface standard basée sur le package pour déployer des applications. Lorsque vous utilisez des conteneurs, vous déployez une application à l’aide de packages autonomes qui incluent tous les logiciels, dépendances et fichiers nécessaires à l’exécution de l’application. Cette pratique simplifie grandement le processus de déploiement.

Les conteneurs créent également une couche d’abstraction entre une application et le système d’exploitation sous-jacent. Vous bénéficiez ainsi d’environnements cohérents. Cette couche d’abstraction permet aussi d’isoler un conteneur des autres processus ou applications qui s’exécutent sur un hôte.

Implémentez des stratégies de résilience et la réparation spontanée. La résilience d’une application est sa capacité à récupérer après une défaillance. Exemples de stratégies pour assurer la résilience : relancer les échecs temporaires, basculer vers une instance secondaire ou même vers une autre région. Pour plus d’informations, consultez Conception d’applications Azure fiables. Instrumentez vos applications afin que les problèmes soient signalés immédiatement et que vous puissiez gérer les pannes ou autres défaillances du système.

Compilez un manuel des opérations. Un manuel des opérations, ou runbook, documente les procédures et les informations de gestion nécessaires pour aider l’équipe chargée des opérations à mettre à jour un système. Documentez-y également tous les scénarios d’opérations et les plans d’atténuation qui peuvent entrer en jeu lors d’une défaillance ou de toute autre interruption de votre service. Créez cette documentation pendant votre processus de développement et assurez-vous de la tenir à jour par la suite. Traitez ces ressources comme des documents dynamiques que vous devez examiner, tester et améliorer régulièrement.

Il est essentiel de partager cette documentation. Encouragez les membres de votre équipe à collaborer et à partager leurs connaissances. Toute votre équipe doit avoir accès à la documentation. Faites en sorte que tous les membres de l’équipe puissent mettre à jour ces documents très facilement.

Documentez les procédures d’appel. Veillez à documenter les astreintes, les planifications et les procédures et à les partager avec tous les membres de l’équipe. Gardez toujours ces informations à jour.

Procédures d’escalade de document pour les dépendances tierces. Si votre application dépend de services tiers externes que vous ne contrôlez pas directement, il vous faut un plan pour faire face aux pannes. Créez une documentation pour vos processus d’atténuation planifiés. N’oubliez pas d’y inclure les informations de contact du support technique et les chemins d’escalade.

Utilisez la gestion de la configuration. Planifiez les modifications de configuration, rendez-les visibles pour les opérations et enregistrez-les. Vous pouvez utiliser une base de données de gestion de la configuration ou une approche de configuration en tant que code à ces fins. Auditez régulièrement la configuration pour vous assurer que les paramètres attendus sont effectivement en place.

Prévoyez un plan de support Azure et étudiez le processus de support. Azure propose de nombreux plans de support. Identifiez le plan qui correspond à vos besoins et assurez-vous que toute votre équipe sait comment l’utiliser. Chaque membre de l’équipe doit comprendre tous les détails du plan, comment fonctionne le processus de support et comment ouvrir un ticket de support avec Azure. Si vous prévoyez un événement à grande échelle, le support Azure peut vous aider à augmenter les limites de votre service. Pour plus d’informations, consultez les FAQ des plans de support Azure.

Suivez les principes de séparation des privilèges lorsque vous octroyez un accès aux ressources. Gérez prudemment l'accès aux ressources. Refusez l’accès par défaut, sauf si vous accordez explicitement à un utilisateur l’accès à une ressource. N’accordez aux utilisateurs que les accès dont ils ont besoin pour effectuer leurs tâches. Effectuez un suivi des privilèges accordés aux utilisateurs et réalisez régulièrement des audits de sécurité.

Utilisez le contrôle d’accès en fonction du rôle Azure. L’attribution des comptes d’utilisateur et des accès aux ressources ne doit pas être un processus manuel. Utilisez le contrôle d’accès en fonction du rôle Azure (RBAC Azure) pour accorder un accès en fonction des identités et des groupes Microsoft Entra ID.

Utilisez un système de suivi des bogues pour suivre les problèmes. Sans une bonne méthode de suivi des problèmes, il est facile de manquer des éléments, de dupliquer certaines tâches ou d’introduire de nouveaux problèmes. Ne vous fiez pas aux communications orales informelles pour suivre l’état des bogues. Utilisez un outil de suivi des bogues pour enregistrer tous les détails sur les différents problèmes, assigner des ressources pour les résoudre et créer un journal d’audit contenant la progression et l’état de chaque problème.

Gérez toutes les ressources dans un système de gestion des changements. Si vous incluez tous les aspects de votre processus DevOps dans un système de gestion et de contrôle de version, vous pouvez facilement suivre et auditer les modifications. Cela inclut le code, l’infrastructure, la configuration, la documentation et les scripts. Traitez tous ces types de ressources comme du code tout au long du processus de test, de génération et de révision.

Utilisez des listes de contrôle Les listes de contrôle des opérations peuvent vous aider à suivre les processus. Il est facile de passer à côté d’un élément dans un manuel volumineux. Mais si vous suivez une liste de contrôle, vous avez plus de chances de remarquer les détails que vous auriez pu manquer. Mettez à jour vos listes de contrôle et cherchez en permanence des méthodes pour automatiser les tâches et simplifier les processus.

Étapes suivantes