RessourcesDEVOPS · GITOPS

GitOps et synchronisation déclarative : déployer par la déclaration

Git comme source unique de vérité, avec un contrôleur qui réconcilie automatiquement l'état déclaré et l'état réel.

STRALYA16 min de lecturejuillet 2026

GitOps : définition et principes fondamentaux du déploiement déclaratif

GitOps est une approche d'automatisation qui place Git au cœur de votre infrastructure. Contrairement aux pipelines traditionnels où des scripts sont exécutés directement en réponse à des événements, GitOps inverse le flux : vous déclarez l'état souhaité de votre infrastructure et de vos applications dans des fichiers versionnés dans Git, et un système de réconciliation automatique (comme ArgoCD, Flux, ou Sealed Secrets) se charge continuellement de synchroniser cet état déclaré avec ce qui tourne réellement en production. Le principe fondamental est que Git devient la source unique de vérité. Chaque changement, qu'il affecte une variable d'environnement, une réplica count Kubernetes, ou une dépendance applicative, doit transiter par Git. Cela signifie qu'un git log vous dit exactement ce que vous aviez à chaque moment, qui a fait le changement, pourquoi il a été approuvé, et si ce changement a fonctionné ou échoué. Il n'y a plus de dérive : si quelqu'un essaie de modifier directement un paramètre en production (un anti-pattern), le contrôleur GitOps va le redécouvrir et le ramener à l'état déclaré dans Git en quelques secondes ou minutes. Pour une scale-up ou une ETI qui traverse une phase de croissance rapide, où la configuration tend à devenir opaque et chaotique, GitOps impose une discipline : tout doit être écrit, versionné, et automatiquement appliqué. Cela élimine les configurations « magic » qui vivent uniquement dans la mémoire d'un ingénieur et disparaissent quand il part.

Pourquoi GitOps résout les défis des pipelines classiques et de la dette d'infrastructure

Les pipelines de déploiement traditionnels reposent sur un modèle push : vous décidez qu'il est l'heure de déployer, vous lancez un job CI/CD (Jenkins, GitLab CI, GitHub Actions), celui-ci construire une image, la pousse, et ensuite un script « fait des choses » en production (kubectl apply, terraform apply, appels API). Le problème, particulièrement dans une scale-up qui a grandi vite, est la divergence entre ce que vous pensiez avoir déployé et ce qui tourne vraiment. Peut-être qu'une personne a modifié une variable d'environnement directement sur le serveur ou le cluster pour déboguer un bug à 3h du matin, et a oublié de la documenter. Peut-être qu'une configuration est restée bloquée à mi-chemin après un déploiement échoué. Peut-être que vous n'avez tout simplement aucune visibilité sur ce qui vit en production en termes de version exacte ou de paramètres. GitOps élimine ce chaos en rendant Git la source de vérité immuable. Un contrôleur tourne en arrière-plan et demande en continu, « Qu'est-ce que tu veux selon Git ? » et « Qu'est-ce que tu as vraiment en prod ? ». S'il y a un décalage, il le corrige. Cela signifie qu'une accélération brutale du développement ou une équipe qui grossit rapidement n'entraîne plus une perte de contrôle. Vous ne vous demandez plus « qui a fait cette modification ? » ou « pourquoi cette config est-elle différente d'hier ? » : vous ouvrez Git, vous voyez le diff, vous voyez la fusion approuvée par qui, et le changement a été fait à cause de tel commit. Pour une ETI avec plusieurs équipes qui se marchent dessus, c'est une discipline qui force la communication et réduit les boucles de feedback sur les bugs d'infrastructure.

Architecture GitOps : comment synchroniser l'état déclaré vers la production

Une architecture GitOps classique repose sur trois piliers. D'abord, un repository Git contenant l'état déclaré : tous les manifests Kubernetes (déploiements, services, configmaps), ou en Terraform tous les ressources cloud, organisés par environnement (dev, staging, prod) ou par application. Cet état peut être écrit en YAML pur, via Helm charts pour plus de templating, ou via Kustomize pour des variantes sans template explosion. Ensuite, un contrôleur GitOps qui tourne dans votre cluster Kubernetes (ou en dehors si vous gérée une infra plus traditionnelle). ArgoCD est de loin le plus populaire pour Kubernetes : il se connecte au repository Git, pull régulièrement (ou sur événement via webhook), compare l'état déclaré avec l'état actuel du cluster (via la Kubernetes API), et applique les changements. Flux est une alternative plus légère et Kubernetes-native. Pour une infra non-Kubernetes (VM, load balancers, bases de données), Terraform Cloud ou Pulumi offrent des modèles similaires. Enfin, une boucle de feedback : webhooks Git qui avertissent le contrôleur d'un changement au lieu d'attendre le polling, et surtout une observabilité qui dit, « J'ai vu ce changement dans Git, j'ai appliqué la version X.Y.Z en prod, et voilà que j'observe ». Techniquement, tout changement passe par un merge request ou pull request. Un ingénieur ou une application (via un bot) crée une PR qui modifie le fichier de déploiement, par exemple passer la version d'une image de 1.2.3 à 1.3.0. Cette PR est mergée seulement après approbation (code review, tests statiques, linting). Une fois mergée, le contrôleur GitOps le détecte, et le changement est appliqué en production en quelques minutes. Cela crée une trace d'audit immuable : chaque personne qui a approuvé la PR est enregistrée, le diff du changement est visible, et si vous avez besoin de révoquer le changement, vous revertissez la PR, le contrôleur re-synchronise, et c'est fait. Pour une scale-up qui doit montrer la conformité et la traçabilité à ses clients ou au board, cette immuabilité est précieuse.

GitOps avec Kubernetes : ArgoCD et Flux pour la réconciliation déclarative

Sur Kubernetes, ArgoCD est le choix de facto pour GitOps. Vous installez ArgoCD dans votre cluster (quelques pods, facile à scaler), vous lui donnez accès à votre repo Git (via SSH keys ou HTTPS), et vous déclarez les applications à synchroniser : chacune pointe vers un chemin dans Git, un branch, et un cluster K8s destination. ArgoCD se met à jour toutes les 3 minutes (par défaut) et compare l'état. Si une application déclare 3 repliques mais que vous en avez 2 en prod, ArgoCD lance automatiquement un troisième pod. Si vous avez un bug dans votre manifeste (par exemple, une version d'image qui n'existe pas), ArgoCD se bloque et le signale avec un status « OutOfSync » ; vous voyez immédiatement ce qui ne va pas. Vous pouvez aussi configurer l'auto-sync pour que les changements soient appliqués automatiquement, ou garder un mode manuel pour plus de contrôle (utile en prod critique). Flux est une alternative légère qui fonctionne directement dans votre cluster sans UI centrale : il est plus Kubernetes-native, prend moins de ressources, mais offre moins de visualisation. Pour une ETI qui grandit, ArgoCD offre une UI où l'équipe ops peut voir tous les déploiements, leurs statuts de synchronisation, et un historique de tous les changements appliqués. Pour les Helm charts ou Kustomize, ArgoCD peut templater à la volée : vous déclarez une application qui pointe vers un Helm chart, ArgoCD fait le helm template lui-même et compares les valeurs transformées avec ce qui tourne. C'est particulièrement utile pour supporter plusieurs environnements (dev vs prod) sans dupliquer les manifests. Un ingénieur modifie simplement un fichier values-prod.yaml dans Git, la PR est mergée, et ArgoCD re-template et re-synchronise tout automatiquement.

Intégration de GitOps dans vos pipelines de release et déploiement continu

GitOps ne remplace pas votre pipeline CI/CD, il le complète. Votre pipeline CI (GitHub Actions, GitLab CI, etc.) continue à compiler votre code, lancer les tests, et construire les images Docker. Une fois qu'une image est taggée et pushée au registre (ex : myapp:v1.3.0), au lieu que votre pipeline CD classique fasse un kubectl apply ou terraform apply directement en production, il modifie simplement le repository de déclaration d'infrastructure. Par exemple, un bot ou un job dans votre pipeline modifie le fichier deploy/prod/kustomization.yaml pour changer la version d'image de 1.2.3 à 1.3.0, crée une PR, et une fois que la PR est mergée (après code review ou vérifications automatiques), GitOps prend le relais et déploie. Cela signifie que votre pipeline CI/CD ne touche jamais directement votre infra production ; il ne fait que déclarer « voilà la nouvelle version ». Cela réduit énormément les permissions nécessaires : seul le contrôleur GitOps a besoin de credentials production. Aucun secret n'est exposé dans votre pipeline CI. Si vous travaillez sur AWS plutôt que Kubernetes, vous pouvez appliquer le même principe avec Terraform : votre CI construit et teste votre code, puis une déclaration Terraform (versionnée dans Git) décrit l'état du cluster ECS, des load balancers, des bases RDS, etc. Terraform Cloud watch ce repo Git, détecte les changements, les valide, et applique. Pour une scale-up en croissance rapide, cette séparation des préoccupations est cruciale : l'équipe de développement n'a jamais besoin de credentials AWS pour déployer une nouvelle version d'app ; elle commit un changement de version dans le repo déclaration, et c'est tout. L'équipe infra peut ensuite valider que ce changement est légitime (via code review) avant de le voir en prod.

Défis pratiques : gestion des secrets, dérive et audit dans une approche GitOps

GitOps introduit de nouveaux défis. Le premier, critique, est la gestion des secrets. Vous ne pouvez pas mettre des mots de passe ou clés d'API en clair dans Git, même un repo privé. Solutions classiques : Sealed Secrets (Kubernetes-spécifique, chiffre le secret dans Git et seul votre cluster peut déchiffrer), Mozilla SOPS (chiffre des valeurs dans YAML), Vault (centralisé, plus complexe). Pour une scale-up, Sealed Secrets est souvent suffisant et simple à intégrer à GitOps : vous chiffrez chaque secret lors du déploiement (un job CI le fait), le secret chiffré vit dans Git, et ArgoCD le déchiffre et l'applique. Deuxièmement, la dérive peut survenir si quelqu'un contourne GitOps et modifie l'infra directement (un kubectl apply manuel, une modif AWS direct). Techniquement, GitOps va corriger cela à la prochaine réconciliation, mais si un incident critique survient à 3h du matin, une personne va probablement court-circuiter et faire un changement direct. La meilleure approche est de combiner GitOps avec une politique de contrôle d'accès stricte (RBAC en Kubernetes, IAM policies sur AWS) qui rend cette dérive difficile. Également, surveiller les changements non-déclarés : Kubernetes peut auditer chaque kubectl apply ; AWS CloudTrail enregistre chaque appel API. Troisièmement, si GitOps re-applique continuellement l'état (auto-sync), il y a un coût en termes de charges cluster et de logs. Pour les applications très stateful ou les opérations longue-durée (migrations de BD), une application entièrement GitOps peut être problématique. Vous pouvez désactiver l'auto-sync pour ces cas-là et garder un approche manuelle. Enfin, l'audit : GitOps brille ici. Chaque changement a un pull request, une approbation, un merge, et un timestamp. Mais vous devez aussi capturer la traçabilité du déploiement lui-même (ArgoCD enregistre quand il a appliqué, s'il y a eu un erreur). Pour une ETI qui traverse une audit de conformité, cumuler l'historique Git avec les logs ArgoCD ou Terraform Cloud donne une visibilité complète qui serait impossible avec des pipelines manuels.

Quand mettre en place GitOps dans votre migration cloud ou restructuration DevOps

GitOps n'est pas un impératif immédiat pour une scale-up qui vient juste de migrer vers AWS ou Kubernetes. Si vous avez quelques environnements, peu de changements, et une équipe petite, une approche plus simple peut suffire. Cependant, c'est une excellente investissement si : vous avez plus d'une ou deux personnes qui déploient (GitOps centralise la source de vérité et évite les conflits), votre infrastructure change rapidement et vous avez besoin de tracabilité immuable (pour la conformité ou simplement pour comprendre ce qui s'est passé), vous envisagez plusieurs environnements ou clusters (GitOps brille pour la cohérence multi-clusters), ou vous voullez réduire les permissions d'accès production (aucun développeur n'a besoin de credentials AWS ou Kubernetes directs). Si vous êtes en pleine migration de on-premise vers AWS, GitOps peut accélérer la stabilisation post-migration : au lieu de laisser les configurations flotter après la migration, vous les versionnez immédiatement dans GitOps, ce qui élimine la dérive et facilite les rollbacks. Pour une ETI qui a accumulé une dette technique d'infrastructure, GitOps force une refonte : vous devez externaliser tout l'état (Kubernetes manifests ou Terraform) plutôt que de le laisser caché dans des scripts adhoc ou des configurations manuelles. C'est du travail initial, mais c'est aussi l'opportunité de nettoyer votre infra. L'implémentation typique prend quelques semaines : d'abord, exporter l'état actuel en manifests (ArgoCD a des outils pour reverse-engineer les clusters existants), ensuite la tester sur un environnement non-critique, puis migrer progressivement en prod en commençant par les services moins critiques. Une scale-up peut faire cela en parallèle de sa croissance sans blocage majeur si elle délègue cette tâche à une personne dédiée ou à un partenaire (comme une agence DevOps) qui connaît les pièges.

GitOps et blue-green, canary : déclarer et orchestrer les stratégies de déploiement sans risque

GitOps excelle aussi pour orchestrer des déploiements sophistiqués sans ajouter de complexité. Une stratégie blue-green (deux environnements identiques, basculer le trafic d'un à l'autre) ou canary (router progressivement le trafic vers la nouvelle version) peut être entièrement déclarée dans Git. Dans ArgoCD, vous déclarez simplement deux applications (blue et green), chacune pointant vers une version différente de votre code dans Git. Quand vous êtes prêt à basculer, vous modifiez une ligne dans Git pour changer la destination du trafic (généralement via une annotation Kubernetes sur le service ou un ingress). Le contrôleur GitOps applique le changement. Pas de scripts adhoc, pas de procédure manuelle à 6 étapes : la déclaration est l'exécution. Pour canary, des outils comme Flagger ou Argo Rollouts s'intègrent avec GitOps : vous déclarez une Rollout (au lieu d'un Deployment classique) en spécifiant une stratégie canary (ex : 10% du trafic vers la nouvelle version pendant 5 minutes, puis 25%, etc.). GitOps l'applique et la monitor. Si les métriques d'erreur remontent, le rollout s'arrête automatiquement et les utilisateurs ne voient jamais les changements. Cela rend les déploiements non-risqués parce qu'ils sont vraiment déclarés à l'avance, testables sur un environnement staging (avec la même déclaration), et finalement appliqués avec des garde-fous observabilité et rollback automatiques.

Observabilité et synchronisation : valider que l'état déclaré correspond à l'état réel

Un élément critique de GitOps est l'observabilité du processus de synchronisation lui-même. Ce n'est pas suffisant que GitOps décrive l'état ; vous devez aussi savoir que l'état déclaré a été bien appliqué et que le système fonctionne. ArgoCD fournit un status « Synced » ou « OutOfSync » pour chaque application. « Synced » signifie que ce qui tourne en prod correspond exactement au manifeste dans Git. « OutOfSync » signifie qu'il y a une dérive : peut-être quelqu'un a modifié manuellement un pod, peut-être un déploiement a échoué, ou peut-être ArgoCD n'a pas pu appliquer pour une raison technique. Dans tous les cas, vous le voyez immédiatement. Vous pouvez configurer une alerte : « Si une application reste OutOfSync pendant plus de 10 minutes, averti l'équipe ». Cela force la discipline et empêche les dérives silencieuses. Ensuite, l'observabilité du comportement applicatif : GitOps en lui-même ne vous dit pas si votre app tourne bien ou si les utilisateurs sont content. Vous avez toujours besoin de métriques applicatives (CPU, mémoire, latence, erreurs), de logs, de traces distribuées. GitOps synchronise l'infra, mais l'observabilité applicative vous dit si elle tourne bien. Intégrer les deux : si ArgoCD a synchronisé une nouvelle version, et que vos métriques montrent une hausse des erreurs 5 minutes après, vous saurez que c'est dû à ce déploiement et vous pourrez revert rapidement (une revertion est aussi une PR GitOps, donc traçable). Pour une scale-up, cumuler GitOps avec un outil d'observabilité (Prometheus/Grafana, DataDog, New Relic, etc.) donne une visibilité complète : état infrastructurel, traçabilité des changements, et performance applicative, tout lié chronologiquement.

Mise en place progressive : intégrer GitOps sans bloquer votre production actuelle

La migration vers GitOps n'a pas besoin d'être un gros bang. Une approche progressive fonctionne mieux. Phase 1 : exporter votre état actuel. Si vous avez des clusters Kubernetes, des outils comme kubectl get all -o yaml ou des projets comme kubewise peuvent reverse-engineer vos manifests actuels. Même imparfait, cela crée une baseline versionnée. Si c'est Terraform, vous commencez à externaliser votre infra AWS existante (toutes les ressources, pas seulement les nouvelles). Phase 2 : configurer GitOps en mode dry-run ou surveillant. ArgoCD peut tourner sans auto-sync, juste en observant et rapportant les dérives. Cela vous donne une vue sur ce qui serait appliqué sans risque. Phase 3 : activer GitOps sur un petit service ou un environnement non-critique. Par exemple, une app interne ou une environnement de staging. Vérifier que tout fonctionne, affiner les processes (code review, approval, rollback). Phase 4 : déployer progressivement sur des services de plus en plus critiques. Pour chaque, vous pouvez commencer avec la synchronisation manuelle (un humain clique « apply »), puis progresser vers l'auto-sync une fois que la confiance augmente. Pour une scale-up avec une infrastructure déjà en vol, ne pas chercher la perfection immédiate. GitOps est un voyage, pas une destination. Chaque petit bout d'infra que vous versionnez et synchronisez via GitOps réduit le chaos et augmente la traçabilité. Et chaque nouvelle application déployée peut partir sur une approche GitOps dès le départ, progressivement remplaçant les anciennes approches.

GitOps et conformité : traçabilité immuable pour les audits et gouvernance

Pour une ETI qui gère des données sensibles ou qui doit montrer la conformité à un client ou un régulateur, GitOps offre une traçabilité immuable précieuse. Chaque changement en production a une trace dans Git : qui l'a approuvé, quand, pourquoi (dans le message de commit ou la description de la PR). Aucun changement ne peut être fait sans passer par ce processus (si vos politiques RBAC et ABAC sont bien configurées). Cela satisfait des exigences de conformité comme SOC 2, ISO 27001, ou GDPR : vous pouvez montrer lors d'un audit, « Voilà chaque changement en production, chaque approbation, et quand il a été appliqué ». Vous pouvez même brancher un webhook pour envoyer chaque changement à un système de logging centralisé (ex : Splunk) ou à une solution SIEM. De plus, GitOps facilite la séparation des responsabilités : les développeurs ne peuvent pas déployer directement en prod (ils n'ont pas les credentials), ils font une PR ; un ops ou un senior engineer l'approuve ; ensuite le système automatisé l'applique avec immuabilité. C'est bien plus auditable qu'un processus où quelqu'un lance manuellement un job et « j'espère que c'est le bon ». Finalement, GitOps facilite la gestion du cycle de vie complet. Vous pouvez voir à travers l'historique Git, « quelles étaient les versions en prod le 1er janvier ? » ou « à quelle version de cette lib avons-nous d'une faille de sécurité ? ». C'est critique pour la gestion des incidents et la post-mortem.

Résumé : GitOps comme discipline centrale pour scale-ups et ETI en croissance

GitOps transforme la manière dont vous déployez et exploitez votre infrastructure, en particulier si vous êtes une scale-up ou une ETI traversant une phase de croissance rapide. Au lieu de maintenir des scripts adhoc, des procédures manuelles, et de la configuration cachée dans différents endroits, GitOps centralise tout dans Git. Cela tue plusieurs oiseaux d'une pierre : la traçabilité devient immuable et auditable, la dérive est automatiquement détectée et corrigée, les nouveaux membres de l'équipe comprennent rapidement l'état de l'infra en lisant Git, et les opérations se démultiplient (une PR peut déclencher un déploiement entier sans intervention manuelle). Les challenges (secrets, dérive persistante, complexité initiale) sont tous surmontables avec les bons outils et une approche progressive. Pour une structure qui hérite d'une infra désordonnée ou qui vient de migrer vers le cloud, GitOps offre une discipline qui élimine le chaos. L'investissement initial pour externaliser l'état et configurer GitOps (quelques semaines) se rembourse rapidement en réduction des incidents, en vitesse de déploiement accrue, et en confiance accrue dans votre capacité à changer rapidement et en sécurité. GitOps n'est pas une mode passagère ; c'est une évolution dans la manière de penser l'infrastructure comme code, versionnée, auditée, et synchronisée de manière déclarative plutôt qu'impérative.

TEARDOWN AWS · GRATUIT

Recevez le Teardown AWS : où part vraiment votre facture.

Le guide qui liste les 12 postes de coût qui fuitent le plus chez les scale-ups, et comment les colmater. Gratuit, par mail, sans engagement.