[{"data":1,"prerenderedAt":811},["ShallowReactive",2],{"/fr-fr/blog/categories/engineering":3,"navigation-fr-fr":21,"banner-fr-fr":447,"footer-fr-fr":457,"engineering-category-page-total-items-fr-fr":695,"engineering-category-page-featured-fr-fr":696,"engineering-category-page-1-fr-fr":726},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":11,"description":6,"extension":13,"meta":14,"navigation":15,"path":16,"seo":17,"slug":6,"stem":19,"testContent":6,"type":6,"__hash__":20},"blogCategories/fr-fr/blog/categories/engineering.yml","Engineering",null,{"template":8,"slug":9,"hide":10},"BlogCategory","engineering",false,{"name":12},"Ingénierie","yml",{},true,"/fr-fr/blog/categories/engineering",{"title":12,"description":18},"Browse articles related to Ingénierie on the GitLab Blog","fr-fr/blog/categories/engineering","QgLZNRi6l7UgbB5sPrIeGPDanWZXCR-1E7llL3f2HA4",{"logo":22,"freeTrial":27,"sales":32,"login":37,"items":42,"search":363,"minimal":398,"duo":417,"switchNav":426,"pricingDeployment":437},{"config":23},{"href":24,"dataGaName":25,"dataGaLocation":26},"/fr-fr/","gitlab logo","header",{"text":28,"config":29},"Commencer un essai gratuit",{"href":30,"dataGaName":31,"dataGaLocation":26},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":33,"config":34},"Contacter l'équipe commerciale",{"href":35,"dataGaName":36,"dataGaLocation":26},"/fr-fr/sales/","sales",{"text":38,"config":39},"Connexion",{"href":40,"dataGaName":41,"dataGaLocation":26},"https://gitlab.com/users/sign_in/","sign in",[43,72,174,179,282,343],{"text":44,"config":45,"menu":47},"Plateforme",{"dataNavLevelOne":46},"platform",{"type":48,"columns":49},"cards",[50,56,64],{"title":44,"description":51,"link":52},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":53,"config":54},"Explorer notre plateforme",{"href":55,"dataGaName":46,"dataGaLocation":26},"/fr-fr/platform/",{"title":57,"description":58,"link":59},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":60,"config":61},"Découvrir GitLab Duo",{"href":62,"dataGaName":63,"dataGaLocation":26},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":65,"description":66,"link":67},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":68,"config":69},"En savoir plus",{"href":70,"dataGaName":71,"dataGaLocation":26},"/fr-fr/why-gitlab/","why gitlab",{"text":73,"left":15,"config":74,"menu":76},"Produit",{"dataNavLevelOne":75},"solutions",{"type":77,"link":78,"columns":82,"feature":153},"lists",{"text":79,"config":80},"Voir toutes les solutions",{"href":81,"dataGaName":75,"dataGaLocation":26},"/fr-fr/solutions/",[83,108,131],{"title":84,"description":85,"link":86,"items":91},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":87},{"icon":88,"href":89,"dataGaName":90,"dataGaLocation":26},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[92,96,99,104],{"text":93,"config":94},"CI/CD",{"href":95,"dataGaLocation":26,"dataGaName":93},"/fr-fr/solutions/continuous-integration/",{"text":57,"config":97},{"href":62,"dataGaLocation":26,"dataGaName":98},"gitlab duo agent platform - product menu",{"text":100,"config":101},"Gestion du code source",{"href":102,"dataGaLocation":26,"dataGaName":103},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":105,"config":106},"Livraison de logiciels automatisée",{"href":89,"dataGaLocation":26,"dataGaName":107},"Automated software delivery",{"title":109,"description":110,"link":111,"items":116},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":112},{"href":113,"dataGaName":114,"dataGaLocation":26,"icon":115},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[117,121,126],{"text":118,"config":119},"Tests de sécurité des applications",{"href":113,"dataGaName":120,"dataGaLocation":26},"Application security testing",{"text":122,"config":123},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":124,"dataGaLocation":26,"dataGaName":125},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":127,"config":128},"Conformité logicielle",{"href":129,"dataGaName":130,"dataGaLocation":26},"/fr-fr/solutions/software-compliance/","software compliance",{"title":132,"link":133,"items":138},"Mesures",{"config":134},{"icon":135,"href":136,"dataGaName":137,"dataGaLocation":26},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[139,143,148],{"text":140,"config":141},"Visibilité et mesures",{"href":136,"dataGaLocation":26,"dataGaName":142},"Visibility and Measurement",{"text":144,"config":145},"Gestion de la chaîne de valeur",{"href":146,"dataGaLocation":26,"dataGaName":147},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":149,"config":150},"Données d'analyse et informations clés",{"href":151,"dataGaLocation":26,"dataGaName":152},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":154,"type":77,"items":155},"GitLab",[156,162,168],{"text":157,"config":158},"Pour les entreprises",{"icon":159,"href":160,"dataGaLocation":26,"dataGaName":161},"Building","/fr-fr/enterprise/","enterprise",{"text":163,"config":164},"Pour les PME",{"icon":165,"href":166,"dataGaLocation":26,"dataGaName":167},"Work","/fr-fr/small-business/","small business",{"text":169,"config":170},"Pour le secteur public",{"icon":171,"href":172,"dataGaLocation":26,"dataGaName":173},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":175,"config":176},"Tarifs",{"href":177,"dataGaName":178,"dataGaLocation":26,"dataNavLevelOne":178},"/fr-fr/pricing/","pricing",{"text":180,"config":181,"menu":183},"Ressources",{"dataNavLevelOne":182},"resources",{"type":77,"link":184,"columns":188,"feature":268},{"text":185,"config":186},"Afficher toutes les ressources",{"href":187,"dataGaName":182,"dataGaLocation":26},"/fr-fr/resources/",[189,222,240],{"title":190,"items":191},"Premiers pas",[192,197,202,207,212,217],{"text":193,"config":194},"Installation",{"href":195,"dataGaName":196,"dataGaLocation":26},"/fr-fr/install/","install",{"text":198,"config":199},"Guides de démarrage",{"href":200,"dataGaName":201,"dataGaLocation":26},"/fr-fr/get-started/","quick setup checklists",{"text":203,"config":204},"Apprentissage",{"href":205,"dataGaLocation":26,"dataGaName":206},"https://university.gitlab.com/","learn",{"text":208,"config":209},"Documentation",{"href":210,"dataGaName":211,"dataGaLocation":26},"https://docs.gitlab.com/","product documentation",{"text":213,"config":214},"Vidéos sur les bonnes pratiques",{"href":215,"dataGaName":216,"dataGaLocation":26},"/fr-fr/getting-started-videos/","best practice videos",{"text":218,"config":219},"Intégrations",{"href":220,"dataGaName":221,"dataGaLocation":26},"/fr-fr/integrations/","integrations",{"title":223,"items":224},"Découvrir",[225,230,235],{"text":226,"config":227},"Témoignages clients",{"href":228,"dataGaName":229,"dataGaLocation":26},"/fr-fr/customers/","customer success stories",{"text":231,"config":232},"Blog",{"href":233,"dataGaName":234,"dataGaLocation":26},"/fr-fr/blog/","blog",{"text":236,"config":237},"Travail à distance",{"href":238,"dataGaName":239,"dataGaLocation":26},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":241,"items":242},"Connecter",[243,248,253,258,263],{"text":244,"config":245},"Services GitLab",{"href":246,"dataGaName":247,"dataGaLocation":26},"/fr-fr/services/","services",{"text":249,"config":250},"Communauté",{"href":251,"dataGaName":252,"dataGaLocation":26},"/community/","community",{"text":254,"config":255},"Forum",{"href":256,"dataGaName":257,"dataGaLocation":26},"https://forum.gitlab.com/","forum",{"text":259,"config":260},"Événements",{"href":261,"dataGaName":262,"dataGaLocation":26},"/events/","events",{"text":264,"config":265},"Partenaires",{"href":266,"dataGaName":267,"dataGaLocation":26},"/fr-fr/partners/","partners",{"config":269,"text":272,"image":273,"link":277},{"background":270,"textColor":271},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":274,"config":275},"carte promo The Source",{"src":276},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":278,"config":279},"Lire les articles les plus récents",{"href":280,"dataGaName":281,"dataGaLocation":26},"/fr-fr/the-source/","the source",{"text":283,"config":284,"menu":286},"Société",{"dataNavLevelOne":285},"company",{"type":77,"columns":287},[288],{"items":289},[290,295,301,303,308,313,318,323,328,333,338],{"text":291,"config":292},"À propos",{"href":293,"dataGaName":294,"dataGaLocation":26},"/fr-fr/company/","about",{"text":296,"config":297,"footerGa":300},"Carrières",{"href":298,"dataGaName":299,"dataGaLocation":26},"/jobs/","jobs",{"dataGaName":299},{"text":259,"config":302},{"href":261,"dataGaName":262,"dataGaLocation":26},{"text":304,"config":305},"Leadership",{"href":306,"dataGaName":307,"dataGaLocation":26},"/company/team/e-group/","leadership",{"text":309,"config":310},"Équipe",{"href":311,"dataGaName":312,"dataGaLocation":26},"/company/team/","team",{"text":314,"config":315},"Manuel",{"href":316,"dataGaName":317,"dataGaLocation":26},"https://handbook.gitlab.com/","handbook",{"text":319,"config":320},"Relations avec les investisseurs",{"href":321,"dataGaName":322,"dataGaLocation":26},"https://ir.gitlab.com/","investor relations",{"text":324,"config":325},"Trust Center",{"href":326,"dataGaName":327,"dataGaLocation":26},"/fr-fr/security/","trust center",{"text":329,"config":330},"Centre pour la transparence de l'IA",{"href":331,"dataGaName":332,"dataGaLocation":26},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":334,"config":335},"Newsletter",{"href":336,"dataGaName":337,"dataGaLocation":26},"/company/contact/#contact-forms","newsletter",{"text":339,"config":340},"Presse",{"href":341,"dataGaName":342,"dataGaLocation":26},"/press/","press",{"text":344,"config":345,"menu":346},"Nous contacter",{"dataNavLevelOne":285},{"type":77,"columns":347},[348],{"items":349},[350,353,358],{"text":33,"config":351},{"href":35,"dataGaName":352,"dataGaLocation":26},"talk to sales",{"text":354,"config":355},"Assistance GitLab",{"href":356,"dataGaName":357,"dataGaLocation":26},"https://support.gitlab.com","support portal",{"text":359,"config":360},"Portail clients GitLab",{"href":361,"dataGaName":362,"dataGaLocation":26},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":364,"login":365,"suggestions":372},"Fermer",{"text":366,"link":367},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":368,"config":369},"GitLab.com",{"href":40,"dataGaName":370,"dataGaLocation":371},"search login","search",{"text":373,"default":374},"Suggestions",[375,377,382,384,389,394],{"text":57,"config":376},{"href":62,"dataGaName":57,"dataGaLocation":371},{"text":378,"config":379},"Suggestions de code (IA)",{"href":380,"dataGaName":381,"dataGaLocation":371},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":93,"config":383},{"href":95,"dataGaName":93,"dataGaLocation":371},{"text":385,"config":386},"GitLab sur AWS",{"href":387,"dataGaName":388,"dataGaLocation":371},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":390,"config":391},"GitLab sur Google Cloud",{"href":392,"dataGaName":393,"dataGaLocation":371},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":395,"config":396},"Pourquoi utiliser GitLab ?",{"href":70,"dataGaName":397,"dataGaLocation":371},"Why GitLab?",{"freeTrial":399,"mobileIcon":404,"desktopIcon":409,"secondaryButton":412},{"text":400,"config":401},"Commencer votre essai gratuit",{"href":402,"dataGaName":31,"dataGaLocation":403},"https://gitlab.com/-/trials/new/","nav",{"altText":405,"config":406},"Icône GitLab",{"src":407,"dataGaName":408,"dataGaLocation":403},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":405,"config":410},{"src":411,"dataGaName":408,"dataGaLocation":403},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":413,"config":414},"Commencer",{"href":415,"dataGaName":416,"dataGaLocation":403},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":418,"mobileIcon":422,"desktopIcon":424},{"text":419,"config":420},"En savoir plus sur GitLab Duo",{"href":62,"dataGaName":421,"dataGaLocation":403},"gitlab duo",{"altText":405,"config":423},{"src":407,"dataGaName":408,"dataGaLocation":403},{"altText":405,"config":425},{"src":411,"dataGaName":408,"dataGaLocation":403},{"button":427,"mobileIcon":432,"desktopIcon":434},{"text":428,"config":429},"/switch",{"href":430,"dataGaName":431,"dataGaLocation":403},"#contact","switch",{"altText":405,"config":433},{"src":407,"dataGaName":408,"dataGaLocation":403},{"altText":405,"config":435},{"src":436,"dataGaName":408,"dataGaLocation":403},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":438,"mobileIcon":443,"desktopIcon":445},{"text":439,"config":440},"Retour aux tarifs",{"href":177,"dataGaName":441,"dataGaLocation":403,"icon":442},"back to pricing","GoBack",{"altText":405,"config":444},{"src":407,"dataGaName":408,"dataGaLocation":403},{"altText":405,"config":446},{"src":411,"dataGaName":408,"dataGaLocation":403},{"title":448,"button":449,"config":454},"Découvrez comment l'IA agentique transforme la livraison logicielle",{"text":450,"config":451},"S'inscrire à GitLab Transcend le 10 juin",{"href":452,"dataGaName":453,"dataGaLocation":26},"/fr-fr/releases/whats-new/#sign-up","transcend event",{"layout":455,"icon":456,"disabled":10},"release","AiStar",{"data":458},{"text":459,"source":460,"edit":466,"contribute":471,"config":476,"items":481,"minimal":686},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":461,"config":462},"Afficher le code source de la page",{"href":463,"dataGaName":464,"dataGaLocation":465},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":467,"config":468},"Modifier cette page",{"href":469,"dataGaName":470,"dataGaLocation":465},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":472,"config":473},"Veuillez contribuer",{"href":474,"dataGaName":475,"dataGaLocation":465},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":477,"facebook":478,"youtube":479,"linkedin":480},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[482,527,580,624,651],{"title":175,"links":483,"subMenu":498},[484,488,493],{"text":485,"config":486},"Voir les forfaits",{"href":177,"dataGaName":487,"dataGaLocation":465},"view plans",{"text":489,"config":490},"GitLab Premium",{"href":491,"dataGaName":492,"dataGaLocation":465},"/fr-fr/pricing/premium/","why premium",{"text":494,"config":495},"GitLab Ultimate",{"href":496,"dataGaName":497,"dataGaLocation":465},"/fr-fr/pricing/ultimate/","why ultimate",[499],{"title":344,"links":500},[501,503,505,507,512,517,522],{"text":33,"config":502},{"href":35,"dataGaName":36,"dataGaLocation":465},{"text":354,"config":504},{"href":356,"dataGaName":357,"dataGaLocation":465},{"text":359,"config":506},{"href":361,"dataGaName":362,"dataGaLocation":465},{"text":508,"config":509},"Statut",{"href":510,"dataGaName":511,"dataGaLocation":465},"https://status.gitlab.com/","status",{"text":513,"config":514},"Conditions d'utilisation",{"href":515,"dataGaName":516,"dataGaLocation":465},"/terms/","terms of use",{"text":518,"config":519},"Politique de confidentialité",{"href":520,"dataGaName":521,"dataGaLocation":465},"/fr-fr/privacy/","privacy statement",{"text":523,"config":524},"Gérer vos cookies",{"dataGaName":525,"dataGaLocation":465,"id":526,"isOneTrustButton":15},"cookie preferences","ot-sdk-btn",{"title":73,"links":528,"subMenu":537},[529,533],{"text":530,"config":531},"Plateforme DevSecOps",{"href":55,"dataGaName":532,"dataGaLocation":465},"devsecops platform",{"text":534,"config":535},"Développement assisté par l'IA",{"href":62,"dataGaName":536,"dataGaLocation":465},"ai-assisted development",[538],{"title":539,"links":540},"Thèmes",[541,545,550,555,560,565,570,575],{"text":93,"config":542},{"href":543,"dataGaName":544,"dataGaLocation":465},"/fr-fr/topics/ci-cd/","cicd",{"text":546,"config":547},"GitOps",{"href":548,"dataGaName":549,"dataGaLocation":465},"/fr-fr/topics/gitops/","gitops",{"text":551,"config":552},"DevOps",{"href":553,"dataGaName":554,"dataGaLocation":465},"/fr-fr/topics/devops/","devops",{"text":556,"config":557},"Contrôle de version",{"href":558,"dataGaName":559,"dataGaLocation":465},"/fr-fr/topics/version-control/","version control",{"text":561,"config":562},"DevSecOps",{"href":563,"dataGaName":564,"dataGaLocation":465},"/fr-fr/topics/devsecops/","devsecops",{"text":566,"config":567},"Cloud-native",{"href":568,"dataGaName":569,"dataGaLocation":465},"/fr-fr/topics/cloud-native/","cloud native",{"text":571,"config":572},"IA pour la programmation",{"href":573,"dataGaName":574,"dataGaLocation":465},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":576,"config":577},"IA agentique",{"href":578,"dataGaName":579,"dataGaLocation":465},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":581,"links":582},"Solutions",[583,586,588,593,596,599,602,605,608,611,614,619],{"text":118,"config":584},{"href":113,"dataGaName":585,"dataGaLocation":465},"Application Security Testing",{"text":105,"config":587},{"href":89,"dataGaName":90,"dataGaLocation":465},{"text":589,"config":590},"Développement Agile",{"href":591,"dataGaName":592,"dataGaLocation":465},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":100,"config":594},{"href":102,"dataGaName":595,"dataGaLocation":465},"source code management",{"text":93,"config":597},{"href":95,"dataGaName":598,"dataGaLocation":465},"continuous integration & delivery",{"text":144,"config":600},{"href":146,"dataGaName":601,"dataGaLocation":465},"value stream management",{"text":546,"config":603},{"href":604,"dataGaName":549,"dataGaLocation":465},"/fr-fr/solutions/gitops/",{"text":606,"config":607},"Entreprises",{"href":160,"dataGaName":161,"dataGaLocation":465},{"text":609,"config":610},"PME",{"href":166,"dataGaName":167,"dataGaLocation":465},{"text":612,"config":613},"Secteur public",{"href":172,"dataGaName":173,"dataGaLocation":465},{"text":615,"config":616},"Éducation",{"href":617,"dataGaName":618,"dataGaLocation":465},"/fr-fr/solutions/education/","education",{"text":620,"config":621},"Services financiers",{"href":622,"dataGaName":623,"dataGaLocation":465},"/fr-fr/solutions/finance/","financial services",{"title":180,"links":625},[626,628,630,632,635,637,639,641,643,645,647,649],{"text":193,"config":627},{"href":195,"dataGaName":196,"dataGaLocation":465},{"text":198,"config":629},{"href":200,"dataGaName":201,"dataGaLocation":465},{"text":203,"config":631},{"href":205,"dataGaName":206,"dataGaLocation":465},{"text":208,"config":633},{"href":210,"dataGaName":634,"dataGaLocation":465},"docs",{"text":231,"config":636},{"href":233,"dataGaName":234,"dataGaLocation":465},{"text":226,"config":638},{"href":228,"dataGaName":229,"dataGaLocation":465},{"text":236,"config":640},{"href":238,"dataGaName":239,"dataGaLocation":465},{"text":244,"config":642},{"href":246,"dataGaName":247,"dataGaLocation":465},{"text":249,"config":644},{"href":251,"dataGaName":252,"dataGaLocation":465},{"text":254,"config":646},{"href":256,"dataGaName":257,"dataGaLocation":465},{"text":259,"config":648},{"href":261,"dataGaName":262,"dataGaLocation":465},{"text":264,"config":650},{"href":266,"dataGaName":267,"dataGaLocation":465},{"title":283,"links":652},[653,655,657,659,661,663,665,670,675,677,679,681],{"text":291,"config":654},{"href":293,"dataGaName":285,"dataGaLocation":465},{"text":296,"config":656},{"href":298,"dataGaName":299,"dataGaLocation":465},{"text":304,"config":658},{"href":306,"dataGaName":307,"dataGaLocation":465},{"text":309,"config":660},{"href":311,"dataGaName":312,"dataGaLocation":465},{"text":314,"config":662},{"href":316,"dataGaName":317,"dataGaLocation":465},{"text":319,"config":664},{"href":321,"dataGaName":322,"dataGaLocation":465},{"text":666,"config":667},"Développement durable",{"href":668,"dataGaName":669,"dataGaLocation":465},"/sustainability/","Sustainability",{"text":671,"config":672},"Diversité, inclusion et appartenance (DIB)",{"href":673,"dataGaName":674,"dataGaLocation":465},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":324,"config":676},{"href":326,"dataGaName":327,"dataGaLocation":465},{"text":334,"config":678},{"href":336,"dataGaName":337,"dataGaLocation":465},{"text":339,"config":680},{"href":341,"dataGaName":342,"dataGaLocation":465},{"text":682,"config":683},"Déclaration de transparence sur l'esclavage moderne",{"href":684,"dataGaName":685,"dataGaLocation":465},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":687},[688,690,693],{"text":513,"config":689},{"href":515,"dataGaName":516,"dataGaLocation":465},{"text":691,"config":692},"Gestion des cookies",{"dataGaName":525,"dataGaLocation":465,"id":526,"isOneTrustButton":15},{"text":518,"config":694},{"href":520,"dataGaName":521,"dataGaLocation":465},24,{"id":697,"title":698,"authorSlugs":699,"authors":701,"body":703,"category":9,"categorySlug":9,"config":704,"content":707,"date":708,"description":713,"extension":13,"externalUrl":6,"featured":10,"heroImage":711,"isFeatured":10,"meta":714,"navigation":15,"path":715,"publishedDate":708,"rawbody":716,"seo":717,"slug":706,"stem":721,"tagSlugs":722,"tags":724,"template":705,"updatedDate":6,"__hash__":725},"blogPosts/fr-fr/blog/custom-rules-duo-agentic-chat-deep-dive.yml","GitLab Duo Agentic Chat : renforcez votre code avec les règles personnalisées",[700],"michael-friedrich",[702],"Michael Friedrich","Transformez GitLab Duo d'un assistant IA générique en un expert en codage personnalisé pour votre équipe grâce aux règles personnalisées. Ne perdez plus de temps à corriger constamment les suggestions de l'IA qui utilisent les mauvaises versions de Java et des binaires Python incorrects ou qui vont à l'encontre de vos guides de style. Ce guide approfondi vous apprendra à créer des règles personnalisées intelligentes qui appliquent automatiquement vos normes de développement.\n\nNous aborderons les points suivants :\n\n* Contrôle des versions : obligez l'IA à utiliser Java 8, gérez les environnements Python3 et générez du code C++ multi-plateforme\n* Application du style : prévenez les anti-patterns C `goto`, appliquez les design patterns VueJS et assurez la conformité aux linters Ansible\n* Automatisation DevSecOps : configurez des projets avec scans de sécurité CI/CD appropriés et normes de documentation\n\nChaque exemple inclut des projets GitLab fonctionnels à dupliquer, des configurations complètes et des démonstrations avant/après. Découvrez comment les systèmes bancaires maintiennent leur conformité à Java 8, comment les collecteurs IoT fonctionnent sur plusieurs plateformes et comment les composants VueJS suivent les normes de production de GitLab.\n\n## Premiers pas avec les règles personnalisées pour GitLab Duo Agentic Chat\n\nSuivez la [documentation](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/#create-custom-rules) pour créer des règles personnalisées pour GitLab Duo Agentic Chat dans le répertoire `.gitlab/duo/chat-rules.md` d'un projet GitLab nouveau ou existant dans votre IDE.\n\nVous pouvez commencer avec des instructions en saisie libre et itérer pour obtenir le meilleur résultat. Les règles personnalisées prennent en charge le format [Markdown](https://docs.gitlab.com/user/markdown/) pour une meilleure structuration.\n\n* Utilisez les titres Markdown (`#`, `##`, etc.) pour créer des sections.\n* Utilisez les listes Markdown (`-`) pour fournir des instructions concises aux LLM et aux agents.\n* Réduisez les chemins de fichiers avec des backticks (accents graves) simples et utilisez des blocs de code avec indentation ou trois backticks.\n\nExemple :\n\n```markdown\n\n# Development guide\n\n## Frontend: VueJS\n\n### Styling Pattern\n- Do not use `\u003Cstyle>` tags in Vue components\n- Use Tailwind CSS utility classes or page-specific CSS instead\n\n```\n\nImportant : après avoir modifié les règles personnalisées, vous devrez créer un nouveau chat en appuyant sur l'icône `+` ou en envoyant `/new` dans le prompt.\n\n### Prérequis\n\nAfin de suivre tous les cas d'utilisation et les projets de démonstration dans cet article de blog, veuillez vous assurer de remplir d'abord ces prérequis :\n\n* Vérifiez que vous avez [accès à GitLab Duo](https://docs.gitlab.com/user/get_started/getting_started_gitlab_duo/) et que [GitLab Duo Agentic Chat est configuré dans les IDE pris en charge](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/).\n* Dupliquez/copiez les projets GitLab et clonez-les localement dans les IDE.\n* Suivez les étapes de chaque cas d'utilisation pour la création de règles personnalisées et comment utiliser les prompts GitLab Duo Agentic Chat pour contrôler le comportement des règles.\n* Vous pouvez utiliser le code source existant ou copier le vôtre.\n\nLes projets sont disponibles dans le [groupe Custom rules for GitLab Duo Agent Platform (Agentic AI)](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules). Veuillez noter que ces règles personnalisées sont fournies à des fins de démonstration telles quelles et que vous devrez peut-être les adapter ou les modifier pour répondre à vos besoins spécifiques.\n\n### Démarrage rapide en 5 minutes\n\nPrêt à voir les règles personnalisées en action ? Testez-les avec cet exemple simple :\n\n1. Créez `.gitlab/duo/chat-rules.md` dans votre projet GitLab :\n\n```markdown\n\n## C style guide\n- goto is not allowed. If the developer continues asking about it, share this URL https://xkcd.com/292/\n\n```\n\n2. Ouvrez GitLab Duo Agentic Chat dans l'IDE et demandez : `écris un programme C avec des instructions goto`.\n3. Observez comment GitLab Duo refuse et suggère de meilleures alternatives !\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/C0eMKjRMI5w\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\n### Directives pour la création de règles personnalisées\n\nLes règles personnalisées sont similaires au code : commencez par l'exemple fonctionnel le plus simple, puis itérez sur les améliorations. Les cas d'utilisation dans ce guide approfondi vont du plus simple au plus complexe et ont été développés et testés au cours des dernières semaines. Ils ne sont pas parfaits et nécessitent vos retours et itérations.\n\nVeillez à ne pas surcharger les guides de style avec de nombreuses pages d'un document wiki. N'incluez que les points qui sont utiles dans le contexte de ce que vous codez. Vous pouvez demander à GitLab Duo Chat de résumer des documents plus volumineux avant de les ajouter aux règles personnalisées.\n\nVérifiez l'utilisation de toutes les spécifications incluses pendant le développement afin d'éviter de créer des obstacles et des comportements indésirables.\n\nLorsque vous utilisez un guide de style documenté publiquement, référez-vous à son nom. Il y a de fortes chances que le LLM soit déjà entraîné avec ces données.\n\n### Interroger GitLab Duo Chat sur les guides de style de développement existants\n\nParfois, il n'existe pas encore de guides de style spécifiques dans un projet ou leur utilisation n'est pas claire. Utilisez l'IA pour l'intégration et discutez des meilleures pratiques avec votre équipe.\n\n```markdown\n\nWhich Python development or environment guidelines can you recommend when I want to create custom rules for AI to get tailored output? I need a list with textual instructions.\n\n```\n\nVous pouvez également demander à GitLab Duo Agentic Chat d'analyser les intégrations de linters CI/CD existantes qui peuvent déjà vérifier un style de développement spécifique.\n\n```markdown\n\nWhen you look into the CI/CD linter checks and configuration in the project, which development style guide can you summarize for me?\n\n```\n\nDe nombreux exemples de cet article de blog sont basés sur ma propre expérience et mes points de friction en tant que développeur. J'ai également demandé à GitLab Duo d'extraire des guides de style de projets existants et j'ai utilisé les fonctionnalités de suggestions de code de GitLab Duo pour aider à l'auto-complétion des règles personnalisées existantes. Vous pouvez obtenir le même résultat en configurant [`markdown` comme langage supplémentaire pour les fonctionnalités de suggestions de code de GitLab Duo](https://docs.gitlab.com/user/project/repository/code_suggestions/supported_extensions/#add-support-for-more-languages) dans les IDE.\n\n## Autres cas d'utilisation avec des règles personnalisées\n\nLes sections suivantes fournissent un aperçu de guides de style spécifiques. Vous pouvez mapper des langages de programmation et des environnements similaires à vos cas d'utilisation en production.\n\n* **Prise en charge de versions et de plateformes** : référez-vous à la [section Java](#exigences-de-version-java) ci-dessous pour apprendre à forcer un standard de langage spécifique pour le code généré et créé. Vous pouvez appliquer un processus similaire pour les versions C++23 et antérieures, PHP 8, Ruby 3, etc. La [section C++ ci-dessous](#prise-en-charge-multi-plateforme-C++-windows-Linux-macOS) montre comment indiquer des instructions à l'IA agentique avec la prise en charge multi-plateforme.\n* **Environnements de développement** : référez-vous aux sections ci-dessous sur [Python](#environnement-de-developpement-python-3) et [Ansible](#conformite-au-linter-ansible). Indiquez l'environnement de développement, les binaires, les outils et plus encore. Vous pouvez également indiquer aux agents des informations de routage sur les emplacements des tests/scripts et la façon d'appliquer la conformité avec les linters.\n* **Design patterns** : vous pouvez indiquer des design patterns complets avec [VueJS](#guides-de-style-frontend-pour-vuejs-3) comme exemple, en tirant parti des guides de style de développement de production de GitLab comme base.\n* **Workflows DevSecOps** : configurez des pratiques DevSecOps complètes avec la [configuration CI/CD](#preferences-de-configuration-cicd) pour des attributs CI/CD spécifiques et des valeurs par défaut pour le scan de sécurité, les [tests et linters](#tests-et-linters), et les [outils de build](#outils-de-build). Les cas d'utilisation fréquemment demandés pour la mise en place de projets incluent la [génération de documentation](#generation-de-documentation) avec `README.md` et diagrammes d'architecture, les [modèles de tickets et de merge requests](#modeles-de-tickets-et-merge-requests), [l'intégration, les exigences et les licences](#intégration-exigences-licences), et les [flux Git](#flux-git) avec `.gitignore`. Des techniques avancées avec règles personnalisées sont fournies pour les [exigences de refactorisation et de modification du code](#exigences-de-refactorisation-et-de-modification-du-code).\n\n### Cas d'utilisation : prise en charge de versions et de plateformes\n\nLe développement logiciel nécessite souvent des versions spécifiques de langages de programmation et de frameworks, ainsi qu'une prise en charge mono ou multi-plateforme. Les exemples suivants illustrent ces scénarios.\n\n#### Exigences de version Java\n\nLes environnements d'entreprise n'utilisent pas toujours la dernière version logicielle disponible. Ils s'appuient souvent sur des versions maintenues avec des correctifs de sécurité pendant une période plus longue. Par exemple, Java 7 et Java 8 sont encore utilisés dans certaines entreprises aujourd'hui.\n\nPréciser systématiquement la version requise dans les prompts de chat peut être fastidieux et conduire à des erreurs humaines, même en cas d'un seul oubli.\n\n```markdown\n\nImplement classes for managing banking transactions and different currencies.\n\n```\n\nL'exemple nécessitera des indications supplémentaires pour Java 8 :\n\n```markdown\n\nUse Java 8 for the implementation.\n\n```\n\nPour appliquer Java 8 de manière permanente, vous pouvez créer une règle personnalisée dans `.gitlab/duo/chat-rules.md` et ajouter éventuellement une URL d'epic de référence si un utilisateur vous pose des questions sur la modernisation du code :\n\n```markdown\n\n## Java style guide\n\n\n- Only Java 8 is allowed when suggesting and editing code.\n- When the user asks about code modernization and Java 9 or 21, or newer, point them to this issue to contribute: https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions/-/issues/1\n\n```\n\nUne démonstration complète est disponible dans le [projet Custom Rules – Java versions](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions).\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/iZLvpgHdABY\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\nLes modifications résultantes sont disponibles dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions/-/merge_requests/2).\n\n#### Prise en charge multi-plateforme C++ (Windows, Linux, macOS)\n\nLe développement d'applications en C++ peut nécessiter une prise en charge multi-plateforme, notamment lors de l'exécution d'agents de service sur des systèmes utilisant Windows, Linux et macOS. Les applications sont profondément intégrées aux produits clients et une migration vers un langage plus moderne comme Go ou Rust n'est pas toujours possible ni pratique.\n\nMaintenir du code qui fonctionne sur plusieurs plateformes peut être difficile en raison des différences dans les API de système d'exploitation, les chaînes d'outils, les versions de bibliothèques et les chemins de système de fichiers. Les équipes de développement sont souvent confrontés à plusieurs macros de préprocesseur `#if defined` et à des conditions imbriquées. Ils doivent alors ajouter du code et des tests personnalisés pour chaque plateforme prise en charge. Résultat : cette situation alourdit la dette technique et entraîne des défis de maintenance.\n\nL'IA peut aider lors de la génération de code correct et spécifique à une plateforme, mais elle doit connaître ces exigences. Soit l'IA agentique comprendra le code source existant via un graphe de connaissances, soit les équipes devront fournir des instructions via des règles personnalisées et des prompts.\n\nEssayons ce cas d'utilisation en pratique. Le [projet Custom Rule – C++ platforms – IoT Sensor Data Collector](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-cpp-platform-iot-sensor-data-collector) implémente un collecteur de données de capteurs IoT et a des tâches ouvertes pour moderniser le code source et ajouter la prise en charge multi-plateforme pour Linux, Windows et macOS. Vous pouvez dupliquer le projet et le cloner localement.\n\nOuvrez le fichier `.gitlab/duo/chat-rules.md` et examinez ou ajoutez les règles personnalisées suivantes :\n\n```markdown\n\n## C++ style guide\n\n- The application runs on Linux, macOS and Windows. Generate code that handles the OS API differences.\n- Use pre-processor macros for Windows and POSIX conventions for Unix (Linux, macOS).\n\n## CI/CD Configuration\n\n- Ensure that GitLab CI/CD jobs cover the different platform support. Use CI/CD job templates with extends where applicable.\n\n```\n\nDémarrez un nouveau chat et demandez de restructurer le code pour la prise en charge multi-plateforme.\n\n```markdown\n\nPlease help me restructure the code and ensure multi-platform support.\n\n```\n\nVous pouvez également indiquer le numéro de ticket ou l'URL ([ticket 3](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-cpp-platform-iot-sensor-data-collector/-/issues/3)). GitLab Duo récupérera automatiquement le contenu du ticket depuis la plateforme GitLab et le mettra dans le contexte de l'IA.\n\n```markdown\n\nPlease help me implement issue 3\n\nPlease help me implement https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-cpp-platform-iot-sensor-data-collector/-/issues/3\n\n```\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/C5NxOjB0R1Q\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\n### Cas d'utilisation : environnements de développement\n\nLes environnements de développement varient souvent entre les systèmes d'exploitation et les équipes, ce qui peut perturber les modèles d'IA qui génèrent du code ou suggèrent des modifications. Les cas d'utilisation suivants illustrent ces problèmes d'environnement et leurs solutions avec des règles personnalisées.\n\n#### Environnement de développement Python 3\n\nUn environnement de développement Python est généralement fourni avec le fichier exécutable `python` et le gestionnaire de paquets `pip`. Cependant, sur des systèmes comme MacOS ou Ubuntu, vous devez utiliser `python3` et `pip3` pour accéder aux versions plus récentes de Python 3. Cette approche peut entraîner une confusion lors de l'exécution de scripts Python, de la création d'environnements virtuels et de l'installation de dépendances de paquets.\n\nPour ce cas d'utilisation de règles personnalisées, j'ai installé Python en utilisant [Homebrew](https://brew.sh/), ce qui entraîne un fichier exécutable binaire appelé `python3` et un gestionnaire de paquets `pip3`.\n\nConfigurez un environnement virtuel Python à titre d'exemple, installez les dépendances avec `pip` et exécutez l'application :\n\n```shell\n\npython -m venv myenv\nsource myenv/bin/activate\n\npip install -r requirements.txt\n\npython script.py\n\n```\n\nCela ne fonctionne pas comme prévu, car nous devons utiliser des binaires spécifiques avec la version `3` :\n\n```shell\n\npython3 -m venv myenv\nsource myenv/bin/activate\n\npip3 install -r requirements.txt\n\npython3 script.py\n\n```\n\nNous pouvons tester ce problème avec l'Agentic Chat pour les blocs de code suggérés et la demande d'approbation pour les commandes à exécuter. Le [projet Custom Rule – Python3 Env Shop app](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-python-3-env-shop-app) implémente une application de boutique web en Python et fournit les chemins de fichiers exécutables Python par défaut dans son fichier `README.md` qui est généralement ajouté au contexte d'Agentic Chat.\n\n![GitLab Duo Agentic Chat, qui propose les mauvaises commandes binaires](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123901/c0jltxbgxi2suobxhwwq.png)\n\nAfin de résoudre le problème, examinez `.gitlab/duo/chat-rules.md`, qui contient les règles personnalisées suivantes pour appliquer les noms de fichiers exécutables Python.\n\n```markdown\n\n## Python style guide\n\n- For Python binaries, always use python3 and pip3 when suggesting or running shell commands.\n- Detect the Python environment automatically when possible.\n\n```\n\nVous pouvez également instruire les agents avec des routes prédéfinies pour rassembler des informations supplémentaires via l'appel d'outils et/ou le MCP, s'ils ne le font pas déjà automatiquement.\n\nOuvrez un nouvel Agentic Chat et demandez `Comment exécuter cette application ?` pour voir les règles personnalisées en action avec `python3` et `pip3` comme souhaité.\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/UQ2_OCvUmF0\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\nLe code source complet est disponible dans le [projet Custom Rule – Python3 Env Shop app](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-python-3-env-shop-app).\n\n#### Conformité au linter Ansible\n\nLe linter Ansible moderne pour les tâches d'Infrastructure-as-Code applique un guide de style strict, qui peut être vérifié avec `ansible-lint` : il détecte lorsque des valeurs booléennes (`true`/`false`) sont requises au lieu de chaînes (`yes`/`no`), les actions de modules intégrés qui requièrent le FQCN (Fully Qualified Collection Name) comme noms de paramètres, et les caractères invisibles de fin à supprimer. Les intégrations CLI et IDE, telles que l'[extension VS Code Ansible par Red Hat](https://developers.redhat.com/learning/learn:ansible:get-started-ansible-visual-studio-code-extension/resource/resources:install-and-configure-ansible-extension-visual-studio-code) aident les équipes à visualiser ces erreurs. Les LLM et les agents de chat ne génèrent pas toujours du code Ansible correct, ce qui force les équipes à le corriger manuellement.\n\nExaminons le problème avec un cas d'utilisation concret. L'exemple suivant implémente un guide Ansible basique dans le [projet Custom Rule – Ansible Environment](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment) pour configurer un serveur GitLab sur Ubuntu. Les valeurs booléennes sont incorrectement typées comme chaînes (`yes`/`no`), et les actions de modules intégrés ainsi que la suppression des espaces entraînent des problèmes supplémentaires.\n\n![VS Code avec erreur de linter Ansible : mauvais type booléen](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/eofxonbvbs7o2qt48tmc.png)\n\n![VS Code avec erreur de linter Ansible : FQCN d'action de module intégré](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/qnzwk8b1dslmcqercxul.png)\n\n![VS Code avec erreur de linter Ansible : caractères invisibles de fin](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/fsrceusoksp16xj42yix.png)\n\nVoyons comment nous pouvons créer des règles personnalisées pour aider les agents GitLab Duo à corriger les erreurs de linter Ansible et les empêcher de se reproduire à l'avenir.\n\nDupliquez et clonez le [projet Custom Rule – Ansible Environment](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment) et ouvrez `.gitlab/duo/chat-rules.md` dans l'IDE pour inspecter les règles personnalisées :\n\n```markdown\n\n## Ansible styleguide\n\n- Boolean values in Ansible should be typed as \"true\" or \"false\" and never as string.\n- Ansible module builtin actions must use the FQCN (Fully Qualified Collection Name).\n- Always trim whitespaces in Ansible YAML.\n\n```\n\nOuvrez un nouveau prompt GitLab Duo Agentic Chat et demandez à l'agent GitLab Duo le même guide de directives et de procédures opérationnelles Ansible :\n\n```markdown\n\nPlease help me fix the Ansible linter errors\n\n```\n\nLes agents analyseront le dépôt, demanderont d'exécuter des commandes `ansible-lint`, et examineront comment corriger les problèmes en suivant les règles personnalisées définies.\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/P465U8IfScE\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\nVous pouvez inspecter les règles personnalisées et les modifications de code Ansible dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment/-/merge_requests/1) dans le [projet Custom Rule – Ansible Environment](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment).\n\nExercice asynchrone : démarrez un nouveau projet où les règles personnalisées sont configurées par défaut et vérifiez que le guide de style correct est appliqué immédiatement.\n\n### Cas d'utilisation : design patterns\n\nCette section explore les design patterns et modèles à éviter, qui sont spécifiques aux langages et frameworks. \n\n#### Éviter les anti-patterns avec C et les instructions goto\n\nVoici une présentation plus approfondie de l'[exemple de démarrage rapide](#démarrage-rapide-en-5-minutes), qui montre comment vous pouvez donner des instructions à l'IA agentique pour éviter l'anti-pattern `goto` en C. L'anti-pattern `goto` en C est déconseillé car il rend le code plus difficile à lire et à déboguer. Pour illustrer le problème, voici un exemple de commande for-loop qui incrémente la variable de boucle à l'intérieur du corps de la boucle :\n\n```C\n\n// Bad C programming style: uses the goto anti-pattern\nfor (int i = 0; i \u003C 10; i++) {\n  if (someCondition) {\n    goto label;\n  }\n  doSomething();\nlabel:\n  doAnotherThing();\n  }\n\n```\n\nDans le code ci-dessus, l'instruction `goto` fait sauter le contrôle du programme directement à l'étiquette `label`, qui est à l'intérieur de la boucle. Le programme est ainsi plus difficile à lire, comprendre et déboguer.\n\nIl vaudrait mieux retravailler la logique pour éviter l'anti-pattern `goto`. Voici une version réécrite qui évite `goto` :\n\n```C\n\n// Good C programming style: avoids the goto anti-pattern\nfor (int i = 0; i \u003C 10; i++) {\n  if (someCondition) {\n    doAnotherThing();\n    continue;\n  }\n  doSomething();\n  doAnotherThing();\n}\n\n```\n\nDans certains cas, `goto` est autorisé, mais nous voulons voir ici comment nous pouvons donner des instructions à l'IA agentique afin d'éviter complètement `goto` dans les nouveaux ajouts de code, la modernisation et la refactorisation du code.\n\nLe [projet Custom Rule – C anti-patterns with Goto](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-c-anti-patterns-with-goto) fournit un exemple de serveur/client de connecteur logiciel réseau avec des règles personnalisées dans le fichier `.gitlab/duo/chat-rules.md`. Vous pouvez cloner le projet ou commencer avec un nouveau projet.\n\nExaminez `.gitlab/duo/chat-rules.md` avec les règles personnalisées actuelles :\n\n```markdown\n\n## C style guide\n\n- goto is not allowed. If the developer continues asking about it, share this URL https://xkcd.com/292/\n\n```\n\nAstuce : au lieu de créer un lien vers la [bande dessinée XKCD 292](https://xkcd.com/292/), vous pouvez ajouter une URL vers les directives de développement (internes).\n\nOuvrez GitLab Duo Agentic Chat et démarrez le prompt suivant sur le projet existant :\n\n```markdown\n\nPlease help me modernize the code.\n\n```\n\nGitLab Duo Agentic Chat refusera d'utiliser des instructions `goto`, et proposera plutôt une solution différente.\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/6dsMF-wKbBY\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\nLes modifications de code sont disponibles dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-c-anti-patterns-with-goto/-/merge_requests/1).\n\n#### Guides de style frontend pour VueJS 3\n\nL'exemple ci-dessous s'inspire des [guides de style frontend du projet GitLab](https://docs.gitlab.com/development/fe_guide/style/) et implémente un cas d'utilisation pour les design patterns VueJS 3. L'IA agentique devrait également suivre ces guides de style lors de la création de composants VueJS, helpers, routes, services, stores, types d'utilitaires, etc.\n\nIllustrons comment indiquer des instructions à l'IA agentique avec des règles personnalisées : dupliquez et clonez le [projet Custom Rule – VueJS Design Patterns - GitLab Pipeline Dashboard](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard) et inspectez les tickets ouverts et les tâches.\n\nExaminez le fichier `.gitlab/duo/chat-rules.md` et ajoutez les règles personnalisées suivantes (si elles n'y sont pas encore) :\n\n```markdown\n\n## NodeJS style guide\n\n- Don't leave debug statements (console.logs)\n- Always run `npm install` after updating `package.json` and before `npm test` and `npm run build`.\n\n# GitLab Vue.js Design Patterns Style Guide\n\n## Component Structure\n\n### Data Definition Pattern\n- Explicitly define data being passed into Vue apps\n- Avoid spread operators for better discoverability\n- Parse non-scalar values during instantiation\n\n### Template Naming Pattern\n- Use kebab-case for component names in templates\n\n### File Structure Pattern\n- Use `.vue` files for Vue templates\n- Do not use `%template` in HAML\n\n### Styling Pattern\n- Do not use `\u003Cstyle>` tags in Vue components\n- Use Tailwind CSS utility classes or page-specific CSS instead\n\n[...]\n\n```\n\nLes règles personnalisées complètes sont disponibles dans le [fichier `.gitlab/duo/chat-rules.md`](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/blob/main/.gitlab/duo/chat-rules.md?ref_type=heads&plain=1).\n\nEnsuite, ouvrez GitLab Duo Agentic Chat et demandez comment [ajouter de nouveaux mini graphiques de pipeline](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/issues/6), ou d'autres tâches que vous rencontrez. Astuce : vous pouvez référencer uniquement le ticket ou coller l'URL complète du ticket, et l'Agentic Chat recherchera les deux et extraira le titre et la description pour le contexte actuel.\n\n```markdown\n\nPlease help me implement issue 6\n\n```\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/KbczS-OVb90\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\nLes modifications de code qui en résultent sont disponibles dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/merge_requests/3).\n\nRemarque : le guide de style VueJS a été extrait du [projet gitlab-org/gitlab](https://gitlab.com/gitlab-org/gitlab) grâce à GitLab Duo Agentic Chat avec le prompt suivant :\n\n```markdown\n\nWhat is the development style guide for VueJS?\n\nCan you print the styleguide as Markdown formatted list with headings.\n\nCreate a file in the repo, and only print the style guide rules there, no codeblocks.\n\n```\n\n![IntelliJ IDEA avec le code source `gitlab-org/gitlab`, et GitLab Duo Agentic Chat écrivant le fichier du guide de style](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123901/prf63nqoqsqzn7lh9pnq.png)\n\n### Cas d'utilisation : workflows DevSecOps\n\nLes workflows DevSecOps comprennent les meilleures pratiques pour la configuration initiale d'un projet avec des modèles de tickets/merge requests, `.gitignore`, la configuration GitLab CI/CD, la documentation `README.md`, les licences et bien plus encore. La section suivante explore une large gamme de cas d'utilisation. Vous pouvez vous en inspirer pour vos propres règles personnalisées.\n\nAutomatisation DevSecOps courante avec règles personnalisées :\n\n* **Configuration initiale de projet** : création automatique de README, .gitignore, configuration CI/CD\n* **Valeurs par défaut de sécurité** : application de test statique de sécurité des applications (SAST), scan des dépendances, détection des secrets\n* **Documentation** : génération de templates de tickets/merge requests, diagrammes d'architecture\n\nUn exemple de cas d'utilisation combiné est disponible dans le [projet Custom Rule – DevSecOps workflows – Git README build tools issue MR templates](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-devsecops-workflows). Vous pouvez explorer les règles personnalisées, et les dupliquer/cloner localement pour interroger l'Agentic Chat avec un nouveau prompt, tel que : `Aide-moi à effectuer la configuration initiale de ce projet`.\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe width=\"560\" height=\"315\"\n  src=\"https://www.youtube.com/embed/hKpLcBtbC4g\" frameborder=\"0\"\n  allowfullscreen=\"true\">\n  \u003C/iframe>\n\u003C/figure>\n\nLes sections suivantes (aussi disponibles dans la vidéo ci-dessus) fournissent des prompts détaillés.\n\n#### Templates de tickets et merge requests\n\nVous pouvez demander à l'IA agentique de créer des templates de tickets/merge requests s'ils sont manquants, et proposer d'ajouter des informations spécifiques au projet ou des étiquettes. Les agents interrogeront automatiquement l'API de GitLab en arrière-plan et intégreront la structure actuelle du projet dans un template.\n\n```markdown\n\n## Issue and MR templates\n\n- If no issue templates for `Default` and `Feature Proposal` exist in .gitlab/issue_templates, create them using the following raw template sources:\n\n        Default: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/issue_templates/Default.md\n        Feature Proposal: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/issue_templates/Feature%20Proposal.md\n\n- If no default MR template `Default` exists in `.gitlab/merge_request_templates`, create them using the following raw template sources:\n\n        Default: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/merge_request_templates/Default.md\n\n- Update the project URLs, and available labels in the fetched templates accordingly, or remove anything unknown and let the user know about TODOs.\n- Create a test issue/MR, when bootstrapping a new project.\n\n```\n\n#### Outils de build\n\nIl existe une variété d'outils de build, de gestionnaires de paquets, de compilateurs, de constructeurs de conteneurs disponibles par langage de programmation. Lors de questions sur les mises à jour et dépendances, l'IA agentique peut utiliser ces outils par défaut sans demander l'autorisation.\n\n```markdown\n\n## Build tools\n\n- Always use a virtual env with Python, and set it up before executing any Python commands\n- For C/C++: Prefer CMake, and gcc on Linux, clang on macOS, MSVC on Windows.\n- For Python: Always use pip\n- For Java: Always use Gradle\n- For Node.js, suggest to use npm/yarn.\n- For Rust: Always use cargo\n- For Go: Always use go.mod\n- For Ruby: Always use Bundler\n- For PHP: Always use Composer\n- For .NET: Always use .NET CLI\n- For Scala: Always use SBT\n- For Elixir: Always use Mix\n- For Haskell: Always use Cabal\n- For Swift: Always use Swift Package Manager\n- For Kotlin: Always use Gradle or Maven.\n- For TypeScript: Always use npm or yarn.\n- Always suggest using a package manager or build tool based on the main programming language of the project.\n- When asking for dependencies, assume that the user wants to update all current dependencies to the latest version available.\n\n- Always suggest to create a Dockerfile if there isn't one. Always use a minimal image and use a tag for security scanning.\n- Always add a `Dockerfile` with the base image and the entrypoint if one does not exist.\n- Always include a `.dockerignore` and use it in the Docker build process.\n\n```\n\n#### Préférences de configuration CI/CD\n\nUtilisez des règles pour indiquer des images de conteneur spécifiques, des modèles de variables et de noms de jobs, etc.\n\n```markdown\n\n## CI/CD Configuration\n\n- If no GitLab CI/CD configuration exists in `.gitlab-ci.yml`, ask the user for approval to create.\n- Create a GitLab CI/CD configuration automatically when a new project gets bootstrapped\n\n- Always use alpine as container image to build the application.\n- Add caching for detected programming languages and frameworks.\n\n```\n\n#### Préférences de scan de sécurité\n\nLes scanners de sécurité peuvent également être appliqués dans la configuration GitLab CI/CD. L'exemple suivant indique aux agents de toujours inclure l'analyseur Advanced SAST, le scan des dépendances et la détection des secrets. Il a été testé avec succès dans d'autres cas d'utilisation de ce tutoriel.\n\n```markdown\n\n## Security scanning\n\n- Always use Advanced SAST.\n- Always include SAST, Dependency Scanning, Secrets Detection templates, similar to the following format:\n\n    include:\n        - template: Jobs/SAST.gitlab-ci.yml\n        - template: Jobs/Secret-Detection.gitlab-ci.yml\n        - template: Jobs/Dependency-Scanning.gitlab-ci.yml\n\n    variables:\n        GITLAB_ADVANCED_SAST_ENABLED: 'true'\n\n        \n```\n\n![VS Code avec une application Java, GitLab CI/CD, des règles personnalisées, et l'Agentic Chat qui ajoute l'analyseur Advanced SAST (test statique de sécurité des applications)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/avokij2uelhkx711wp1q.png)\n\n#### Tests et linters\n\nVous pouvez également indiquer directement à l'Agentic Chat où trouver les tests et comment les exécuter. La même idée s'applique à l'appel de commandes de linter. Merci à Jessie Young pour cette astuce pratique !\n\n```markdown\n\n## Tests and linting details\n\n- Tests in this project are located in __ directory and are run using the ___ command\n- Linting is done with the ___ command\n\n```\n\n#### Génération de documentation\n\nVoici les meilleures règles personnalisées concernant la documentation.\n\n```markdown\n\n- If a README is missing, ask the user if they want to create one. If the user agrees, create a basic `README.md` for them.\n- When the user asks for an architecture proposal, always respond with generating an architecture diagram in Mermaid, and ask the user if they want you to add it to the README.md or another documentation file.\n- For documentation in Markdown, always use GitLab flavored Markdown.\n- Always add correct code block syntax highlighting support.\n\n```\n\n#### Exigences de refactorisation et de modification du code\n\nLorsqu'un projet doit être progressivement modernisé avec du code qui vient d'être généré et ne doit pas entraîner de grandes refactorisations, les règles suivantes peuvent être utiles.\n\n```markdown\n\n## Keep the changes minimal\n\n- The project uses \u003Cthis standard and version>. For newly generated code, use this standard.\n- Do not attempt to refactor code already created in a project to this standard, but for new code, always ensure this standard is used.\n- If unsure whether a file requires modification or refactoring, document this as a todo task.\n- Never fix detected problems, whitespaces, code formatting, unless the user instructs you specifically in a comment.\n- The code must be retained in its original format and only changes specific to solving the user request are allowed.\n\n## Summaries\n\n- List all items to address at the bottom in a summary section with TODO: followed by a textual description.\n- Identify 3 critical items, and ask the user if you should create GitLab issues from those items.\n\n```\n\n#### Intégration, exigences, licences\n\nIncluez toujours un lien de documentation spécifique, et des directives à suivre dans les réponses de chat.\n\n```markdown\n\n## Link to guidelines\n- Always refer to our developer guidelines when answering questions. You can find those guidelines here: https://docs.gitlab.com/development/\n\n## Context and planning\n- Always start with finding existing issues with the desired topic. Only then propose new implementation work.\n\n## License\n- Always add the MIT license into `LICENSE` and use `GitLab B.V.` as copyright holder.\n\n```\n\n#### Flux Git\n\nSuivez un flux de gestion de branches Git spécifique pour les suggestions et commandes exécutées.\n\n```markdown\n\n## Git flows\n\n- Examine the project and involved development environment and programming languages. Always add a `.gitignore`.\n- Consider more best practices when bootstrapping a new project.\n- For existing projects, offer to add a `.gitignore` when missing, but only when asked about the state of the project, or what is missing.\n\nWhen a user requests to start with a new feature, always create a new branch, called \"feature/\u003Cshortname>\" and describe the behavior. Ask for the user's approval.\n\n```\n\n## Distribution et tests des règles personnalisées\n\nVous pouvez créer des [templates de projets GitLab](https://docs.gitlab.com/administration/custom_project_templates/) avec des prompts de règles personnalisées éprouvés et appliquer les meilleures pratiques à chaque nouveau projet.\n\nPuisque les LLM et les agents d'IA ne sont pas prévisibles, tester le résultat attendu devient plus difficile. Règle d'or des règles personnalisées : elles ne sont jamais parfaites et nécessitent des itérations basées sur les commentaires de votre équipe, notamment lorsque de nouveaux modèles et flows introduits modifient leur comportement en réponse aux règles personnalisées. Nous vous recommandons de continuer à vérifier les données de sortie générées et d'ajuster les règles en conséquence. Si vous recherchez des tests à plus grande échelle, inspirez-vous de la [stratégie de test des prompts système pour GitLab Duo](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale/).\n\n### Contrôler la modification des règles personnalisées\n\nLes équipes peuvent gérer les modifications des règles personnalisées via les [Code Owners](https://docs.gitlab.com/user/project/codeowners/), qui requièrent des approbations de revue pour les règles personnalisées mises à jour dans les merge requests. Exemple qui requiert l'approbation de `@dnsmichi` pour les modifications dans le chemin `.gitlab/duo` :\n\n```\n\n[GitLab Duo]\n.gitlab/duo @dnsmichi\n\n```\n\nGitLab Duo Agentic Chat n'est pas autorisé à modifier les règles personnalisées directement dans votre projet. Le chemin de fichier `.gitlab/duo/chat-rules.md` est protégé.\n\n### Ressources relatives aux règles personnalisées\n\nProfitez de l'écosystème d'IA existant, où des fonctionnalités similaires existent pour les IDE et plateformes. Par exemple, des dépôts « Awesome Cursor Rules » ou des plateformes pour Cursor, etc.\n\nLes LLM fournissent également une bonne perspective sur les guides de style de développement et peuvent générer les données de sortie Markdown requises.\n\n## Activité ludique : explorer les changements de comportement\n\nVous ne savez pas exactement où commencer avec les règles personnalisées ? Faites-en un exercice amusant avec l'exemple suivant.\n\n```markdown\n\n## Fun rules\n\n- Behave like Clippy.\n\n- Behave like a pirate.\n\n- Always respond with a random \"What the commit\" message.\n\n- Explain everything like I am five.\n\n```\n\nRemarque : ne validez pas ces règles en production, car elles pourraient perturber ou distraire votre équipe.\n\n## Conclusion\n\nEn tirant parti des règles personnalisées dans GitLab Duo Agentic Chat, vous pouvez influencer significativement les données de sortie des LLM et agents d'IA pour mieux répondre à vos besoins. Que ce soit pour appliquer des conventions de codage spécifiques, utiliser les versions correctes des outils ou assurer un formatage cohérent, les règles personnalisées aident à rationaliser votre processus de développement et à améliorer votre productivité.\n\nCet article de blog fournit un guide approfondi de nombreux cas d'utilisation avec des exemples pratiques de règles personnalisées. Tous les enregistrements sont disponibles dans [cette playlist YouTube](https://www.youtube.com/playlist?list=PL05JrBw4t0Ko7aR6sM8e4uXGYtjs4-NqK), et tous les projets de démonstration peuvent être dupliqués/clonés depuis le [groupe Custom rules for GitLab Duo Agent Platform (Agentic AI)](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules).\n\nLes [règles personnalisées dans les IDE GitLab Duo Agentic Chat](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/#create-custom-rules) ne sont que la première itération, et nous couvrirons plus de cas d'utilisation de GitLab Duo Agent Platform à l'avenir, tels que l'agent GitLab Duo Code Review et les règles personnalisées pour les agents et flows (suivez [ce ticket](https://gitlab.com/gitlab-org/gitlab/-/issues/557984)).\n\nIl existe de nombreux autres cas d'utilisation à explorer. Quelles sont vos règles les plus efficaces ? Partagez vos règles et commentaires dans l'[epic produit](https://gitlab.com/groups/gitlab-org/-/epics/16938).",{"featured":10,"template":705,"slug":706},"BlogPost","custom-rules-duo-agentic-chat-deep-dive",{"body":703,"date":708,"category":9,"tags":709,"heroImage":711,"authors":712,"description":713,"title":698},"2026-02-10",[561,710],"AI/ML","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",[702],"Découvrez comment l'IA peut comprendre votre code source, suivre vos conventions et générer du code prêt pour la production avec un minimum de cycles de revue.",{},"/fr-fr/blog/custom-rules-duo-agentic-chat-deep-dive","seo:\n  config:\n    noIndex: false\n  title: Règles personnalisées dans GitLab Duo Agentic Chat\n  ogTitle: ''\n  description: Découvrez comment l'IA peut comprendre votre code source, suivre\n    vos conventions et générer du code prêt pour la production avec un minimum\n    de cycles de revue.\ncontent:\n  body: >-\n    Transformez GitLab Duo d'un assistant IA générique en un expert en codage\n    personnalisé pour votre équipe grâce aux règles personnalisées. Ne perdez\n    plus de temps à corriger constamment les suggestions de l'IA qui utilisent\n    les mauvaises versions de Java et des binaires Python incorrects ou qui vont\n    à l'encontre de vos guides de style. Ce guide approfondi vous apprendra à\n    créer des règles personnalisées intelligentes qui appliquent automatiquement\n    vos normes de développement.\n\n\n    Nous aborderons les points suivants :\n\n\n    * Contrôle des versions : obligez l'IA à utiliser Java 8, gérez les environnements Python3 et générez du code C++ multi-plateforme\n\n    * Application du style : prévenez les anti-patterns C `goto`, appliquez les design patterns VueJS et assurez la conformité aux linters Ansible\n\n    * Automatisation DevSecOps : configurez des projets avec scans de sécurité CI/CD appropriés et normes de documentation\n\n\n    Chaque exemple inclut des projets GitLab fonctionnels à dupliquer, des configurations complètes et des démonstrations avant/après. Découvrez comment les systèmes bancaires maintiennent leur conformité à Java 8, comment les collecteurs IoT fonctionnent sur plusieurs plateformes et comment les composants VueJS suivent les normes de production de GitLab.\n\n\n    ## Premiers pas avec les règles personnalisées pour GitLab Duo Agentic Chat\n\n\n    Suivez la [documentation](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/#create-custom-rules) pour créer des règles personnalisées pour GitLab Duo Agentic Chat dans le répertoire `.gitlab/duo/chat-rules.md` d'un projet GitLab nouveau ou existant dans votre IDE.\n\n\n    Vous pouvez commencer avec des instructions en saisie libre et itérer pour obtenir le meilleur résultat. Les règles personnalisées prennent en charge le format [Markdown](https://docs.gitlab.com/user/markdown/) pour une meilleure structuration.\n\n\n    * Utilisez les titres Markdown (`#`, `##`, etc.) pour créer des sections.\n\n    * Utilisez les listes Markdown (`-`) pour fournir des instructions concises aux LLM et aux agents.\n\n    * Réduisez les chemins de fichiers avec des backticks (accents graves) simples et utilisez des blocs de code avec indentation ou trois backticks.\n\n\n    Exemple :\n\n\n    ```markdown\n\n\n    # Development guide\n\n\n    ## Frontend: VueJS\n\n\n    ### Styling Pattern\n\n    - Do not use `\u003Cstyle>` tags in Vue components\n\n    - Use Tailwind CSS utility classes or page-specific CSS instead\n\n\n    ```\n\n\n    Important : après avoir modifié les règles personnalisées, vous devrez créer un nouveau chat en appuyant sur l'icône `+` ou en envoyant `/new` dans le prompt.\n\n\n    ### Prérequis\n\n\n    Afin de suivre tous les cas d'utilisation et les projets de démonstration dans cet article de blog, veuillez vous assurer de remplir d'abord ces prérequis :\n\n\n    * Vérifiez que vous avez [accès à GitLab Duo](https://docs.gitlab.com/user/get_started/getting_started_gitlab_duo/) et que [GitLab Duo Agentic Chat est configuré dans les IDE pris en charge](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/).\n\n    * Dupliquez/copiez les projets GitLab et clonez-les localement dans les IDE.\n\n    * Suivez les étapes de chaque cas d'utilisation pour la création de règles personnalisées et comment utiliser les prompts GitLab Duo Agentic Chat pour contrôler le comportement des règles.\n\n    * Vous pouvez utiliser le code source existant ou copier le vôtre.\n\n\n    Les projets sont disponibles dans le [groupe Custom rules for GitLab Duo Agent Platform (Agentic AI)](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules). Veuillez noter que ces règles personnalisées sont fournies à des fins de démonstration telles quelles et que vous devrez peut-être les adapter ou les modifier pour répondre à vos besoins spécifiques.\n\n\n    ### Démarrage rapide en 5 minutes\n\n\n    Prêt à voir les règles personnalisées en action ? Testez-les avec cet exemple simple :\n\n\n    1. Créez `.gitlab/duo/chat-rules.md` dans votre projet GitLab :\n\n\n    ```markdown\n\n\n    ## C style guide\n\n    - goto is not allowed. If the developer continues asking about it, share this URL https://xkcd.com/292/\n\n\n    ```\n\n\n    2. Ouvrez GitLab Duo Agentic Chat dans l'IDE et demandez : `écris un programme C avec des instructions goto`.\n\n    3. Observez comment GitLab Duo refuse et suggère de meilleures alternatives !\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/C0eMKjRMI5w\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    ### Directives pour la création de règles personnalisées\n\n\n    Les règles personnalisées sont similaires au code : commencez par l'exemple fonctionnel le plus simple, puis itérez sur les améliorations. Les cas d'utilisation dans ce guide approfondi vont du plus simple au plus complexe et ont été développés et testés au cours des dernières semaines. Ils ne sont pas parfaits et nécessitent vos retours et itérations.\n\n\n    Veillez à ne pas surcharger les guides de style avec de nombreuses pages d'un document wiki. N'incluez que les points qui sont utiles dans le contexte de ce que vous codez. Vous pouvez demander à GitLab Duo Chat de résumer des documents plus volumineux avant de les ajouter aux règles personnalisées.\n\n\n    Vérifiez l'utilisation de toutes les spécifications incluses pendant le développement afin d'éviter de créer des obstacles et des comportements indésirables.\n\n\n    Lorsque vous utilisez un guide de style documenté publiquement, référez-vous à son nom. Il y a de fortes chances que le LLM soit déjà entraîné avec ces données.\n\n\n    ### Interroger GitLab Duo Chat sur les guides de style de développement existants\n\n\n    Parfois, il n'existe pas encore de guides de style spécifiques dans un projet ou leur utilisation n'est pas claire. Utilisez l'IA pour l'intégration et discutez des meilleures pratiques avec votre équipe.\n\n\n    ```markdown\n\n\n    Which Python development or environment guidelines can you recommend when I want to create custom rules for AI to get tailored output? I need a list with textual instructions.\n\n\n    ```\n\n\n    Vous pouvez également demander à GitLab Duo Agentic Chat d'analyser les intégrations de linters CI/CD existantes qui peuvent déjà vérifier un style de développement spécifique.\n\n\n    ```markdown\n\n\n    When you look into the CI/CD linter checks and configuration in the project, which development style guide can you summarize for me?\n\n\n    ```\n\n\n    De nombreux exemples de cet article de blog sont basés sur ma propre expérience et mes points de friction en tant que développeur. J'ai également demandé à GitLab Duo d'extraire des guides de style de projets existants et j'ai utilisé les fonctionnalités de suggestions de code de GitLab Duo pour aider à l'auto-complétion des règles personnalisées existantes. Vous pouvez obtenir le même résultat en configurant [`markdown` comme langage supplémentaire pour les fonctionnalités de suggestions de code de GitLab Duo](https://docs.gitlab.com/user/project/repository/code_suggestions/supported_extensions/#add-support-for-more-languages) dans les IDE.\n\n\n    ## Autres cas d'utilisation avec des règles personnalisées\n\n\n    Les sections suivantes fournissent un aperçu de guides de style spécifiques. Vous pouvez mapper des langages de programmation et des environnements similaires à vos cas d'utilisation en production.\n\n\n    * **Prise en charge de versions et de plateformes** : référez-vous à la [section Java](#exigences-de-version-java) ci-dessous pour apprendre à forcer un standard de langage spécifique pour le code généré et créé. Vous pouvez appliquer un processus similaire pour les versions C++23 et antérieures, PHP 8, Ruby 3, etc. La [section C++ ci-dessous](#prise-en-charge-multi-plateforme-C++-windows-Linux-macOS) montre comment indiquer des instructions à l'IA agentique avec la prise en charge multi-plateforme.\n\n    * **Environnements de développement** : référez-vous aux sections ci-dessous sur [Python](#environnement-de-developpement-python-3) et [Ansible](#conformite-au-linter-ansible). Indiquez l'environnement de développement, les binaires, les outils et plus encore. Vous pouvez également indiquer aux agents des informations de routage sur les emplacements des tests/scripts et la façon d'appliquer la conformité avec les linters.\n\n    * **Design patterns** : vous pouvez indiquer des design patterns complets avec [VueJS](#guides-de-style-frontend-pour-vuejs-3) comme exemple, en tirant parti des guides de style de développement de production de GitLab comme base.\n\n    * **Workflows DevSecOps** : configurez des pratiques DevSecOps complètes avec la [configuration CI/CD](#preferences-de-configuration-cicd) pour des attributs CI/CD spécifiques et des valeurs par défaut pour le scan de sécurité, les [tests et linters](#tests-et-linters), et les [outils de build](#outils-de-build). Les cas d'utilisation fréquemment demandés pour la mise en place de projets incluent la [génération de documentation](#generation-de-documentation) avec `README.md` et diagrammes d'architecture, les [modèles de tickets et de merge requests](#modeles-de-tickets-et-merge-requests), [l'intégration, les exigences et les licences](#intégration-exigences-licences), et les [flux Git](#flux-git) avec `.gitignore`. Des techniques avancées avec règles personnalisées sont fournies pour les [exigences de refactorisation et de modification du code](#exigences-de-refactorisation-et-de-modification-du-code).\n\n\n    ### Cas d'utilisation : prise en charge de versions et de plateformes\n\n\n    Le développement logiciel nécessite souvent des versions spécifiques de langages de programmation et de frameworks, ainsi qu'une prise en charge mono ou multi-plateforme. Les exemples suivants illustrent ces scénarios.\n\n\n    #### Exigences de version Java\n\n\n    Les environnements d'entreprise n'utilisent pas toujours la dernière version logicielle disponible. Ils s'appuient souvent sur des versions maintenues avec des correctifs de sécurité pendant une période plus longue. Par exemple, Java 7 et Java 8 sont encore utilisés dans certaines entreprises aujourd'hui.\n\n\n    Préciser systématiquement la version requise dans les prompts de chat peut être fastidieux et conduire à des erreurs humaines, même en cas d'un seul oubli.\n\n\n    ```markdown\n\n\n    Implement classes for managing banking transactions and different currencies.\n\n\n    ```\n\n\n    L'exemple nécessitera des indications supplémentaires pour Java 8 :\n\n\n    ```markdown\n\n\n    Use Java 8 for the implementation.\n\n\n    ```\n\n\n    Pour appliquer Java 8 de manière permanente, vous pouvez créer une règle personnalisée dans `.gitlab/duo/chat-rules.md` et ajouter éventuellement une URL d'epic de référence si un utilisateur vous pose des questions sur la modernisation du code :\n\n\n    ```markdown\n\n\n    ## Java style guide\n\n\n\n    - Only Java 8 is allowed when suggesting and editing code.\n\n    - When the user asks about code modernization and Java 9 or 21, or newer, point them to this issue to contribute: https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions/-/issues/1\n\n\n    ```\n\n\n    Une démonstration complète est disponible dans le [projet Custom Rules – Java versions](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions).\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/iZLvpgHdABY\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    Les modifications résultantes sont disponibles dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions/-/merge_requests/2).\n\n\n    #### Prise en charge multi-plateforme C++ (Windows, Linux, macOS)\n\n\n    Le développement d'applications en C++ peut nécessiter une prise en charge multi-plateforme, notamment lors de l'exécution d'agents de service sur des systèmes utilisant Windows, Linux et macOS. Les applications sont profondément intégrées aux produits clients et une migration vers un langage plus moderne comme Go ou Rust n'est pas toujours possible ni pratique.\n\n\n    Maintenir du code qui fonctionne sur plusieurs plateformes peut être difficile en raison des différences dans les API de système d'exploitation, les chaînes d'outils, les versions de bibliothèques et les chemins de système de fichiers. Les équipes de développement sont souvent confrontés à plusieurs macros de préprocesseur `#if defined` et à des conditions imbriquées. Ils doivent alors ajouter du code et des tests personnalisés pour chaque plateforme prise en charge. Résultat : cette situation alourdit la dette technique et entraîne des défis de maintenance.\n\n\n    L'IA peut aider lors de la génération de code correct et spécifique à une plateforme, mais elle doit connaître ces exigences. Soit l'IA agentique comprendra le code source existant via un graphe de connaissances, soit les équipes devront fournir des instructions via des règles personnalisées et des prompts.\n\n\n    Essayons ce cas d'utilisation en pratique. Le [projet Custom Rule – C++ platforms – IoT Sensor Data Collector](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-cpp-platform-iot-sensor-data-collector) implémente un collecteur de données de capteurs IoT et a des tâches ouvertes pour moderniser le code source et ajouter la prise en charge multi-plateforme pour Linux, Windows et macOS. Vous pouvez dupliquer le projet et le cloner localement.\n\n\n    Ouvrez le fichier `.gitlab/duo/chat-rules.md` et examinez ou ajoutez les règles personnalisées suivantes :\n\n\n    ```markdown\n\n\n    ## C++ style guide\n\n\n    - The application runs on Linux, macOS and Windows. Generate code that handles the OS API differences.\n\n    - Use pre-processor macros for Windows and POSIX conventions for Unix (Linux, macOS).\n\n\n    ## CI/CD Configuration\n\n\n    - Ensure that GitLab CI/CD jobs cover the different platform support. Use CI/CD job templates with extends where applicable.\n\n\n    ```\n\n\n    Démarrez un nouveau chat et demandez de restructurer le code pour la prise en charge multi-plateforme.\n\n\n    ```markdown\n\n\n    Please help me restructure the code and ensure multi-platform support.\n\n\n    ```\n\n\n    Vous pouvez également indiquer le numéro de ticket ou l'URL ([ticket 3](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-cpp-platform-iot-sensor-data-collector/-/issues/3)). GitLab Duo récupérera automatiquement le contenu du ticket depuis la plateforme GitLab et le mettra dans le contexte de l'IA.\n\n\n    ```markdown\n\n\n    Please help me implement issue 3\n\n\n    Please help me implement https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-cpp-platform-iot-sensor-data-collector/-/issues/3\n\n\n    ```\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/C5NxOjB0R1Q\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    ### Cas d'utilisation : environnements de développement\n\n\n    Les environnements de développement varient souvent entre les systèmes d'exploitation et les équipes, ce qui peut perturber les modèles d'IA qui génèrent du code ou suggèrent des modifications. Les cas d'utilisation suivants illustrent ces problèmes d'environnement et leurs solutions avec des règles personnalisées.\n\n\n    #### Environnement de développement Python 3\n\n\n    Un environnement de développement Python est généralement fourni avec le fichier exécutable `python` et le gestionnaire de paquets `pip`. Cependant, sur des systèmes comme MacOS ou Ubuntu, vous devez utiliser `python3` et `pip3` pour accéder aux versions plus récentes de Python 3. Cette approche peut entraîner une confusion lors de l'exécution de scripts Python, de la création d'environnements virtuels et de l'installation de dépendances de paquets.\n\n\n    Pour ce cas d'utilisation de règles personnalisées, j'ai installé Python en utilisant [Homebrew](https://brew.sh/), ce qui entraîne un fichier exécutable binaire appelé `python3` et un gestionnaire de paquets `pip3`.\n\n\n    Configurez un environnement virtuel Python à titre d'exemple, installez les dépendances avec `pip` et exécutez l'application :\n\n\n    ```shell\n\n\n    python -m venv myenv\n\n    source myenv/bin/activate\n\n\n    pip install -r requirements.txt\n\n\n    python script.py\n\n\n    ```\n\n\n    Cela ne fonctionne pas comme prévu, car nous devons utiliser des binaires spécifiques avec la version `3` :\n\n\n    ```shell\n\n\n    python3 -m venv myenv\n\n    source myenv/bin/activate\n\n\n    pip3 install -r requirements.txt\n\n\n    python3 script.py\n\n\n    ```\n\n\n    Nous pouvons tester ce problème avec l'Agentic Chat pour les blocs de code suggérés et la demande d'approbation pour les commandes à exécuter. Le [projet Custom Rule – Python3 Env Shop app](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-python-3-env-shop-app) implémente une application de boutique web en Python et fournit les chemins de fichiers exécutables Python par défaut dans son fichier `README.md` qui est généralement ajouté au contexte d'Agentic Chat.\n\n\n    ![GitLab Duo Agentic Chat, qui propose les mauvaises commandes binaires](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123901/c0jltxbgxi2suobxhwwq.png)\n\n\n    Afin de résoudre le problème, examinez `.gitlab/duo/chat-rules.md`, qui contient les règles personnalisées suivantes pour appliquer les noms de fichiers exécutables Python.\n\n\n    ```markdown\n\n\n    ## Python style guide\n\n\n    - For Python binaries, always use python3 and pip3 when suggesting or running shell commands.\n\n    - Detect the Python environment automatically when possible.\n\n\n    ```\n\n\n    Vous pouvez également instruire les agents avec des routes prédéfinies pour rassembler des informations supplémentaires via l'appel d'outils et/ou le MCP, s'ils ne le font pas déjà automatiquement.\n\n\n    Ouvrez un nouvel Agentic Chat et demandez `Comment exécuter cette application ?` pour voir les règles personnalisées en action avec `python3` et `pip3` comme souhaité.\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/UQ2_OCvUmF0\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    Le code source complet est disponible dans le [projet Custom Rule – Python3 Env Shop app](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-python-3-env-shop-app).\n\n\n    #### Conformité au linter Ansible\n\n\n    Le linter Ansible moderne pour les tâches d'Infrastructure-as-Code applique un guide de style strict, qui peut être vérifié avec `ansible-lint` : il détecte lorsque des valeurs booléennes (`true`/`false`) sont requises au lieu de chaînes (`yes`/`no`), les actions de modules intégrés qui requièrent le FQCN (Fully Qualified Collection Name) comme noms de paramètres, et les caractères invisibles de fin à supprimer. Les intégrations CLI et IDE, telles que l'[extension VS Code Ansible par Red Hat](https://developers.redhat.com/learning/learn:ansible:get-started-ansible-visual-studio-code-extension/resource/resources:install-and-configure-ansible-extension-visual-studio-code) aident les équipes à visualiser ces erreurs. Les LLM et les agents de chat ne génèrent pas toujours du code Ansible correct, ce qui force les équipes à le corriger manuellement.\n\n\n    Examinons le problème avec un cas d'utilisation concret. L'exemple suivant implémente un guide Ansible basique dans le [projet Custom Rule – Ansible Environment](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment) pour configurer un serveur GitLab sur Ubuntu. Les valeurs booléennes sont incorrectement typées comme chaînes (`yes`/`no`), et les actions de modules intégrés ainsi que la suppression des espaces entraînent des problèmes supplémentaires.\n\n\n    ![VS Code avec erreur de linter Ansible : mauvais type booléen](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/eofxonbvbs7o2qt48tmc.png)\n\n\n    ![VS Code avec erreur de linter Ansible : FQCN d'action de module intégré](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/qnzwk8b1dslmcqercxul.png)\n\n\n    ![VS Code avec erreur de linter Ansible : caractères invisibles de fin](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/fsrceusoksp16xj42yix.png)\n\n\n    Voyons comment nous pouvons créer des règles personnalisées pour aider les agents GitLab Duo à corriger les erreurs de linter Ansible et les empêcher de se reproduire à l'avenir.\n\n\n    Dupliquez et clonez le [projet Custom Rule – Ansible Environment](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment) et ouvrez `.gitlab/duo/chat-rules.md` dans l'IDE pour inspecter les règles personnalisées :\n\n\n    ```markdown\n\n\n    ## Ansible styleguide\n\n\n    - Boolean values in Ansible should be typed as \"true\" or \"false\" and never as string.\n\n    - Ansible module builtin actions must use the FQCN (Fully Qualified Collection Name).\n\n    - Always trim whitespaces in Ansible YAML.\n\n\n    ```\n\n\n    Ouvrez un nouveau prompt GitLab Duo Agentic Chat et demandez à l'agent GitLab Duo le même guide de directives et de procédures opérationnelles Ansible :\n\n\n    ```markdown\n\n\n    Please help me fix the Ansible linter errors\n\n\n    ```\n\n\n    Les agents analyseront le dépôt, demanderont d'exécuter des commandes `ansible-lint`, et examineront comment corriger les problèmes en suivant les règles personnalisées définies.\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/P465U8IfScE\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    Vous pouvez inspecter les règles personnalisées et les modifications de code Ansible dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment/-/merge_requests/1) dans le [projet Custom Rule – Ansible Environment](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment).\n\n\n    Exercice asynchrone : démarrez un nouveau projet où les règles personnalisées sont configurées par défaut et vérifiez que le guide de style correct est appliqué immédiatement.\n\n\n    ### Cas d'utilisation : design patterns\n\n\n    Cette section explore les design patterns et modèles à éviter, qui sont spécifiques aux langages et frameworks. \n\n\n    #### Éviter les anti-patterns avec C et les instructions goto\n\n\n    Voici une présentation plus approfondie de l'[exemple de démarrage rapide](#démarrage-rapide-en-5-minutes), qui montre comment vous pouvez donner des instructions à l'IA agentique pour éviter l'anti-pattern `goto` en C. L'anti-pattern `goto` en C est déconseillé car il rend le code plus difficile à lire et à déboguer. Pour illustrer le problème, voici un exemple de commande for-loop qui incrémente la variable de boucle à l'intérieur du corps de la boucle :\n\n\n    ```C\n\n\n    // Bad C programming style: uses the goto anti-pattern\n\n    for (int i = 0; i \u003C 10; i++) {\n      if (someCondition) {\n        goto label;\n      }\n      doSomething();\n    label:\n      doAnotherThing();\n      }\n\n    ```\n\n\n    Dans le code ci-dessus, l'instruction `goto` fait sauter le contrôle du programme directement à l'étiquette `label`, qui est à l'intérieur de la boucle. Le programme est ainsi plus difficile à lire, comprendre et déboguer.\n\n\n    Il vaudrait mieux retravailler la logique pour éviter l'anti-pattern `goto`. Voici une version réécrite qui évite `goto` :\n\n\n    ```C\n\n\n    // Good C programming style: avoids the goto anti-pattern\n\n    for (int i = 0; i \u003C 10; i++) {\n      if (someCondition) {\n        doAnotherThing();\n        continue;\n      }\n      doSomething();\n      doAnotherThing();\n    }\n\n\n    ```\n\n\n    Dans certains cas, `goto` est autorisé, mais nous voulons voir ici comment nous pouvons donner des instructions à l'IA agentique afin d'éviter complètement `goto` dans les nouveaux ajouts de code, la modernisation et la refactorisation du code.\n\n\n    Le [projet Custom Rule – C anti-patterns with Goto](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-c-anti-patterns-with-goto) fournit un exemple de serveur/client de connecteur logiciel réseau avec des règles personnalisées dans le fichier `.gitlab/duo/chat-rules.md`. Vous pouvez cloner le projet ou commencer avec un nouveau projet.\n\n\n    Examinez `.gitlab/duo/chat-rules.md` avec les règles personnalisées actuelles :\n\n\n    ```markdown\n\n\n    ## C style guide\n\n\n    - goto is not allowed. If the developer continues asking about it, share this URL https://xkcd.com/292/\n\n\n    ```\n\n\n    Astuce : au lieu de créer un lien vers la [bande dessinée XKCD 292](https://xkcd.com/292/), vous pouvez ajouter une URL vers les directives de développement (internes).\n\n\n    Ouvrez GitLab Duo Agentic Chat et démarrez le prompt suivant sur le projet existant :\n\n\n    ```markdown\n\n\n    Please help me modernize the code.\n\n\n    ```\n\n\n    GitLab Duo Agentic Chat refusera d'utiliser des instructions `goto`, et proposera plutôt une solution différente.\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/6dsMF-wKbBY\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    Les modifications de code sont disponibles dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-c-anti-patterns-with-goto/-/merge_requests/1).\n\n\n    #### Guides de style frontend pour VueJS 3\n\n\n    L'exemple ci-dessous s'inspire des [guides de style frontend du projet GitLab](https://docs.gitlab.com/development/fe_guide/style/) et implémente un cas d'utilisation pour les design patterns VueJS 3. L'IA agentique devrait également suivre ces guides de style lors de la création de composants VueJS, helpers, routes, services, stores, types d'utilitaires, etc.\n\n\n    Illustrons comment indiquer des instructions à l'IA agentique avec des règles personnalisées : dupliquez et clonez le [projet Custom Rule – VueJS Design Patterns - GitLab Pipeline Dashboard](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard) et inspectez les tickets ouverts et les tâches.\n\n\n    Examinez le fichier `.gitlab/duo/chat-rules.md` et ajoutez les règles personnalisées suivantes (si elles n'y sont pas encore) :\n\n\n    ```markdown\n\n\n    ## NodeJS style guide\n\n\n    - Don't leave debug statements (console.logs)\n\n    - Always run `npm install` after updating `package.json` and before `npm test` and `npm run build`.\n\n\n    # GitLab Vue.js Design Patterns Style Guide\n\n\n    ## Component Structure\n\n\n    ### Data Definition Pattern\n\n    - Explicitly define data being passed into Vue apps\n\n    - Avoid spread operators for better discoverability\n\n    - Parse non-scalar values during instantiation\n\n\n    ### Template Naming Pattern\n\n    - Use kebab-case for component names in templates\n\n\n    ### File Structure Pattern\n\n    - Use `.vue` files for Vue templates\n\n    - Do not use `%template` in HAML\n\n\n    ### Styling Pattern\n\n    - Do not use `\u003Cstyle>` tags in Vue components\n\n    - Use Tailwind CSS utility classes or page-specific CSS instead\n\n\n    [...]\n\n\n    ```\n\n\n    Les règles personnalisées complètes sont disponibles dans le [fichier `.gitlab/duo/chat-rules.md`](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/blob/main/.gitlab/duo/chat-rules.md?ref_type=heads&plain=1).\n\n\n    Ensuite, ouvrez GitLab Duo Agentic Chat et demandez comment [ajouter de nouveaux mini graphiques de pipeline](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/issues/6), ou d'autres tâches que vous rencontrez. Astuce : vous pouvez référencer uniquement le ticket ou coller l'URL complète du ticket, et l'Agentic Chat recherchera les deux et extraira le titre et la description pour le contexte actuel.\n\n\n    ```markdown\n\n\n    Please help me implement issue 6\n\n\n    ```\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/KbczS-OVb90\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    Les modifications de code qui en résultent sont disponibles dans [cette merge request](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/merge_requests/3).\n\n\n    Remarque : le guide de style VueJS a été extrait du [projet gitlab-org/gitlab](https://gitlab.com/gitlab-org/gitlab) grâce à GitLab Duo Agentic Chat avec le prompt suivant :\n\n\n    ```markdown\n\n\n    What is the development style guide for VueJS?\n\n\n    Can you print the styleguide as Markdown formatted list with headings.\n\n\n    Create a file in the repo, and only print the style guide rules there, no codeblocks.\n\n\n    ```\n\n\n    ![IntelliJ IDEA avec le code source `gitlab-org/gitlab`, et GitLab Duo Agentic Chat écrivant le fichier du guide de style](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123901/prf63nqoqsqzn7lh9pnq.png)\n\n\n    ### Cas d'utilisation : workflows DevSecOps\n\n\n    Les workflows DevSecOps comprennent les meilleures pratiques pour la configuration initiale d'un projet avec des modèles de tickets/merge requests, `.gitignore`, la configuration GitLab CI/CD, la documentation `README.md`, les licences et bien plus encore. La section suivante explore une large gamme de cas d'utilisation. Vous pouvez vous en inspirer pour vos propres règles personnalisées.\n\n\n    Automatisation DevSecOps courante avec règles personnalisées :\n\n\n    * **Configuration initiale de projet** : création automatique de README, .gitignore, configuration CI/CD\n\n    * **Valeurs par défaut de sécurité** : application de test statique de sécurité des applications (SAST), scan des dépendances, détection des secrets\n\n    * **Documentation** : génération de templates de tickets/merge requests, diagrammes d'architecture\n\n\n    Un exemple de cas d'utilisation combiné est disponible dans le [projet Custom Rule – DevSecOps workflows – Git README build tools issue MR templates](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-devsecops-workflows). Vous pouvez explorer les règles personnalisées, et les dupliquer/cloner localement pour interroger l'Agentic Chat avec un nouveau prompt, tel que : `Aide-moi à effectuer la configuration initiale de ce projet`.\n\n\n    \u003Cfigure class=\"video_container\">\n      \u003Ciframe width=\"560\" height=\"315\"\n      src=\"https://www.youtube.com/embed/hKpLcBtbC4g\" frameborder=\"0\"\n      allowfullscreen=\"true\">\n      \u003C/iframe>\n    \u003C/figure>\n\n\n    Les sections suivantes (aussi disponibles dans la vidéo ci-dessus) fournissent des prompts détaillés.\n\n\n    #### Templates de tickets et merge requests\n\n\n    Vous pouvez demander à l'IA agentique de créer des templates de tickets/merge requests s'ils sont manquants, et proposer d'ajouter des informations spécifiques au projet ou des étiquettes. Les agents interrogeront automatiquement l'API de GitLab en arrière-plan et intégreront la structure actuelle du projet dans un template.\n\n\n    ```markdown\n\n\n    ## Issue and MR templates\n\n\n    - If no issue templates for `Default` and `Feature Proposal` exist in .gitlab/issue_templates, create them using the following raw template sources:\n\n            Default: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/issue_templates/Default.md\n            Feature Proposal: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/issue_templates/Feature%20Proposal.md\n\n    - If no default MR template `Default` exists in `.gitlab/merge_request_templates`, create them using the following raw template sources:\n\n            Default: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/merge_request_templates/Default.md\n\n    - Update the project URLs, and available labels in the fetched templates accordingly, or remove anything unknown and let the user know about TODOs.\n\n    - Create a test issue/MR, when bootstrapping a new project.\n\n\n    ```\n\n\n    #### Outils de build\n\n\n    Il existe une variété d'outils de build, de gestionnaires de paquets, de compilateurs, de constructeurs de conteneurs disponibles par langage de programmation. Lors de questions sur les mises à jour et dépendances, l'IA agentique peut utiliser ces outils par défaut sans demander l'autorisation.\n\n\n    ```markdown\n\n\n    ## Build tools\n\n\n    - Always use a virtual env with Python, and set it up before executing any Python commands\n\n    - For C/C++: Prefer CMake, and gcc on Linux, clang on macOS, MSVC on Windows.\n\n    - For Python: Always use pip\n\n    - For Java: Always use Gradle\n\n    - For Node.js, suggest to use npm/yarn.\n\n    - For Rust: Always use cargo\n\n    - For Go: Always use go.mod\n\n    - For Ruby: Always use Bundler\n\n    - For PHP: Always use Composer\n\n    - For .NET: Always use .NET CLI\n\n    - For Scala: Always use SBT\n\n    - For Elixir: Always use Mix\n\n    - For Haskell: Always use Cabal\n\n    - For Swift: Always use Swift Package Manager\n\n    - For Kotlin: Always use Gradle or Maven.\n\n    - For TypeScript: Always use npm or yarn.\n\n    - Always suggest using a package manager or build tool based on the main programming language of the project.\n\n    - When asking for dependencies, assume that the user wants to update all current dependencies to the latest version available.\n\n\n    - Always suggest to create a Dockerfile if there isn't one. Always use a minimal image and use a tag for security scanning.\n\n    - Always add a `Dockerfile` with the base image and the entrypoint if one does not exist.\n\n    - Always include a `.dockerignore` and use it in the Docker build process.\n\n\n    ```\n\n\n    #### Préférences de configuration CI/CD\n\n\n    Utilisez des règles pour indiquer des images de conteneur spécifiques, des modèles de variables et de noms de jobs, etc.\n\n\n    ```markdown\n\n\n    ## CI/CD Configuration\n\n\n    - If no GitLab CI/CD configuration exists in `.gitlab-ci.yml`, ask the user for approval to create.\n\n    - Create a GitLab CI/CD configuration automatically when a new project gets bootstrapped\n\n\n    - Always use alpine as container image to build the application.\n\n    - Add caching for detected programming languages and frameworks.\n\n\n    ```\n\n\n    #### Préférences de scan de sécurité\n\n\n    Les scanners de sécurité peuvent également être appliqués dans la configuration GitLab CI/CD. L'exemple suivant indique aux agents de toujours inclure l'analyseur Advanced SAST, le scan des dépendances et la détection des secrets. Il a été testé avec succès dans d'autres cas d'utilisation de ce tutoriel.\n\n\n    ```markdown\n\n\n    ## Security scanning\n\n\n    - Always use Advanced SAST.\n\n    - Always include SAST, Dependency Scanning, Secrets Detection templates, similar to the following format:\n\n        include:\n            - template: Jobs/SAST.gitlab-ci.yml\n            - template: Jobs/Secret-Detection.gitlab-ci.yml\n            - template: Jobs/Dependency-Scanning.gitlab-ci.yml\n\n        variables:\n            GITLAB_ADVANCED_SAST_ENABLED: 'true'\n\n            \n    ```\n\n\n    ![VS Code avec une application Java, GitLab CI/CD, des règles personnalisées, et l'Agentic Chat qui ajoute l'analyseur Advanced SAST (test statique de sécurité des applications)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1769123900/avokij2uelhkx711wp1q.png)\n\n\n    #### Tests et linters\n\n\n    Vous pouvez également indiquer directement à l'Agentic Chat où trouver les tests et comment les exécuter. La même idée s'applique à l'appel de commandes de linter. Merci à Jessie Young pour cette astuce pratique !\n\n\n    ```markdown\n\n\n    ## Tests and linting details\n\n\n    - Tests in this project are located in __ directory and are run using the ___ command\n\n    - Linting is done with the ___ command\n\n\n    ```\n\n\n    #### Génération de documentation\n\n\n    Voici les meilleures règles personnalisées concernant la documentation.\n\n\n    ```markdown\n\n\n    - If a README is missing, ask the user if they want to create one. If the user agrees, create a basic `README.md` for them.\n\n    - When the user asks for an architecture proposal, always respond with generating an architecture diagram in Mermaid, and ask the user if they want you to add it to the README.md or another documentation file.\n\n    - For documentation in Markdown, always use GitLab flavored Markdown.\n\n    - Always add correct code block syntax highlighting support.\n\n\n    ```\n\n\n    #### Exigences de refactorisation et de modification du code\n\n\n    Lorsqu'un projet doit être progressivement modernisé avec du code qui vient d'être généré et ne doit pas entraîner de grandes refactorisations, les règles suivantes peuvent être utiles.\n\n\n    ```markdown\n\n\n    ## Keep the changes minimal\n\n\n    - The project uses \u003Cthis standard and version>. For newly generated code, use this standard.\n\n    - Do not attempt to refactor code already created in a project to this standard, but for new code, always ensure this standard is used.\n\n    - If unsure whether a file requires modification or refactoring, document this as a todo task.\n\n    - Never fix detected problems, whitespaces, code formatting, unless the user instructs you specifically in a comment.\n\n    - The code must be retained in its original format and only changes specific to solving the user request are allowed.\n\n\n    ## Summaries\n\n\n    - List all items to address at the bottom in a summary section with TODO: followed by a textual description.\n\n    - Identify 3 critical items, and ask the user if you should create GitLab issues from those items.\n\n\n    ```\n\n\n    #### Intégration, exigences, licences\n\n\n    Incluez toujours un lien de documentation spécifique, et des directives à suivre dans les réponses de chat.\n\n\n    ```markdown\n\n\n    ## Link to guidelines\n\n    - Always refer to our developer guidelines when answering questions. You can find those guidelines here: https://docs.gitlab.com/development/\n\n\n    ## Context and planning\n\n    - Always start with finding existing issues with the desired topic. Only then propose new implementation work.\n\n\n    ## License\n\n    - Always add the MIT license into `LICENSE` and use `GitLab B.V.` as copyright holder.\n\n\n    ```\n\n\n    #### Flux Git\n\n\n    Suivez un flux de gestion de branches Git spécifique pour les suggestions et commandes exécutées.\n\n\n    ```markdown\n\n\n    ## Git flows\n\n\n    - Examine the project and involved development environment and programming languages. Always add a `.gitignore`.\n\n    - Consider more best practices when bootstrapping a new project.\n\n    - For existing projects, offer to add a `.gitignore` when missing, but only when asked about the state of the project, or what is missing.\n\n\n    When a user requests to start with a new feature, always create a new branch, called \"feature/\u003Cshortname>\" and describe the behavior. Ask for the user's approval.\n\n\n    ```\n\n\n    ## Distribution et tests des règles personnalisées\n\n\n    Vous pouvez créer des [templates de projets GitLab](https://docs.gitlab.com/administration/custom_project_templates/) avec des prompts de règles personnalisées éprouvés et appliquer les meilleures pratiques à chaque nouveau projet.\n\n\n    Puisque les LLM et les agents d'IA ne sont pas prévisibles, tester le résultat attendu devient plus difficile. Règle d'or des règles personnalisées : elles ne sont jamais parfaites et nécessitent des itérations basées sur les commentaires de votre équipe, notamment lorsque de nouveaux modèles et flows introduits modifient leur comportement en réponse aux règles personnalisées. Nous vous recommandons de continuer à vérifier les données de sortie générées et d'ajuster les règles en conséquence. Si vous recherchez des tests à plus grande échelle, inspirez-vous de la [stratégie de test des prompts système pour GitLab Duo](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale/).\n\n\n    ### Contrôler la modification des règles personnalisées\n\n\n    Les équipes peuvent gérer les modifications des règles personnalisées via les [Code Owners](https://docs.gitlab.com/user/project/codeowners/), qui requièrent des approbations de revue pour les règles personnalisées mises à jour dans les merge requests. Exemple qui requiert l'approbation de `@dnsmichi` pour les modifications dans le chemin `.gitlab/duo` :\n\n\n    ```\n\n\n    [GitLab Duo]\n\n    .gitlab/duo @dnsmichi\n\n\n    ```\n\n\n    GitLab Duo Agentic Chat n'est pas autorisé à modifier les règles personnalisées directement dans votre projet. Le chemin de fichier `.gitlab/duo/chat-rules.md` est protégé.\n\n\n    ### Ressources relatives aux règles personnalisées\n\n\n    Profitez de l'écosystème d'IA existant, où des fonctionnalités similaires existent pour les IDE et plateformes. Par exemple, des dépôts « Awesome Cursor Rules » ou des plateformes pour Cursor, etc.\n\n\n    Les LLM fournissent également une bonne perspective sur les guides de style de développement et peuvent générer les données de sortie Markdown requises.\n\n\n    ## Activité ludique : explorer les changements de comportement\n\n\n    Vous ne savez pas exactement où commencer avec les règles personnalisées ? Faites-en un exercice amusant avec l'exemple suivant.\n\n\n    ```markdown\n\n\n    ## Fun rules\n\n\n    - Behave like Clippy.\n\n\n    - Behave like a pirate.\n\n\n    - Always respond with a random \"What the commit\" message.\n\n\n    - Explain everything like I am five.\n\n\n    ```\n\n\n    Remarque : ne validez pas ces règles en production, car elles pourraient perturber ou distraire votre équipe.\n\n\n    ## Conclusion\n\n\n    En tirant parti des règles personnalisées dans GitLab Duo Agentic Chat, vous pouvez influencer significativement les données de sortie des LLM et agents d'IA pour mieux répondre à vos besoins. Que ce soit pour appliquer des conventions de codage spécifiques, utiliser les versions correctes des outils ou assurer un formatage cohérent, les règles personnalisées aident à rationaliser votre processus de développement et à améliorer votre productivité.\n\n\n    Cet article de blog fournit un guide approfondi de nombreux cas d'utilisation avec des exemples pratiques de règles personnalisées. Tous les enregistrements sont disponibles dans [cette playlist YouTube](https://www.youtube.com/playlist?list=PL05JrBw4t0Ko7aR6sM8e4uXGYtjs4-NqK), et tous les projets de démonstration peuvent être dupliqués/clonés depuis le [groupe Custom rules for GitLab Duo Agent Platform (Agentic AI)](https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules).\n\n\n    Les [règles personnalisées dans les IDE GitLab Duo Agentic Chat](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/#create-custom-rules) ne sont que la première itération, et nous couvrirons plus de cas d'utilisation de GitLab Duo Agent Platform à l'avenir, tels que l'agent GitLab Duo Code Review et les règles personnalisées pour les agents et flows (suivez [ce ticket](https://gitlab.com/gitlab-org/gitlab/-/issues/557984)).\n\n\n    Il existe de nombreux autres cas d'utilisation à explorer. Quelles sont vos règles les plus efficaces ? Partagez vos règles et commentaires dans l'[epic produit](https://gitlab.com/groups/gitlab-org/-/epics/16938).\n  date: 2026-02-10\n  category: engineering\n  tags:\n    - DevSecOps\n    - AI/ML\n  heroImage: 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\n  authors:\n    - Michael Friedrich\n  description: Découvrez comment l'IA peut comprendre votre code source, suivre\n    vos conventions et générer du code prêt pour la production avec un minimum\n    de cycles de revue.\n  title: 'GitLab Duo Agentic Chat : renforcez votre code avec les règles personnalisées'\nconfig:\n  featured: false\n  template: BlogPost\n  slug: custom-rules-duo-agentic-chat-deep-dive\n",{"config":718,"title":719,"ogTitle":720,"description":713},{"noIndex":10},"Règles personnalisées dans GitLab Duo Agentic Chat","","fr-fr/blog/custom-rules-duo-agentic-chat-deep-dive",[564,723],"aiml",[561,710],"KgWRKuIkEmv3O0lB3tcOL3o_Nyi1T_4VgiuZkgWdtu4",[727,736,746,755,764,772,781,792,801],{"content":728,"config":734},{"title":729,"heroImage":730,"category":9,"description":731,"authors":732},"Comment déployer la plus grande instance GitLab 12 fois par jour","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1764108112/tyntnsy3xotlmehtnfkb.png","Plongez au cœur du pipeline de déploiement de GitLab.com, des déploiements progressifs, des stratégies canari aux migrations de base de données en passant par la compatibilité multi-versions.",[733],"John Skarbek",{"externalUrl":-1,"slug":735},"continuously-deploying-the-largest-gitlab-instance",{"content":737,"config":744},{"title":738,"heroImage":739,"category":9,"description":740,"authors":741},"Migrer d'Azure DevOps vers GitLab :  le guide complet","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658924/Blog/Hero%20Images/securitylifecycle-light.png","Découvrez comment migrer d'Azure DevOps vers GitLab à l'aide des outils de migration des Services professionnels de GitLab, de la planification à l'exécution en passant par les tâches de suivi post-migration.",[742,743],"Evgeny Rudinsky","Michael Leopard",{"externalUrl":-1,"slug":745},"migration-from-azure-devops-to-gitlab",{"content":747,"config":753},{"title":748,"heroImage":749,"category":9,"description":750,"authors":751},"Rust : développement sécurisé avec GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314674/tct6zf6evw0xgddd2vo3.png","Découvrez comment GitLab prend en charge le développement en Rust grâce à ses capacités CI/CD, ses analyses de sécurité, ses intégrations dédiées et ses fonctionnalités d'IA.",[752],"Fernando Diaz",{"externalUrl":-1,"slug":754},"secure-rust-development-with-gitlab",{"content":756,"config":762},{"title":757,"heroImage":711,"category":9,"description":758,"authors":759},"GitLab transforme les cycles de test des systèmes embarqués","Découvrez comment les environnements de cycle de vie gérés rationalisent et automatisent les tests virtuels grâce à un retour rapide sans multiplication des environnements ni augmentation des coûts.",[760,761],"Matt DeLaney","Darwin Sanoy",{"externalUrl":-1,"slug":763},"how-gitlab-transforms-embedded-systems-testing-cycles",{"content":765,"config":770},{"title":766,"heroImage":767,"category":9,"description":768,"authors":769},"Clonage Git : optimisez vos workflows avec Git Much Faster","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098264/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_519147119_2RafH61mqosMZv8HGAlsUj_1750098264407.jpg","Avec le script Git Much Faster, diminuez considérablement les temps de clonage Git et l'espace disque utilisé, jusqu'à 93 et 98 %, respectivement.",[761],{"externalUrl":-1,"slug":771},"supercharge-your-git-workflows",{"content":773,"config":779},{"title":774,"heroImage":775,"category":9,"description":776,"authors":777},"Kubernetes : gérer les données du cluster côté frontend","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1750099045/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2816%29_3L7ZP4GxJrShu6qImuS4Wo_1750099045397.png","Découvrez dans ce guide tout ce que vous devez savoir sur la solution intégrée de GitLab pour surveiller l'état de vos clusters Kubernetes.",[778],"Anna Vovchenko",{"externalUrl":-1,"slug":780},"kubernetes-overview-operate-cluster-data-on-the-frontend",{"content":782,"config":790},{"title":783,"heroImage":784,"category":9,"description":785,"authors":786},"La documentation de GitLab fait peau neuve","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/blog/hero%20images/workflow_1800x945","Découvrez les fonctionnalités de notre nouvelle documentation produit, qui facilite désormais les retours et prend en charge le mode sombre tant demandé.",[787,788,789],"Suzanne Selhorn","Julia Miocene","Sarah German",{"externalUrl":-1,"slug":791},"docs-site-design-overhaul",{"content":793,"config":799},{"title":794,"heroImage":795,"category":9,"description":796,"authors":797},"Amélioration de la gestion des tickets créés par la communauté GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1749664458/Blog/Hero%20Images/Gartner_AI_Code_Assistants_Blog_Post_Cover_Image_1800x945.png","Découvrez comment nous améliorons la gestion des tickets pour prioriser le travail stratégique, optimiser la livraison de logiciels et créer des boucles de rétroaction plus efficaces avec nos utilisateurs.",[798],"Stan Hu",{"externalUrl":-1,"slug":800},"inside-gitlabs-healthy-backlog-initiative",{"content":802,"config":809},{"title":803,"heroImage":804,"category":9,"description":805,"authors":806},"Dépôts GitLab : diminution du temps de sauvegarde de 48 h à 41 min ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097166/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20display%20preview%20for%20blog%20images%20%282%29_2pKf8RsKzAaThmQfqHIaa7_1750097166565.png","L'optimisation d'une fonction Git vieille de 15 ans a permis d'augmenter la productivité, de renforcer les stratégies de sauvegarde et de réduire les risques.",[807,808],"Karthik Nayak","Manuel Kraft",{"externalUrl":-1,"slug":810},"how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes",1777934859869]