[{"data":1,"prerenderedAt":1061},["ShallowReactive",2],{"/fr-fr/blog/ai-agents-for-migrating-rate-limiting-system":3,"navigation-fr-fr":278,"banner-fr-fr":712,"footer-fr-fr":720,"blog-post-authors-fr-fr-Sam Wiskow":959,"blog-related-posts-fr-fr-ai-agents-for-migrating-rate-limiting-system":974,"blog-promotions-fr-fr":999,"next-steps-fr-fr":1052},{"id":4,"title":5,"authors":6,"body":8,"category":256,"date":257,"description":258,"extension":259,"externalUrl":260,"faq":260,"featured":261,"heroImage":262,"meta":263,"navigation":264,"path":265,"seo":266,"slug":270,"stem":271,"tags":272,"template":276,"updatedDate":260,"__hash__":277},"blogPosts/fr-fr/blog/ai-agents-for-migrating-rate-limiting-system.md","Comment utiliser des agents d'IA pour migrer la limitation de débit de GitLab",[7],"Sam Wiskow",{"type":9,"value":10,"toc":247},"minimark",[11,15,25,30,42,51,54,60,67,70,74,89,99,102,105,109,112,115,118,121,130,133,136,139,144,155,158,165,168,173,180,184,190,193,196,201,204,211,215,222,229],[12,13,14],"p",{},"Une équipe restreinte de GitLab a mené une expérience pour savoir si nous pouvions utiliser des agents d'IA pour migrer une partie de notre système legacy de limitation de débit sans compromettre la sécurité.",[12,16,17,18,24],{},"En résumé : c'est possible. Les agents d'IA fonctionnent et peuvent révéler les faiblesses de vos méthodes de travail habituelles. Néanmoins, l'équipe, le workflow et l'observabilité ont joué un rôle plus important que les agents eux-mêmes. Voici comment nous avons structuré ce projet à l'aide de GitLab, de ",[19,20,23],"a",{"href":21,"rel":22},"https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/",[],"GitLab Duo Agent Platform"," et d'autres outils : découvrez ce qui a fonctionné, comment nous avons structuré notre workflow et où celui-ci a échoué, et comment vous pouvez reproduire notre démarche.",[26,27,29],"h2",{"id":28},"le-contexte","Le contexte",[12,31,32,33,37,38,41],{},"GitLab utilise depuis des années deux systèmes de limitation de débit en production : ",[34,35,36],"code",{},"Gitlab::ApplicationRateLimiter"," au niveau de l'application avec 121 clés, et un système distinct au niveau Rack. Nous avions pour objectif de les unifier au sein d'une seule implémentation dans ",[34,39,40],{},"labkit-ruby"," afin d'obtenir un résultat observable, testable et exploité de la même manière partout. Chaque requête adressée au monolithe passe par ce mécanisme, ses modes de défaillance doivent donc rester visibles et réversibles.",[12,43,44,45,50],{},"L'équipe comptait trois membres de GitLab et plusieurs ",[19,46,49],{"href":47,"rel":48},"https://about.gitlab.com/fr-fr/topics/agentic-ai/",[],"agents d'IA",". Max Woolf, Staff Backend Engineer au sein de l'équipe API Platform, s'est chargé du volet monolithe et a mené la plupart des déploiements. Bob Van Landuyt, qui travaille sur l'évolutivité, s'est occupé de la gemme et a défini l'architecture. Je me suis chargé du périmètre du projet et écrit une partie du code labkit initial. D'autres ingénieurs sont intervenus ponctuellement pour prendre connaissance du contexte et contribuer au code et aux revues.",[12,52,53],{},"Les agents ont analysé le contexte, rédigé les spécifications, mis en œuvre des modifications bien délimitées, écrit les tests et procédé à une première revue des merge requests. GitLab Duo Code Review a permis de maintenir un haut niveau de qualité du code sur les merge requests. Les équipes, quant à elles, étaient toujours responsables de la portée, de l'architecture, du déploiement et de la revue finale.",[12,55,56,57,59],{},"Nous avons suivi un cycle rigoureux : lecture de l'epic, rédaction de la spécification, révision contradictoire de la spécification, mise en œuvre uniquement après résolution des blocages, vérification à l'aide de preuves explicites, révision contradictoire de la merge request, transfert vers une revue humaine, puis merge. La revue contradictoire était limitée à deux cycles de résolution avant qu'un humain ne doive intervenir. Sur l'ensemble du projet, nous avons livré 14 spécifications numérotées et un peu plus de 30 merge requests dans ",[34,58,40],{},". Dans la pratique, la boucle était plus ou moins stricte selon la personne. Bob effectuait souvent plusieurs cycles de spécification et de revue en privé avant de livrer un artefact partagé.",[12,61,62],{},[63,64],"img",{"alt":65,"src":66},"Diagramme de la boucle de validation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783518190/iejv72y7iz9i9rczcfbr.png",[12,68,69],{},"Cette boucle peut sembler complexe, mais sur du code legacy, nous pouvons nous y fier, et un agent peut l'exécuter correctement.",[26,71,73],{"id":72},"ce-qui-a-fonctionné","Ce qui a fonctionné",[12,75,76,77,80,81,84,85,88],{},"La cohorte 1 constituait le test à fort enjeu : cinq clés à fort trafic, dont ",[34,78,79],{},"pipelines_create",", ",[34,82,83],{},"notes_create"," et ",[34,86,87],{},"user_sign_in",". Nous l'avons déployée à 1 %, puis 10 %, puis 50 % le 4 mai 2026, et à 100 % le 5 mai 2026. Le commentaire de Bob ce jour-là résume à lui seul tout le modèle opérationnel :",[12,90,91],{},[92,93,94,95,98],"em",{},"« Tous les déploiements sont terminés. Pour l'instant, toutes les limites de débit issues d'",[34,96,97],{},"applimiter"," et de l'implémentation labkit concordent. Mais je soupçonne que c'est parce qu'il n'y a pas beaucoup de trafic à cet endroit. Je vais essayer de générer un trafic qui dépasse la limite. »",[12,100,101],{},"Voilà à quoi ressemble un bon déploiement, et c'est le genre de jugement qu'aucun agent ne devrait porter à votre place. Le fait que le nouveau système fonctionne comme l'ancien n'est pas en soi un succès : cela peut simplement signifier que rien ne s'est déclenché.",[12,103,104],{},"La cohorte 2 a regroupé les 95 sites d'appel suivants, 83 dans le monolithe et 12 dans GitLab Enterprise Edition (EE), sous une seule paire de feature flags. Sans cette consolidation, le déploiement aurait nécessité environ 95 activations de feature flags individuelles et près de 190 modifications YAML. Les agents excellent dans ce type de déploiement mécanique à grande échelle dans un code source. Les équipes humaines, en revanche, beaucoup moins.",[26,106,108],{"id":107},"là-où-la-boucle-a-échoué","Là où la boucle a échoué",[12,110,111],{},"Le premier incident a concerné le mode « shadow ». La cohorte 2 fonctionnait en mode « shadow » depuis plusieurs jours, conformément à l'ancienne implémentation. Le passage du mode observation au mode application aurait dû se dérouler sans encombre. Un petit incident s'est pourtant produit.",[12,113,114],{},"Le nouvel adaptateur a perdu un identifiant sans déclencher d'alerte sur un chemin de code non authentifié. Trois valeurs de type String étaient compressées dans deux emplacements primitifs, et la mauvaise valeur a écrasé l'identifiant. Une infime proportion d'utilisateurs a rencontré une erreur générique pendant une courte période.",[12,116,117],{},"La comparaison en mode « shadow » avait en réalité signalé une divergence sur cette clé. Nous n'avions tout simplement pas encore défini notre système de labels pour distinguer une collision structurelle d'une divergence normale, si bien que le signal est resté dans le tableau de bord pendant que nous montions en charge jusqu'à 100 %.",[12,119,120],{},"Nous avons immédiatement désactivé le feature flag d'application. Bob a résumé le problème structurel en une phrase :",[12,122,123],{},[92,124,125,126,129],{},"« Je pense que nous devrions améliorer ce scénario une fois que nous aurons nettoyé ce désordre, et n'appeler ",[34,127,128],{},"ApplicationLimiter"," qu'avec des caractéristiques nommées, sans aucune portée sous forme de tableau. »",[12,131,132],{},"Le correctif immédiat a été livré deux jours plus tard. Le nettoyage structurel est au programme de la prochaine itération.",[12,134,135],{},"L'incident a pourtant traversé chaque étape du cycle : spécification, revue contradictoire, mise en œuvre, GitLab Duo Code Review, déploiement progressif. La boucle l'a à la fois détecté et laissé passer. La leçon à tirer de cette situation n'est pas que les agents sont dangereux, mais que nous disposons d'une observabilité, qui n'est malheureusement pas capable de distinguer les modes de défaillance qui comptent vraiment.",[12,137,138],{},"Le 15 mai, Max a réalisé un audit sur la branche principale, m'a contacté sur Slack, et a ouvert la cohorte 6 :",[12,140,141],{},[92,142,143],{},"« J'ai ajouté une cohorte 6 à la migration avec des éléments épars qui étaient passés entre les mailles du filet. »",[12,145,146,147,150,151,154],{},"Nous avions prévu cinq cohortes. Il nous en a fallu six. Le diagnostic est tombé quelques jours plus tard : Claude avait oublié une poignée de limites de débit propres à GitLab EE : ",[34,148,149],{},"notification_emails",", quelques entrées de registre GitLab EE, trois clés webhook, trois clés ",[34,152,153],{},"partner_*"," de moins d'une seconde, et quelques lignes d'adaptateur orphelines. 17 clés sur 121 avaient échappé aux cohortes précédentes. Chaque clé avait une raison de ne pas s'intégrer proprement dans les cohortes. Aucune ne devait pourtant être invisible.",[12,156,157],{},"Nous n'avions demandé ni aux agents, ni à nous-mêmes, de tenir un décompte continu par rapport à l'inventaire complet des clés.",[12,159,160,161,164],{},"Autre point à mentionner : Redis. Le service ",[34,162,163],{},"redis-cluster-ratelimiting"," fonctionne comme un cluster à 4 shards. L'estimation initiale de Bob était honnête : « Il y a de la marge, mais pas assez pour doubler entièrement l'utilisation. »",[12,166,167],{},"Début mai, la contrainte déjà rencontrée par le passé est réapparue, comme le mentionne Bob :",[12,169,170],{},[92,171,172],{},"« Le goulot d'étranglement que nous avions déjà rencontré, qui n'était pas nouveau pour ce projet, en est bel et bien un. Cela signifie que nous devons faire évoluer l'infrastructure pour le contourner. »",[12,174,175,176,179],{},"Nous avons augmenté le paramètre ",[34,177,178],{},"maxclients"," par paliers et nous sommes arrêtés à 75 000 connexions au lieu de viser 100 000, une fois qu'il est devenu évident que davantage de connexions ferait basculer le CPU des nœuds primaires en saturation. Un seul nœud primaire par shard, un seul cœur pour l'exécution des commandes. Aucun levier vertical à actionner.",[26,181,183],{"id":182},"ce-que-les-agents-ont-réellement-changé","Ce que les agents ont réellement changé",[12,185,186],{},[63,187],{"alt":188,"src":189},"Diagramme du goulot d'étranglement déplacé par les agents","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783518190/bzyemaewofxyq9ikxxcb.png",[12,191,192],{},"Les agents ont déplacé le goulot d'étranglement. Avec des agents qui rédigent les spécifications et implémentent le code au sein d'une boucle serrée, la génération de code a cessé d'être le maillon faible. La capacité de revue, l’évaluation du déploiement et l'attention des opérateurs sont devenus les points de friction. C'est un bien meilleur problème à avoir, mais il continue aujourd'hui de mobiliser des ressources humaines.",[12,194,195],{},"L'expérience n'a pas non plus toujours été agréable. En cours de projet, Max a écrit :",[12,197,198],{},[92,199,200],{},"« Résultat mitigé, je me suis retrouvé à tourner en rond avec un agent. Je me suis dit que j'aurais fait ça plus vite moi-même, ce qui était agaçant. »",[12,202,203],{},"Quelques semaines plus tôt, il avait qualifié le projet de « l'une des courbes d'apprentissage les plus exigeantes chez GitLab ». Travailler avec des agents est une compétence à part entière, et le prix à payer pour l'acquérir se traduit par des jours pendant lesquels on aurait pu progresser davantage en travaillant seul.",[12,205,206,207,210],{},"L'autre évolution a porté sur l'honnêteté quant à la définition de « terminé ». La remarque de Bob à la fin de la cohorte 1 (",[92,208,209],{},"« le feature flag par limite de débit est excessif, nous ne devrions pas procéder ainsi pour les prochaines migrations »",") illustre bien ce type de jugement qu'aucun agent ne peut porter à votre place. Ils génèreront volontiers 95 feature flags si vous le leur demandez. Le jugement humain consiste justement à décider de ne pas le faire.",[26,212,214],{"id":213},"où-nous-en-sommes-aujourdhui","Où nous en sommes aujourd'hui",[12,216,217,218,221],{},"Mi-juin, les six cohortes étaient toutes à 100 %. Les 121 clés d'",[34,219,220],{},"ApplicationRateLimiter"," passent désormais par le nouveau framework, un audit a confirmé que le chemin d’accès legacy est pratiquement réduit à néant, et nous avons ajouté un garde-fou pour qu'aucune future limite de débit ne puisse le contourner silencieusement.",[12,223,224,225,228],{},"La migration au niveau applicatif est donc terminée. ",[34,226,227],{},"RackAttack"," est la prochaine étape. Il s'agit de la couche à plus fort volume, avec environ 4 milliards de requêtes par jour. Son intergiciel (middleware) d'observation puis d'application est en cours de développement ; la première merge request est approuvée et en attente de merge.",[12,230,231,232,235,236,241,242],{},"Si vous souhaitez reproduire cette démarche, vous pouvez utiliser ",[19,233,23],{"href":21,"rel":234},[]," pour vous aider à rédiger vos spécifications, GitLab Duo Developer pour mettre en œuvre vos tickets et ",[19,237,240],{"href":238,"rel":239},"https://docs.gitlab.com/user/gitlab_duo/code_review/",[],"GitLab Duo Code Review"," pour vous aider à fusionner vos merge requests. Mais ce n’est que la partie facile. Demandez-vous plutôt si vous avez un Bob dans votre entreprise : quelqu'un qui cherchera délibérément à faire échouer le nouveau système à 1 % avant de le laisser tourner à 50 %. Demandez-vous également si vous avez un Max : quelqu'un qui effectuera un audit alors que tout le monde pense que la migration est terminée. Le workflow est essentiel, mais les personnes qui composent vos équipes le sont encore plus. Si vous souhaitez tester cette approche sur votre propre code legacy, ",[19,243,246],{"href":244,"rel":245},"https://about.gitlab.com/fr-fr/free-trial/?utm_medium=blog&utm_source=blog&utm_campaign=eg_emea_x_trial_x_fr_blog_fr",[],"lancez-vous dès aujourd'hui.",{"title":248,"searchDepth":249,"depth":249,"links":250},"",2,[251,252,253,254,255],{"id":28,"depth":249,"text":29},{"id":72,"depth":249,"text":73},{"id":107,"depth":249,"text":108},{"id":182,"depth":249,"text":183},{"id":213,"depth":249,"text":214},"ai","2026-08-10","Découvrez comment notre équipe composée de trois personnes a utilisé GitLab Duo Agent Platform, ainsi que d'autres outils d'IA, pour migrer avec succès le système de limitation de débit et les leçons que nous en avons tirées.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1773075582/yiosxfhwk8rfkulrtchv.png",{},true,"/fr-fr/blog/ai-agents-for-migrating-rate-limiting-system",{"title":267,"description":268,"config":269},"Migrez la limitation de débit de GitLab avec des agents d'IA","Une équipe de GitLab a utilisé GitLab Duo Agent Platform et d'autres outils d'IA pour migrer le système de limitation de débit.",{"noIndex":261},"ai-agents-for-migrating-rate-limiting-system","fr-fr/blog/ai-agents-for-migrating-rate-limiting-system",[273,274,275],"AI","features","tutorial","BlogPost","yiy88tVayJ49ZYABuviyAEydxBOK31K-eNJ5_WZgDFA",{"logo":279,"freeTrial":284,"sales":289,"login":294,"items":299,"search":628,"minimal":663,"duo":682,"switchNav":691,"pricingDeployment":702},{"config":280},{"href":281,"dataGaName":282,"dataGaLocation":283},"/fr-fr/","gitlab logo","header",{"text":285,"config":286},"Commencer un essai gratuit",{"href":287,"dataGaName":288,"dataGaLocation":283},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":290,"config":291},"Demander une démo",{"href":292,"dataGaName":293,"dataGaLocation":283},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":295,"config":296},"Connexion",{"href":297,"dataGaName":298,"dataGaLocation":283},"https://gitlab.com/users/sign_in/","sign in",[300,329,431,436,550,606],{"text":301,"config":302,"menu":304},"Plateforme",{"dataNavLevelOne":303},"platform",{"type":305,"columns":306},"cards",[307,313,321],{"title":301,"description":308,"link":309},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":310,"config":311},"Explorer notre plateforme",{"href":312,"dataGaName":303,"dataGaLocation":283},"/fr-fr/platform/",{"title":314,"description":315,"link":316},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":317,"config":318},"Découvrir GitLab Duo",{"href":319,"dataGaName":320,"dataGaLocation":283},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":322,"description":323,"link":324},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":325,"config":326},"En savoir plus",{"href":327,"dataGaName":328,"dataGaLocation":283},"/fr-fr/why-gitlab/","why gitlab",{"text":330,"left":264,"config":331,"menu":333},"Produit",{"dataNavLevelOne":332},"solutions",{"type":334,"link":335,"columns":339,"feature":410},"lists",{"text":336,"config":337},"Voir toutes les solutions",{"href":338,"dataGaName":332,"dataGaLocation":283},"/fr-fr/solutions/",[340,365,388],{"title":341,"description":342,"link":343,"items":348},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":344},{"icon":345,"href":346,"dataGaName":347,"dataGaLocation":283},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[349,353,356,361],{"text":350,"config":351},"CI/CD",{"href":352,"dataGaLocation":283,"dataGaName":350},"/fr-fr/solutions/continuous-integration/",{"text":314,"config":354},{"href":319,"dataGaLocation":283,"dataGaName":355},"gitlab duo agent platform - product menu",{"text":357,"config":358},"Gestion du code source",{"href":359,"dataGaLocation":283,"dataGaName":360},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":362,"config":363},"Livraison de logiciels automatisée",{"href":346,"dataGaLocation":283,"dataGaName":364},"Automated software delivery",{"title":366,"description":367,"link":368,"items":373},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":369},{"href":370,"dataGaName":371,"dataGaLocation":283,"icon":372},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[374,378,383],{"text":375,"config":376},"Tests de sécurité des applications",{"href":370,"dataGaName":377,"dataGaLocation":283},"Application security testing",{"text":379,"config":380},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":381,"dataGaLocation":283,"dataGaName":382},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":384,"config":385},"Conformité logicielle",{"href":386,"dataGaName":387,"dataGaLocation":283},"/fr-fr/solutions/software-compliance/","software compliance",{"title":389,"link":390,"items":395},"Mesures",{"config":391},{"icon":392,"href":393,"dataGaName":394,"dataGaLocation":283},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[396,400,405],{"text":397,"config":398},"Visibilité et mesures",{"href":393,"dataGaLocation":283,"dataGaName":399},"Visibility and Measurement",{"text":401,"config":402},"Gestion de la chaîne de valeur",{"href":403,"dataGaLocation":283,"dataGaName":404},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":406,"config":407},"Analyses et informations",{"href":408,"dataGaLocation":283,"dataGaName":409},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":411,"type":334,"items":412},"GitLab",[413,419,425],{"text":414,"config":415},"Entreprises",{"icon":416,"href":417,"dataGaLocation":283,"dataGaName":418},"Building","/fr-fr/enterprise/","enterprise",{"text":420,"config":421},"Pour les PME",{"icon":422,"href":423,"dataGaLocation":283,"dataGaName":424},"Work","/fr-fr/small-business/","small business",{"text":426,"config":427},"Pour le secteur public",{"icon":428,"href":429,"dataGaLocation":283,"dataGaName":430},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":432,"config":433},"Tarifs",{"href":434,"dataGaName":435,"dataGaLocation":283,"dataNavLevelOne":435},"/fr-fr/pricing/","pricing",{"text":437,"config":438,"menu":440},"Ressources",{"dataNavLevelOne":439},"resources",{"type":334,"link":441,"columns":445,"feature":539},{"text":442,"config":443},"Afficher toutes les ressources",{"href":444,"dataGaName":439,"dataGaLocation":283},"/fr-fr/resources/",[446,479,506],{"title":447,"items":448},"Premiers pas",[449,454,459,464,469,474],{"text":450,"config":451},"Installation",{"href":452,"dataGaName":453,"dataGaLocation":283},"/fr-fr/install/","install",{"text":455,"config":456},"Guides de démarrage",{"href":457,"dataGaName":458,"dataGaLocation":283},"/fr-fr/get-started/","quick setup checklists",{"text":460,"config":461},"Apprentissage",{"href":462,"dataGaLocation":283,"dataGaName":463},"https://university.gitlab.com/","learn",{"text":465,"config":466},"Documentation",{"href":467,"dataGaName":468,"dataGaLocation":283},"https://docs.gitlab.com/","product documentation",{"text":470,"config":471},"Vidéos sur les bonnes pratiques",{"href":472,"dataGaName":473,"dataGaLocation":283},"/fr-fr/getting-started-videos/","best practice videos",{"text":475,"config":476},"Intégrations",{"href":477,"dataGaName":478,"dataGaLocation":283},"/fr-fr/integrations/","integrations",{"title":480,"items":481},"Découvrir",[482,487,492,497,501],{"text":483,"config":484},"Témoignages clients",{"href":485,"dataGaName":486,"dataGaLocation":283},"/fr-fr/customers/","customer success stories",{"text":488,"config":489},"Blog",{"href":490,"dataGaName":491,"dataGaLocation":283},"/fr-fr/blog/","blog",{"text":493,"config":494},"Demo Hub",{"href":495,"dataGaName":496,"dataGaLocation":283},"/fr-fr/demo-hub/","demo hub",{"text":498,"config":499},"The Source",{"href":500,"dataGaName":491,"dataGaLocation":283},"/fr-fr/the-source/",{"text":502,"config":503},"Travail à distance",{"href":504,"dataGaName":505,"dataGaLocation":283},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":507,"items":508},"Connecter",[509,514,519,524,529,534],{"text":510,"config":511},"Services GitLab",{"href":512,"dataGaName":513,"dataGaLocation":283},"/fr-fr/services/","services",{"text":515,"config":516},"Contribuer",{"href":517,"dataGaName":518,"dataGaLocation":283},"https://contributors.gitlab.com","contribute",{"text":520,"config":521},"Communauté",{"href":522,"dataGaName":523,"dataGaLocation":283},"/community/","community",{"text":525,"config":526},"Forum",{"href":527,"dataGaName":528,"dataGaLocation":283},"https://forum.gitlab.com/","forum",{"text":530,"config":531},"Événements",{"href":532,"dataGaName":533,"dataGaLocation":283},"/events/","events",{"text":535,"config":536},"Partenaires",{"href":537,"dataGaName":538,"dataGaLocation":283},"/fr-fr/partners/","partners",{"config":540,"title":543,"text":544,"link":545},{"background":541,"textColor":542},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":546,"config":547},"Lire les articles les plus récents",{"href":548,"dataGaName":549,"dataGaLocation":283},"/fr-fr/whats-new/","whats new",{"text":551,"config":552,"menu":554},"Société",{"dataNavLevelOne":553},"company",{"type":334,"columns":555},[556],{"items":557},[558,563,569,571,576,581,586,591,596,601],{"text":559,"config":560},"À propos",{"href":561,"dataGaName":562,"dataGaLocation":283},"/fr-fr/company/","about",{"text":564,"config":565,"footerGa":568},"Carrières",{"href":566,"dataGaName":567,"dataGaLocation":283},"/jobs/","jobs",{"dataGaName":567},{"text":530,"config":570},{"href":532,"dataGaName":533,"dataGaLocation":283},{"text":572,"config":573},"Leadership",{"href":574,"dataGaName":575,"dataGaLocation":283},"/company/team/e-group/","leadership",{"text":577,"config":578},"Manuel",{"href":579,"dataGaName":580,"dataGaLocation":283},"https://handbook.gitlab.com/","handbook",{"text":582,"config":583},"Relations avec les investisseurs",{"href":584,"dataGaName":585,"dataGaLocation":283},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":587,"config":588},"Trust Center",{"href":589,"dataGaName":590,"dataGaLocation":283},"/fr-fr/security/","trust center",{"text":592,"config":593},"Centre pour la transparence de l'IA",{"href":594,"dataGaName":595,"dataGaLocation":283},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":597,"config":598},"Newsletter",{"href":599,"dataGaName":600,"dataGaLocation":283},"/company/contact/#contact-forms","newsletter",{"text":602,"config":603},"Presse",{"href":604,"dataGaName":605,"dataGaLocation":283},"/press/","press",{"text":607,"config":608,"menu":609},"Nous contacter",{"dataNavLevelOne":553},{"type":334,"columns":610},[611],{"items":612},[613,618,623],{"text":614,"config":615},"Contacter l'équipe commerciale",{"href":616,"dataGaName":617,"dataGaLocation":283},"/fr-fr/sales/","talk to sales",{"text":619,"config":620},"Assistance GitLab",{"href":621,"dataGaName":622,"dataGaLocation":283},"https://support.gitlab.com/hc/en-us","support portal",{"text":624,"config":625},"Portail clients GitLab",{"href":626,"dataGaName":627,"dataGaLocation":283},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":629,"login":630,"suggestions":637},"Fermer",{"text":631,"link":632},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":633,"config":634},"GitLab.com",{"href":297,"dataGaName":635,"dataGaLocation":636},"search login","search",{"text":638,"default":639},"Suggestions",[640,642,647,649,654,659],{"text":314,"config":641},{"href":319,"dataGaName":23,"dataGaLocation":636},{"text":643,"config":644},"Suggestions de code (IA)",{"href":645,"dataGaName":646,"dataGaLocation":636},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":350,"config":648},{"href":352,"dataGaName":350,"dataGaLocation":636},{"text":650,"config":651},"GitLab sur AWS",{"href":652,"dataGaName":653,"dataGaLocation":636},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":655,"config":656},"GitLab sur Google Cloud",{"href":657,"dataGaName":658,"dataGaLocation":636},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":660,"config":661},"Pourquoi utiliser GitLab ?",{"href":327,"dataGaName":662,"dataGaLocation":636},"Why GitLab?",{"freeTrial":664,"mobileIcon":669,"desktopIcon":674,"secondaryButton":677},{"text":665,"config":666},"Commencer votre essai gratuit",{"href":667,"dataGaName":288,"dataGaLocation":668},"https://gitlab.com/-/trials/new/","nav",{"altText":670,"config":671},"Icône GitLab",{"src":672,"dataGaName":673,"dataGaLocation":668},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":670,"config":675},{"src":676,"dataGaName":673,"dataGaLocation":668},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":678,"config":679},"Commencer",{"href":680,"dataGaName":681,"dataGaLocation":668},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":683,"mobileIcon":687,"desktopIcon":689},{"text":684,"config":685},"En savoir plus sur GitLab Duo",{"href":319,"dataGaName":686,"dataGaLocation":668},"gitlab duo",{"altText":670,"config":688},{"src":672,"dataGaName":673,"dataGaLocation":668},{"altText":670,"config":690},{"src":676,"dataGaName":673,"dataGaLocation":668},{"button":692,"mobileIcon":697,"desktopIcon":699},{"text":693,"config":694},"/switch",{"href":695,"dataGaName":696,"dataGaLocation":668},"#contact","switch",{"altText":670,"config":698},{"src":672,"dataGaName":673,"dataGaLocation":668},{"altText":670,"config":700},{"src":701,"dataGaName":673,"dataGaLocation":668},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":703,"mobileIcon":708,"desktopIcon":710},{"text":704,"config":705},"Retour aux tarifs",{"href":434,"dataGaName":706,"dataGaLocation":668,"icon":707},"back to pricing","GoBack",{"altText":670,"config":709},{"src":672,"dataGaName":673,"dataGaLocation":668},{"altText":670,"config":711},{"src":676,"dataGaName":673,"dataGaLocation":668},{"title":713,"button":714,"config":718},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":325,"config":715},{"href":716,"dataGaName":717,"dataGaLocation":283},"/fr-fr/gitlab-orbit/","orbit",{"layout":719,"disabled":261},"release",{"data":721},{"text":722,"source":723,"edit":729,"contribute":734,"config":738,"items":743,"minimal":951},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":724,"config":725},"Afficher le code source de la page",{"href":726,"dataGaName":727,"dataGaLocation":728},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":730,"config":731},"Modifier cette page",{"href":732,"dataGaName":733,"dataGaLocation":728},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":515,"config":735},{"href":736,"dataGaName":737,"dataGaLocation":728},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":739,"facebook":740,"youtube":741,"linkedin":742},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[744,790,843,886,918],{"title":432,"links":745,"subMenu":760},[746,750,755],{"text":747,"config":748},"Voir les forfaits",{"href":434,"dataGaName":749,"dataGaLocation":728},"view plans",{"text":751,"config":752},"GitLab Premium",{"href":753,"dataGaName":754,"dataGaLocation":728},"/fr-fr/pricing/premium/","why premium",{"text":756,"config":757},"GitLab Ultimate",{"href":758,"dataGaName":759,"dataGaLocation":728},"/fr-fr/pricing/ultimate/","why ultimate",[761],{"title":607,"links":762},[763,765,767,770,775,780,785],{"text":614,"config":764},{"href":616,"dataGaName":293,"dataGaLocation":728},{"text":619,"config":766},{"href":621,"dataGaName":622,"dataGaLocation":728},{"text":768,"config":769},"Portail clients",{"href":626,"dataGaName":627,"dataGaLocation":728},{"text":771,"config":772},"Statut",{"href":773,"dataGaName":774,"dataGaLocation":728},"https://status.gitlab.com/","status",{"text":776,"config":777},"Conditions d'utilisation",{"href":778,"dataGaName":779,"dataGaLocation":728},"/terms/","terms of use",{"text":781,"config":782},"Politique de confidentialité",{"href":783,"dataGaName":784,"dataGaLocation":728},"/fr-fr/privacy/","privacy statement",{"text":786,"config":787},"Gestion des cookies",{"dataGaName":788,"dataGaLocation":728,"id":789,"isOneTrustButton":264},"cookie preferences","ot-sdk-btn",{"title":330,"links":791,"subMenu":800},[792,796],{"text":793,"config":794},"Plateforme DevSecOps",{"href":312,"dataGaName":795,"dataGaLocation":728},"devsecops platform",{"text":797,"config":798},"Développement assisté par l'IA",{"href":319,"dataGaName":799,"dataGaLocation":728},"ai-assisted development",[801],{"title":802,"links":803},"Thèmes",[804,808,813,818,823,828,833,838],{"text":350,"config":805},{"href":806,"dataGaName":807,"dataGaLocation":728},"/fr-fr/topics/ci-cd/","cicd",{"text":809,"config":810},"GitOps",{"href":811,"dataGaName":812,"dataGaLocation":728},"/fr-fr/topics/gitops/","gitops",{"text":814,"config":815},"DevOps",{"href":816,"dataGaName":817,"dataGaLocation":728},"/fr-fr/topics/devops/","devops",{"text":819,"config":820},"Contrôle de version",{"href":821,"dataGaName":822,"dataGaLocation":728},"/fr-fr/topics/version-control/","version control",{"text":824,"config":825},"DevSecOps",{"href":826,"dataGaName":827,"dataGaLocation":728},"/fr-fr/topics/devsecops/","devsecops",{"text":829,"config":830},"Cloud-native",{"href":831,"dataGaName":832,"dataGaLocation":728},"/fr-fr/topics/cloud-native/","cloud native",{"text":834,"config":835},"IA pour la programmation",{"href":836,"dataGaName":837,"dataGaLocation":728},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":839,"config":840},"IA agentique",{"href":841,"dataGaName":842,"dataGaLocation":728},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":844,"links":845},"Solutions",[846,849,851,856,859,862,865,868,870,873,876,881],{"text":375,"config":847},{"href":370,"dataGaName":848,"dataGaLocation":728},"Application Security Testing",{"text":362,"config":850},{"href":346,"dataGaName":347,"dataGaLocation":728},{"text":852,"config":853},"Développement Agile",{"href":854,"dataGaName":855,"dataGaLocation":728},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":357,"config":857},{"href":359,"dataGaName":858,"dataGaLocation":728},"source code management",{"text":350,"config":860},{"href":352,"dataGaName":861,"dataGaLocation":728},"continuous integration & delivery",{"text":401,"config":863},{"href":403,"dataGaName":864,"dataGaLocation":728},"value stream management",{"text":809,"config":866},{"href":867,"dataGaName":812,"dataGaLocation":728},"/fr-fr/solutions/gitops/",{"text":414,"config":869},{"href":417,"dataGaName":418,"dataGaLocation":728},{"text":871,"config":872},"PME",{"href":423,"dataGaName":424,"dataGaLocation":728},{"text":874,"config":875},"Secteur public",{"href":429,"dataGaName":430,"dataGaLocation":728},{"text":877,"config":878},"Éducation",{"href":879,"dataGaName":880,"dataGaLocation":728},"/fr-fr/solutions/education/","education",{"text":882,"config":883},"Services financiers",{"href":884,"dataGaName":885,"dataGaLocation":728},"/fr-fr/solutions/finance/","financial services",{"title":437,"links":887},[888,890,892,894,897,899,902,904,906,908,910,912,914,916],{"text":450,"config":889},{"href":452,"dataGaName":453,"dataGaLocation":728},{"text":455,"config":891},{"href":457,"dataGaName":458,"dataGaLocation":728},{"text":460,"config":893},{"href":462,"dataGaName":463,"dataGaLocation":728},{"text":465,"config":895},{"href":467,"dataGaName":896,"dataGaLocation":728},"docs",{"text":488,"config":898},{"href":490,"dataGaName":491,"dataGaLocation":728},{"text":900,"config":901},"Nouveautés",{"href":548,"dataGaName":549,"dataGaLocation":728},{"text":483,"config":903},{"href":485,"dataGaName":486,"dataGaLocation":728},{"text":502,"config":905},{"href":504,"dataGaName":505,"dataGaLocation":728},{"text":510,"config":907},{"href":512,"dataGaName":513,"dataGaLocation":728},{"text":515,"config":909},{"href":517,"dataGaName":518,"dataGaLocation":728},{"text":520,"config":911},{"href":522,"dataGaName":523,"dataGaLocation":728},{"text":525,"config":913},{"href":527,"dataGaName":528,"dataGaLocation":728},{"text":530,"config":915},{"href":532,"dataGaName":533,"dataGaLocation":728},{"text":535,"config":917},{"href":537,"dataGaName":538,"dataGaLocation":728},{"title":551,"links":919},[920,922,924,926,928,930,935,940,942,944,946],{"text":559,"config":921},{"href":561,"dataGaName":553,"dataGaLocation":728},{"text":564,"config":923},{"href":566,"dataGaName":567,"dataGaLocation":728},{"text":572,"config":925},{"href":574,"dataGaName":575,"dataGaLocation":728},{"text":577,"config":927},{"href":579,"dataGaName":580,"dataGaLocation":728},{"text":582,"config":929},{"href":584,"dataGaName":585,"dataGaLocation":728},{"text":931,"config":932},"Développement durable",{"href":933,"dataGaName":934,"dataGaLocation":728},"/sustainability/","Sustainability",{"text":936,"config":937},"Diversité, inclusion et appartenance (DIB)",{"href":938,"dataGaName":939,"dataGaLocation":728},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":587,"config":941},{"href":589,"dataGaName":590,"dataGaLocation":728},{"text":597,"config":943},{"href":599,"dataGaName":600,"dataGaLocation":728},{"text":602,"config":945},{"href":604,"dataGaName":605,"dataGaLocation":728},{"text":947,"config":948},"Déclaration de transparence sur l'esclavage moderne",{"href":949,"dataGaName":950,"dataGaLocation":728},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":952},[953,955,957],{"text":776,"config":954},{"href":778,"dataGaName":779,"dataGaLocation":728},{"text":786,"config":956},{"dataGaName":788,"dataGaLocation":728,"id":789,"isOneTrustButton":264},{"text":781,"config":958},{"href":783,"dataGaName":784,"dataGaLocation":728},[960],{"id":961,"title":7,"body":260,"config":962,"content":964,"description":260,"extension":968,"meta":969,"navigation":264,"path":970,"seo":971,"stem":972,"__hash__":973},"blogAuthors/en-us/blog/authors/sam-wiskow.yml",{"template":963},"BlogAuthor",{"name":7,"config":965},{"headshot":966,"ctfId":967},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659433/Blog/Author%20Headshots/swiskow-headshot.jpg","swiskow","yml",{},"/en-us/blog/authors/sam-wiskow",{},"en-us/blog/authors/sam-wiskow","TR52XmFI8G3xfSF6pTXW6r_bf0Bd5tf82MmM7VjjKfM",[975,983,991],{"title":976,"description":977,"heroImage":978,"category":256,"date":979,"authors":980,"slug":982,"externalUrl":260},"Moderniser Java avec Cursor et GitLab","Ce tutoriel commence par la correction ciblée de tests, introduit des murs qualité et met en œuvre des modifications de code en tenant compte du contexte du cycle de développement, des tests et des preuves de revue.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-08-12",[981],"Michael Friedrich","modernize-java-with-cursor-and-gitlab",{"title":984,"description":985,"heroImage":986,"category":256,"date":987,"authors":988,"slug":990,"externalUrl":260},"Codage agentique : le contexte fait la différence","Les agents de codage accélèrent le développement. Grâce au contexte dans GitLab, les entreprises évitent les correctifs superficiels et raccourcissent les cycles de revue.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1773856365/gsx2c0vqlswox3ldmq88.jpg","2026-08-03",[989],"Jessica Taylor","agentic-coding-only-as-good-as-context",{"title":992,"description":993,"heroImage":994,"category":256,"date":995,"authors":996,"slug":998,"externalUrl":260},"Claude Opus 5 sur GitLab : un raisonnement conçu pour les tâches complexes","Claude Opus 5 d'Anthropic est désormais disponible sur GitLab Duo Agent Platform, offrant un raisonnement approfondi sans compromettre la rapidité.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-07-28",[997],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":1000},[1001,1014,1026,1038],{"id":1002,"categories":1003,"header":1004,"text":1005,"button":1006,"image":1011},"ai-modernization",[256],"L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":1007,"config":1008},"Obtenez votre score de maturité IA",{"href":1009,"dataGaName":1010,"dataGaLocation":491},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":1012},{"src":1013},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1015,"categories":1016,"header":1018,"text":1005,"button":1019,"image":1023},"devops-modernization",[1017,827],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":1020,"config":1021},"Obtenez votre score de maturité DevOps",{"href":1022,"dataGaName":1010,"dataGaLocation":491},"/fr-fr/assessments/devops-modernization-assessment/",{"config":1024},{"src":1025},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1027,"categories":1028,"header":1030,"text":1005,"button":1031,"image":1035},"security-modernization",[1029],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":1032,"config":1033},"Obtenez votre score de maturité en matière de sécurité",{"href":1034,"dataGaName":1010,"dataGaLocation":491},"/fr-fr/assessments/security-modernization-assessment/",{"config":1036},{"src":1037},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1039,"paths":1040,"header":1043,"text":1044,"button":1045,"image":1050},"github-azure-migration",[1041,1042],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Votre équipe est-elle prête pour la migration de GitHub vers Azure ?","GitHub a déjà commencé sa migration vers Azure. Découvrez ce que cela signifie pour vous.",{"text":1046,"config":1047},"Découvrez les différences entre GitLab et GitHub",{"href":1048,"dataGaName":1049,"dataGaLocation":491},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1051},{"src":1025},{"header":1053,"blurb":1054,"button":1055,"secondaryButton":1059},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":285,"config":1056},{"href":1057,"dataGaName":288,"dataGaLocation":1058},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":614,"config":1060},{"href":616,"dataGaName":293,"dataGaLocation":1058},1786803775769]