Points Clés
- Qu'est-ce que le GitOps ?
- Pourquoi devrais-je utiliser GitOps ?
- Comment utiliser GitOps dans le cloud ?
Git est actuellement le système de contrôle de version le plus utilisé dans le monde du développement logiciel, et c'est là que tout le code et la logique de la programmation sont concentrés. Cependant, ce n'est pas seulement à partir du code qu'une application est gérée. Ainsi, il est également nécessaire qu'il y ait des paramètres d'opérations tels que la base de données, la définition de la sécurité, les routes publiques, etc. Avec cet objectif, GitOps est né. Cet article explore ce sujet en démontrant ses avantages et pourquoi une équipe de développement doit apprendre à vous connaître pour vous simplifier la vie dans le cloud.
Dans le domaine des logiciels, l'objectif principal est la livraison sans risque
Au fil des années de développement de logiciels, l'ensemble de l'industrie technologique peut faire l'expérience de différentes méthodologies pour fournir un programme. Au début, il y avait le modèle en cascade, et l'une des caractéristiques de ce modèle était la période pour livrer une version. Une livraison annuelle était généralisée, et à ce moment-là, une opération entière et une fenêtre de déploiement étaient nécessaires, ce qui prenait des heures pour terminer l'opération. Cela a découragé les opérations telles que la mise à jour des bases de données, des langages ou de certains logiciels tiers, car un simple déploiement signifie une opération très complexe, risquée et coûteuse.
Au fil du temps, il était nécessaire que la livraison des produits soit plus fréquente, en particulier pour parvenir à une meilleure communication avec les utilisateurs. En se concentrant avant tout sur la livraison du logiciel et la rupture des silos entre l'équipe de développement et l'utilisateur lui-même, le Manifeste Agile est venu s'attaquer à ce type de problème.
Au fur et à mesure de la maturation de la méthodologie et des équipes, il a été possible de trouver d'autres goulots d'étranglement dans la livraison, avec la partie opérations. Le premier renforcement majeur à aider a été la vulgarisation du cloud et de ses différents types de services disponibles (dont l'analogie entre pizza et cloud est l'une des comparaisons les plus connues). Le gros point du cloud est la réduction de la complexité.
Outre le cloud, il était également nécessaire de fournir encore plus d'équipes, principalement entre le développement et les opérations. La culture DevOps est née d'une combinaison de bonnes pratiques pour ces deux éléments.
Au fil du temps, il est possible de réaliser que la clé du développement est l'interaction du client et l'équipe de développement elle-même. Différentes stratégies sont définies avec une livraison constante et une évolution constante et progressive du produit.
GitOps
Pour faciliter davantage cette intégration de l'équipe de développement et de l'équipe des opérations, GitOps a vu le jour. Le principe est de ramener toute la configuration de l'application, dans le référentiel Git, pour que toutes les opérations soient sous le contrôle de cette équipe. Cette approche en apporte plusieurs:
- Git devient la seule source de vérité : au lieu d'avoir le code de configuration à différents points, comme Jenkins, à l'intérieur d'un serveur, etc. Ce référentiel, en plus du code, contiendra les informations d'exploitation.
- Git devient le seul point de configuration : en plus du code, il existe plusieurs cas où certains services nécessitent, par exemple, une base de données. Avec cela, il sera possible d'ajouter de tels services ou, éventuellement, de les mettre à jour.
- Git aura tous les changements observables : l'un des grands avantages de l'opération dans un contrôle de version est la possibilité d'avoir tous les changements dans le code, y compris celles d’exploitation, dans un même commit. Par exemple, il est possible d'effectuer un commit avec une mise à jour de la base de données ou une mise à jour de la JVM, et s'il y a un problème, il sera possible de revenir sur les changements et de retourner à l'état d'origine.
- Une évolution naturelle de l'IaC : en utilisant GitOps, vous bénéficierez naturellement de tous les points d'infrastructure comme le code, l'IaC, comment réduire les coûts de gestion, rendre le cycle de vie des applications plus efficace et apporter vitesse et cohérence dans les opérations.
- Une API déclarative : une voie naturelle du développement logiciel est le passage d'une API impérative à une API déclarative, et GitOps répond à ce concept en indiquant exactement les ressources et les services dont l'application a besoin.
- CI / CD : l'un des concepts les plus connus de GitOps est que GitOps est la réunion de CI / CD en cloud natif. Le fait est que tout ce processus se déroule de manière plus intuitive car, en utilisant des techniques telles que le feature-branch, il est possible de tester et d'observer chaque fonctionnalité via une Pull Request. S'il est testé et approuvé dès la fusion de la branche, le code sera disponible pour les utilisateurs peu de temps après.
GitOps dans la vraie vie est plus compliqué qu'il n'y paraît
Pour réussir une solution GitOps, il est nécessaire de configurer plusieurs parties. Ils sont souvent mis en œuvre à l'aide de Kubernetes, kubectl, Helm, OpenShift, Docker Swarm, Mesos ou Rancher connectés à Jenkins, Travis CI ou Circle CI, en plus d'une pile ELK.
Cependant, jusqu'à atteindre ce stade de l'art, il y a une complexité colossale. Et un point d'analyse important lorsque l'on parle d'architecture dans l'environnement cloud est la relation entre complexité et risque. Autrement dit, plus la complexité est grande, plus le risque de mise en œuvre de l'environnement est grand.
Une façon de réduire et d'éviter cette complexité consiste à utiliser des services cloud qui permettent une plus grande abstraction. Une plus grande abstraction diminue la complexité, qui, à son tour diminue le risque de mettre en œuvre à la fois GitOps et les opérations cloud purement.
Bienvenue à l'ère des services
Comme nous l'avons déjà mentionné, l'un des grands avantages en plus de réduire le risque avec une plus grande couche d'abstraction est la focalisation. L'exemple précédent de la pizzeria se concentre sur la fabrication de pizzas au lieu de se soucier de la fabrication des ingrédients. Donner la priorité à ce qui est le cœur de métier de l'entreprise, en plus de l'agilité, garantit la qualité de livraison en plus de la réduction des délais.
Une façon de le faire est d'utiliser des services qui offrent la simplicité, ce qui permet à l'équipe de se concentrer principalement sur la livraison du projet. À l'aide d'une API déclarative, l'application déclarera tout ce dont elle a besoin. Ce type de service gérera l'installation, la création, la configuration et les opérations triviales telles que la sécurité et les informations d'identification.
Platform.sh est la deuxième génération de PaaS dont le principe est de travailler avec GitOps, c'est-à-dire que l'équipe de développement prend conscience des besoins de l'application au sein du référentiel, et une fois qu'elle est envoyée à la branche distante, chaque processus est effectué jusqu'au déploiement sans aucune intervention de l'équipe d'exploitation.
En général, pour déployer sur le cloud, trois fichiers de configuration sont nécessaires, dans ce cas, des fichiers Yaml, et chaque fichier a une responsabilité spécifique:
- Application : ce fichier définit des informations sur la façon de construire et construire une application. C'est également lui qui définit l'autorisation entre les services que l'application utilisera à partir d'autres applications (compte tenu des microservices)
- Services : les services dont votre application a besoin, tels que la base de données, la messagerie ou le cache, sont configurés dans ce fichier
- Routes : où les routes sont configurées et quelles applications seront accessibles publiquement. Il est possible de définir plusieurs points, par exemple le cache de l'application et la redirection.
Pour connecter une application aux services, il est possible d'utiliser les bonnes pratiques de l'application Twelve-Factor, c'est-à-dire d'écraser les propriétés au moment de l’exécution en production avec grâces afin que ce changement soit transparent pour l'application, sans oublier que l'équipe de développement n'aura pas besoin de connaître les informations d'identification et le mot de passe de l'utilisateur de la base de données, par exemple.
Il est important de noter que ce type d'exposant est pris en charge par les frameworks Java les plus connus, tels que Micronaut, Quarkus, Jakarta EE / MicroProfile et Spring. Avec cela, il est possible de migrer ou de créer une nouvelle application et de la rendre plus facile; il existe un guide pour les principaux frameworks du monde Java.
Conclusion
GitOps permet une évolution dans le développement logiciel, garantissant une plus grande responsabilisation de l'équipe de développement, grâce à une API déclarative. En plus de la proximité de l'équipe avec le code de l'application et les informations infra en un seul point. Cette technique permet de rompre les silos entre les équipes et le client et diminue le délai de livraison du produit, facilitant encore davantage la transformation numérique d'une entreprise.
A propos de l'auteur
Otávio Santana est un ingénieur logiciel avec une vaste expérience dans le développement open source, avec plusieurs contributions à JBoss Weld, Hibernate, Apache Commons et à d'autres projets. Axé sur le développement multilingue et les applications haute performance, Otávio a travaillé sur de grands projets dans les domaines de la finance, du gouvernement, des médias sociaux et du commerce électronique. Membre du comité exécutif du JCP et de plusieurs groupes d'experts JSR, il est également un champion Java et a reçu le JCP Outstanding Award et le Duke's Choice Award.