Bonnes pratiques Devops: les 5 méthodes à adopter

Devops est désormais important dans de nombreuses organisations technologiques en raison de deux missions et cultures apparemment opposées qui doivent se réunir:

  • Les équipes de développement agiles se déplacent rapidement pour répondre aux exigences de l'entreprise et mettre en œuvre les changements d'application.
  • Les équipes opérationnelles travaillent dur pour maintenir les systèmes performants, garantir la sécurité des environnements informatiques et gérer les ressources informatiques.

Les équipes agiles considèrent souvent les équipes opérationnelles comme lentes et rigides, tandis que les ingénieurs système considèrent les développeurs agiles comme ne répondant pas aux besoins opérationnels et imprudents lorsque les déploiements d'applications posent des problèmes de production.

Ce sont des généralisations, mais les deux disciplines ont souvent des motivations, une terminologie et des outils différents - et ce désalignement peut créer des problèmes commerciaux. Par exemple, à mesure que les startups grandissent, elles doivent développer des procédures opérationnelles pour assurer la stabilité tout en ayant un impact minimal sur leur vitesse de développement et leur agilité. Pour les grandes entreprises, elles doivent trouver des moyens de fournir plus rapidement des applications destinées aux clients et des améliorations du flux de travail interne sans compromettre la fiabilité ou perdre la conformité.

Devops vise à résoudre ces conflits avec une culture, un ensemble de principes de fonctionnement et un ensemble émergent de meilleures pratiques qui permettent la vitesse de déploiement des applications et la stabilité de leur exécution avec moins de conflits et de compromis. Cela se fait en grande partie en fournissant des pratiques qui automatisent les étapes opérationnelles et normalisent les configurations:

  • Pour les équipes de développement, ces pratiques standardisent et automatisent les étapes allant du développement du code au test, à la sécurisation et à l'exécution d'applications dans plusieurs environnements.
  • Pour les opérations, les pratiques stimulent l'automatisation de la configuration et du déploiement de l'infrastructure, la surveillance dans plusieurs domaines et la résolution des problèmes de production plus rapidement.

Les pratiques Devops incluent:

  • Contrôle de version et stratégies de branchement.
  • Pipelines d'intégration continue et de livraison continue (CI / CD).
  • Conteneurs qui standardisent et isolent les environnements d'exécution des applications.
  • Infrastructure as code (IAC), qui permet de créer des scripts pour la couche infrastructure.
  • Surveillance des pipelines devops et de la santé des applications en cours d'exécution.

Devops commence par les pratiques et les outils utilisés pour publier des logiciels pour calculer des environnements avec des procédures fondamentales qui existent depuis des décennies. Ils incluent le contrôle de version pour gérer les changements de code au sein d'une équipe de développeurs, le branchement de la base de code pour prendre en charge différentes activités de développement et les versions de logiciels de balisage de version avant de les pousser dans différents environnements.

La principale différence pour les équipes devops est que les outils sont plus faciles à utiliser et s'intègrent mieux avec d'autres technologies qui automatisent la création et le déploiement d'applications. Il existe également des stratégies de branchement et de fusion de code plus standardisées, plus faciles à gérer avec les systèmes de contrôle de version modernes.

Par exemple, de nombreuses organisations utilisent Git (y compris les versions GitHub et BitBucket) et d'autres outils de contrôle de version qui offrent plusieurs applications clientes, des API pour l'intégration et des outils de ligne de commande pour gérer des procédures plus fréquentes ou complexes. Aujourd'hui, la plupart des développeurs ont utilisé au moins une technologie de contrôle de version dans leurs projets et la mise en œuvre des normes n'est donc pas aussi difficile qu'avant.

Les organisations qui utilisent ces outils peuvent adopter des stratégies de branchement comme Gitflow qui standardisent les branches pour la production, les tests et le développement et établissent des procédures pour développer de nouvelles fonctionnalités ou des correctifs de production. Ces stratégies de branchement permettent aux équipes de collaborer sur différents types de besoins de développement et n'introduisent que du code testé et déployable dans les succursales de production. Les équipes utilisent ensuite le balisage de version pour étiqueter toutes les versions du code source et d'autres fichiers qui font partie d'une version logicielle.

La plupart des organisations qui nécessitent une assistance utilisateur après les versions de production et d'autres qui sont au début du développement de leurs pratiques devops suivent souvent des pratiques de gestion des versions traditionnelles qui prennent en charge des constructions telles que les versions majeures et mineures. Les équipes les plus sophistiquées qui développent des applications qui nécessitent moins de support utilisateur peuvent pratiquer un déploiement continu lorsqu'il y a une automatisation qui intègre en permanence et fournit des modifications de code aux environnements de production.

Pour permettre des versions plus fréquentes, les équipes cherchent à automatiser les étapes de l'archivage du code à la livraison d'applications entièrement testées aux environnements informatiques cibles. L'intégration continue (CI) est l'automatisation permettant de créer et d'intégrer tous les composants logiciels afin qu'ils soient dans un package déployable. Les outils de déploiement continu (CD) gèrent les variables spécifiques à l'environnement et automatisent le transfert des applications vers les environnements de développement, de test, de production et d'autres environnements informatiques. Ensemble, ces outils forment le pipeline CI / CD.

Pour que CI / CD soit un processus d'automatisation efficace, des tests continus doivent être mis en œuvre dans le pipeline pour s'assurer que le nouveau code n'introduit pas de défauts ou d'autres problèmes. Les tests unitaires implémentés dans le pipeline d'intégration continue garantissent que le code engagé ne rompt aucun test unitaire existant. D'autres tests qui recherchent les problèmes de sécurité au niveau du code et la structure du code peuvent également être implémentés à l'étape d'intégration. Les fonctions et performances automatisées qui nécessitent des environnements d'exécution sont souvent automatisées dans le cadre de pipelines de livraison continue.

Cette automatisation entraîne de nombreux changements de comportement et de pratique bénéfiques qui permettent aux équipes d'effectuer des changements plus fréquemment et de manière plus sûre. Il incite les équipes à s'enregistrer et à tester le code plus fréquemment, ce qui permet de détecter et de résoudre plus rapidement les défauts. Les procédures de déploiement manuel sont sujettes à des erreurs, ce que l'automatisation élimine en grande partie. L'automatisation prend également la plupart des frais généraux en poussant de nouvelles capacités aux utilisateurs, permettant aux équipes de se déployer plus fréquemment.

Si CI / CD fournit l'automatisation pour fournir des applications, alors les conteneurs sont le packaging de l'environnement d'exploitation de l'application. Les développeurs peuvent spécifier le système d'exploitation, les exigences de l'application et les exigences de configuration en tant que conteneur pour exécuter les applications dans une couche isolée partageant le système d'exploitation de son hôte. Docker et Kubernetes sont des technologies de conteneurs qui aident les développeurs à définir leurs environnements d'application de manière cohérente.

Avec des pipelines CI / CD pour intégrer et déployer du code et avec des conteneurs standardisés qui isolent les besoins informatiques de chaque application, les développeurs disposent des outils pour fabriquer des services d'application sans trop de frais généraux. Les équipes de développement disposent alors de plus grandes options pour traduire les exigences métier en microservices qui peuvent être déployés, mis à l'échelle et exploités pour de multiples besoins métier.

Alors que l'automatisation de l'intégration et de la livraison de code et la mise en conteneur des applications stimulent la livraison des applications, les prochaines pratiques devops aident à automatiser et à standardiser l'infrastructure et les services cloud.

L'automatisation et la gestion de l'infrastructure étaient auparavant difficiles. Une fois l'architecture sélectionnée, les ingénieurs opérationnels se sont tournés vers divers composants d'infrastructure pour les construire et les configurer en fonction des besoins. Les outils de configuration et de gestion des actifs utilisés pour capturer ces architectures nécessitaient un mélange d'étapes automatisées et manuelles et étaient souvent obsolètes ou manquaient d'informations critiques. Les environnements de calcul étaient également rigides et, bien qu'il existait certains outils pour automatiser les environnements de mise à l'échelle, ils étaient souvent isolés à un type d'infrastructure spécifique, nécessitaient des compétences différentes pour mettre en œuvre l'automatisation et n'avaient accès qu'à un sous-ensemble de données opérationnelles pour déterminer si et comment mettre à l'échelle.

Les environnements cloud actuels offrent des interfaces utilisateur qui simplifient le travail des ingénieurs. Les ingénieurs peuvent utiliser ces outils pour configurer des réseaux privés virtuels, configurer des groupes de sécurité, puis lancer le calcul, le stockage et d'autres services requis.

Mais les équipes devops vont encore plus loin. Au lieu d'utiliser les interfaces Web et de configurer manuellement les ressources informatiques, ils automatisent le processus avec du code. Les outils IaC (Infrastructure as Code) permettent aux ingénieurs opérationnels de créer des scripts et d'automatiser la configuration et la gestion de l'infrastructure. Les configurations qui permettent la mise à l'échelle des environnements peuvent également être intégrées dans ces scripts. Chef, Puppet, Ansible et Salt sont quatre technologies concurrentes qui aident à implémenter les équipes opérationnelles à implémenter IaC.

Un processus de fabrication est aussi efficace que la capacité de surveiller, d'alerter et de récupérer des problèmes. Il en va de même pour la surveillance des devops et l'expérience utilisateur lors de l'exécution d'applications et de services. Alors que les organisations investissent dans l'automatisation, la conteneurisation, la standardisation et le déploiement d'applications, un investissement parallèle dans la surveillance est une bonne pratique.

Pensez à la surveillance à plusieurs niveaux. Au niveau le plus bas se trouve la surveillance de l'infrastructure permettant la reconnaissance et les réponses lorsque les ressources de calcul ne sont pas saines ou sous-performantes. Les environnements cloud offrent aujourd'hui des capacités de surveillance, d'alerte et d'utilisation des capacités cloud élastiques pour répondre aux problèmes d'infrastructure.

La couche suivante comprend les outils pour surveiller et capturer les métriques autour de l'automatisation devops. Ces outils deviennent plus critiques à mesure que le nombre de développeurs et de services déployables augmente. Ces outils fournissent des alertes en cas d'échec des builds et des outils d'audit pour aider à diagnostiquer les problèmes.

Enfin, il existe des outils qui surveillent la disponibilité, les performances et d'autres mesures d'exécution de l'application. Ces outils de surveillance testent souvent les API et effectuent également des tests de navigateur complets sur des points de terminaison uniques ou des transactions à plusieurs étapes. Ces moniteurs constituent une défense de première ligne pour alerter les équipes de développement lorsque les API ou les applications fonctionnent en dehors des niveaux de service acceptables.

Il existe de nombreuses pratiques devops, et elles prennent toutes du temps pour mûrir et s'intégrer. Il n'y a pas de séquence prescrite pour leur mise en œuvre ni de recommandations strictes sur le niveau d'automatisation dans lequel investir.

Néanmoins, les organisations doivent d'abord chercher à aligner la culture et l'état d'esprit autour des principes du devops, puis identifier les pratiques les mieux adaptées aux besoins de l'entreprise. Par exemple, les organisations qui connaissent déjà des performances d'application médiocres peuvent choisir de mettre en œuvre d'abord la surveillance pour aider à résoudre les problèmes plus rapidement et identifier plus facilement les causes profondes. D'autres organisations qui lancent des migrations vers le cloud peuvent choisir de déployer une infrastructure sous forme de code, tandis que celles qui établissent des architectures de développement d'applications standard peuvent investir dans des pipelines CI / CD.

Les technologues doivent garder à l'esprit que la mise en œuvre de l'automatisation a un coût et que toutes les organisations ne nécessitent pas un déploiement continu. La meilleure pratique consiste à veiller à répondre en premier aux besoins de l'entreprise et à aligner l'automatisation des devops sur les zones à forte répétition où les efforts manuels sont sujets aux erreurs.

Vidéo connexe: La montée en puissance des devops dans l'entreprise