[{"data":1,"prerenderedAt":1349},["ShallowReactive",2],{"/en-us/blog/tags/devsecops/":3,"navigation-fr-fr":20,"banner-fr-fr":441,"footer-fr-fr":454,"DevSecOps-tag-page-fr-fr":665},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"content":8,"config":11,"_id":13,"_type":14,"title":15,"_source":16,"_file":17,"_stem":18,"_extension":19},"/en-us/blog/tags/devsecops","tags",false,"",{"tag":9,"tagSlug":10},"DevSecOps","devsecops",{"template":12},"BlogTag","content:en-us:blog:tags:devsecops.yml","yaml","Devsecops","content","en-us/blog/tags/devsecops.yml","en-us/blog/tags/devsecops","yml",{"_path":21,"_dir":22,"_draft":6,"_partial":6,"_locale":7,"data":23,"_id":437,"_type":14,"title":438,"_source":16,"_file":439,"_stem":440,"_extension":19},"/shared/fr-fr/main-navigation","fr-fr",{"logo":24,"freeTrial":29,"sales":34,"login":39,"items":44,"search":378,"minimal":414,"duo":428},{"config":25},{"href":26,"dataGaName":27,"dataGaLocation":28},"/fr-fr/","gitlab logo","header",{"text":30,"config":31},"Commencer un essai gratuit",{"href":32,"dataGaName":33,"dataGaLocation":28},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":35,"config":36},"Contacter l'équipe commerciale",{"href":37,"dataGaName":38,"dataGaLocation":28},"/fr-fr/sales/","sales",{"text":40,"config":41},"Connexion",{"href":42,"dataGaName":43,"dataGaLocation":28},"https://gitlab.com/users/sign_in/","sign in",[45,89,188,193,299,359],{"text":46,"config":47,"cards":49,"footer":72},"Plateforme",{"dataNavLevelOne":48},"platform",[50,56,64],{"title":46,"description":51,"link":52},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":53,"config":54},"Découvrir notre plateforme",{"href":55,"dataGaName":48,"dataGaLocation":28},"/fr-fr/platform/",{"title":57,"description":58,"link":59},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":60,"config":61},"Découvrez GitLab Duo",{"href":62,"dataGaName":63,"dataGaLocation":28},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":65,"description":66,"link":67},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":68,"config":69},"En savoir plus",{"href":70,"dataGaName":71,"dataGaLocation":28},"/fr-fr/why-gitlab/","why gitlab",{"title":73,"items":74},"Démarrer avec",[75,80,85],{"text":76,"config":77},"Ingénierie de plateforme",{"href":78,"dataGaName":79,"dataGaLocation":28},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":81,"config":82},"Expérience développeur",{"href":83,"dataGaName":84,"dataGaLocation":28},"/fr-fr/developer-experience/","Developer experience",{"text":86,"config":87},"MLOps",{"href":88,"dataGaName":86,"dataGaLocation":28},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":90,"left":91,"config":92,"link":94,"lists":98,"footer":170},"Produit",true,{"dataNavLevelOne":93},"solutions",{"text":95,"config":96},"Voir toutes les solutions",{"href":97,"dataGaName":93,"dataGaLocation":28},"/fr-fr/solutions/",[99,125,148],{"title":100,"description":101,"link":102,"items":107},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":103},{"icon":104,"href":105,"dataGaName":106,"dataGaLocation":28},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[108,112,116,121],{"text":109,"config":110},"CI/CD",{"href":111,"dataGaLocation":28,"dataGaName":109},"/fr-fr/solutions/continuous-integration/",{"text":113,"config":114},"Développement assisté par l'IA",{"href":62,"dataGaLocation":28,"dataGaName":115},"AI assisted development",{"text":117,"config":118},"Gestion du code source",{"href":119,"dataGaLocation":28,"dataGaName":120},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":122,"config":123},"Livraison de logiciels automatisée",{"href":105,"dataGaLocation":28,"dataGaName":124},"Automated software delivery",{"title":126,"description":127,"link":128,"items":133},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":129},{"href":130,"dataGaName":131,"dataGaLocation":28,"icon":132},"/fr-fr/solutions/security-compliance/","security and compliance","ShieldCheckLight",[134,139,144],{"text":135,"config":136},"Application Security Testing",{"href":137,"dataGaName":138,"dataGaLocation":28},"/solutions/application-security-testing/","Application security testing",{"text":140,"config":141},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":142,"dataGaLocation":28,"dataGaName":143},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":145,"config":146},"Software Compliance",{"href":147,"dataGaName":145,"dataGaLocation":28},"/solutions/software-compliance/",{"title":149,"link":150,"items":155},"Mesures",{"config":151},{"icon":152,"href":153,"dataGaName":154,"dataGaLocation":28},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[156,160,165],{"text":157,"config":158},"Visibilité et mesures",{"href":153,"dataGaLocation":28,"dataGaName":159},"Visibility and Measurement",{"text":161,"config":162},"Gestion de la chaîne de valeur",{"href":163,"dataGaLocation":28,"dataGaName":164},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":166,"config":167},"Données d'analyse et informations clés",{"href":168,"dataGaLocation":28,"dataGaName":169},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":171,"items":172},"GitLab pour",[173,178,183],{"text":174,"config":175},"Entreprises",{"href":176,"dataGaLocation":28,"dataGaName":177},"/fr-fr/enterprise/","enterprise",{"text":179,"config":180},"PME",{"href":181,"dataGaLocation":28,"dataGaName":182},"/fr-fr/small-business/","small business",{"text":184,"config":185},"Secteur public",{"href":186,"dataGaLocation":28,"dataGaName":187},"/fr-fr/solutions/public-sector/","public sector",{"text":189,"config":190},"Tarifs",{"href":191,"dataGaName":192,"dataGaLocation":28,"dataNavLevelOne":192},"/fr-fr/pricing/","pricing",{"text":194,"config":195,"link":197,"lists":201,"feature":286},"Ressources",{"dataNavLevelOne":196},"resources",{"text":198,"config":199},"Afficher toutes les ressources",{"href":200,"dataGaName":196,"dataGaLocation":28},"/fr-fr/resources/",[202,235,258],{"title":203,"items":204},"Premiers pas",[205,210,215,220,225,230],{"text":206,"config":207},"Installation",{"href":208,"dataGaName":209,"dataGaLocation":28},"/fr-fr/install/","install",{"text":211,"config":212},"Guides de démarrage rapide",{"href":213,"dataGaName":214,"dataGaLocation":28},"/fr-fr/get-started/","quick setup checklists",{"text":216,"config":217},"Apprentissage",{"href":218,"dataGaLocation":28,"dataGaName":219},"https://university.gitlab.com/","learn",{"text":221,"config":222},"Documentation sur le produit",{"href":223,"dataGaName":224,"dataGaLocation":28},"https://docs.gitlab.com/","product documentation",{"text":226,"config":227},"Vidéos sur les bonnes pratiques",{"href":228,"dataGaName":229,"dataGaLocation":28},"/fr-fr/getting-started-videos/","best practice videos",{"text":231,"config":232},"Intégrations",{"href":233,"dataGaName":234,"dataGaLocation":28},"/fr-fr/integrations/","integrations",{"title":236,"items":237},"Découvrir",[238,243,248,253],{"text":239,"config":240},"Histoires de succès client",{"href":241,"dataGaName":242,"dataGaLocation":28},"/fr-fr/customers/","customer success stories",{"text":244,"config":245},"Blog",{"href":246,"dataGaName":247,"dataGaLocation":28},"/fr-fr/blog/","blog",{"text":249,"config":250},"Travail à distance",{"href":251,"dataGaName":252,"dataGaLocation":28},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":254,"config":255},"TeamOps",{"href":256,"dataGaName":257,"dataGaLocation":28},"/fr-fr/teamops/","teamops",{"title":259,"items":260},"Connecter",[261,266,271,276,281],{"text":262,"config":263},"Services GitLab",{"href":264,"dataGaName":265,"dataGaLocation":28},"/fr-fr/services/","services",{"text":267,"config":268},"Communauté",{"href":269,"dataGaName":270,"dataGaLocation":28},"/community/","community",{"text":272,"config":273},"Forum",{"href":274,"dataGaName":275,"dataGaLocation":28},"https://forum.gitlab.com/","forum",{"text":277,"config":278},"Événements",{"href":279,"dataGaName":280,"dataGaLocation":28},"/events/","events",{"text":282,"config":283},"Partenaires",{"href":284,"dataGaName":285,"dataGaLocation":28},"/partners/","partners",{"backgroundColor":287,"textColor":288,"text":289,"image":290,"link":294},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":291,"config":292},"carte promo The Source",{"src":293},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":295,"config":296},"Lire les articles les plus récents",{"href":297,"dataGaName":298,"dataGaLocation":28},"/fr-fr/the-source/","the source",{"text":300,"config":301,"lists":303},"Société",{"dataNavLevelOne":302},"company",[304],{"items":305},[306,311,317,319,324,329,334,339,344,349,354],{"text":307,"config":308},"À propos",{"href":309,"dataGaName":310,"dataGaLocation":28},"/fr-fr/company/","about",{"text":312,"config":313,"footerGa":316},"Emplois",{"href":314,"dataGaName":315,"dataGaLocation":28},"/jobs/","jobs",{"dataGaName":315},{"text":277,"config":318},{"href":279,"dataGaName":280,"dataGaLocation":28},{"text":320,"config":321},"Leadership",{"href":322,"dataGaName":323,"dataGaLocation":28},"/company/team/e-group/","leadership",{"text":325,"config":326},"Équipe",{"href":327,"dataGaName":328,"dataGaLocation":28},"/company/team/","team",{"text":330,"config":331},"Manuel",{"href":332,"dataGaName":333,"dataGaLocation":28},"https://handbook.gitlab.com/","handbook",{"text":335,"config":336},"Relations avec les investisseurs",{"href":337,"dataGaName":338,"dataGaLocation":28},"https://ir.gitlab.com/","investor relations",{"text":340,"config":341},"Centre de confiance",{"href":342,"dataGaName":343,"dataGaLocation":28},"/fr-fr/security/","trust center",{"text":345,"config":346},"Centre pour la transparence de l'IA",{"href":347,"dataGaName":348,"dataGaLocation":28},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":350,"config":351},"Newsletter",{"href":352,"dataGaName":353,"dataGaLocation":28},"/company/contact/","newsletter",{"text":355,"config":356},"Presse",{"href":357,"dataGaName":358,"dataGaLocation":28},"/press/","press",{"text":360,"config":361,"lists":362},"Nous contacter",{"dataNavLevelOne":302},[363],{"items":364},[365,368,373],{"text":35,"config":366},{"href":37,"dataGaName":367,"dataGaLocation":28},"talk to sales",{"text":369,"config":370},"Aide",{"href":371,"dataGaName":372,"dataGaLocation":28},"/support/","get help",{"text":374,"config":375},"Portail clients GitLab",{"href":376,"dataGaName":377,"dataGaLocation":28},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":379,"login":380,"suggestions":387},"Fermer",{"text":381,"link":382},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":383,"config":384},"gitlab.com",{"href":42,"dataGaName":385,"dataGaLocation":386},"search login","search",{"text":388,"default":389},"Suggestions",[390,393,398,400,405,410],{"text":57,"config":391},{"href":62,"dataGaName":392,"dataGaLocation":386},"GitLab Duo (AI)",{"text":394,"config":395},"Suggestions de code (IA)",{"href":396,"dataGaName":397,"dataGaLocation":386},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":109,"config":399},{"href":111,"dataGaName":109,"dataGaLocation":386},{"text":401,"config":402},"GitLab sur AWS",{"href":403,"dataGaName":404,"dataGaLocation":386},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":406,"config":407},"GitLab sur Google Cloud ",{"href":408,"dataGaName":409,"dataGaLocation":386},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":411,"config":412},"Pourquoi utiliser GitLab ?",{"href":70,"dataGaName":413,"dataGaLocation":386},"Why GitLab?",{"freeTrial":415,"mobileIcon":420,"desktopIcon":425},{"text":416,"config":417},"Commencer votre essai gratuit",{"href":418,"dataGaName":33,"dataGaLocation":419},"https://gitlab.com/-/trials/new/","nav",{"altText":421,"config":422},"Icône GitLab",{"src":423,"dataGaName":424,"dataGaLocation":419},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":421,"config":426},{"src":427,"dataGaName":424,"dataGaLocation":419},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":429,"mobileIcon":433,"desktopIcon":435},{"text":430,"config":431},"En savoir plus sur GitLab Duo",{"href":62,"dataGaName":432,"dataGaLocation":419},"gitlab duo",{"altText":421,"config":434},{"src":423,"dataGaName":424,"dataGaLocation":419},{"altText":421,"config":436},{"src":427,"dataGaName":424,"dataGaLocation":419},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":442,"_dir":22,"_draft":6,"_partial":6,"_locale":7,"title":443,"titleMobile":443,"button":444,"config":449,"_id":451,"_type":14,"_source":16,"_file":452,"_stem":453,"_extension":19},"/shared/fr-fr/banner","La plateforme GitLab Duo Agent est maintenant disponible en version bêta publique !",{"text":445,"config":446},"Essayer la version bêta",{"href":447,"dataGaName":448,"dataGaLocation":28},"/fr-fr/gitlab-duo/agent-platform/","duo banner",{"layout":450},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":455,"_dir":22,"_draft":6,"_partial":6,"_locale":7,"data":456,"_id":661,"_type":14,"title":662,"_source":16,"_file":663,"_stem":664,"_extension":19},"/shared/fr-fr/main-footer",{"text":457,"source":458,"edit":464,"contribute":469,"config":474,"items":479,"minimal":652},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":459,"config":460},"Afficher le code source de la page",{"href":461,"dataGaName":462,"dataGaLocation":463},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":465,"config":466},"Modifier cette page",{"href":467,"dataGaName":468,"dataGaLocation":463},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":470,"config":471},"Veuillez contribuer",{"href":472,"dataGaName":473,"dataGaLocation":463},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":475,"facebook":476,"youtube":477,"linkedin":478},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[480,503,557,589,623],{"title":46,"links":481,"subMenu":486},[482],{"text":483,"config":484},"Plateforme DevSecOps",{"href":55,"dataGaName":485,"dataGaLocation":463},"devsecops platform",[487],{"title":189,"links":488},[489,493,498],{"text":490,"config":491},"Voir les forfaits",{"href":191,"dataGaName":492,"dataGaLocation":463},"view plans",{"text":494,"config":495},"Pourquoi choisir GitLab Premium ?",{"href":496,"dataGaName":497,"dataGaLocation":463},"/fr-fr/pricing/premium/","why premium",{"text":499,"config":500},"Pourquoi choisir GitLab Ultimate ?",{"href":501,"dataGaName":502,"dataGaLocation":463},"/fr-fr/pricing/ultimate/","why ultimate",{"title":504,"links":505},"Solutions",[506,511,514,516,521,526,530,533,536,541,543,545,547,552],{"text":507,"config":508},"Transformation digitale",{"href":509,"dataGaName":510,"dataGaLocation":463},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":512,"config":513},"Sécurité et conformité",{"href":137,"dataGaName":138,"dataGaLocation":463},{"text":122,"config":515},{"href":105,"dataGaName":106,"dataGaLocation":463},{"text":517,"config":518},"Développement agile",{"href":519,"dataGaName":520,"dataGaLocation":463},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":522,"config":523},"Transformation cloud",{"href":524,"dataGaName":525,"dataGaLocation":463},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":527,"config":528},"SCM",{"href":119,"dataGaName":529,"dataGaLocation":463},"source code management",{"text":109,"config":531},{"href":111,"dataGaName":532,"dataGaLocation":463},"continuous integration & delivery",{"text":161,"config":534},{"href":163,"dataGaName":535,"dataGaLocation":463},"value stream management",{"text":537,"config":538},"GitOps",{"href":539,"dataGaName":540,"dataGaLocation":463},"/fr-fr/solutions/gitops/","gitops",{"text":174,"config":542},{"href":176,"dataGaName":177,"dataGaLocation":463},{"text":179,"config":544},{"href":181,"dataGaName":182,"dataGaLocation":463},{"text":184,"config":546},{"href":186,"dataGaName":187,"dataGaLocation":463},{"text":548,"config":549},"Formation",{"href":550,"dataGaName":551,"dataGaLocation":463},"/fr-fr/solutions/education/","education",{"text":553,"config":554},"Services financiers",{"href":555,"dataGaName":556,"dataGaLocation":463},"/fr-fr/solutions/finance/","financial services",{"title":194,"links":558},[559,561,563,565,568,570,573,575,577,579,581,583,585,587],{"text":206,"config":560},{"href":208,"dataGaName":209,"dataGaLocation":463},{"text":211,"config":562},{"href":213,"dataGaName":214,"dataGaLocation":463},{"text":216,"config":564},{"href":218,"dataGaName":219,"dataGaLocation":463},{"text":221,"config":566},{"href":223,"dataGaName":567,"dataGaLocation":463},"docs",{"text":244,"config":569},{"href":246,"dataGaName":247},{"text":571,"config":572},"Histoires de réussite client",{"href":241,"dataGaLocation":463},{"text":239,"config":574},{"href":241,"dataGaName":242,"dataGaLocation":463},{"text":249,"config":576},{"href":251,"dataGaName":252,"dataGaLocation":463},{"text":262,"config":578},{"href":264,"dataGaName":265,"dataGaLocation":463},{"text":254,"config":580},{"href":256,"dataGaName":257,"dataGaLocation":463},{"text":267,"config":582},{"href":269,"dataGaName":270,"dataGaLocation":463},{"text":272,"config":584},{"href":274,"dataGaName":275,"dataGaLocation":463},{"text":277,"config":586},{"href":279,"dataGaName":280,"dataGaLocation":463},{"text":282,"config":588},{"href":284,"dataGaName":285,"dataGaLocation":463},{"title":300,"links":590},[591,593,595,597,599,601,603,607,612,614,616,618],{"text":307,"config":592},{"href":309,"dataGaName":302,"dataGaLocation":463},{"text":312,"config":594},{"href":314,"dataGaName":315,"dataGaLocation":463},{"text":320,"config":596},{"href":322,"dataGaName":323,"dataGaLocation":463},{"text":325,"config":598},{"href":327,"dataGaName":328,"dataGaLocation":463},{"text":330,"config":600},{"href":332,"dataGaName":333,"dataGaLocation":463},{"text":335,"config":602},{"href":337,"dataGaName":338,"dataGaLocation":463},{"text":604,"config":605},"Sustainability",{"href":606,"dataGaName":604,"dataGaLocation":463},"/sustainability/",{"text":608,"config":609},"Diversité, inclusion et appartenance (DIB)",{"href":610,"dataGaName":611,"dataGaLocation":463},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":340,"config":613},{"href":342,"dataGaName":343,"dataGaLocation":463},{"text":350,"config":615},{"href":352,"dataGaName":353,"dataGaLocation":463},{"text":355,"config":617},{"href":357,"dataGaName":358,"dataGaLocation":463},{"text":619,"config":620},"Déclaration de transparence sur l'esclavage moderne",{"href":621,"dataGaName":622,"dataGaLocation":463},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":360,"links":624},[625,628,630,632,637,642,647],{"text":626,"config":627},"Échanger avec un expert",{"href":37,"dataGaName":38,"dataGaLocation":463},{"text":369,"config":629},{"href":371,"dataGaName":372,"dataGaLocation":463},{"text":374,"config":631},{"href":376,"dataGaName":377,"dataGaLocation":463},{"text":633,"config":634},"Statut",{"href":635,"dataGaName":636,"dataGaLocation":463},"https://status.gitlab.com/","status",{"text":638,"config":639},"Conditions d'utilisation",{"href":640,"dataGaName":641},"/terms/","terms of use",{"text":643,"config":644},"Déclaration de confidentialité",{"href":645,"dataGaName":646,"dataGaLocation":463},"/fr-fr/privacy/","privacy statement",{"text":648,"config":649},"Préférences en matière de cookies",{"dataGaName":650,"dataGaLocation":463,"id":651,"isOneTrustButton":91},"cookie preferences","ot-sdk-btn",{"items":653},[654,656,659],{"text":638,"config":655},{"href":640,"dataGaName":641,"dataGaLocation":463},{"text":657,"config":658},"Politique de confidentialité",{"href":645,"dataGaName":646,"dataGaLocation":463},{"text":648,"config":660},{"dataGaName":650,"dataGaLocation":463,"id":651,"isOneTrustButton":91},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",{"allPosts":666,"featuredPost":1326,"totalPagesCount":1347,"initialPosts":1348},[667,697,720,740,760,783,807,825,844,868,891,913,935,955,976,996,1015,1037,1058,1077,1096,1119,1141,1164,1187,1206,1227,1246,1266,1285,1305],{"_path":668,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":669,"content":677,"config":690,"_id":693,"_type":14,"title":694,"_source":16,"_file":695,"_stem":696,"_extension":19},"/fr-fr/blog/developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd",{"ogTitle":670,"schema":671,"ogImage":672,"ogDescription":673,"ogSiteName":674,"noIndex":6,"ogType":675,"ogUrl":676,"title":670,"canonicalUrls":676,"description":673},"GitLab Duo : l'IA combinée à l'analyse des causes profondes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Développement de GitLab Duo : l'IA combinée à l'analyse des causes profondes pour réparer les pipelines CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rutvik Shah\"},{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2024-06-06\",\n      }\n                  ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097321/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750097321081.png","Découvrez comment nous avons associé une fonctionnalité d'analyse des causes profondes à l'IA pour vous aider à réparer les pipelines CI/CD défectueux.","https://about.gitlab.com","article","https://about.gitlab.com/blog/developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd",{"title":678,"description":673,"authors":679,"heroImage":672,"date":682,"body":683,"category":684,"tags":685},"GitLab Duo : l'IA combinée à l'analyse des causes profondes pour réparer les pipelines CI/CD",[680,681],"Rutvik Shah","Michael Friedrich","2024-06-06","***L'IA générative marque une avancée majeure dans le domaine du\ndéveloppement logiciel, simplifiant le processus de développement, de\nsécurisation et d'exploitation des logiciels. Notre série d'articles de\nblog, rédigée par nos équipes produit et ingénierie, vous propose un aperçu\nde notre processus de création, de test et de déploiement des\nfonctionnalités d'IA que vous avez besoin d'intégrer dans l'ensemble de\nl'entreprise. Explorez les nouvelles capacités de GitLab Duo et découvrez\ncomment elles aident les équipes DevSecOps à livrer de meilleurs résultats\naux clients.***\n\n\nAvez-vous déjà été contraint d'interrompre votre workflow [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps ?\"), voire de retarder votre processus de déploiement logiciel, alors que vous cherchiez la cause profonde d'un problème de pipeline [CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/benefits-continuous-integration/) ? Traditionnellement, lorsqu'un problème survient au cours du processus de création de logiciels, les développeurs doivent parcourir les fichiers journaux et le résoudre après de multiples essais. [L'analyse des causes profondes de GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/), l'une de nos fonctionnalités alimentées par l'IA, élimine les hypothèses en déterminant la cause profonde de l'échec d'un pipeline CI/CD. \n\n\nDécouvrez dans cet article ce qu’est l'analyse des causes profondes et comment appliquer cette fonctionnalité GitLab Duo alimentée par l'IA à votre workflow DevSecOps.\n\n\n> Vous avez manqué notre événement virtuel à l’occasion du lancement de GitLab 17 ? [Accédez au replay !](https://about.gitlab.com/fr-fr/seventeen/)\n\n\n## Qu’est-ce que l'analyse des causes profondes ?\n\n\nL'analyse des causes profondes de GitLab Duo est une fonctionnalité alimentée par l'IA qui analyse les journaux pour vous aider à identifier une cause profonde et suggère une solution lorsqu'un job log CI/CD échoue.\n\n\nBien qu'elle soit souvent utilisée pour gérer les incidents liés aux produits, ses méthodes et ses pratiques de débogage se retrouvent dans tous les workflows DevSecOps. Lorsque les équipes Ops, les administrateurs et les ingénieurs de plateforme enquêtent sur les échecs de pipeline, ils sont confrontés à des erreurs de déploiement de l'Infrastructure as Code (IaC), à des problèmes liés à [Kubernetes](https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/ \"Qu'est-ce que Kubernetes ? \") et [GitOps](https://about.gitlab.com/fr-fr/topics/gitops/ \"GitOps\"), ainsi qu'à de longues traces d'appels détaillant la séquence complète des fonctions ou des méthodes impliquées dans les défaillances.\n\n\nRassemblant les équipes sur une seule interface, la fonctionnalité d'analyse des causes profondes de GitLab Duo fait appel à l'IA pour résumer, analyser et proposer des correctifs afin que les entreprises puissent déployer plus rapidement des logiciels sécurisés.\n\n\nUn pipeline peut échouer pour diverses raisons, notamment des erreurs de syntaxe dans le code, des dépendances manquantes, des échecs de test pendant le processus de compilation, des délais d'attente dépassés lors du déploiement de Kubernetes et de l'IaC, ainsi que de nombreux autres problèmes potentiels. Lorsque de tels échecs se produisent, toute l'équipe a la responsabilité d'examiner minutieusement les logs générés par le pipeline. Ce processus d'examen du job log consiste à vérifier minutieusement les sorties détaillées pour identifier les erreurs spécifiques et les causes profondes de l'échec du pipeline. Par exemple, le pipeline suivant a enregistré plusieurs échecs qui doivent être examinés et corrigés.\n\n\n![Image illustrant plusieurs échecs de jobs](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097332/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097332601.png)\n\n\nLa durée nécessaire pour corriger ces échecs est très variable et grandement influencée par plusieurs facteurs, tels que :\n\n\n* la connaissance du projet par le développeur,\n\n* son niveau d'expérience avec des problèmes similaires,\n\n* son niveau de compétence global en matière de dépannage et de résolution de problèmes dans le contexte du pipeline.\n\n\nL'analyse manuelle peut être extrêmement difficile et chronophage, dans la mesure où les données des journaux se composent de journaux d'applications et de messages système rassemblant de nombreuses sources d'échec potentielles. Un correctif de pipeline typique peut consister en plusieurs itérations et en un changement de contexte. La complexité et la nature non structurée des fichiers journaux illustrent à la perfection la manière dont l'IA générative permet d'accélérer les tâches. L'utilisation de l'IA peut réduire considérablement le temps nécessaire pour identifier et corriger une erreur de pipeline. Elle abaisse également le niveau d'expertise nécessaire pour réparer un pipeline comme celui présenté ci-dessus.\n\n\nRegardez la fonctionnalité d’analyse des causes profondes de GitLab Duo en action :\n\n\n\u003C!-- blank line -->\n\n\n\u003Cfigure class=\"video_container\">\n\n \u003Ciframe src=\"https://www.youtube.com/embed/sTpSLwX5DIs?si=J6-0Bf6PtYjrHX1K\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\n\u003C/figure>\n\n\n\u003C!-- blank line -->\n\n\n## Comment fonctionne l'analyse des causes profondes ?\n\n\n[L'analyse des causes profondes](https://docs.gitlab.com/ee/user/ai_experiments.html#root-cause-analysis) transmet une partie du job log CI/CD à la [passerelle d'IA de GitLab](https://docs.gitlab.com/ee/architecture/blueprints/ai_gateway/). GitLab intègre ce segment dans les limites du token du grand modèle de langage (LLM) et l'associe à un prompt créé en amont afin de fournir des informations sur les raisons possibles de l'échec du job. Le prompt demande également au LLM de fournir un exemple de résolution du job qui a échoué.\n\n\nVoici deux exemples de scénarios où la fonctionnalité d'analyse des causes profondes de GitLab peut vous être utile.\n\n\n#### 1. Analysez une erreur de dépendance Python\n\n\nUne application Python peut importer des modules de package contenant des fonctionnalités qui ne sont pas fournies dans la bibliothèque standard. Le projet « [Challenge - Root Cause Analysis - Python Config](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/root-cause-analysis/challenge-root-cause-analysis-python-config) » met en œuvre une application qui analyse la configuration et initialise une base de données SQLite. Ces deux éléments fonctionnent sans dépendance. Le projet utilise les meilleures pratiques CI/CD avec une mise en cache et un environnement Python. La dernière implémentation de la fonctionnalité ajoute un client de mise en cache Redis et la compilation CI/CD échoue maintenant pour une raison quelconque. \n\n\nGrâce à la fonctionnalité d'analyse des causes profondes de GitLab Duo, vous pouvez immédiatement repérer que le texte `ModuleNotFoundError` signifie que le module n'est pas installé dans l'environnement Python. GitLab Duo suggère également un exemple de correctif : l'installation du module Redis via le gestionnaire de paquets PIP.\n\n\n![Image représentant le message 'modulenotfounderror' et la résolution suggérée par GitLab Duo](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097332/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097332602.png)\n\n\nPour consulter le pipeline défectueux, cliquez sur [ce lien](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/root-cause-analysis/challenge-root-cause-analysis-python-config/-/jobs/6992716398). \n\n\nLe prompt d'analyse des causes profondes de GitLab fournit un résumé du problème, qui semble découler d'un module `redis` manquant. Essayons de le résoudre en installant le module `redis`. Vous pouvez appeler `pip install redis` dans la section `script` du job CI/CD, ou utiliser une approche plus sophistiquée avec le fichier `requirements.txt`. Ce dernier est utile si vous souhaitez avoir une source unique de vérité pour les dépendances installées dans l'environnement de développement et les pipelines CI/CD.\n\n\n```yaml\n\ntest:\n  extends: [.python-req]\n  stage: test \n  before_script:\n    # [🦊] hint: Root cause analysis. # Solution 1: Install redis using pip\n    - pip install redis\n    # Solution 2: Add redis to requirements.txt, use pip\n    - pip install -r requirements.txt \n\n  script:\n    - python src/main.py\n```\n\n\nUne fois la dépendance Python manquante corrigée, le job CI/CD échoue à nouveau. Utilisez une nouvelle fois l'analyse des causes profondes de GitLab et vous constaterez qu'aucun service Redis n'est en cours d'exécution dans le job. Dans GitLab Duo Chat, saisissez le prompt `How to start a Redis service in CI/CD` (Comment démarrer un service Redis dans CI/CD) pour apprendre à configurer l'attribut `services` dans le job CI/CD.\n\n\n![Illustre le prompt indiquant comment démarrer un service Redis](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097333/Blog/Content%20Images/Blog/Content%20Images/image6_aHR0cHM6_1750097332602.png)\n\n\nModifiez le fichier `.gitlab-ci.yml` avec le job `test` et indiquez le service `redis`.\n\n\n```yaml\n\ntest:\n  extends: [.python-req]\n  stage: test \n  before_script:\n    # [🦊] hint: Root cause analysis.\n    # Solution 1: Install redis using pip\n    - pip install redis\n    # Solution 2: Add redis to requirements.txt, use pip\n    - pip install -r requirements.txt \n\n  script:\n    - python src/main.py\n\n  # Solution 3 - Running Redis\n  services:\n    - redis\n```\n\n\nL'exécution du serveur Redis vous permet d'exécuter avec succès l'application Python et d'enregistrer sa sortie dans le job log CI/CD.\n\n\n![sortie de l'application Python](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097332/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750097332603.png)\n\n\nLa solution est fournie dans le [dépôt solution/](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/root-cause-analysis/challenge-root-cause-analysis-python-config/-/tree/main/solution?ref_type=heads).\n\n\n**Conseil :** vous pouvez également demander à [GitLab Duo Chat](https://docs.gitlab.com/ee/user/gitlab_duo_chat.html) de suivre les problèmes potentiels à l'avenir.\n\n\n```markdown\n\nHow to lint Python code? Which tools are recommended for CI/CD.\n\nHow to pin a package version in Python requirements file?\t\n\nWhat are possible ways that this exception stacktrace is triggered in the future?\n\nAre there ways to prevent the application from failing?\n\n```\n\n\nL'exemple suivant est plus avancé et comprend plusieurs échecs. \n\n\n#### 2. Analysez le runtime Go manquant\n\n\nLes jobs CI/CD peuvent être exécutés dans des conteneurs, générés à partir de l'attribut `image` fourni. Si le conteneur ne fournit pas de runtime de langage de programmation, les sections `script` exécutées faisant référence au binaire `go` échouent. Par exemple, il est nécessaire de comprendre et de corriger le message d'erreur `/bin/sh: eval: line 149: go: not found`. \n\n\nPlusieurs raisons peuvent expliquer que la commande `go` ne se trouve pas dans le contexte de runtime du conteneur :\n\n\n1. Le job utilise une image de conteneur minimale, par exemple `alpine`, et le runtime du langage Go n'a pas été installé.\n\n2. Le job utilise la mauvaise image de conteneur par défaut, par exemple, celle indiquée au-dessus de la configuration CI/CD ou correspondant au mot-clé `default`.\n\n3. Le job utilise le Shell executor (exécuteur Shell) à la place de l'image de conteneur. Le runtime Go n'est pas installé sur le système d'exploitation hôte, il échoue pour un autre motif ou n'est pas configuré.\n\n\nNotre projet « [Challenge - Root Cause Analysis - Go GitLab Release Fetcher](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/root-cause-analysis/challenge-root-cause-analysis-go-gitlab-release-fetcher) » propose un exercice d'analyse et de résolution des problèmes CI/CD avec une application de récupération de versions GitLab, écrite en langage Go. Les jobs CI/CD `build` et `docker-build` échouent. La résolution du problème a différentes portées : comprendre pourquoi le runtime Go n'est pas installé et en apprendre davantage sur la syntaxe `Dockerfile`.\n\n\n![Capture d'écran montrant l'échec du job Modifier l'étiquette Docker](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097332/Blog/Content%20Images/Blog/Content%20Images/image5_aHR0cHM6_1750097332603.png)\n\n\nLe [dépôt `solution/`](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/root-cause-analysis/challenge-root-cause-analysis-go-gitlab-release-fetcher) suggère deux solutions possibles après l'analyse des causes profondes. \n\n\n## Entraînez-vous à utiliser l'analyse des causes profondes\n\n\nVoici plusieurs scénarios pour lesquels vous pouvez vous entraîner à travailler avec la fonctionnalité d'analyse des causes profondes de GitLab.\n\n\n* Lorsque vous rencontrez des délais d'attente expirés ou des erreurs de déploiements. \n\n* Lorsque des pipelines IaC OpenTofu ou Terraform ne parviennent pas à provisionner vos ressources cloud.\n\n* Lorsque le playbook Ansible échoue et affiche un message d'erreur cryptique d'autorisation dans le CI/CD.\n\n* Lorsque la trace d'appels Java contient 10 pages.\n\n* Lorsqu'un script shell met en évidence une erreur d'exécution.\n\n* Lorsqu'un script Perl échoue sur la seule ligne que ce script contient.\n\n* Lorsque le job CI/CD est interrompu et que la section qui en serait la cause n'est pas évidente.\n\n* Lorsqu'un délai d'attente de connexion réseau est atteint et que vous pensez qu'il ne peut pas s'agir du DNS.\n\n\n## Quels sont les prochains développements prévus pour l'analyse des causes profondes de GitLab Duo ?\n\n\nNous voulons aider nos utilisateurs à réduire le nombre d'itérations nécessaires pour valider leurs [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ? \"). À l'avenir, la fonctionnalité d'analyse des causes profondes de GitLab s'ouvrira systématiquement et affichera la réponse dans GitLab Duo Chat, notre assistant d'IA. Les utilisateurs pourront alors s'appuyer sur la recommandation pour générer un correctif plus précis en posant des questions spécifiques (par exemple, des correctifs spécifiques pour un langage de programmation particulier) ou en demandant des correctifs alternatifs en fonction de la cause profonde identifiée.\n\n\nPar exemple, voici le résultat de l'analyse des causes profondes d'un job ayant rencontré un échec :\n\n\n![Réponse de l'Analyse des causes profondes](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097332/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097332603.png)\n\n\nLes utilisateurs peuvent poser des questions de suivi qui approfondissent la réponse générée par l'IA.\n\n\n* Je ne veux pas créer ma propre image Docker. Veuillez suggérer d'autres façons de résoudre le problème.\n\n* Je n'ai pas accès à la création d'image Docker. Il semble que le binaire Go soit manquant. Pouvez-vous suggérer des images alternatives ?\n\n\nGitLab exécutera également un benchmark de la qualité des réponses générées et mettra en place des améliorations pour rendre l'utilisation plus conviviale et efficace.\n\n\nConsultez notre [epic sur la disponibilité générale de l'analyse des causes profondes](https://gitlab.com/groups/gitlab-org/-/epics/13080) pour en savoir plus et laissez un commentaire sur notre [ticket dédié à l'analyse des causes profondes](https://gitlab.com/groups/gitlab-org/-/epics/13872) pour nous dire ce que vous pensez de cette fonctionnalité. \n\n\n## Profitez dès maintenant des nombreux avantages de l'analyse des causes profondes\n\n\nPour activer cette fonctionnalité, consultez notre [documentation](https://docs.gitlab.com/ee/user/ai_experiments.html#root-cause-analysis). L'analyse des causes profondes est disponible actuellement pour nos clients GitLab Ultimate et sera bientôt disponible dans GitLab Auto-géré et GitLab Dedicated.\n\n\nVous souhaitez tester GitLab Ultimate ? Commencez dès aujourd'hui [un essai gratuit de 30 jours](https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/blog&glm_content=default-saas-trial). \n\n\n## En savoir plus sur le « Développement de GitLab Duo »\n\n\n* [Développement de GitLab Duo : comment nous validons et testons les modèles d'IA à grande échelle](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/)\n\n* [Développement de GitLab Duo : mesurer le ROI de l’IA avec le tableau de bord d'analyse d'impact](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/)\n\n* [Développement de GitLab Duo : comment nous utilisons nos propres fonctionnalités d'IA](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/)\n\n* [Développement de GitLab Duo : tester et sécuriser le code généré par l'IA](https://about.gitlab.com/fr-fr/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code/)\n","ai-ml",[686,687,9,688,689],"AI/ML","tutorial","DevSecOps platform","features",{"slug":691,"featured":91,"template":692},"developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd","BlogPost","content:fr-fr:blog:developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd.yml","Developing Gitlab Duo Blending Ai And Root Cause Analysis To Fix Ci Cd","fr-fr/blog/developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd.yml","fr-fr/blog/developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd",{"_path":698,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":699,"content":705,"config":714,"_id":716,"_type":14,"title":717,"_source":16,"_file":718,"_stem":719,"_extension":19},"/fr-fr/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale",{"ogTitle":700,"schema":701,"ogImage":702,"ogDescription":703,"ogSiteName":674,"noIndex":6,"ogType":675,"ogUrl":704,"title":700,"canonicalUrls":704,"description":703},"GitLab Duo : validation et tests des modèles d'IA","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Développement de GitLab Duo : comment nous validons et testons les modèles d'IA à grande échelle\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Susie Bitters\"}],\n        \"datePublished\": \"2024-05-09\",\n      }","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659856/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25.png","Découvrez comment nous évaluons les LLM, les adaptons à des cas d'utilisation et les affinons pour fournir de meilleures réponses aux utilisateurs. ","https://about.gitlab.com/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale",{"title":706,"description":707,"authors":708,"heroImage":702,"date":710,"body":711,"category":684,"tags":712},"GitLab Duo : comment nous validons et testons les modèles d'IA à grande échelle","Notre série d’articles de blog débute avec un aperçu de la façon dont nous évaluons les grands modèles de langage (LLM), les adaptons à des cas d'utilisation et les affinons pour fournir de meilleures réponses aux utilisateurs.",[709],"Susie Bitters","2024-05-09","***L'[IA générative](https://about.gitlab.com/fr-fr/topics/agentic-ai/ \"Qu'est-ce que l'IA générative ?\") marque une avancée majeure dans le domaine du développement logiciel, simplifiant le processus de développement, de sécurisation et d'exploitation des logiciels. Notre nouvelle série d’articles de blog, rédigée par nos équipes produit et ingénierie, vous propose un aperçu de notre processus de création, de test et de déploiement des fonctionnalités d'IA que vous avez besoin d'intégrer dans l'ensemble de l'entreprise. Explorez les nouvelles capacités de GitLab Duo et découvrez comment elles aideront les équipes [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps?\") à livrer de meilleurs résultats aux clients.***\n\nGitLab attache une grande importance à la confiance que nos clients nous accordent. Maintenir cette confiance implique une transparence dans la manière dont nous concevons, évaluons et garantissons la qualité des fonctionnalités d'IA de [GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/ \"GitLab Duo\"). Les fonctionnalités de GitLab Duo reposent sur un ensemble diversifié de modèles, ce qui nous permet de prendre en charge une multitude de cas d'utilisation et apporte de la flexibilité à nos clients. GitLab n'est pas lié à un seul fournisseur de modèles. Nous utilisons actuellement les modèles de fondation de [Google](https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/blob/main/ai_gateway/models/vertex_text.py?ref_type=heads#L86) et [Anthropic](https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/blob/main/ai_gateway/models/anthropic.py?ref_type=heads#L62). Néanmoins, nous procédons continuellement à l'évaluation des modèles les plus adaptés aux cas d'utilisation de GitLab Duo. Dans cet article, nous vous présentons un aperçu de notre processus de validation des modèles d'IA.\n\n> [Essayez GitLab Duo gratuitement](https://about.gitlab.com/fr-fr/gitlab-duo/#free-trial \"Essai gratuit de GitLab Duo\") dès aujourd'hui !\n\n## Comprendre les grands modèles de langage (LLM)\n\nLes [grands modèles de langage (LLM)](https://about.gitlab.com/fr-fr/blog/large-language-model/ \"Qu'est-ce qu'un grand modèle de langage ?\") sont des modèles d'IA générative qui alimentent de nombreuses fonctionnalités d'IA sur l'ensemble de la plateforme. Entraînés sur de vastes ensembles de données, les LLM prédisent le mot suivant dans une séquence en fonction du contexte précédent. Sur la base d'un prompt, ils génèrent un texte semblable à celui d’un être humain en échantillonnant à partir de la distribution de probabilité des mots conditionnée par le prompt.\n\nLes LLM permettent des suggestions de code intelligentes, des chatbots conversationnels, des explications de code, des analyses de vulnérabilités et bien plus encore. Leur capacité à produire des résultats variés pour un prompt donné rend difficile l'évaluation standardisée de la qualité. Les LLM peuvent être optimisés pour différentes caractéristiques. C'est la raison pour laquelle tant de modèles d'IA sont en cours de développement.\n\n## Tester à grande échelle\n\nContrairement aux systèmes logiciels traditionnels où les entrées et les sorties peuvent être plus facilement définies et testées, les LLM produisent des résultats souvent nuancés, diversifiés et dépendants du contexte. Tester ces modèles nécessite des stratégies complètes qui tiennent compte des interprétations subjectives et variables de la qualité, ainsi que de la nature stochastique de leurs résultats. Nous ne pouvons donc pas juger de la qualité du résultat d'un LLM de manière individuelle ou anecdotique ; nous devons plutôt être capables d'examiner le schéma global du comportement d'un LLM. Pour avoir une idée de ces schémas, nous devons réaliser des tests à grande échelle. Les tests à grande échelle font référence au processus d'évaluation des performances, de la fiabilité et de la robustesse d'un système ou d'une application sur un large éventail de données et de cas d'utilisation. Notre [Framework d'évaluation centralisé (CEF)](https://about.gitlab.com/direction/ai-powered/ai_framework/ai_evaluation/) utilise des milliers de prompts liés à des dizaines de cas d'utilisation pour nous permettre d'identifier des schémas significatifs et d'évaluer le comportement global de nos modèles LLM de fondation et des fonctionnalités GitLab Duo dans lesquelles ils sont intégrés.\n\nLes tests à grande échelle nous aident à :\n\n* **Garantir la qualité :** les tests à grande échelle nous permettent d'évaluer la qualité et la fiabilité de ces modèles sur un large éventail de scénarios et d’entrées. En validant les résultats de ces modèles à grande échelle, nous pouvons commencer à identifier des schémas et à atténuer les problèmes potentiels tels que les biais systématiques, les anomalies et les inexactitudes.\n* **Optimiser les performances :** la mise à l'échelle des efforts de test permet à GitLab d'évaluer les performances et l'efficacité des LLM dans des conditions réelles. Cela comprend l'évaluation de facteurs tels que la qualité du résultat, la latence et le coût pour optimiser le déploiement et l'exploitation de ces modèles dans les fonctionnalités de GitLab Duo.\n* **Atténuer les risques :** tester les LLM à grande échelle contribue à atténuer les risques associés à leur déploiement dans des applications critiques. En effectuant des tests approfondis sur divers ensembles de données et cas d'utilisation, nous pouvons identifier et résoudre les défaillances potentielles, les vulnérabilités de sécurité et les considérations éthiques avant qu'ils n'affectent nos clients.\n\nTester les LLM à grande échelle est impératif pour garantir leur fiabilité et leur robustesse en vue de leur déploiement au sein de la [plateforme DevSecOps de GitLab](https://about.gitlab.com/fr-fr/platform/ \"Plateforme DevSecOps de GitLab\"). En investissant dans des stratégies de test complètes qui englobent divers ensembles de données, cas d'utilisation et scénarios, GitLab s'efforce de libérer tout le potentiel des workflows alimentés par l'IA tout en atténuant les risques potentiels.\n\n### Comment nous testons à grande échelle\n\nVoici les étapes que nous suivons pour tester les LLM à grande échelle.\n\n#### Étape 1 : Créer une bibliothèque de prompts comme proxy pour la production\n\nAlors que d'autres entreprises consultent et utilisent les données clients pour entraîner leurs fonctionnalités d'IA, GitLab ne procède actuellement pas de la sorte. En conséquence, nous avons dû développer une bibliothèque de prompts complète qui sert de proxy à la fois pour la mise à l'échelle et pour l'activité de production.\n\nCette bibliothèque de prompts est composée de questions et de réponses. Les questions représentent les types de requêtes ou d'entrées que nous nous attendons à voir en production, tandis que les réponses représentent une vérité terrain de ce que serait notre réponse idéale. Cette réponse de référence pourrait également être considérée mentalement comme une réponse cible. La question tout comme la réponse peuvent être générées par des humains, mais ne le sont pas nécessairement. Ces paires de questions/réponses nous offrent une base de comparaison et un cadre de référence qui nous permettent de faire ressortir les différences entre les modèles et les fonctionnalités. Lorsque l'on pose la même question à plusieurs modèles et qu'ils génèrent des réponses différentes, nous pouvons utiliser notre réponse de référence pour déterminer quel modèle a fourni une réponse qui est le plus étroitement alignée avec notre cible et les noter en conséquence.\n\nUne fois de plus, il est essentiel qu'une bibliothèque de prompts complète soit représentative des entrées que nous prévoyons de rencontrer en production. Nous voulons savoir dans quelle mesure les modèles de fondation s'adaptent à notre cas d'utilisation spécifique et dans quelle mesure nos fonctionnalités sont performantes. Il existe de nombreux ensembles de données de prompts de référence, mais ceux-ci peuvent ne pas correspondre aux cas d'utilisation que nous envisageons pour les fonctionnalités chez GitLab. Notre bibliothèque de prompts, en revanche, est conçue pour être spécifique aux fonctionnalités et aux cas d'utilisation de GitLab.\n\n#### Étape 2 : Performance du modèle de référence\n\nUne fois que nous avons créé une bibliothèque de prompts qui reflète avec précision l'activité de production, nous intégrons ces questions dans [différents modèles](https://about.gitlab.com/direction/ai-powered/ai_framework/ai_evaluation/foundation_models/) pour tester dans quelle mesure ils répondent aux besoins de nos clients. Nous comparons chaque réponse à notre vérité terrain et lui attribuons un classement basé sur une série de métriques, incluant : le [score de similarité cosinus](https://about.gitlab.com/direction/ai-powered/ai_framework/ai_evaluation/metrics/#similarity-scores), le [score de similarité croisée](https://about.gitlab.com/direction/ai-powered/ai_framework/ai_evaluation/metrics/#cross-similarity-score), le [juge LLM](https://about.gitlab.com/direction/ai-powered/ai_framework/ai_evaluation/metrics/#llm-judge) et le [filtrage de consensus avec un juge LLM](https://about.gitlab.com/direction/ai-powered/ai_framework/ai_evaluation/metrics/#consensus-filtering-with-llm-judge). Cette première itération nous fournit une base de référence pour évaluer la performance de chaque modèle et guide notre sélection d'un modèle de fondation pour nos fonctionnalités. Par souci de brièveté, nous n'entrerons pas dans les détails ici, mais nous vous encourageons à en savoir plus sur ces métriques [en consultant notre page AI Evaluation Metrics](https://about.gitlab.com/direction/ai-powered/ai_framework/ai_evaluation/metrics/). Il est important de noter que ce n'est pas un problème résolu ; l'industrie de l'IA au sens large mène activement des recherches et développe de nouvelles techniques. L'équipe de validation des modèles de GitLab reste à l'affût des actualités de ce secteur et itère continuellement sur la façon dont nous mesurons et évaluons les LLM que GitLab Duo utilise.\n\n#### Étape 3 : Développer des fonctionnalités\n\nMaintenant que nous disposons d'une base de référence pour les performances du modèle que nous avons sélectionné, nous pouvons commencer à développer nos fonctionnalités en toute confiance. Bien que l'ingénierie des prompts suscite beaucoup d'enthousiasme, se concentrer uniquement sur le changement du comportement d'un modèle via le prompting (ou toute autre technique) sans validation signifie que vous opérez à l'aveugle et que vous surajustez très probablement vos prompts. Vous pourriez résoudre un problème, mais en causer une dizaine d'autres sans le savoir. La création d'une base de référence pour évaluer les performances d'un modèle nous permet de suivre l'évolution du comportement au fil du temps pour tous les cas d'utilisation dont nous avons besoin. Chez GitLab, nous revalidons quotidiennement les performances de nos fonctionnalités pendant le développement actif pour nous assurer que toutes les modifications améliorent la fonctionnalité globale.\n\n#### Étape 4 : Itérer encore et encore\n\nVoici comment fonctionnent nos itérations expérimentales. À chaque cycle, nous examinons les scores de nos tests à grande échelle pour identifier des schémas :\n\n* Quels sont les points communs entre les domaines les moins performants de notre fonctionnalité ?\n* Notre fonctionnalité se comporte-t-elle mal en fonction d'une métrique spécifique ou d'un cas d'utilisation particulier ?\n* Observons-nous des erreurs récurrentes qui apparaissent en réponse à un certain type de question ?\n\nLes schémas de ce type ne commencent à émerger que lorsque nous effectuons des tests à grande échelle, ce qui nous permet de cibler nos versions expérimentales. Sur la base de ces schémas, nous proposons une variété de fonctionnalités expérimentales ou d'approches pour essayer d'améliorer les performances dans un domaine spécifique et sur une métrique spécifique.\n\nCependant, les tests à grande échelle sont à la fois coûteux et chronophages. Pour permettre une itération plus rapide et moins coûteuse, nous concevons un ensemble de données à plus petite échelle qui agira comme un mini-proxy. Le sous-ensemble ciblé sera pondéré pour inclure les paires de questions/réponses que nous souhaitons améliorer, et le sous-ensemble plus large comprendra également un échantillonnage de tous les autres cas d'utilisation et scores pour nous assurer que nos modifications n'affectent pas négativement la fonctionnalité de manière générale. Le but sera d'effectuer la modification et de l'exécuter sur le sous-ensemble de données ciblé et d'observer comment la nouvelle réponse se compare à la base de référence et comment elle se compare à la vérité terrain.\n\nUne fois que nous avons trouvé un prompt qui répond au cas d'utilisation spécifique sur lequel nous travaillons avec le sous-ensemble ciblé, nous validons ce prompt par rapport à un sous-ensemble de données plus large afin de nous assurer qu'il n'affecte pas négativement d'autres aspects de la fonctionnalité. Ce n'est que lorsque nous pensons que le nouveau prompt améliore nos performances dans notre domaine cible grâce aux métriques de validation ET qu'il ne dégrade pas les performances ailleurs, que nous poussons cette modification en production.\n\nL'ensemble du framework d'évaluation centralisé est ensuite exécuté avec le nouveau prompt et nous validons qu'il a augmenté les performances de l'ensemble de la fonctionnalité par rapport à la base de référence de la veille. C'est ainsi que GitLab itère constamment afin de s'assurer que vous tirez parti des meilleures et des plus récentes performances des fonctionnalités alimentées par l'IA dans l'écosystème GitLab. Cette approche nous permet de nous assurer que nous continuons à travailler plus rapidement, ensemble.\n\n### Rendre GitLab Duo encore meilleur\n\nNous espérons que cet article vous donnera un aperçu de la façon dont nous développons de manière responsable les fonctionnalités de GitLab Duo. Ce processus a été développé alors que nous avons mis les [suggestions de code GitLab Duo](https://docs.gitlab.com/ee/user/project/repository/code_suggestions/) et le [GitLab Duo Chat](https://docs.gitlab.com/ee/user/gitlab_duo_chat.html) en phase de disponibilité générale. Nous avons également intégré ce processus de validation dans notre processus de développement lorsque nous itérons sur les fonctionnalités de GitLab Duo. Il faut beaucoup de tâtonnements, et il arrive souvent qu'en corrigeant un élément, on en détériore trois autres. Mais nous disposons d’informations basées sur les données concernant ces impacts, ce qui nous aide à nous assurer que GitLab Duo s'améliore constamment.\n\n> [Essayez GitLab Duo gratuitement](https://about.gitlab.com/fr-fr/gitlab-duo/#free-trial \"Essai gratuit de GitLab Duo\") dès aujourd'hui !\n\n\u003Cfigure class=video_container>\n\u003Ciframe width=560 height=315 src=\"https://www.youtube-nocookie.com/embed/LifJdU3Qagw?si=A4kl6d32wPYC4168\" title=\"YouTube video player\" frameborder=0 allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen=\"\">\u003C/iframe>\n\u003C/figure>",[686,9,688,689,713],"inside GitLab",{"slug":715,"featured":91,"template":692},"developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale","content:fr-fr:blog:developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale.yml","Developing Gitlab Duo How We Validate And Test Ai Models At Scale","fr-fr/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale.yml","fr-fr/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale",{"_path":721,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":722,"content":728,"config":734,"_id":736,"_type":14,"title":737,"_source":16,"_file":738,"_stem":739,"_extension":19},"/fr-fr/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation",{"title":723,"description":724,"ogTitle":723,"ogDescription":724,"noIndex":6,"ogImage":725,"ogUrl":726,"ogSiteName":674,"ogType":675,"canonicalUrls":726,"schema":727},"Utiliser l'API python-gitlab pour améliorer vos workflows DevSecOps","Vous souhaitez améliorer vos workflows DevSecOps ? Découvrez dans ce tutoriel des exemples et bonnes pratiques d’utilisation de l’API python-gitlab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659883/Blog/Hero%20Images/post-cover-image.jpg","https://about.gitlab.com/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Utiliser l'API python-gitlab pour améliorer vos workflows DevSecOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2023-02-01\",\n      }",{"title":723,"description":724,"authors":729,"heroImage":725,"date":730,"body":731,"category":732,"tags":733},[681],"2023-02-01","Un jour, un ami m’a dit : « Le travail manuel est un bug ». Depuis, face à\ndes tâches répétitives, j’ai pris l’habitude de les automatiser autant que\npossible. \n\n\nPar exemple, en interrogeant une [API\nREST](https://about.gitlab.com/fr-fr/blog/what-is-rest-api/ \"API\nREST\") pour faire un inventaire des paramètres, ou en effectuant des appels\nd’API pour créer de nouveaux commentaires dans les tickets ou les merge\nrequests de GitLab. L'interaction avec l'API REST de GitLab peut se faire de\ndifférentes manières, en utilisant des requêtes HTTP avec curl (ou\n[hurl](https://about.gitlab.com/blog/how-to-continously-test-web-apps-apis-with-hurl-and-gitlab-ci-cd/\n\"hurl\")) en ligne de commande, ou en écrivant un script dans un langage de\nprogrammation. \n\n\nDans ce dernier cas, il faut effectuer des tâches fastidieuses avec le code\nbrut des requêtes HTTP et l'analyse des réponses JSON. Grâce à la communauté\nGitLab, de nombreux langages sont pris en charge par les bibliothèques\nd'abstraction d'API. Elles prennent en charge tous les attributs de l’API,\najoutent des fonctions d'aide pour obtenir, créer et supprimer des objets,\net facilitent ainsi la tâche des équipes de développement. La [bibliothèque\npython-gitlab](https://python-gitlab.readthedocs.io/en/stable/ \"Bibliothèque\npython-gitlab\") est une bibliothèque écrite en Python, riche en\nfonctionnalités et facile à utiliser.\n\n\nDans cet article, vous apprendrez les bases de l’utilisation de la\nbibliothèque python-gitlab en vous familiarisant avec les objets de l’API,\nles attributs, la pagination et les ensembles de résultats. Vous découvrirez\négalement des cas d'utilisation concrets tels que la collecte de données, la\ngénération de synthèses et l’écriture de données dans l'API pour créer des\ncommentaires et des validations. \n\n\nIl y a encore beaucoup à apprendre, avec de nombreux cas d'utilisation\ninspirés des questions posées par la communauté sur le forum, Hacker News,\ndes tickets, et bien plus encore.\n\n\n## Premiers pas\n\n\nLa [documentation\npython-gitlab](https://python-gitlab.readthedocs.io/en/stable/api-usage.html\n\"Documentation python-gitlab\") est une excellente ressource pour débuter.\nElle offre un aperçu des types d'objets et de leurs méthodes, ainsi que des\nexemples de workflows combinés. Cette ressource est idéale pour faire vos\npremiers pas, en plus de la [documentation sur les ressources de l'API\nGitLab](https://docs.gitlab.com/ee/api/api_resources.html \"Documentation sur\nles ressources de l'API GitLab\") qui fournit les attributs d'objet associés.\n\n\nLes exemples de code présentés dans cet article nécessitent Python 3.8+ et\nla bibliothèque `python-gitlab`. Des exigences supplémentaires sont\nspécifiées dans le fichier `requirements.txt`. Un exemple nécessite `pyyaml`\npour l'analyse de la configuration YAML. Pour suivre et mettre en pratique\nle code des cas d'utilisation, il est recommandé de cloner le projet,\nd'installer les prérequis et d'exécuter les scripts. \n\n\nExemple avec Homebrew sur macOS :\n\n\n```shell\n\ngit clone\nhttps://gitlab.com/gitlab-de/use-cases/gitlab-api/gitlab-api-python.git\n\n\ncd gitlab-api-python\n\n\nbrew install python\n\n\npip3 install -r requirements.txt\n\n\npython3 \u003Cscriptname>.py\n\n```\n\n\nLes scripts n'utilisent pas de bibliothèque partagée commune fournissant des\nfonctions génériques pour la lecture des paramètres ou d’autres\nfonctionnalités d'aide supplémentaires. L’objectif est de montrer des\nexemples faciles à suivre, qui peuvent être utilisés de manière autonome\npour des tests, et qui nécessitent uniquement l'installation de la\nbibliothèque python-gitlab.\n\n\nNous recommandons d'améliorer le code pour une utilisation en production.\nCela vous aidera à créer un projet d’API tooling maintenu, incluant par\nexemple des images de conteneurs et des modèles CI/CD que les équipes de\ndéveloppement peuvent utiliser au sein d'une plateforme\n[DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que\nDevSecOps ?\").\n\n\n## Configuration\n\n\nSans configuration, python-gitlab exécutera des requêtes non authentifiées\nsur le serveur par défaut : `https://gitlab.com`. Les paramètres de\nconfiguration les plus courants concernent l'instance GitLab à laquelle se\nconnecter, et la méthode d'authentification en spécifiant les jetons\nd'accès. Python-gitlab prend en charge différents types de configuration :\nun fichier de configuration ou des variables d'environnement.\n\n\nLe [fichier de\nconfiguration](https://python-gitlab.readthedocs.io/en/stable/cli-usage.html#cli-configuration\n\"Fichier de configuration CLI\") est disponible pour les liaisons de\nbibliothèque d’API et pour l'interface de ligne de commande (que nous\nn’aborderons pas dans cet article). Le fichier de configuration prend en\ncharge les [credential\nhelpers](https://python-gitlab.readthedocs.io/en/stable/cli-usage.html#credential-helpers\n\"Credential helpers\") pour accéder directement aux jetons.\n\n\nLes variables d'environnement, en tant que méthode de configuration\nalternative, vous offrent un moyen simple d'exécuter le script dans un\nterminal, de l'intégrer dans des images de conteneurs et de le préparer à\nêtre exécuté dans des [pipelines\nCI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Pipeline\nCI/CD\").\n\n\nVous devez lancer la configuration dans le contexte du script Python.\nImportez la bibliothèque `os` pour récupérer les variables d'environnement à\nl'aide de la méthode `os.environ.get()`. Le premier paramètre spécifie la\nclé, le second paramètre définit la valeur par défaut lorsque la variable\nn'est pas disponible dans l'environnement.\n\n\n```python\n\nimport os\n\n\ngl_server = os.environ.get('GL_SERVER', 'https://gitlab.com')\n\n\nprint(gl_server)\n\n```\n\n\nLe paramétrage dans le terminal peut se faire directement pour la commande\nuniquement, ou être exporté dans l'environnement shell.\n\n\n```shell\n\n$ GL_SERVER=’https://gitlab.company.com’ python3 script.py\n\n\n$ export GL_SERVER=’https://gitlab.company.com’\n\n$ python3 script.py\n\n```\n\n\nNous recommandons d'ajouter des contrôles de sécurité pour s’assurer que\ntoutes les variables sont définies avant de continuer l'exécution du\nprogramme. L'extrait de code suivant importe les bibliothèques requises, lit\nla variable d'environnement `GL_SERVER`, et attend de l'utilisateur qu'il\ndéfinisse la variable `GL_TOKEN`. Si ce n'est pas le cas, le script affiche\net génère des erreurs, puis appelle `sys.exit(1)`, pour indiquer un statut\nd’erreur. \n\n\n```python\n\nimport gitlab\n\nimport os\n\nimport sys\n\n\nGITLAB_SERVER = os.environ.get('GL_SERVER', 'https://gitlab.com')\n\nGITLAB_TOKEN = os.environ.get('GL_TOKEN')\n\n\nif not GITLAB_TOKEN:\n    print(\"Please set the GL_TOKEN env variable.\")\n    sys.exit(1)\n```\n\n\nExaminons maintenant un exemple plus détaillé, qui crée une connexion à\nl'API et effectue une requête de données.\n\n\n## Gestion des objets : l'objet GitLab\n\n\nToute interaction avec l'API nécessite une instanciation de l'objet GitLab.\nC'est le point d'entrée pour configurer le serveur GitLab auquel se\nconnecter et s'authentifier à l'aide de jetons d'accès, et définir d’autres\nparamètres globaux pour la pagination, le chargement d’objets, et plus\nencore. \n\n\nL'exemple suivant exécute une requête non authentifiée sur GitLab.com. Il\nest possible d'accéder aux points de terminaison d’API publique, et\nd'obtenir par exemple un [modèle .gitignore pour\nPython](https://python-gitlab.readthedocs.io/en/stable/gl_objects/templates.html#gitignore-templates\n\"Modèle .gitignore pour Python\").\n\n\n[python_gitlab_object_unauthenticated.py](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/python_gitlab_object_unauthenticated.py)\n\n\n```python\n\nimport gitlab\n\n\ngl = gitlab.Gitlab()\n\n\n# Get .gitignore templates without authentication\n\ngitignore_templates = gl.gitignores.get('Python')\n\n\nprint(gitignore_templates.content)\n\n```\n\n\nDans les sections suivantes, nous vous partageons des informations\ndétaillées sur : \n\n\n- La gestion et le chargement des objets,\n\n- La pagination des résultats,\n\n- Le travail avec les relations entre objets,\n\n- Le travail avec différents scopes de collection d'objets.\n\n\n### La gestion et le chargement des objets\n\n\nLa bibliothèque python-gitlab donne accès aux ressources GitLab en utilisant\nce que l’on appelle des «\n[Gestionnaires](https://python-gitlab.readthedocs.io/en/stable/api-usage.html#managers)\n». Chaque type de gestionnaire implémente des méthodes pour travailler avec\nles ensembles de données (list, get, etc.).\n\n\nLe script ci-dessous montre comment accéder aux sous-groupes, aux projets\ndirects et à tous les projets, y compris les sous-groupes, aux tickets, aux\nepics et aux tâches. Une authentification est nécessaire pour accéder à tous\nles attributs. L'extrait de code utilise donc des variables pour obtenir le\njeton d'authentification, et utilise également la variable `GROUP_ID` pour\nspécifier un groupe principal à partir duquel il faut commencer la\nrecherche.\n\n\n```python\n\n#!/usr/bin/env python\n\n\nimport gitlab\n\nimport os\n\nimport sys\n\n\nGITLAB_SERVER = os.environ.get('GL_SERVER', 'https://gitlab.com')\n\n# https://gitlab.com/gitlab-de/use-cases/\n\nGROUP_ID = os.environ.get('GL_GROUP_ID', 16058698)\n\nGITLAB_TOKEN = os.environ.get('GL_TOKEN')\n\n\nif not GITLAB_TOKEN:\n    print(\"Please set the GL_TOKEN env variable.\")\n    sys.exit(1)\n\ngl = gitlab.Gitlab(GITLAB_SERVER, private_token=GITLAB_TOKEN)\n\n\n# Main\n\nmain_group = gl.groups.get(GROUP_ID)\n\n\nprint(\"Sub groups\")\n\nfor sg in main_group.subgroups.list():\n    print(\"Subgroup name: {sg}\".format(sg=sg.name))\n\nprint(\"Projects (direct)\")\n\nfor p in main_group.projects.list():\n    print(\"Project name: {p}\".format(p=p.name))\n\nprint(\"Projects (including subgroups)\")\n\nfor p in main_group.projects.list(include_subgroups=True, all=True):\n     print(\"Project name: {p}\".format(p=p.name))\n\nprint(\"Issues\")\n\nfor i in main_group.issues.list(state='opened'):\n    print(\"Issue title: {t}\".format(t=i.title))\n\nprint(\"Epics\")\n\nfor e in main_group.issues.list():\n    print(\"Epic title: {t}\".format(t=e.title))\n\nprint(\"Todos\")\n\nfor t in gl.todos.list(state='pending'):\n    print(\"Todo: {t} url: {u}\".format(t=t.body, u=t.target_url\n```\n\n\nVous pouvez exécuter le script `python_gitlab_object_manager_methods.py` en\nremplaçant la variable `GROUP_ID` sur GitLab.com SaaS pour analyser votre\npropre groupe. Vous devez spécifier la variable `GL_SERVER` pour les\ninstances auto-gérées. `GL_TOKEN` doit fournir le jeton d'accès personnel.\n\n\n```shell\n\nexport GL_TOKEN=xxx\n\n\nexport GL_SERVER=”https://gitlab.company.com”\n\n\nexport GL_SERVER=”https://gitlab.com”\n\n\nexport GL_GROUP_ID=1234\n\n\npython3 python_gitlab_object_manager_methods.py\n\n```\n\n\nÀ partir de maintenant, les exemples n'affichent plus les en-têtes Python et\nl'analyse des variables d'environnement, afin de se concentrer sur\nl'algorithme et les fonctionnalités. Tous les scripts sont open source sous\nlicence MIT, et sont disponibles dans [ce\nprojet](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python).\n\n\n### La pagination des résultats\n\n\nPar défaut, l’API GitLab ne renvoie pas tous les ensembles de résultats et\nexige que les clients utilisent la\n[pagination](https://docs.gitlab.com/ee/api/rest/index.html#pagination\n\"Pagination GitLab\") pour parcourir toutes les pages de résultats. La\nbibliothèque python-gitlab permet aux utilisateurs de [définir les\nparamètres](https://python-gitlab.readthedocs.io/en/stable/api-usage.html#pagination)\nglobalement dans l'objet GitLab, ou sur chaque appel `list()`. Cela permet\nd'éviter que tous les ensembles de résultats déclenchent des requêtes API,\nce qui peut ralentir l'exécution du script. Utilisez `iterator=True`, et les\nappels d'API sont déclenchés à la demande lors de l'accès à l'objet.\n\n\nL'exemple suivant recherche le nom de groupe `everyonecancontribute` et\nutilise la pagination du jeu de clés pour afficher 100 résultats sur chaque\npage. L'itérateur est défini sur true dans `gl.groups.list(iterator=True)`\npour récupérer de nouveaux ensembles de résultats à la demande. Si le nom du\ngroupe recherché est trouvé, la boucle s'interrompt et affiche un résumé,\nincluant la mesure de la durée totale de la requête de recherche.\n\n\n```python\n\nSEARCH_GROUP_NAME=\"everyonecancontribute\"\n\n\n# Use keyset pagination\n\n# https://python-gitlab.readthedocs.io/en/stable/api-usage.html#pagination\n\ngl = gitlab.Gitlab(GITLAB_SERVER, private_token=GITLAB_TOKEN,\n    pagination=\"keyset\", order_by=\"id\", per_page=100)\n\n# Iterate over the list, and fire new API calls in case the result set does\nnot match yet\n\ngroups = gl.groups.list(iterator=True)\n\n\nfound_page = 0\n\nstart = timer()\n\n\nfor group in groups:\n    if SEARCH_GROUP_NAME == group.name:\n        # print(group) # debug\n        found_page = groups.current_page\n        break\n\nend = timer()\n\n\nduration = f'{end-start:.2f}'\n\n\nif found_page > 0:\n    print(\"Pagination API example for Python with GitLab{desc} - found group {g} on page {p}, duration {d}s\".format(\n        desc=\", the DevSecOps platform\", g=SEARCH_GROUP_NAME, p=found_page, d=duration))\nelse:\n    print(\"Could not find group name '{g}', duration {d}\".format(g=SEARCH_GROUP_NAME, d=duration))\n```\n\nL'exécution de `python_gitlab_pagination.py` a permis de trouver le groupe\n[everyonecancontribute](https://gitlab.com/everyonecancontribute) à la page\n5.\n\n\n```shell\n\n$ python3 python_gitlab_pagination.py\n\nPagination API example for Python with GitLab, the DevSecOps platform -\nfound group everyonecancontribute on page 5, duration 8.51s\n\n```\n\n\n### Le travail avec les relations entre objets\n\n\nLorsque vous travaillez avec des relations entre objets, par exemple pour\ncollecter tous les projets dans un groupe donné, vous devez envisager des\nétapes supplémentaires. Par défaut, les objets de projet renvoyés présentent\ndes attributs limités. Les objets gérables nécessitent un appel\nsupplémentaire `get()` pour obtenir l'objet de projet complet de l'API en\narrière-plan. Ce workflow permet de réduire les temps d’attente et le trafic\nen limitant les attributs immédiatement renvoyés.\n\n\nL'exemple suivant illustre le problème en parcourant tous les projets d'un\ngroupe et en essayant d'appeler la fonction `project.branches.list()`. Cela\ngénère une exception dans le flux try/except. Le deuxième exemple obtient un\nobjet de projet gérable et tente à nouveau d'appeler la fonction.\n\n\n```python\n\n# Main\n\ngroup = gl.groups.get(GROUP_ID)\n\n\n# Collect all projects in group and subgroups\n\nprojects = group.projects.list(include_subgroups=True, all=True)\n\n\nfor project in projects:\n    # Try running a method on a weak object\n    try:\n       print(\"🤔 Project: {pn} 💡 Branches: {b}\\n\".format(\n        pn=project.name,\n        b=\", \".join([x.name for x in project.branches.list()])))\n    except Exception as e:\n        print(\"Got exception: {e} \\n ===================================== \\n\".format(e=e))\n\n    # Retrieve a full manageable project object\n    # https://python-gitlab.readthedocs.io/en/stable/gl_objects/groups.html#examples\n    manageable_project = gl.projects.get(project.id)\n\n    # Print a method available on a manageable object\n    print(\"🤔 Project: {pn} 💡 Branches: {b}\\n\".format(\n        pn=manageable_project.name,\n        b=\", \".join([x.name for x in manageable_project.branches.list()])))\n```\n\n\nLe gestionnaire d'exceptions dans la bibliothèque python-gitlab affiche le\nmessage d'erreur et renvoie à la documentation. Pour le débogage, notez que\nles objets peuvent ne pas être disponibles pour la gestion lorsque vous ne\npouvez pas accéder aux attributs de l'objet ou aux appels de fonction.\n\n\n```shell\n\n$ python3 python_gitlab_manageable_objects.py\n\n\n🤔 Project: GitLab API Playground 💡 Branches: cicd-demo-automated-comments,\ndocs-mr-approval-settings, main\n\n\nGot exception: 'GroupProject' object has no attribute 'branches'\n\n\n\u003Cclass 'gitlab.v4.objects.projects.GroupProject'> was created via a\n\nlist() call and only a subset of the data may be present. To ensure\n\nall data is present get the object using a get(object.id) call. For\n\nmore details, see:\n\n\nhttps://python-gitlab.readthedocs.io/en/v3.8.1/faq.html#attribute-error-list\n =====================================\n```\n\n\n[Consultez le script\ncomplet](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/python_gitlab_manageable_objects.py).\n\n\n### Le travail avec différents scopes de collection d'objets\n\n\nParfois, le script doit collecter tous les projets d'une instance\nauto-gérée, d'un groupe avec des sous-groupes, ou d'un projet unique. Ce\ndernier cas est utile pour accélérer les tests sur les attributs requis, et\nla récupération du groupe facilite les tests à grande échelle par la suite.\nL'extrait de code suivant collecte tous les objets de projet dans la liste\n`projects` et y ajoute les objets provenant des différentes configurations\nentrantes. Vous retrouverez également à nouveau le modèle d'objet gérable\npour le projet dans les groupes.\n\n\n```python\n    # Collect all projects, or prefer projects from a group id, or a project id\n    projects = []\n\n    # Direct project ID\n    if PROJECT_ID:\n        projects.append(gl.projects.get(PROJECT_ID))\n\n    # Groups and projects inside\n    elif GROUP_ID:\n        group = gl.groups.get(GROUP_ID)\n\n        for project in group.projects.list(include_subgroups=True, all=True):\n            # https://python-gitlab.readthedocs.io/en/stable/gl_objects/groups.html#examples\n            manageable_project = gl.projects.get(project.id)\n            projects.append(manageable_project)\n\n    # All projects on the instance (may take a while to process)\n    else:\n        projects = gl.projects.list(get_all=True)\n```\n\n\nL'exemple complet se trouve dans [ce\nscript](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/get_mr_approval_rules.py)\npour lister les paramètres des règles d'approbation des merge requests pour\nles cibles de projet spécifiées.\n\n\n## Utilisation de l’approche DevSecOps pour les actions de lecture API\n\n\nLe jeton d'accès authentifié nécessite un scope `read_api`.\n\n\nLes cas d’utilisation suivants seront abordés :\n\n- Lister les branches par état de fusion,\n\n- Afficher les paramètres du projet pour révision : règles d'approbation des\nmerge requests,\n\n- Inventaire : obtenir toutes les variables CI/CD protégées ou masquées,\n\n- Télécharger un fichier depuis le dépôt,\n\n- Aide à la migration : lister tous les clusters Kubernetes basés sur des\ncertificats,\n\n- Productivité des équipes : vérifier si les merge requests existantes\nnécessitent un rebase après avoir fusionné une merge request de\nrefactorisation majeure.  \n\n\n### Lister les branches par état de fusion \n\n\nPour nettoyer un projet\n[Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce\nque Git ?\"), il est courant d'évaluer le nombre de branches fusionnées et\nnon fusionnées. En réponse à une [question sur le forum de la communauté\nGitLab](https://forum.gitlab.com/t/python-gitlab-project-branch-list-filter/80257)\nconcernant le filtrage des listes de branches, j'ai écrit un\n[script](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/tree/main)\naidant à cela. La méthode `branches.list()` renvoie tous les objets de\nbranche stockés dans une liste temporaire, pour un traitement ultérieur en\ndeux boucles : la collecte des noms de branches fusionnées, et celle des\nnoms de branches non fusionnées. L'attribut `merged` sur l'objet `branch`\nest une valeur booléenne qui indique si la branche a été fusionnée ou non.\n\n\n```python\n\nproject = gl.projects.get(PROJECT_ID, lazy=False, pagination=\"keyset\",\norder_by=\"updated_at\", per_page=100)\n\n\n# Get all branches\n\nreal_branches = []\n\nfor branch in project.branches.list():\n    real_branches.append(branch)\n\nprint(\"All branches\")\n\nfor rb in real_branches:\n    print(\"Branch: {b}\".format(b=rb.name))\n\n# Get all merged branches\n\nmerged_branches_names = []\n\nfor branch in real_branches:\n    if branch.default:\n        continue # ignore the default branch for merge status\n\n    if branch.merged:\n        merged_branches_names.append(branch.name)\n\nprint(\"Branches merged: {b}\".format(b=\", \".join(merged_branches_names)))\n\n\n# Get un-merged branches\n\nnot_merged_branches_names = []\n\nfor branch in real_branches:\n    if branch.default:\n        continue # ignore the default branch for merge status\n\n    if not branch.merged:\n        not_merged_branches_names.append(branch.name)\n\nprint(\"Branches not merged: {b}\".format(b=\",\n\".join(not_merged_branches_names)))\n\n```\n\n\nLe workflow est destiné à être lu étape par étape. Vous pouvez vous\nentraîner à optimiser le code Python pour la collecte conditionnelle des\nnoms de branches.\n\n\n### Afficher les paramètres du projet pour examen : règles d'approbation des\nmerge requests\n\n\nLe\n[script](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/get_mr_approval_rules.py)\nsuivant parcourt tous les objets de projet collectés et vérifie si des\nrègles d'approbation sont spécifiées. Si la longueur de la liste est\nsupérieure à zéro, il parcourt la liste en boucle et affiche les paramètres\navec la méthode JSON pretty print.\n\n\n```python\n    # Loop over projects and print the settings\n    # https://python-gitlab.readthedocs.io/en/stable/gl_objects/merge_request_approvals.html\n    for project in projects:\n        if len(project.approvalrules.list()) > 0:\n            #print(project) #debug\n            print(\"# Project: {name}, ID: {id}\\n\\n\".format(name=project.name_with_namespace, id=project.id))\n            print(\"[MR Approval settings]({url}/-/settings/merge_requests)\\n\\n\".format(url=project.web_url))\n\n            for ar in project.approvalrules.list():\n                print(\"## Approval rule: {name}, ID: {id}\".format(name=ar.name, id=ar.id))\n                print(\"\\n```json\\n\")\n                print(json.dumps(ar.attributes, indent=2)) # TODO: can be more beautiful, but serves its purpose with pretty print JSON\n                print(\"\\n```\\n\")\n\n```\n\n\n### Inventaire : obtenir toutes les variables CI/CD protégées ou masquées\n\n\nLes [variables CI/CD](https://docs.gitlab.com/ee/ci/variables/ \"Variables\nCI/CD\") sont utiles au paramétrage des pipelines et peuvent être configurées\nglobalement sur l'instance, dans les groupes et dans les projets. Nous\npouvons aussi y stocker des informations confidentielles, des mots de passe\nou encore des secrets. Il peut parfois être nécessaire d’avoir une vue\nd'ensemble de toutes les variables CI/CD protégées ou masquées pour estimer\nle nombre de variables à actualiser, lors de la rotation des jetons par\nexemple.\n\n\nLe\n[script](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/get_all_cicd_variables_masked_or_protected.py)\nsuivant récupère tous les groupes et projets, puis tente de collecter les\nvariables CI/CD de l'instance globale (cela nécessite des autorisations\nd'administrateur), des groupes et des projets (cela nécessite des\nautorisations de chargé de maintenance/propriétaire). Il affiche toutes les\nvariables CI/CD qui sont soit protégées, soit masquées, en précisant qu'une\nvaleur potentiellement secrète y est stockée.\n\n\n```python\n\n#!/usr/bin/env python\n\n\nimport gitlab\n\nimport os\n\nimport sys\n\n\n# Helper function to evaluate secrets and print the variables\n\ndef eval_print_var(var):\n    if var.protected or var.masked:\n        print(\"🛡️🛡️🛡️ Potential secret: Variable '{name}', protected {p}, masked: {m}\".format(name=var.key,p=var.protected,m=var.masked))\n\nGITLAB_SERVER = os.environ.get('GL_SERVER', 'https://gitlab.com')\n\nGITLAB_TOKEN = os.environ.get('GL_TOKEN') # token requires maintainer+\npermissions. Instance variables require admin access.\n\nPROJECT_ID = os.environ.get('GL_PROJECT_ID') #optional\n\nGROUP_ID = os.environ.get('GL_GROUP_ID', 8034603) #\nhttps://gitlab.com/everyonecancontribute\n\n\nif not GITLAB_TOKEN:\n    print(\"🤔 Please set the GL_TOKEN env variable.\")\n    sys.exit(1)\n\ngl = gitlab.Gitlab(GITLAB_SERVER, private_token=GITLAB_TOKEN)\n\n\n# Collect all projects, or prefer projects from a group id, or a project id\n\nprojects = []\n\n# Collect all groups, or prefer group from a group id\n\ngroups = []\n\n\n# Direct project ID\n\nif PROJECT_ID:\n    projects.append(gl.projects.get(PROJECT_ID))\n\n# Groups and projects inside\n\nelif GROUP_ID:\n    group = gl.groups.get(GROUP_ID)\n\n    for project in group.projects.list(include_subgroups=True, all=True):\n        # https://python-gitlab.readthedocs.io/en/stable/gl_objects/groups.html#examples\n        manageable_project = gl.projects.get(project.id)\n        projects.append(manageable_project)\n\n    groups.append(group)\n\n# All projects/groups on the instance (may take a while to process, use\niterators to fetch on-demand).\n\nelse:\n    projects = gl.projects.list(iterator=True)\n    groups = gl.groups.list(iterator=True)\n\nprint(\"# List of all CI/CD variables marked as secret (instance, groups,\nprojects)\")\n\n\n# https://python-gitlab.readthedocs.io/en/stable/gl_objects/variables.html\n\n\n# Instance variables (if the token has permissions)\n\nprint(\"Instance variables, if accessible\")\n\ntry:\n    for i_var in gl.variables.list(iterator=True):\n        eval_print_var(i_var)\nexcept:\n    print(\"No permission to fetch global instance variables, continueing without.\")\n    print(\"\\n\")\n\n# group variables (maintainer permissions for groups required)\n\nfor group in groups:\n    print(\"Group {n}, URL: {u}\".format(n=group.full_path, u=group.web_url))\n    for g_var in group.variables.list(iterator=True):\n        eval_print_var(g_var)\n\n    print(\"\\n\")\n\n# Loop over projects and print the settings\n\nfor project in projects:\n    # skip archived projects, they throw 403 errors\n    if project.archived:\n        continue\n\n    print(\"Project {n}, URL: {u}\".format(n=project.path_with_namespace, u=project.web_url))\n    for p_var in project.variables.list(iterator=True):\n        eval_print_var(p_var)\n\n    print(\"\\n\")\n```\n\n\nLe script n’affiche pas les valeurs des variables, cela étant réservé comme\nexercice pour les environnements sécurisés. Pour stocker des secrets, faites\nplutôt appel à des [fournisseurs\nexternes](https://docs.gitlab.com/ee/ci/secrets/).\n\n\n### Télécharger un fichier depuis le dépôt\n\n\nL'objectif de ce\n[script](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/get_raw_file_content.py)\nest de télécharger un fichier à partir d’un chemin spécifié dans une branche\ndonnée, et de stocker son contenu dans un nouveau fichier.\n\n\n```python\n\n# Goal: Try to download README.md from\nhttps://gitlab.com/gitlab-de/use-cases/gitlab-api/gitlab-api-python/-/blob/main/README.md\n\nFILE_NAME = 'README.md'\n\nBRANCH_NAME = 'main'\n\n\n# Search the file in the repository tree and get the raw blob\n\nfor f in project.repository_tree():\n    print(\"File path '{name}' with id '{id}'\".format(name=f['name'], id=f['id']))\n\n    if f['name'] == FILE_NAME:\n        f_content = project.repository_raw_blob(f['id'])\n        print(f_content)\n\n# Alternative approach: Get the raw file from the main branch\n\nraw_content = project.files.raw(file_path=FILE_NAME, ref=BRANCH_NAME)\n\nprint(raw_content)\n\n\n# Store the file on disk\n\nwith open('raw_README.md', 'wb') as f:\n    project.files.raw(file_path=FILE_NAME, ref=BRANCH_NAME, streamed=True, action=f.write)\n```\n\n\n### Aide à la migration : lister tous les clusters Kubernetes basés sur des\ncertificats\n\n\nL'intégration des clusters\n[Kubernetes](https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/\n\"Qu'est-ce que Kubernetes ?\") basée sur des certificats dans GitLab [a été\ndépréciée](https://docs.gitlab.com/ee/update/deprecations.html#self-managed-certificate-based-integration-with-kubernetes).\nPour faciliter les plans de migration, l'inventaire des groupes et projets\nexistants peut être automatisé à l'aide de l'API GitLab.\n\n\n```python\n\ngroups = [ ]\n\n\n# get GROUP_ID group\n\ngroups.append(gl.groups.get(GROUP_ID))\n\n\nfor group in groups:\n    for sg in group.subgroups.list(include_subgroups=True, all=True):\n        real_group = gl.groups.get(sg.id)\n        groups.append(real_group)\n\ngroup_clusters = {}\n\nproject_clusters = {}\n\n\nfor group in groups:\n    #Collect group clusters\n    g_clusters = group.clusters.list()\n\n    if len(g_clusters) > 0:\n        group_clusters[group.id] = g_clusters\n\n    # Collect all projects in group and subgroups and their clusters\n    projects = group.projects.list(include_subgroups=True, all=True)\n\n    for project in projects:\n        # https://python-gitlab.readthedocs.io/en/stable/gl_objects/groups.html#examples\n        manageable_project = gl.projects.get(project.id)\n\n        # skip archived projects\n        if project.archived:\n            continue\n\n        p_clusters = manageable_project.clusters.list()\n\n        if len(p_clusters) > 0:\n            project_clusters[project.id] = p_clusters\n\n# Print summary\n\nprint(\"## Group clusters\\n\\n\")\n\nfor g_id, g_clusters in group_clusters.items():\n    url = gl.groups.get(g_id).web_url\n    print(\"Group ID {g_id}: {u}\\n\\n\".format(g_id=g_id, u=url))\n    print_clusters(g_clusters)\n\nprint(\"## Project clusters\\n\\n\")\n\nfor p_id, p_clusters in project_clusters.items():\n    url = gl.projects.get(p_id).web_url\n    print(\"Project ID {p_id}: {u}\\n\\n\".format(p_id=p_id, u=url))\n    print_clusters(p_clusters)\n```\n\n\n[Consultez le script\ncomplet](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/list_cert_based_kubernetes_clusters.py).\n\n\n### Productivité des équipes : vérifier si les merge requests existantes\nnécessitent un rebase après avoir fusionné une merge request de\nrefactorisation majeure\n\n\nLe dépôt du [manuel GitLab](https://about.gitlab.com/handbook/ \"Manuel de\nGitLab\") est un large monorepo qui contient de nombreuses merge requests\ncréées, examinées, approuvées et fusionnées. Certaines revues prennent plus\nde temps que d'autres, et certaines merge requests impactent plusieurs\npages, lorsqu'il s'agit par exemple de renommer une chaîne de caractères ou\n[toutes les pages du\nmanuel](https://about.gitlab.com/handbook/about/#count-handbook-pages). Le\nmanuel Marketing avait besoin d’une restructuration (pensez à une\nrefactorisation du code), et de nombreux répertoires et chemins d'accès ont\nété déplacés ou renommés. \n\n\nLes [tâches liées aux\ntickets](https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/13991#tasks)\nont augmenté au fil du temps, et nous craignons que des conflits sur\nd'autres merge requests apparaissent après avoir fusionné des changements\nimportants. Avec python-gitlab vous pouvez récupérer toutes les merge\nrequests dans un projet donné, y compris les détails sur la branche Git, sur\nles chemins sources modifiés, et bien plus encore.\n\n\nLe script résultant configure une liste des sources touchées par toutes les\nmerge requests, vérifie si la merge request diffère avec `mr.diffs.list()`,\net si un modèle correspond à la valeur dans `old_path`. Si une\ncorrespondance est trouvée, le script l'enregistre et sauvegarde la merge\nrequest dans le dictionnaire `seen_mr`, pour un résumé ultérieur. Des\nattributs supplémentaires sont collectés pour afficher une liste de tâches\nen Markdown contenant des URL, afin de faciliter le copier-coller dans les\n[descriptions des\ntickets](https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/13991#additional-tasks).\n[Consultez le script\ncomplet](https://gitlab.com/gitlab-da/use-cases/gitlab-api/gitlab-api-python/-/blob/main/search_mr_contains_updated_path.py).\n\n\n```python\n\nPATH_PATTERNS = [\n    'path/to/handbook/source/page.md',\n]\n\n\n# Only list opened MRs\n\n#\nhttps://python-gitlab.readthedocs.io/en/stable/gl_objects/merge_requests.html#project-merge-requests\n\nmrs = project.mergerequests.list(state='opened', iterator=True)\n\n\nseen_mr = {}\n\n\nfor mr in mrs:\n    # https://docs.gitlab.com/ee/api/merge_requests.html#list-merge-request-diffs\n    real_mr = project.mergerequests.get(mr.get_id())\n    real_mr_id = real_mr.attributes['iid']\n    real_mr_url = real_mr.attributes['web_url']\n\n    for diff in real_mr.diffs.list(iterator=True):\n        real_diff = real_mr.diffs.get(diff.id)\n\n        for d in real_diff.attributes['diffs']:\n            for p in PATH_PATTERNS:\n                if p in d['old_path']:\n                    print(\"MATCH: {p} in MR {mr_id}, status '{s}', title '{t}' - URL: {mr_url}\".format(\n                        p=p,\n                        mr_id=real_mr_id,\n                        s=mr_status,\n                        t=real_mr.attributes['title'],\n                        mr_url=real_mr_url))\n\n                    if not real_mr_id in seen_mr:\n                        seen_mr[real_mr_id] = real_mr\n\nprint(\"\\n# MRs to update\\n\")\n\n\nfor id, real_mr in seen_mr.items():\n    print(\"- [ ] !{mr_id} - {mr_url}+ Status: {s}, Title: {t}\".format(\n        mr_id=id,\n        mr_url=real_mr.attributes['web_url'],\n        s=real_mr.attributes['detailed_merge_status'],\n        t=real_mr.attributes['title']))\n```\n\n\n## Cas d’utilisation DevSecOps pour les actions d'écriture de l’API\n\n\nLe jeton d'accès authentifié nécessite une [portée d’autorisation complète\nde\nl’API](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#personal-access-token-scopes). \n\n\nLes cas d’utilisation suivants sont abordés :\n\n- Déplacer des epics d’un groupe à l’autre,\n\n- Conformité : vérifier que les paramètres du projet ne sont pas remplacés,\n\n- Prendre des notes, générer un aperçu de la date d'échéance,\n\n\n### Déplacer des epics d’un groupe à l’autre\n\n\nVous devez parfois déplacer des epics dans un autre groupe. Une question\nposée dans le Slack de GitLab nous a incité à examiner une [proposition de\nfonctionnalité pour l'interface\nutilisateur](https://gitlab.com/gitlab-org/gitlab/-/issues/12689), pour plus\ntard écrire un script API permettant d'automatiser ces étapes. L'idée\nconsiste à déplacer une epic d'un groupe source vers un groupe cible, et de\ncopier son titre, sa description et ses labels. Puisque les epics permettent\nde regrouper les tickets, elles doivent également être réaffectées à l'epic\ncible. Il faut aussi prendre en compte les relations parent-enfant des\nepics, toutes les epics enfants des epics sources devant être réaffectées à\nl'epic cible.\n\n\nLe script suivant recherche d'abord tous les attributs de l'epic source,\npuis crée une nouvelle epic cible avec des attributs minimaux : titre et\ndescription. La liste des labels est copiée et les modifications sont\nconservées grâce à l'appel `save()`. Les tickets attribués à l'epic doivent\nêtre recréés dans l'epic cible. L'appel `create()` crée l'élément de\nrelation, et non un nouvel objet de ticket en tant que tel. Le déplacement\ndes epics enfants nécessite une approche différente, car la relation est\ninversée : le `parent_id` de l'epic enfant doit être comparé à l'identifiant\nde l'epic source et, s'il correspond, mis à jour vers l'identifiant de\nl'epic cible. Après avoir tout copié avec succès, l'epic source doit être\npassée à l'état `closed`.\n\n\n```python\n\n#!/usr/bin/env python\n\n\n# Description: Show how epics can be moved between groups, including title,\ndescription, labels, child epics and issues.\n\n# Requirements: python-gitlab Python libraries. GitLab API write access, and\nmaintainer access to all configured groups/projects.\n\n# Author: Michael Friedrich \u003Cmfriedrich@gitlab.com>\n\n# License: MIT, (c) 2023-present GitLab B.V.\n\n\nimport gitlab\n\nimport os\n\nimport sys\n\n\nGITLAB_SERVER = os.environ.get('GL_SERVER', 'https://gitlab.com')\n\n# https://gitlab.com/gitlab-da/use-cases/gitlab-api\n\nSOURCE_GROUP_ID = os.environ.get('GL_SOURCE_GROUP_ID', 62378643)\n\n# https://gitlab.com/gitlab-da/use-cases/gitlab-api/epic-move-target\n\nTARGET_GROUP_ID = os.environ.get('GL_TARGET_GROUP_ID', 62742177)\n\n# https://gitlab.com/groups/gitlab-da/use-cases/gitlab-api/-/epics/1\n\nEPIC_ID = os.environ.get('GL_EPIC_ID', 1)\n\nGITLAB_TOKEN = os.environ.get('GL_TOKEN')\n\n\nif not GITLAB_TOKEN:\n    print(\"Please set the GL_TOKEN env variable.\")\n    sys.exit(1)\n\ngl = gitlab.Gitlab(GITLAB_SERVER, private_token=GITLAB_TOKEN)\n\n\n# Main\n\n# Goal: Move epic to target group, including title, body, labels, and child\nepics and issues.\n\nsource_group = gl.groups.get(SOURCE_GROUP_ID)\n\ntarget_group = gl.groups.get(TARGET_GROUP_ID)\n\n\n# Create a new target epic and copy all its items, then close the source\nepic.\n\nsource_epic = source_group.epics.get(EPIC_ID)\n\n# print(source_epic) #debug\n\n\nepic_title = source_epic.title\n\nepic_description = source_epic.description\n\nepic_labels = source_epic.labels\n\nepic_issues = source_epic.issues.list()\n\n\n# Create the epic with minimal attributes\n\ntarget_epic = target_group.epics.create({\n    'title': epic_title,\n    'description': epic_description,\n})\n\n\n# Assign the list\n\ntarget_epic.labels = epic_labels\n\n\n# Persist the changes in the new epic\n\ntarget_epic.save()\n\n\n# Epic issues need to be re-assigned in a loop\n\nfor epic_issue in epic_issues:\n    ei = target_epic.issues.create({'issue_id': epic_issue.id})\n\n# Child epics need to update their parent_id to the new epic\n\n# Need to search in all epics, use lazy object loading\n\nfor sge in source_group.epics.list(lazy=True):\n    # this epic has the source epic as parent epic?\n    if sge.parent_id == source_epic.id:\n        # Update the parent id\n        sge.parent_id = target_epic.id\n        sge.save()\n\nprint(\"Copied source epic {source_id} ({source_url}) to target epic\n{target_id} ({target_url})\".format(\n    source_id=source_epic.id, source_url=source_epic.web_url,\n    target_id=target_epic.id, target_url=target_epic.web_url))\n\n# Close the old epic\n\nsource_epic.state_event = 'close'\n\nsource_epic.save()\n\nprint(\"Closed source epic {source_id} ({source_url})\".format(\n    source_id=source_epic.id, source_url=source_epic.web_url))\n```\n\n\n```shell\n\n$  python3 move_epic_between_groups.py\n\nCopied source epic 725341\n(https://gitlab.com/groups/gitlab-da/use-cases/gitlab-api/-/epics/1) to\ntarget epic 725358\n(https://gitlab.com/groups/gitlab-da/use-cases/gitlab-api/epic-move-target/-/epics/6)\n\nClosed source epic 725341\n(https://gitlab.com/groups/gitlab-da/use-cases/gitlab-api/-/epics/1)\n\n```\n\n\nL'[epic\ncible](https://gitlab.com/groups/gitlab-da/use-cases/gitlab-api/epic-move-target/-/epics/5\n\"Epic cible\") a été créée et affiche le résultat attendu : même titre,\ndescription, labels, epic enfant et tickets. \n\n\n![Tutoriel sur l'API GitLab : déplacer des\nepics](https://about.gitlab.com/images/blogimages/efficient-devsecops-workflows-python-gitlab-handson/python_gitlab_moved_epic_with_all_attributes.png){:\n.shadow}\n\n\n__Exercice :__ le script ne copie pas encore les\n[commentaires](https://python-gitlab.readthedocs.io/en/stable/gl_objects/notes.html)\net les [fils de\ndiscussion](https://python-gitlab.readthedocs.io/en/stable/gl_objects/discussions.html).\nFaites des recherches et aidez-nous à mettre à jour le script. Les merge\nrequests sont les bienvenues !\n\n\n### Conformité : vérifier que les paramètres du projet ne sont pas remplacés\n\n\nLes paramètres des projets et des groupes peuvent être modifiés\naccidentellement par des membres de l'équipe. Les exigences de conformité\ndoivent être respectées. Autre cas d’utilisation : gérer la configuration\navec des outils d’[Infrastructure as\nCode](https://about.gitlab.com/fr-fr/topics/gitops/infrastructure-as-code/\n\"Infrastructure as Code\") et s'assurer que la configuration de GitLab reste\nla même au niveau du groupe, du projet et autres. Des outils comme Ansible\nou Terraform peuvent invoquer un script API ou utiliser la bibliothèque\npython-gitlab pour effectuer des tâches de gestion des paramètres.\n\n\nDans l'exemple suivant, seule la branche `main` est protégée.\n\n\n![API python-gitlab : protection des\nbranches](https://about.gitlab.com/images/blogimages/efficient-devsecops-workflows-python-gitlab-handson/python_gitlab_protected_branches_settings_main.png){:\n.shadow}\n\n\nSupposons qu'une nouvelle branche `production` a été ajoutée et qu’elle doit\négalement être protégée. Le script suivant définit le dictionnaire des\nbranches protégées et leurs niveaux d'accès pour les autorisations de push\net de fusion au niveau du chargé de maintenance. Il établit la logique de\ncomparaison de la [documentation python-gitlab sur les branches\nprotégées](https://python-gitlab.readthedocs.io/en/stable/gl_objects/protected_branches.html).\n\n\n```python\n\n#!/usr/bin/env python\n\n\nimport gitlab\n\nimport os\n\nimport sys\n\n\nGITLAB_SERVER = os.environ.get('GL_SERVER', 'https://gitlab.com')\n\n# https://gitlab.com/gitlab-da/use-cases/\n\nGROUP_ID = os.environ.get('GL_GROUP_ID', 16058698)\n\nGITLAB_TOKEN = os.environ.get('GL_TOKEN')\n\n\nPROTECTED_BRANCHES = {\n    'main': {\n        'merge_access_level': gitlab.const.AccessLevel.MAINTAINER,\n        'push_access_level': gitlab.const.AccessLevel.MAINTAINER\n    },\n    'production': {\n        'merge_access_level': gitlab.const.AccessLevel.MAINTAINER,\n        'push_access_level': gitlab.const.AccessLevel.MAINTAINER\n    },\n}\n\n\nif not GITLAB_TOKEN:\n    print(\"Please set the GL_TOKEN env variable.\")\n    sys.exit(1)\n\ngl = gitlab.Gitlab(GITLAB_SERVER, private_token=GITLAB_TOKEN)\n\n\n# Main\n\ngroup = gl.groups.get(GROUP_ID)\n\n\n# Collect all projects in group and subgroups\n\nprojects = group.projects.list(include_subgroups=True, all=True)\n\n\nfor project in projects:\n    # Retrieve a full manageable project object\n    # https://python-gitlab.readthedocs.io/en/stable/gl_objects/groups.html#examples\n    manageable_project = gl.projects.get(project.id)\n\n    # https://python-gitlab.readthedocs.io/en/stable/gl_objects/protected_branches.html\n    protected_branch_names = []\n\n    for pb in manageable_project.protectedbranches.list():\n        manageable_protected_branch = manageable_project.protectedbranches.get(pb.name)\n        print(\"Protected branch name: {n}, merge_access_level: {mal}, push_access_level: {pal}\".format(\n            n=manageable_protected_branch.name,\n            mal=manageable_protected_branch.merge_access_levels,\n            pal=manageable_protected_branch.push_access_levels\n        ))\n\n        protected_branch_names.append(manageable_protected_branch.name)\n\n    for branch_to_protect, levels in PROTECTED_BRANCHES.items():\n        # Fix missing protected branches\n        if branch_to_protect not in protected_branch_names:\n            print(\"Adding branch {n} to protected branches settings\".format(n=branch_to_protect))\n            p_branch = manageable_project.protectedbranches.create({\n                'name': branch_to_protect,\n                'merge_access_level': gitlab.const.AccessLevel.MAINTAINER,\n                'push_access_level': gitlab.const.AccessLevel.MAINTAINER\n            })\n```\n\n\nL'exécution du script affiche la branche `main` existante, ainsi qu’une note\nindiquant que la branche `production` sera mise à jour. La capture d'écran\ndes paramètres du dépôt démontre cette action.\n\n\n```\n\n$ python3\nenforce_protected_branches.py                                               \n─╯\n\nProtected branch name: main, merge_access_level: [{'id': 67294702,\n'access_level': 40, 'access_level_description': 'Maintainers', 'user_id':\nNone, 'group_id': None}], push_access_level: [{'id': 68546039,\n'access_level': 40, 'access_level_description': 'Maintainers', 'user_id':\nNone, 'group_id': None}]\n\nAdding branch production to protected branches settings\n\n```\n\n\n![Capture d'écran de code en Python avec\nGitLab](https://about.gitlab.com/images/blogimages/efficient-devsecops-workflows-python-gitlab-handson/python_gitlab_protected_branches_settings_main_production.png){:\n.shadow}\n\n\n### Prise de notes : générer un aperçu de la date d'échéance\n\n\nUne [discussion de Hacker News sur les outils de prise de\nnotes](https://news.ycombinator.com/item?id=32155848) nous a inspiré la\ncréation d'un tableau Markdown, extrait de fichiers de prise de notes, et\ntrié par date d'échéance. Le script est plus complexe à comprendre.\n","engineering",[234,687,9,688],{"slug":735,"featured":6,"template":692},"efficient-devsecops-workflows-hands-on-python-gitlab-api-automation","content:fr-fr:blog:efficient-devsecops-workflows-hands-on-python-gitlab-api-automation.yml","Efficient Devsecops Workflows Hands On Python Gitlab Api Automation","fr-fr/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation.yml","fr-fr/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation",{"_path":741,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":742,"content":746,"config":754,"_id":756,"_type":14,"title":757,"_source":16,"_file":758,"_stem":759,"_extension":19},"/fr-fr/blog/enhance-application-quality-with-ai-powered-test-generation",{"noIndex":6,"title":743,"ogTitle":743,"description":744,"ogDescription":744,"ogImage":745},"Améliorez votre processus d'assurance qualité avec l’IA","Découvrez comment GitLab Duo combiné à Amazon Q améliore le processus d'assurance qualité en générant automatiquement des tests unitaires complets.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,w_1640,h_1000,c_lfill/v1749659604/Blog/Hero%20Images/Screenshot_2024-11-27_at_4.55.28_PM.png",{"title":747,"description":744,"authors":748,"heroImage":745,"date":750,"body":751,"category":684,"tags":752},"Améliorer la qualité des applications avec la génération de tests alimentée par l'IA",[749],"Cesar Saavedra","2025-07-15","Vous savez à quel point la qualité des applications est essentielle pour vos clients et votre réputation. Cependant, garantir cette qualité avec des tests complets peut s’avérer complexe. Vous êtes confronté à des processus manuels chronophages, une couverture de test incohérente au sein de votre équipe, ou des problèmes qui parviennent à passer à travers les mailles du filet. Il est ainsi frustrant de voir votre notation chuter à cause d’une assurance qualité qui devient un goulot d'étranglement plutôt qu'une protection.\n\nC'est là que [GitLab Duo combiné à Amazon Q](https://about.gitlab.com/fr-fr/blog/gitlab-duo-with-amazon-q-agentic-ai-optimized-for-aws/) peut transformer votre processus d’assurance qualité. Cette fonctionnalité alimentée par l'IA peut générer automatiquement des tests unitaires complets pour votre code, accélérant considérablement votre workflow d'assurance qualité. Au lieu de passer des heures à écrire des tests manuellement, vous pouvez laisser l'IA analyser votre code et créer des tests qui garantissent une couverture optimale et une qualité constante au sein de votre application.\n\n## Comment fonctionne GitLab Duo combiné à Amazon Q ?\n\nLorsque vous travaillez sur une nouvelle fonctionnalité, vous commencez par sélectionner la classe Java que vous avez ajoutée à votre projet via une merge request. Il vous suffit de naviguer vers votre merge request et de cliquer sur l'onglet « Modifier » pour voir le nouveau code que vous avez ajouté.\n\nEnsuite, vous invoquez Amazon Q en saisissant une commande d'action rapide. Tout ce que vous devez faire est de renseigner `/q test` dans la zone de commentaire du ticket. C'est aussi simple que cela : juste une barre oblique, la lettre « q », et le mot « test ».\n\nUne fois que vous avez appuyé sur la touche Entrée, Amazon Q entre en action. Il analyse votre code sélectionné, comprend sa structure, sa logique et son objectif. L'IA examine les méthodes de votre classe, les dépendances, et les cas limites potentiels pour déterminer quels tests sont nécessaires.\n\nEn quelques instants, Amazon Q génère une couverture de tests unitaires complète pour votre nouvelle classe. Il crée des tests qui couvrent non seulement le chemin heureux (« happy path »), mais aussi les cas limites et les conditions d'erreur que vous auriez pu négliger. Les tests générés suivent les modèles et conventions existants de votre projet, garantissant qu'ils s'intègrent parfaitement à votre code source.\n\n## Pourquoi utiliser GitLab Duo combiné à Amazon Q ?\n\nVous avez commencé avec le défi suivant : maintenir des applications de haute qualité tout en gérant les contraintes de temps et les pratiques de test incohérentes. GitLab Duo combiné à Amazon Q répond à ce défi en automatisant le processus de génération de tests, garantissant une couverture de code optimale et des normes de test cohérentes. Résultat ? Les problèmes sont détectés avant le déploiement, vos applications maintiennent leur qualité, et vous pouvez développer des logiciels plus rapidement sans sacrifier la fiabilité.\n\nAvantages clés de cette fonctionnalité :\n\n* Une réduction du temps consacré à l'écriture de tests unitaires\n* Une couverture de tests complète sur l'ensemble de votre code source\n* Une qualité de tests constante pour tous les membres de votre équipe\n* Une détection des problèmes avant qu'ils n'atteignent l’environnement de production\n* Une accélération de votre vitesse de développement\n\nVous souhaitez en savoir plus sur cette fonctionnalité ? Découvrez comment GitLab Duo combiné à Amazon Q transforme votre processus d'assurance qualité et consultez notre [page partenaire GitLab et AWS](https://about.gitlab.com/partners/technology-partners/aws/ \"Page partenaire GitLab et AWS\") pour obtenir des informations détaillées.\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/pxlYJVcHY28?si=MhIz6lnHxc6kFhlL\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n#### En savoir plus sur GitLab Duo combiné à Amazon Q\n\n* [GitLab Duo combiné à Amazon Q : quand le DevSecOps rencontre l’IA agentique](https://about.gitlab.com/fr-fr/blog/gitlab-duo-with-amazon-q-devsecops-meets-agentic-ai/)\n* [GitLab Duo combiné à Amazon Q : l'IA agentique optimisée pour AWS disponible à tous les utilisateurs](https://about.gitlab.com/fr-fr/blog/gitlab-duo-with-amazon-q-agentic-ai-optimized-for-aws/)\n* [GitLab Duo combiné à Amazon Q : créez de nouvelles fonctionnalités en quelques minutes](https://about.gitlab.com/fr-fr/blog/gitlab-duo-amazon-q-transform-ideas-into-code-in-minutes/) \n* [GitLab Duo combiné à Amazon Q : optimisez vos revues de code](https://about.gitlab.com/fr-fr/blog/accelerate-code-reviews-with-gitlab-duo-and-amazon-q/)",[686,753,9],"AWS",{"featured":6,"template":692,"slug":755},"enhance-application-quality-with-ai-powered-test-generation","content:fr-fr:blog:enhance-application-quality-with-ai-powered-test-generation.yml","Enhance Application Quality With Ai Powered Test Generation","fr-fr/blog/enhance-application-quality-with-ai-powered-test-generation.yml","fr-fr/blog/enhance-application-quality-with-ai-powered-test-generation",{"_path":761,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":762,"content":768,"config":777,"_id":779,"_type":14,"title":780,"_source":16,"_file":781,"_stem":782,"_extension":19},"/fr-fr/blog/enhance-application-security-with-gitlab-hackerone",{"title":763,"description":764,"ogTitle":763,"ogDescription":764,"noIndex":6,"ogImage":765,"ogUrl":766,"ogSiteName":674,"ogType":675,"canonicalUrls":766,"schema":767},"GitLab + HackerOne : pour une sécurité applicative renforcée","Découvrez le partenariat entre GitLab et HackerOne et comment cette intégration peut vous aider à renforcer la sécurité de vos applications.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097503/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2810%29_5ET24Q6i8ihqrAOkge7a1R_1750097503214.png","https://about.gitlab.com/blog/enhance-application-security-with-gitlab-hackerone","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab + HackerOne : pour une sécurité applicative renforcée\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fernando Diaz\"}],\n        \"datePublished\": \"2025-04-03\",\n      }",{"title":763,"description":764,"authors":769,"heroImage":765,"date":771,"body":772,"category":773,"tags":774,"updatedDate":776},[770],"Fernando Diaz","2025-04-03","La sécurité doit désormais être intégrée dès le début du processus de développement. Les entreprises ont besoin de solutions robustes qui intègrent la sécurité à chaque étape du cycle de développement logiciel. Le partenariat entre HackerOne et GitLab offre une combinaison gagnante pour les équipes de développement d'applications modernes.\n\nGitLab, la plateforme [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que l'approche DevSecOps ? \") complète et alimentée par l'IA, s'associe à HackerOne, leader de la sécurité collaborative, pour combiner le meilleur des deux univers : les workflows DevSecOps rationalisés de GitLab et les puissantes capacités de gestion des vulnérabilités de HackerOne.\n\nDécouvrez dans ce tutoriel comment améliorer la productivité de vos équipes de développement et renforcer votre posture de sécurité grâce à l'intégration de GitLab à HackerOne.\n\n## Une intégration pensée pour les développeurs\n\nL'intégration de GitLab à la plateforme de cybersécurité HackerOne est aussi simple à mettre en œuvre que puissante. Lorsqu'un chercheur en cybersécurité détecte une vulnérabilité via la plateforme HackerOne, celle-ci est automatiquement convertie en un ticket GitLab. \n\nCe workflow permet de :\n\n* détecter les vulnérabilités sur la plateforme HackerOne\n* créer automatiquement des tickets GitLab à partir des vulnérabilités validées\n* permettre aux équipes de développement de traiter ces tickets directement dans leur workflow existant\n* synchroniser le statut de résolution de ces vulnérabilités entre les deux plateformes\n\nVous pouvez tirer parti de cette [intégration](https://docs.hackerone.com/en/articles/8571227-gitlab-integration) en liant les tickets GitLab aux rapports HackerOne comme références. Cette synchronisation bidirectionnelle et fluide des données entre vos rapports HackerOne et les tickets GitLab améliore ainsi la coordination entre les équipes de développement et de sécurité tout en rationalisant le traitement des failles de sécurité.\n\nPour configurer cette intégration, référez-vous aux instructions détaillées de la [documentation HackerOne dédiée à l'intégration GitLab](https://docs.hackerone.com/en/articles/10394699-gitlab-setup), dont voici les principales étapes :\n\n1. [Créez une application OAuth 2.0](https://docs.gitlab.com/ee/integration/oauth_provider.html) pour votre instance GitLab à l'aide des paramètres fournis par HackerOne\n2. Connectez la plateforme HackerOne à votre instance GitLab en utilisant cette application OAuth 2.0\n3. Autorisez HackerOne à accéder à l'API GitLab\n4. Configurez le projet GitLab vers lequel vous souhaitez transférer les rapports HackerOne \n5. Sélectionnez les champs HackerOne à mapper aux champs GitLab correspondants\n6. Définissez les événements à synchroniser, de GitLab vers HackerOne et de HackerOne vers GitLab\n\nUne fois l'intégration mise en place, la synchronisation bidirectionnelle des données entre GitLab et HackerOne devient fluide, réduisant les changements de contexte et facilitant le suivi des vulnérabilités sur les deux systèmes. \n\nLes principales fonctionnalités de cette intégration sont les suivantes :\n\n* **Création de tickets GitLab depuis HackerOne** : créez de nouveaux tickets GitLab à partir des rapports que vous recevez dans HackerOne.\n* **Connexion des rapports HackerOne aux tâches GitLab existantes.**   \n* **Synchronisation des mises à jour apportées aux rapports HackerOne vers GitLab** : les informations suivantes sont envoyées sous forme de commentaires dans le ticket GitLab correspondant.\n  * Commentaires du rapport  \n  * Changements d'état  \n  * Récompenses  \n  * Changements d'assignation  \n  * Divulgation publique  \n  * Fermeture du ticket GitLab  \n* **Synchronisation des mises à jour de GitLab vers HackerOne** : lorsque certaines actions sont effectuées dans un ticket GitLab, ces mises à jour sont reprises automatiquement dans le rapport correspondant sur HackerOne, sous forme de commentaire interne :\n  * Commentaires  \n  * Changements d'état  \n* **Mappage des niveaux de gravité HackerOne avec les labels GitLab** : définissez une priorité personnalisée lorsque vous transférez un rapport HackerOne vers GitLab.  \n* **Mappage des dates d'échéance** : définissez automatiquement une date d'échéance personnalisée dans GitLab en fonction du niveau de gravité du rapport HackerOne.\n\n![GitLab + HackerOne : Ajouter des commentaires ou modifier l'état du rapport dans GitLab](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097510/Blog/Content%20Images/Blog/Content%20Images/sync_aHR0cHM6_1750097509644.png)\n\nCes fonctionnalités renforcent la coordination entre les équipes de développement et de sécurité et rationalisent le traitement des failles de sécurité. Pour en savoir plus sur le fonctionnement de l'intégration, consultez la [documentation](https://docs.hackerone.com/en/articles/8571227-gitlab-integration) fournie par HackerOne.\n\n## Aperçu des programmes de bug bounty de HackerOne\n\nHackerOne propose des programmes de bug bounty, c'est-à-dire des initiatives en matière de cybersécurité qui récompensent la découverte et le signalement de vulnérabilités dans les systèmes logiciels, les sites web ou les applications de ses clients. Ces programmes contribuent à renforcer la sécurité des applications en :\n\n* identifiant les failles de sécurité avant que des acteurs malveillants ne puissent les exploiter\n* tirant parti de l'expertise diversifiée d'une communauté mondiale de chercheurs en cybersécurité\n* offrant un moyen rentable d'améliorer la cybersécurité\n* complétant les efforts de sécurité internes et les tests de pénétration traditionnels\n\nGitLab s'appuie sur le programme de bug bounty de HackerOne pour permettre aux chercheurs en cybersécurité de signaler les vulnérabilités présentes dans ses applications ou son infrastructure. Cette approche collaborative aide GitLab à identifier et à résoudre plus efficacement les potentielles failles de sécurité.\n\n![Page du programme de bug bounty de GitLab de HackerOne](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097510/Blog/Content%20Images/Blog/Content%20Images/hackerone_gitlab_bug_bounty_page_aHR0cHM6_1750097509645.png)\n\nEn tirant parti de la plateforme HackerOne et de la communauté mondiale de hackers éthiques, les entreprises peuvent considérablement renforcer leur posture de sécurité, identifier plus rapidement les vulnérabilités et garder une longueur d'avance sur les menaces potentielles.\n\n## Sécurisez vos applications et améliorez votre productivité avec GitLab\n\nGitLab offre une plateforme DevSecOps complète, qui intègre des fonctionnalités couvrant l'ensemble du cycle de développement logiciel, y compris des outils de [sécurité et de conformité](https://about.gitlab.com/fr-fr/solutions/security-compliance/ \"Sécurité et conformité GitLab\"). GitLab prend en charge les types de scanners de sécurité suivants :\n- Tests statiques de sécurité des applications (SAST)\n- Tests dynamiques de sécurité des applications (DAST)\n- Analyse des conteneurs\n- Analyse des dépendances\n- Analyse de l'Infrastructure as Code (IaC)\n- Fuzzing guidé par la couverture de code\n- Test de l’API web par injection de données aléatoires\n\nAvec GitLab, vous pouvez simplement appliquer un template à votre fichier de définition de [pipeline CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\") pour activer un scanning de sécurité. Par exemple, l'activation de SAST ne nécessite que quelques lignes de code dans le fichier `.gitlab-ci.yml` :\n\n```yaml\nstage:\n  - test\n\ninclude:\n  - template: Jobs/SAST.gitlab-ci.yml\n```\n\nCela exécutera SAST à l'étape de test et [détectera automatiquement les langages utilisés](https://docs.gitlab.com/ee/user/application_security/sast/#supported-languages-and-frameworks) dans votre application. Ainsi, chaque fois que vous créez une merge request, SAST analyse les différences entre la branche de fonctionnalité et la branche cible pour détecter les vulnérabilités et fournit des données précises sur chaque faille de sécurité afin d'en faciliter la correction.\n\n![Vulnérabilité d'injection NoSQL détectée dans une MR](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097510/Blog/Content%20Images/Blog/Content%20Images/no_sql_injection_vulnerability_mr_view_aHR0cHM6_1750097509647.png)\n\nLes résultats du scanner SAST peuvent bloquer le merge du code si des stratégies de sécurité sont appliquées. Les utilisateurs natifs de GitLab peuvent être définis comme approbateurs, ce qui permet d'effectuer les revues requises avant de fusionner du code non sécurisé. Cela garantit que toutes les vulnérabilités sont surveillées par les parties concernées.\n\n![Stratégie d'approbation des merge requests](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097510/Blog/Content%20Images/Blog/Content%20Images/merge_request_approval_policy_aHR0cHM6_1750097509649.png)\n\nHackerOne a intégré GitLab à ses processus opérationnels et à ses processus de développement de manière stratégique, ce qui lui a permis de les rendre plus fluides et plus efficaces, à grande échelle, et de renforcer la collaboration entre les équipes. Parmi ces améliorations, HackerOne profite désormais de déploiements plus rapides et d'une planification inter-équipes performante.\n\n## Principaux avantages d'intégrer GitLab à HackerOne\n\nL'utilisation conjointe de HackerOne et GitLab offre les avantages suivants :\n\n* **Visibilité accrue en matière de sécurité** : les équipes de développement bénéficient d'un accès immédiat aux failles de sécurité sans quitter leur environnement de workflow principal. Cette visibilité en temps réel aide les équipes à prioriser les problèmes de sécurité parallèlement au développement des fonctionnalités.\n* **Processus de correction rationalisé** : en convertissant automatiquement les rapports HackerOne en tickets GitLab, le processus de correction des vulnérabilités s'intègre naturellement au cycle de développement standard. Cela évite les changements de contexte entre les plateformes et garantit des correctifs de sécurité en parallèle des autres tâches de développement.\n* **Temps de correction réduit** : l'intégration raccourcit considérablement le délai entre la détection d'une vulnérabilité et sa résolution. Les soumissions de vulnérabilités dans HackerOne étant immédiatement disponibles dans GitLab, les équipes de développement peuvent réagir sans délai et renforcer ainsi la posture de sécurité globale.\n* **Collaboration améliorée** : cette intégration fluidifie les échanges entre les chercheurs en cybersécurité, les équipes de sécurité et de développement. Les commentaires et mises à jour circulent entre les deux plateformes, créant ainsi un environnement collaboratif axé sur le renforcement de la sécurité.\n* **Impact réel** : les entreprises qui ont opté pour l'intégration HackerOne + GitLab ont constaté les améliorations suivantes :\n    * Une réduction pouvant atteindre 70 % du temps nécessaire entre l'identification d'une vulnérabilité et sa correction\n    * Une satisfaction accrue des équipes de développement, qui peuvent continuer à travailler dans leur environnement préféré\n    * Une visibilité accrue de la sécurité à l'échelle de l'entreprise\n    * Une allocation plus efficace des ressources de sécurité\n\n## En savoir plus sur GitLag + HackerOne \n\nPour en savoir plus sur GitLab et HackerOne, et découvrir comment nous pouvons vous aider à renforcer votre posture de sécurité, consultez les ressources suivantes :\n\n* [Utilisation de l'intégration GitLab sur HackerOne](https://docs.hackerone.com/en/articles/8571227-gitlab-integration)\n* [Programme de Bug Bounty de GitLab sur HackerOne](https://hackerone.com/gitlab?type=team)\n* [Solutions de sécurité et de conformité de GitLab](https://about.gitlab.com/fr-fr/solutions/security-compliance/)\n* [HackerOne réalise des déploiements 5  fois plus rapides avec la sécurité intégrée de GitLab](https://about.gitlab.com/fr-fr/customers/hackerone/) \n* [Documentation sur la sécurité des applications GitLab](https://docs.gitlab.com/ee/user/application_security/)\n","security",[773,687,234,285,688,9,775],"bug bounty","2025-05-13",{"slug":778,"featured":6,"template":692},"enhance-application-security-with-gitlab-hackerone","content:fr-fr:blog:enhance-application-security-with-gitlab-hackerone.yml","Enhance Application Security With Gitlab Hackerone","fr-fr/blog/enhance-application-security-with-gitlab-hackerone.yml","fr-fr/blog/enhance-application-security-with-gitlab-hackerone",{"_path":784,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":785,"content":790,"config":801,"_id":803,"_type":14,"title":804,"_source":16,"_file":805,"_stem":806,"_extension":19},"/fr-fr/blog/gitlab-and-accenture-announce-global-reseller-agreement",{"config":786,"title":787,"ogTitle":787,"description":788,"ogDescription":788,"ogImage":789},{"noIndex":6},"GitLab et Accenture : accord mondial de distribution","Ce nouvel accord permet à Accenture de proposer la plateforme DevSecOps complète de GitLab à l’ensemble de ses clients. ","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1751568278/bots3gyfarx8qysbkw6c.png",{"date":791,"authors":792,"heroImage":789,"title":795,"description":796,"tags":797,"category":798,"body":800},"2025-09-15",[793,794],"GitLab","GitLab France Team","GitLab et Accenture annoncent un accord mondial de distribution","Ce nouvel accord permet à Accenture de proposer la plateforme DevSecOps complète de GitLab à l’ensemble de ses clients.",[798,799,9],"news","product","Nous sommes ravis d'annoncer que GitLab et Accenture ont signé un accord de distribution mondial, faisant d'Accenture un distributeur agréé GitLab et un fournisseur de services professionnels. Cet accord permet à Accenture de proposer la plateforme DevSecOps complète de GitLab directement à ses clients via plusieurs canaux de distribution, y compris AWS Marketplace.\n\n## Une étape importante dans notre collaboration\n\nCette collaboration associe la plateforme DevSecOps complète et intelligente de GitLab à l'expertise approfondie d'Accenture en matière de transformation numérique et de services de mise en œuvre, permettant aux organisations de créer et de livrer des logiciels sécurisés à grande échelle. Cet accord mondial fournit un cadre global qui peut être facilement adapté localement.\n\nCette collaboration se concentrera dans un premier temps sur plusieurs domaines clés :\n\n* **La transformation DevSecOps à l'échelle de l'entreprise :** aider les organisations à moderniser leurs pratiques de développement et à rationaliser leur cycle de livraison de logiciels\n* **La modernisation des mainframes :** accompagner les organisations à migrer depuis leurs systèmes hérités\n* **GitLab Duo combiné à Amazon Q :** proposer le développement logiciel piloté par l'IA aux organisations qui cherchent à accélérer leur vitesse de développement tout en maintenant la sécurité et la conformité de bout en bout\n\n## Perspectives d'avenir\n\nNous sommes impatients d'aider nos clients communs à accélérer l'innovation, à rationaliser leurs processus de développement et à renforcer leur posture de sécurité afin d’atteindre plus efficacement leurs objectifs commerciaux. \n\nPour plus d'informations sur la façon dont GitLab et Accenture peuvent aider votre organisation, consultez [notre site partenaire](https://about.gitlab.com/partners/channel-partners/#/2328213) ou contactez votre représentant Accenture ou GitLab.",{"featured":6,"template":692,"slug":802},"gitlab-and-accenture-announce-global-reseller-agreement","content:fr-fr:blog:gitlab-and-accenture-announce-global-reseller-agreement.yml","Gitlab And Accenture Announce Global Reseller Agreement","fr-fr/blog/gitlab-and-accenture-announce-global-reseller-agreement.yml","fr-fr/blog/gitlab-and-accenture-announce-global-reseller-agreement",{"_path":808,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":809,"content":813,"config":819,"_id":821,"_type":14,"title":822,"_source":16,"_file":823,"_stem":824,"_extension":19},"/fr-fr/blog/gitlab-duo-agent-platform-what-is-next-for-intelligent-devsecops",{"noIndex":6,"title":810,"description":811,"ogImage":812,"ogTitle":810,"ogDescription":811},"GitLab Duo Agent Platform : le DevSecOps intelligent","La plateforme DevSecOps GitLab Duo Agent Platform orchestre la collaboration entre développeurs et agents d'IA tout au long du SDLC avec l'IA agentique.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750687578/esmflevxk5bf3eezjhwk.png",{"heroImage":812,"date":814,"title":810,"description":811,"authors":815,"body":817,"category":684,"tags":818},"2025-07-03",[816],"Bill Staples","Découvrez GitLab Duo Agent Platform, la prochaine évolution de GitLab Duo Workflow : cette plateforme innovante étend les fonctionnalités d'[IA agentique](https://about.gitlab.com/fr-fr/topics/agentic-ai/ \"Qu'est-ce que l'IA agentique ?\") à l'ensemble du cycle de développement logiciel et permet aux équipes [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps ?\") de travailler en parallèle avec plusieurs agents d'IA spécialisés.\n\nVoici à quoi pourrait ressembler une de vos journées de travail :\n\n* Vous demandez à un agent d'IA d'étudier en détail un epic en cours, de résumer les contributions de la semaine précédente et de suggérer une publication pour annoncer les dernières fonctionnalités.\n* En parallèle, vous déléguez à plusieurs autres agents d'IA l'analyse de bogues d'accessibilité en leur demandant d'appliquer directement les corrections nécessaires dans le code.\n* Pendant ce temps, un autre agent d'IA relit vos modifications complexes et vous fournit des commentaires et suggestions avant une revue de code en bonne et due forme par un membre de votre équipe.\n* Enfin, lorsque l'équipe de sécurité vous signale une nouvelle vulnérabilité qui doit faire l'objet d'une investigation dans l'ensemble de votre projet, vous confiez cette tâche à votre agent d'IA dédié à la sécurité.\n\nToutes ces opérations sont exécutées simultanément pour vous aider à vous concentrer sur des tâches à forte valeur ajoutée : décisions d'architecture, résolution créative de problèmes et travail technique stratégique. Avec GitLab Duo Agent Platform, vous pouvez déléguer des tâches à cinq, dix, voire cent agents spécialisés, qui disposent tous du contexte complet de votre projet : votre code, les job logs CI, les tâches de planification, et bien plus encore. Vous automatisez ainsi vos tâches fastidieuses afin de pouvoir vous concentrer sur le travail qui vous passionne vraiment.\n\n**Il ne s'agit pas là de remplacer les équipes de développement, mais d'amplifier leur créativité et leur expertise en éliminant les points de friction liés aux tâches routinières.** C'est l'avenir que nous façonnons avec GitLab Duo Agent Platform.\n\n## Qu'est-ce que GitLab Duo Agent Platform ?\n\nGitLab Duo Agent Platform facilite la collaboration entre plusieurs équipes de développement et agents d'IA tout au long du cycle du développement logiciel, afin de les aider à améliorer considérablement leur productivité et à réduire la durée de leurs cycles de livraison.\n\nReposant sur la base sécurisée de GitLab, GitLab Duo Agent Platform est personnalisable et extensible. La plateforme permet aux équipes de développement de créer des agents capables de résoudre toutes sortes de problématiques d'ingénierie logicielle, en tirant parti du contexte global du projet à chaque étape du développement logiciel.\n\nGitLab Duo Agent Platform ne se limite pas à la création de code. La plateforme propose des agents spécialisés et des workflows personnalisés qui peuvent vous aider à réaliser une liste presque illimitée de tâches, notamment :\n\n* L'implémentation de tickets\n* Les migrations à grande échelle/mises à niveau des dépendances\n* La rédaction automatique de documentations et de publications pour annoncer la sortie de nouvelles fonctionnalités\n* La réparation de [pipelines en échec](https://about.gitlab.com/fr-fr/blog/quickly-resolve-broken-ci-cd-pipelines-with-ai/ \"Echec de pipeline\")\n* La recherche assistée lors d'incidents\n* La recherche approfondie de statuts et d'informations sur différents sujets\n* La gestion du backlog\n* La résolution de vulnérabilités\n* Les revues de certains types de code spécifiques (p. ex., base de données)\n* La création rapide d'outils internes à partir des composants déjà disponibles\n* Et plus encore !\n\nVous pourrez utiliser nos agents prêts à l'emploi, mais aussi les personnaliser et enrichir leurs capacités. Nous testons actuellement la version bêta de GitLab Duo Agent Platform avec l'aide de dizaines de clients et nous ouvrirons bientôt l'accès à d'autres équipes.\n\nDécouvrez une démonstration de GitLab Duo Agent Platform :\n\n\u003Cdiv style=\"padding:56.25% 0 0 0;position:relative;\">\u003Ciframe src=\"https://player.vimeo.com/video/1095679084?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"Agent Platform Demo Clip\">\u003C/iframe>\u003C/div>\u003Cscript src=\"https://player.vimeo.com/api/player.js\">\u003C/script>\n\n## Outils, modèles et agents : à vous de choisir\n\nConformément à notre engagement de proposer une plateforme ouverte, les agents GitLab interagissent de manière fluide avec les outils d'écriture de code de votre choix via les protocoles Model Context Protocol (MCP) et Agent2Agent (A2A), que vous utilisiez Cursor, Claude Code, Windsurf, OpenAI Codex ou d'autres.\n\nLa plateforme accepte les contributions de code de n'importe quel outil de développement de votre pile, que ce code ait été écrit par un développeur ou généré par un agent d'IA. Vos workflows existants et vos outils préférés continueront à fonctionner de manière homogène lorsque vous intégrerez les fonctionnalités agentiques.\n\nGitLab Duo Agent Platform fonctionne avec les modèles de langage approuvés qui [répondent à nos critères de sélection](https://about.gitlab.com/fr-fr/ai-transparency-center/#ai-continuity-plan). Pour les entreprises qui ont des exigences strictes en matière de sécurité, la plateforme prend en charge les modèles de GitLab Duo Self-Hosted approuvés qui s'exécutent dans des environnements air-gapped. Vos exigences en matière d'infrastructure et vos règles de sécurité ne limiteront pas votre capacité à tirer parti du développement agentique.\n\n## Le contexte fait la différence, vos agents GitLab Duo aussi\n\nLa différence entre un outil d'IA utile et un agent véritablement intelligent se résume au contexte. Avec GitLab Duo Agent Platform, les agents ne travaillent pas de manière isolée : ils sont profondément intégrés à la plateforme de développement.\n\nChaque agent comprend automatiquement la vue d'ensemble de vos projets, y compris vos tickets ouverts et leur historique, les merge requests qui les ont résolus, la structure et la logique de votre code, la configuration de vos [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\"), les risques de sécurité détectés, les exigences de conformité ainsi que les relations complexes entre tous ces éléments.\n\nTout comme les membres de votre équipe, les agents disposent de tout le contexte nécessaire pour vous aider à livrer des logiciels sécurisés plus rapidement. Ils ne se contentent pas de répondre à des questions sur le code, ils sont également en mesure de fournir des analyses sur l'impact potentiel d'un changement sur votre pipeline de déploiement ou de suggérer des améliorations de sécurité en fonction de vos règles de conformité. Plus votre équipe travaillera au sein de la plateforme DevSecOps de GitLab, plus vos agents deviendront intelligents.\n\n## Des équipes plus productives avec les agents d'IA\n\nIl est presque aussi simple d'établir un climat de confiance avec les agents d'IA qu'avec les nouveaux membres d'une équipe. Vous devez tout d'abord vérifier leur travail, puis comprendre leur approche et enfin augmenter progressivement leurs responsabilités à mesure qu'ils prouvent leurs compétences.\n\nC'est ainsi que nous avons pensé notre workflow d'approbation des agents. Avant qu'un agent apporte des modifications à votre code ou à votre environnement, il vous présentera un plan clair : sa compréhension du problème, l'approche qu'il prévoit d'adopter et les actions spécifiques qu'il souhaite effectuer. Vous aurez ensuite la possibilité d'examiner l'approche qu'il aura choisie, de l'approuver ou de donner de nouvelles instructions si nécessaire. Au fil du temps, les agents fourniront un travail de plus en plus qualitatif, vous pourrez leur accorder une plus grande autonomie pour la réalisation des tâches répétitives, tout en continuant à superviser les tâches complexes ou critiques.\n\n## Une plateforme conçue pour la communauté et adaptée à vos besoins\n\nGitLab a toujours évolué grâce aux contributions de sa communauté. Cette année, nous avons franchi une étape importante, car les contributions de nos clients ont atteint un niveau record. Nous étendons désormais cette même énergie collaborative aux agents d'IA grâce à notre approche de framework ouvert.\n\nGitLab Duo Agent Platform ne se limite pas aux agents que nous créons, mais vous donne, à vous ainsi qu'à la communauté au sens large, les moyens de créer des agents spécialisés capables de résoudre vos défis d'ingénierie uniques. Que vous ayez besoin d'un agent qui comprend vos normes de codage spécifiques, qui s'intègre à votre chaîne d'outils personnalisée ou qui gère des tâches propres à votre domaine, la plateforme vous fournira les éléments de base nécessaires pour y parvenir.\n\nCe modèle crée un cercle vertueux qui tire parti de la force de la communauté GitLab grâce au partage mondial, à l'instar de notre [catalogue CI/CD](https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/). La diversité des expériences de nos clients est source d'innovation. Les retours que nous recevons des entreprises renforcent la fiabilité et la sécurité. Et les solutions partagées profitent à tous. C'est cette même approche collaborative qui a fait le succès de GitLab et qui s'applique désormais au développement agentique.\n\n## Premiers pas avec GitLab Duo Agent Platform\n\nSi vous avez testé [GitLab Duo Agentic Chat](https://about.gitlab.com/fr-fr/blog/gitlab-duo-chat-gets-agentic-ai-makeover/), désormais inclus dans chaque licence utilisateur GitLab.com GitLab 18 Premium et Ultimate, vous avez déjà eu un aperçu des possibilités offertes par l'utilisation d'agents d'IA dans votre workflow de développement.\n\nPour découvrir les capacités de GitLab Duo Agent Platform et les projets sur lesquels nous travaillons actuellement, visionnez les [démonstrations incluses dans notre événement de lancement de GitLab 18](https://about.gitlab.com/fr-fr/eighteen/).\n\nVous souhaitez être parmi les premiers à l'essayer ? Inscrivez-vous sur la [liste d'attente de la version bêta de GitLab Duo Agent Platform](https://about.gitlab.com/gitlab-duo/agent-platform/). Cet été, nous ouvrirons l'accès à d'autres équipes. De nouvelles fonctionnalités d'agent sortiront tout au long de l'année dans les prochaines versions de GitLab 18. Nous prévoyons de proposer GitLab Duo Agent Platform en disponibilité générale cet hiver.\n\n*Avertissement : cet article de blog contient des informations relatives aux produits, fonctionnalités et caractéristiques à venir. Il est important de noter que celles-ci ne sont fournies qu'à titre informatif. Veuillez ne pas vous fier à ces informations à des fins d'achat ou de planification. Comme pour tout projet, les éléments mentionnés dans cet article sont susceptibles de changer ou d'être retardés. Le développement, la sortie et le calendrier de tout produit ou de toute fonctionnalité restent à la seule discrétion de GitLab Inc.*\n\n## En savoir plus\n\n- [Du vibe coding à l'IA agentique : une roadmap pour les responsables techniques](https://about.gitlab.com/the-source/ai/from-vibe-coding-to-agentic-ai-a-roadmap-for-technical-leaders/)\n\n- [Automatisation DevOps et agents d'IA](https://about.gitlab.com/topics/agentic-ai/devops-automation-ai-agents/)\n\n- [Développement logiciel augmenté par l'IA : l'IA agentique dédiée au DevOps](https://about.gitlab.com/topics/agentic-ai/ai-augmented-software-development/)\n\n- [Analyse de code pilotée par l'IA pour une sécurité renforcée](https://about.gitlab.com/topics/agentic-ai/ai-code-analysis/)\n",[686,9,798,799],{"featured":6,"template":692,"slug":820},"gitlab-duo-agent-platform-what-is-next-for-intelligent-devsecops","content:fr-fr:blog:gitlab-duo-agent-platform-what-is-next-for-intelligent-devsecops.yml","Gitlab Duo Agent Platform What Is Next For Intelligent Devsecops","fr-fr/blog/gitlab-duo-agent-platform-what-is-next-for-intelligent-devsecops.yml","fr-fr/blog/gitlab-duo-agent-platform-what-is-next-for-intelligent-devsecops",{"_path":826,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":827,"content":833,"config":838,"_id":840,"_type":14,"title":841,"_source":16,"_file":842,"_stem":843,"_extension":19},"/fr-fr/blog/gitlab-flow-duo",{"title":828,"description":829,"ogTitle":828,"ogDescription":829,"noIndex":6,"ogImage":830,"ogUrl":831,"ogSiteName":674,"ogType":675,"canonicalUrls":831,"schema":832},"GitLab Flow et GitLab Duo : le combo gagnant pour un workflow puissant","Tirez parti de workflows DevSecOps plus productifs et puissants en combinant GitLab Flow et GitLab Duo au sein de votre cycle de développement logiciel.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662840/Blog/Hero%20Images/ai-experiment-stars.png","https://about.gitlab.com/blog/gitlab-flow-duo","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Flow et GitLab Duo : le combo gagnant pour un workflow puissant\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2023-07-27\",\n      }",{"title":828,"description":829,"authors":834,"heroImage":830,"date":835,"body":836,"category":684,"tags":837,"updatedDate":771},[749],"2023-07-27","Adopter une approche DevSecOps nécessite de bien réfléchir au workflow qui sera utilisé. Si cette étape peut parfois représenter un défi de taille, GitLab Flow et GitLab Duo sont là pour vous simplifier la tâche :\n\n__GitLab Flow__ est l'approche préconisée pour accompagner les entreprises dans la mise en œuvre réussie de leurs processus DevSecOps. __GitLab Duo__, quant à lui, offre un [ensemble de fonctionnalités alimentées par l'IA](https://about.gitlab.com/blog/supercharge-productivity-with-gitlab-duo/), intégré à la plateforme DevSecOps de GitLab. Il aide les équipes de développement à coder plus efficacement, optimise le cycle de développement logiciel et garantit une livraison de logiciels plus sécurisés. \n\nEn associant __GitLab Flow__ et __GitLab Duo__, les entreprises peuvent améliorer considérablement l'intégralité de leur workflow, augmenter davantage leur productivité, la fréquence de leurs déploiements, la qualité du code et la sécurité globale, ainsi que la résilience et la disponibilité de l'environnement de production.\n\nDans cet article, découvrez comment GitLab Flow et GitLab Duo peuvent être utilisés conjointement pour aider les entreprises à réussir leur approche [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que DevSecOps ?\").\n\n## Qu'est-ce que GitLab Flow ?\n\n[GitLab Flow](https://about.gitlab.com/fr-fr/topics/version-control/what-is-gitlab-flow/ \"Qu'est-ce que GitLab Flow ? \") est un workflow complet et précis destiné au développement d'applications avec GitLab, notre plateforme DevSecOps alimentée par l'IA offrant une interface utilisateur et un modèle de données uniques. \n\nGitLab Flow est basé sur les meilleures pratiques et leçons tirées des retours d'expérience de nos clients ainsi que de l'utilisation de nos propres fonctionnalités en interne. En outre, GitLab Flow couvre chacune des [étapes du cycle de vie DevSecOps](https://about.gitlab.com/fr-fr/stages-devops-lifecycle/) créant un workflow efficace comprenant deux boucles de rétroaction : \n\n- Une __boucle de rétroaction interne__ qui permet d'examiner et d'évaluer une mise à jour spécifique de l'application pour s'assurer qu'elle répond aux critères de qualité et de sécurité. \n- Une __boucle de rétroaction externe__ qui vise à améliorer l'application dans son ensemble, ainsi que le cycle de développement lui-même. \n\n![Boucles de rétroaction internes et externes de GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-feedback-loops.png)\n\u003Ccenter>Boucles de rétroaction internes et externes de GitLab Flow\u003C/center>\u003Cp>\u003C/p>\n\nGitLab Flow étant constitué de nombreuses étapes, le développement logiciel ne se limite pas à la simple écriture de code. Découvrez ci-dessous chaque étape du processus DevSecOps dans GitLab Flow ainsi que les avantages d'y ajouter l'utilisation de GitLab Duo. \n\n### L'étape de planification\n\nLa planification est la première étape de GitLab Flow et fait partie de la boucle de rétroaction externe. Elle inclut les tickets, les merge requests, les epics, les jalons, les itérations, les sorties de nouvelles versions, les preuves de déploiement et bien plus encore. Découvrez le rôle de ces composants dans GitLab Flow et les avantages de les utiliser en parallèle de GitLab Duo.\n\n![Planification : première étape de GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-planning-portion.png)\n\u003Ccenter>Planification : première étape de GitLab Flow\u003C/center>\u003Cp>\u003C/p>\n\n#### Les tickets \n\nLes tickets sont des espaces collaboratifs dans lesquels les problèmes relatifs au produit sont traités et les nouvelles fonctionnalités sont définies. Lorsque vous créez un ticket, vous commencez par renseigner son titre. Ensuite, vous pouvez utiliser la fonctionnalité de **génération de descriptions de tickets** de GitLab Duo pour automatiquement enrichir le champ de description. Cela vous permet ainsi de gagner un temps précieux et de réduire vos efforts. \n\nComme de nombreuses personnes peuvent être amenées à collaborer sur un même ticket, la fonctionnalité de **résumé des discussions** alimentée par l'IA de GitLab Duo peut résumer des centaines de commentaires laissés sur un ticket en un paragraphe concis. Ainsi, n'importe quelle partie prenante peut rapidement suivre la conversation, rejoindre la discussion et être immédiatement productive.\n\nLes tickets peuvent être organisés et visualisés dans des tableaux de tickets, qui sont des outils de gestion de projet pouvant être utilisés comme tableaux Kanban ou Scrum. Ces tableaux aident les équipes à planifier, à organiser et à visualiser un workflow relatif à un déploiement d'une fonctionnalité ou d'un produit. Différentes catégories de tableaux peuvent être créées et les tickets peuvent être déplacés d'un tableau à l'autre par simple glisser-déposer.\n\n#### Les merge requests\n\nC'est à l'aide des merge requests que les solutions logicielles sont développées. En tant que composants associés à la sortie de nouvelles versions, les tickets et les merge requests permettent d'auditer et de suivre les modifications apportées aux applications par les parties prenantes. Ils sont essentiels au travail des [ingénieurs DevOps](https://about.gitlab.com/fr-fr/topics/devops/what-is-a-devops-platform-engineer/ \"Qu’est-ce qu’un ingénieur de plateforme DevOps ?\") et des ingénieurs de plateforme, aux administrateurs système et aux administrateurs de base de données, tout comme aux ingénieurs sécurité et aux équipes de développement. En outre, les tickets et les merge requests sont des éléments clés du processus de planification pour la sortie des nouvelles versions.\n\nLes merge requests peuvent être créées individuellement ou à partir d'un ticket existant. La création d'une merge request à partir d'un ticket la relie automatiquement à ce dernier, de sorte que lorsqu'elle est fusionnée, le ticket associé est automatiquement fermé. Il est également possible de lier manuellement une merge request à un ticket.\n\n![Une merge request fusionnée ferme le ticket associé](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/mr-with-its-issue.png)\n\u003Ccenter>Une merge request fusionnée ferme le ticket associé\u003C/center>\u003Cp>\u003C/p>\n\nTout comme les tickets, les merge requests peuvent regrouper une longue liste de mises à jour d'une branche de fonctionnalité réalisées par de nombreuses parties prenantes. Les collaborateurs souhaitant comprendre ou se familiariser avec les mises à jour d'une merge request peuvent utiliser la fonctionnalité de **résumé des merge requests** de GitLab Duo pour prendre rapidement connaissance des modifications qui ont été apportées. De plus, ils peuvent tirer parti de la fonctionnalité de **remplissage automatique d'un modèle de merge request** de GitLab Duo, qui s'appuie sur un template de merge request prédéfini, pour remplir automatiquement le contenu des différentes sections. Ces templates de description permettent de standardiser et d'optimiser la collaboration et la communication entre les parties prenantes tout au long du cycle de développement. Et ce processus est encore plus rapide avec GitLab Duo !\n\nLes tickets appartenant au même thème peuvent être regroupés dans des epics pour organiser les tâches à effectuer. Les epics peuvent inclure des tickets enfants et des sous-epics et/ou être liés aux autres epics de l'entreprise. Les itérations permettent de suivre les sprints de travail. Vous pouvez les planifier soit manuellement, soit automatiquement à l'aide des cadences d'itération de GitLab afin de rationaliser les workflows de planification. De plus, elles incluent des [graphiques d'avancement burndown et burnup](https://docs.gitlab.com/ee/user/project/milestones/burndown_and_burnup_charts.html). Les graphiques d'avancement burndown suivent la progression globale d'un projet, tandis que les graphiques d'avancement burnup suivent quotidiennement le nombre total et le poids des tickets ajoutés et terminés dans une timebox donnée.\n\n#### Les jalons\n\nLes jalons permettent aux équipes DevSecOps d'organiser les tickets et les merge requests dans un groupe cohérent, avec une date de début et une échéance facultatives. Ils sont généralement utilisés pour suivre les nouvelles versions et servent également à suivre les tickets et les merge requests au niveau d'un projet ou d'un groupe. Similaires aux itérations, les jalons fournissent des graphiques d'avancement burndown et burnup montrant l'avancement d'un projet.\n\nIls peuvent être associés à la sortie d'une nouvelle fonctionnalité, dont la création automatisée génère de nombreux artefacts, y compris des preuves de déploiement. La preuve de déploiement est un instantané automatisé des données liées à la sortie d'une nouvelle fonctionnalité. En complément des artefacts de test et des jalons associés, les artefacts de job peuvent éventuellement être inclus dans les preuves de déploiement. Cette démarche facilite la vérification par des audits externes des processus internes de développement et de déploiement des nouvelles versions.\n\nLes epics, jalons et itérations peuvent être visualisés depuis la page Roadmaps, qui permet de suivre la progression de la sortie d'une nouvelle fonctionnalité et de rationaliser ce processus. \n\nUne fois l'étape de planification terminée, le travail visant à résoudre un problème ou à développer une nouvelle fonctionnalité peut commencer. C'est là que les merge requests entrent en jeu. Examinons plus en détail ce processus dans GitLab Flow. \n\n### Les merge requests et le push du code\n\n![Merge requests et push du code : deuxième étape de GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-mr-pushing-code-portion.png)\n\u003Ccenter>Merge requests et push du code : deuxième étape de GitLab Flow\u003C/center>\u003Cp>\u003C/p>\n\nLa deuxième étape dans GitLab Flow concerne les merge requests et le push du code. Comme mentionné précédemment, c'est à l'aide des merge requests que les solutions sont développées de façon collaborative par les parties prenantes de l'entreprise. Cette collaboration peut se faire de manière distribuée et asynchrone.\n\nLes participants peuvent tirer parti des fonctionnalités de collaboration, telles que l'ajout de tags, l'intégration de suggestions et de commentaires à la ligne de code, l'ajout de commentaires au sein des merge requests, la revue des fils de discussion et des demandes. Toutes ces fonctionnalités permettent d'améliorer la qualité du code, sa disponibilité, sa fiabilité et ses performances. \n\nLa boucle de rétroaction interne de GitLab Flow intervient directement après la création de la merge request. Elle inclut le push du code et des corrections, l’exécution des scans et des tests, ainsi que la revue à des fins collaboratives et de mise à jour.\n\n#### Les pipelines\n\nLorsque des mises à jour sont appliquées à une branche de fonctionnalité via des merge requests, les pipelines (s'ils sont définis) sont automatiquement exécutés. Ils peuvent comporter plusieurs étapes et jobs servant à compiler, à tester puis à déployer l'application ou le [microservice](https://about.gitlab.com/fr-fr/blog/what-are-the-benefits-of-a-microservices-architecture/ \"Qu’est-ce qu’une architecture de microservices ? \") dans un environnement de revue. Cet environnement permet de vérifier les mises à jour dynamiquement avant qu'elles ne soient fusionnées dans la branche principale. Cette automatisation rationalise les processus de mise à jour et de revue lors du développement de l'application.\n\nPar ailleurs, lorsqu'elles apportent des mises à jour à l'application via des merge requests, les équipes DevSecOps ont accès à diverses fonctionnalités alimentées par l'IA. Lors de l'écriture ou de la mise à jour du code, la fonctionnalité de **[suggestions de code](https://about.gitlab.com/fr-fr/solutions/code-suggestions/ \"Suggestions de code\")** de GitLab Duo propose la prochaine portion de code à écrire en fonction du contexte. Le développeur est alors libre de l'accepter ou de l'ignorer. \n\nLes suggestions de code prennent en charge la génération de code via des prompts ainsi que la complétion de code en temps réel. Elles peuvent améliorer l'expérience de programmation en réduisant les erreurs et en aidant les équipes de développement à écrire du code plus rapidement, contribuant ainsi à améliorer la qualité du code de l'environnement de production. Elles peuvent également accroître la productivité des développeurs et développeuses, ainsi qu'accélérer les itérations et les déploiements.\n\nLorsque les différentes parties prenantes au sein du projet participent au développement ou à la revue d'applications, elles se heurtent parfois à un code peu documenté, complexe, difficile à interpréter ou écrit dans un langage de programmation qui ne leur est pas familier. Avec la fonctionnalité d'**explication du code** de GitLab Duo, le code est traduit en langage naturel permettant à quiconque au sein de l'équipe de le comprendre facilement et de devenir opérationnel rapidement.\n\nDe plus, lorsqu'un développeur ou une développeuse effectue une validation des modifications sur une branche de fonctionnalité, la fonctionnalité de **suggestion de relecteurs** de GitLab Duo utilise la merge request de ces modifications et le graphique de contributions pour suggérer une liste de relecteurs appropriés dans la liste déroulante des relecteurs située dans la barre latérale de la merge request. Cette liste inclut des utilisateurs qui connaissent un aspect spécifique de l'application et semblent les meilleurs candidats pour effectuer une revue des mises à jour. Ainsi, les développeurs n'ont plus besoin de rechercher ni d'identifier eux-mêmes les relecteurs appropriés, ce qui évite les retards et garantit la qualité des revues.\n\nLorsque les développeurs modifient le code, il arrive souvent qu'ils n'incluent pas dans la merge request un commentaire sur les modifications apportées. Fort de ce constat, la fonctionnalité de **résumé des merge requests** de GitLab Duo permet à l'auteur de la merge request d'utiliser l'IA pour générer un commentaire en langage naturel qui résume les modifications apportées au code. Les relecteurs peuvent ainsi mieux comprendre les changements apportés et rationaliser l'ensemble du processus de revue. \n\nLorsque les relecteurs vérifient les modifications apportées au code dans une merge request et qu'ils détectent des anomalies, ils peuvent créer un bloc de revue pouvant inclure de nombreux commentaires impliquant de nombreux fichiers source. Pour aider l'auteur de la merge request à comprendre l'afflux de commentaires fournis par le relecteur, la fonctionnalité de **résumé des revues de code** de GitLab Duo génère un résumé en langage naturel des retours du relecteur. Cela permet de meilleurs transferts entre les auteurs et les relecteurs, tout en simplifiant le processus de revue.\n\nEn outre, lorsque les développeurs ajoutent du nouveau code par le biais d'une merge request, ils peuvent tirer parti de la fonctionnalité de **génération de tests** de GitLab Duo qui utilise l'IA pour générer des tests unitaires afin de vérifier le nouveau code. Cela permet d'augmenter la productivité des équipes de développement, d'améliorer la couverture de test et de détecter les bogues en amont du cycle de développement. Elles peuvent également tirer parti de **[GitLab Duo Chat](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-a-roundup-of-recent-chat-enhancements/ \"GitLab Duo Chat\")**, qui est toujours accessible, afin de refactoriser le code et de générer de la documentation intégrée à la ligne de code (par exemple des docstrings) pour leur code source.\n\nBien que les pipelines s'exécutent sur les mises à jour de branches, ils peuvent inclure des tests et des scans automatisés, ce qui permet d'intégrer la [sécurité en amont](https://about.gitlab.com/fr-fr/topics/ci-cd/shift-left-devops/ \"Shift Left\").\n\n### L'intégration de la sécurité en amont\n\n![L'intégration de la sécurité en amont : troisième étape de GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-shift-sec-left-portion.png)\n\u003Ccenter>L'intégration de la sécurité en amont : troisième étape de GitLab Flow\u003C/center>\u003Cp>\u003C/p>\n\nL'intégration de la sécurité en amont est la troisième étape de GitLab Flow. Elle fait également partie de la boucle de rétroaction interne.\n\nLes ingénieurs DevOps et ingénieurs de plateforme, les administrateurs système et administrateurs de base de données, les développeurs ainsi que d'autres parties prenantes collaborant à une merge request peuvent avoir des inquiétudes concernant la sécurité et la conformité. C'est là que les scans de sécurité et les tests automatisés entrent en jeu. \n\nIl est possible d'inclure les scans de sécurité dans un pipeline via des templates prêts à l'emploi et/ou de les exécuter automatiquement dans un pipeline de merge requests. GitLab fournit un large éventail de scanners et d'analyseurs de sécurité intégrés qui peuvent être utilisés par GitLab Flow. Mais ce n'est pas tout, notre plateforme DevSecOps peut également accueillir des scanners tiers et personnalisés.\n\nGitLab Flow intègre la sécurité en amont dans le pipeline afin de détecter et de résoudre les failles de sécurité le plus tôt possible dans le cycle de développement logiciel. Il est beaucoup plus simple (et moins coûteux) de corriger les vulnérabilités au début du cycle de développement. En effet, une fois qu'une application est en production, une panne imprévue peut avoir des conséquences sur vos utilisateurs, mais aussi vos revenus. Alors, pourquoi ne pas la résoudre avant qu'elle ne se produise ? \n\nVoici une liste des scanners et analyseurs de sécurité intégrés fournis par GitLab : \n- les tests unitaires, \n- l'analyse de l'Infrastructure as Code (IaC), \n- les scanners SAST (test statique de sécurité des applications), \n- l'analyse des dépendances, \n- la détection de secrets, \n- l'analyse des conteneurs, \n- la sécurité des API, \n- les tests d'API web par injection de données aléatoires,\n- les tests à données aléatoires guidés par la couverture de code. \n\nGitLab fournit par ailleurs un grand nombre de tableaux de bord et de rapports de sécurité permettant de gérer et de visualiser les vulnérabilités (liste des dépendances, tableau de bord de sécurité, rapport sur les vulnérabilités et pages de vulnérabilité).\n\nPour aider les développeurs et les ingénieurs sécurité à mieux comprendre les vulnérabilités et à les corriger plus efficacement, la fonctionnalité d'**explication des vulnérabilités** de GitLab Duo fournit des détails sur une vulnérabilité spécifique, en décrivant comment elle peut être exploitée et, surtout, en proposant des recommandations pour la corriger. Les développeurs peuvent également tirer parti de la fonctionnalité de **résolution des vulnérabilités** de GitLab Duo, qui crée automatiquement une merge request incluant les modifications de code permettant de corriger la vulnérabilité. Ces fonctionnalités alimentées par l'IA rationalisent et optimisent le processus de sécurisation et de renforcement de l'application concernée afin de prévenir les vulnérabilités susceptibles d'être exploitées lors de cyberattaques dans l'environnement de production.\n\nOutre les scanners SAST, GitLab met à disposition de ses utilisateurs des scanners DAST (test dynamique de sécurité des applications) qui nécessitent une application en cours d'exécution pour effectuer les tests. Grâce à ces scanners, GitLab peut provisionner automatiquement un environnement DAST en vue de réaliser des scans DAST, puis effectuer un nettoyage complet de toutes les ressources après les tests DAST. Par ailleurs, pour les conteneurs en cours d'exécution, GitLab fournit une fonctionnalité OCS (Operational Container Scanning) qui analyse les images de conteneurs de votre cluster afin de detecter des failles de sécurité.\n\nIl est possible d'exécuter automatiquement les scans mentionnés ci-dessus dans un pipeline de merge requests ou, dans certains cas, de planifier leur exécution via des stratégies d'exécution de scan et d'approbation des merge requests. Ces stratégies peuvent être définies via l'interface utilisateur de GitLab ou des fichiers YAML. Elles sont configurées dans un projet distinct, ce qui permet de séparer les tâches et ainsi de faciliter la réutilisation, la maintenance et la gestion. Les stratégies d'exécution des scans exigent que les scans de sécurité soient exécutés selon un calendrier précis ou avec le pipeline de projets. Ensuite, les stratégies d'approbation des merge requests prennent des mesures basées sur les résultats des scans. Les équipes ou les ingénieurs sécurité peuvent définir ces stratégies pour appliquer les processus de sécurité dans l'ensemble de l'entreprise, et GitLab Flow peut les détecter ou les exploiter lors de son exécution.\n\nPour renforcer la sécurité et la conformité des projets menés au sein de votre entreprise, vous pouvez utiliser des pipelines et des labels de conformité. Ceux-ci peuvent être rendus obligatoires avant l’exécution du pipeline d’un projet. Ainsi, vous avez la certitude que l'ensemble de vos équipes respectent vos normes de sécurité et de conformité. Cela vous permet par ailleurs de protéger vos applications contre les cyberattaques, tout en respectant les normes de conformité gouvernementales et de toujours être préparé pour un éventuel audit.\n\nL'objectif principal de toutes ces recommandations de sécurité de GitLab Flow est de corriger les vulnérabilités dès le début du cycle de développement, plutôt qu'en production, car les corrections peuvent s'avérer lourdes de conséquences en termes de réputation et de chiffre d'affaires.\n\nÀ mesure que les vulnérabilités sont atténuées dans la boucle de rétroaction interne de GitLab Flow et que des mises à jour sont apportées à l'application dans la branche de fonctionnalité, les parties prenantes doivent effectuer une nouvelle revue des mises à jour pour s'assurer de leur application effective et qu'aucune régression n'a été introduite par inadvertance.\n\n### La revue continue\n\n![La revue : quatrième étape de GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-reviewing-features-portion.png)\n\u003Ccenter>La revue de code : quatrième étape de GitLab Flow\u003C/center>\u003Cp>\u003C/p>\n\nLa revue des fonctionnalités, quatrième étape de GitLab Flow, repose sur une revue continue des applications. Cette étape nécessite de déployer l'application provisoire (branche de fonctionnalité) dans un environnement de revue prévu à cet effet afin que les parties prenantes puissent la vérifier en temps réel et fournir des retours constructifs. L'application provisoire peut ensuite être ajustée en continu jusqu'à ce qu'elle soit prête à être fusionnée dans la branche principale. GitLab Flow recommande également le nettoyage de toutes les ressources de l'environnement de revue provisionnées au moment où la merge request est fusionnée dans la branche principale.\n\nCe processus de revue automatisé et itératif fait partie de la boucle de rétroaction interne de GitLab Flow. Comme mentionné ci-dessus, dans la boucle de rétroaction interne, il est recommandé d'utiliser les fonctionnalités de GitLab Duo suivantes : explication du code, suggestions de code, suggestion de relecteurs, résumé des merge requests, remplissage automatique d'un template de merge request, résumé des revues de code, explication des vulnérabilités, résolution des vulnérabilités et analyse des causes profondes. En effet, celles-ci facilitent le transfert entre les auteurs et les relecteurs tout en simplifiant l'ensemble du processus de revue.\n\nLa boucle de rétroaction interne de GitLab Flow prend fin lorsque tous les éléments de revue sont traités et que la merge request est approuvée et fusionnée dans la branche principale, ce qui déclenche le déploiement de l'application en production.\n\n### Le déploiement des applications et de l'infrastructure\n\n![Le déploiement : cinquième étape de GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/The-GitLab-Flow-2023-deploy-apps-portion.png)\n\u003Ccenter>Le déploiement : cinquième étape de GitLab Flow\u003C/center>\u003Cp>\u003C/p>\n\nEn fonction des besoins de l'entreprise, GitLab Flow recommande la livraison continue ou le déploiement continu. \n- La __livraison continue__ consiste à publier fréquemment du code en déclenchant les déploiements manuellement (par exemple, en production). \n- Le __déploiement continu__ désigne la publication automatisée de code (par exemple, en production) sans intervention humaine. \n\nIntéressons-nous d'abord à la livraison continue.\n\nLorsque vous publiez votre logiciel en utilisant la livraison continue, vous disposez de plusieurs options de déploiement. Vous pouvez établir une fenêtre de gel, puis déployer le logiciel à l'aide de techniques de déploiement avancées, telles que les déploiements canari, bleu/vert, programmés et incrémentiels. Les déploiements incrémentiels réduisent le risque de panne dans l'environnement de production et améliorent l'expérience utilisateur ainsi que la satisfaction client. Les techniques de déploiement avancées améliorent également l'efficacité du processus de développement et de livraison en simplifiant le processus de sortie de nouvelles versions.\n\nLorsque vous publiez votre logiciel en utilisant le déploiement continu, l'intégralité des changements/mises à jour est directement déployée en production. Les approches de livraison progressive telles que les feature flags, qui vous permettent de séparer la livraison de fonctionnalités spécifiques d'un lancement, sont un bon moyen de réduire les risques et de gérer les fonctionnalités à mettre à la disposition des utilisateurs finaux. Les feature flags prennent en charge plusieurs langages de programmation. Ils permettent aux équipes de développement d'expérimenter et d'effectuer des tests contrôlés. Vous pouvez même utiliser des feature flags pour déployer des fonctionnalités auprès d'utilisateurs spécifiques.\n\nBien que GitLab prenne en charge toutes ces approches de déploiement, GitLab Flow permet d'adopter l'approche qui convient le mieux aux équipes et/ou aux besoins spécifiques du projet.\n\n### La surveillance des applications et des processus DevSecOps\n\nUne fois que votre application a été déployée en production, elle doit être surveillée en permanence pour assurer sa stabilité, ses performances et sa disponibilité. En outre, les processus DevSecOps qui s'exécutent sont mesurés en parallèle, ce qui permet d'améliorer leurs performances et leur efficacité. Les fonctionnalités de surveillance sont fournies par GitLab et, en tant que telles, peuvent être exploitées par GitLab Flow.\n\nPour les conteneurs en cours d'exécution, GitLab fournit une fonctionnalité OCS (Operational Container Scanning) qui analyse les images de conteneurs de votre cluster afin de détecter des failles de sécurité. Il est possible d'automatiser ces scans en planifiant leur exécution. Les vulnérabilités détectées sont automatiquement affichées dans un tableau de bord de sécurité. La fonctionnalité OCS peut vous aider à sécuriser vos applications de cluster et à anticiper toute cyberattaque pouvant entraîner des fuites de données privées et même provoquer des pannes inattendues.\n\nLe suivi des erreurs permet aux équipes de développement de détecter et de visualiser les erreurs générées par leur application. Celles-ci sont affichées dans la liste de suivi des erreurs dans GitLab. Le suivi des erreurs permet d'améliorer la disponibilité et les performances de vos applications en détectant et en résolvant rapidement les conditions d'application inattendues.\n\nGitLab peut recevoir des alertes de n'importe quelle source de surveillance, y compris Prometheus, via un récepteur webhook. Dès qu'une alerte arrive, elle est affichée dans la section Alertes de GitLab, où vous pouvez la gérer manuellement. Les alertes peuvent également déclencher automatiquement la création d'incidents, de ChatOps et d'e-mails à des personnes ou des groupes spécifiques. Toutes ces fonctionnalités rationalisent le processus de résolution et de gestion des alertes.\n\nDès qu'un incident est créé suite à la détection de problèmes dans l'environnement de production, il apparaît dans la liste des incidents de GitLab, où vous pouvez le gérer facilement. Vous pouvez gérer un ou plusieurs incidents, les trier, les rechercher, les assigner, définir leurs statuts et même voir leur compte à rebours calculant l'échéance de l'accord de niveau de service (SLA). De plus, vous pouvez créer des équipes d'astreinte et des rotations, des politiques d'escalade, ainsi que configurer la remontée d'alertes et les notifications pour gérer les incidents. Vous pouvez également associer un incident à une alerte afin que celle-ci soit automatiquement résolue une fois que l'incident est clos. Les chronologies d'incident permettent également aux cadres dirigeants et aux utilisateurs externes de voir ce qui s'est passé lors d'un incident et quelles mesures ont été prises pour le résoudre. Toutes ces fonctionnalités rationalisent et accélèrent le processus de gestion et de résolution des incidents.\n\nLes événements d'audit suivent les événements importants, en permettant notamment d'identifier l'intervenant qui a effectué l'action correspondante et le moment de son intervention dans GitLab. Ces événements sont affichés dans la liste des événements d'audit de GitLab et fournissent, entre autres, l'action qui a été effectuée sur un objet, son auteur, ainsi que sa date et son heure d'occurrence.\n\nL'ensemble des listes et tableaux de bord mentionnés ci-dessus permettent d'anticiper les scénarios de non-conformité afin d'éviter les pénalités et de rationaliser les processus d'audit. Pour vos applications en cours d'exécution, ils génèrent des données et des indicateurs qui peuvent être utilisés dans la boucle de rétroaction externe de GitLab Flow afin de vous aider à améliorer et à optimiser vos applications et à réduire le risque de pannes imprévues dans l'environnement de production.\n\n### L'amélioration continue\nGitLab Flow permet de tirer parti des tableaux de bord et indicateurs de performance des processus à chaque étape du développement logiciel. Ces tableaux offrent des informations précieuses pour améliorer en continu votre application et vos performances dans ce domaine. Ils sont générés automatiquement par GitLab et sont toujours accessibles.\n\n### Le tableau de bord d'analyse des flux de valeur\n\nVous pouvez suivre et surveiller le cycle de développement de vos applications via le tableau de bord d'analyse des flux de valeur, où vous pouvez consulter les statistiques d'un projet ou d'un groupe au fil du temps. Ce tableau de bord est personnalisable, mais vous pouvez commencer rapidement en créant une chaîne de valeur à l'aide d'un template par défaut fourni par GitLab. Celui-ci affiche des indicateurs pour chacune des étapes prédéfinies de l'analyse du flux de valeur (ticket, planification, codage, test, revue et préproduction), ainsi qu'un graphique montrant le délai moyen d'achèvement de chaque étape. Il affiche également les indicateurs clés de l'analyse du flux de valeur : délai d'exécution, durée de cycle, nouveaux tickets, validations et déploiements. Vous pouvez utiliser ces indicateurs pour identifier des axes d'amélioration dans les étapes de votre chaîne de valeur.\n\n### Le tableau de bord des métriques DORA\n\nPour visualiser les indicateurs de performance qui mesurent l'efficacité des pratiques de développement et de livraison de votre entreprise, GitLab met à disposition de ses utilisateurs un tableau de bord des métriques [DORA](https://about.gitlab.com/fr-fr/solutions/value-stream-management/dora/) (DevOps Research and Assessment), qui affiche quatre métriques clés : la fréquence de déploiement, le délai d'exécution des modifications, le délai de rétablissement du service et le taux d'échec des modifications. \n\n- La fréquence de déploiement mesure la fréquence à laquelle votre entreprise déploie du code en production ou le publie à destination des utilisateurs finaux. \n- Le délai d'exécution des modifications mesure le temps nécessaire pour passer du code validé au code exécuté avec succès en production. \n- Le délai de rétablissement du service mesure le temps nécessaire pour rétablir les services au niveau où ils étaient auparavant, en cas d'incident. \n- Le taux d'échec des modifications correspond au pourcentage de modifications apportées à l'environnement de production ou aux versions destinées aux utilisateurs, qui ont entraîné une dégradation du service (par exemple, une défaillance ou une panne) et ont ensuite nécessité des mesures correctives (solution corrective d'urgence, restauration d'une version antérieure, correctif). \n\nCes quatre métriques clés mesurent l'efficacité de vos processus actuels et vous donnent la possibilité d'améliorer les facteurs et fonctionnalités permettant de soutenir le travail de vos équipes.\n\n### La personnalisation de votre tableau de bord\n\nLe tableau de bord des flux de valeur est un autre tableau de bord personnalisable qui permet aux décideurs d'identifier les tendances et les opportunités d'amélioration du développement logiciel. Il affiche les métriques DORA suivies des indicateurs d'efficacité du processus d'analyse des flux de valeur et du nombre de vulnérabilités critiques et élevées pour le mois en cours, les deux mois précédents et les six derniers mois.\n\nGitLab Duo peut également vous aider dans vos efforts d'amélioration continue. Par exemple, la fonctionnalité de **prédiction de la chaîne de valeur** prend l'historique des données et utilise les tendances de l'ensemble de votre cycle de développement pour prédire le comportement futur de vos indicateurs de chaîne de valeur. Vous pouvez utiliser ces analyses prédictives dans vos efforts d'optimisation.\n\nL'ensemble de ces tableaux de bord et les indicateurs dont ils rendent compte font partie de la boucle de rétroaction externe de GitLab Flow. Ils vous aident à réduire le risque de pannes imprévues dans l'environnement de production, ainsi qu'à améliorer et à optimiser vos applications et vos workflows DevSecOps.\n\n### La fonctionnalité d'analyse d'impact de l'IA\n\nPour mieux comprendre l'impact de l'utilisation de GitLab Duo (ou de l'IA) tout au long du cycle de développement, vous pouvez consulter le tableau de bord d'[analyse d'impact de l'IA](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/). Ce tableau vous indique comment l'adoption de la fonctionnalité de suggestions de code de GitLab Duo impacte d'autres indicateurs de performance, de qualité et de sécurité, sur les six derniers mois, tels que la durée de cycle, le délai d'exécution, la fréquence de déploiement, le taux d'échec des modifications et les vulnérabilités critiques au fil du temps.\n\nL'analyse d'impact de l'IA mesure l'adoption, l'optimisation et les avantages que l'IA apporte aux équipes et à l'entreprise dans son ensemble, et permet également d'identifier des axes d'amélioration.\n\n## Pourquoi utiliser GitLab Flow ?\n\nGitLab Flow est une approche préconisée, suivie par nos clients et utilisateurs du monde entier, qui offre les avantages suivants : \n- Une productivité accrue grâce aux fonctionnalités d'automatisation fournies par GitLab, son interface utilisateur unique et son modèle de données unique, le tout exploité par GitLab Flow.\n- Des informations précises sur le cycle de vie DevSecOps complet pour soutenir l'amélioration continue. \n- Des tableaux de bord et indicateurs intégrés qui peuvent vous aider à optimiser vos applications et vos processus DevSecOps.\n- Une qualité accrue du code et l'amélioration de la fiabilité et de la disponibilité de vos applications.\n- Une meilleure sécurité des applications grâce à des scanners et des fonctionnalités de sécurité intégrés.\n- La conformité et la préparation aux audits via des fonctionnalités de conformité intégrées.\n- Des durées de cycle plus courtes qui peuvent vous aider à augmenter la fréquence de déploiement.\n- La revue en continu activée par la boucle de rétroaction interne de GitLab Flow.\n- La boucle de rétroaction interne de GitLab Flow peut vous aider à optimiser les mises à jour afin d'améliorer la qualité du code, ainsi que la fiabilité et la disponibilité de vos applications.\n- La boucle de rétroaction externe de GitLab Flow peut vous aider à améliorer vos applications ainsi que le cycle de développement lui-même.\n- Des niveaux élevés de collaboration entre les parties prenantes de votre entreprise.\n- L'intégration de la sécurité en amont pour identifier les vulnérabilités dans les applications avant qu'elles ne passent en production, et ainsi éviter les pannes coûteuses et imprévues.\n- La réduction des risques lors du déploiement en production grâce aux techniques de déploiement avancées et aux approches de livraisons échelonnées prises en charge par GitLab.\n- Des fonctionnalités alimentées par l'IA qui couvrent l'ensemble du cycle de développement et peuvent optimiser la productivité, la qualité du code, l'amélioration continue, la sécurité, la conformité et bien plus encore.\n- La prise en charge des applications cloud-native et autres types d'application.\n- La prise en charge multi-cloud pour les applications hybrides/multi-cloud.\n\nPour commencer avec GitLab Flow, tirer parti de la fonctionnalité Auto DevOps de GitLab ou de certains de ses composants est un bon point de départ pour appliquer les principes de GitLab Flow à votre cycle de développement logiciel.\n\n## GitLab Flow et Auto DevOps\n\n![Auto DevOps : une instanciation de GitLab Flow](https://about.gitlab.com/images/blogimages/gitlab-flow-duo/ado-pipeline.png)\n\u003Ccenter>Auto DevOps : une instanciation de GitLab Flow\u003C/center>\u003Cp>\u003C/p>\n\n[Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/) applique GitLab Flow à l'ensemble des étapes et jobs associés. Vous pouvez le considérer comme un bon exemple pour l'instanciation de GitLab Flow.\n\nAuto DevOps est une collection de templates CI/CD prédéfinis et prêts à l'emploi qui détectent automatiquement le code source dont vous disposez. Basés sur les bonnes pratiques, ces templates détectent, compilent, testent, déploient et surveillent automatiquement vos applications.\n\nLe pipeline Auto DevOps intègre la sécurité en amont pour détecter et prévenir les défauts le plus tôt possible dans le processus de livraison de logiciels. Il déploie ensuite l'application en préproduction pour vérification, puis en production de manière incrémentielle/planifiée.\n\nAuto DevOps vous permet de démarrer rapidement, en augmentant la productivité des équipes de développement. Vous pouvez le personnaliser facilement en fonction de vos besoins, grâce à la prise en charge des frameworks et des langages de programmation les plus courants. Auto DevOps étant modulaire, personnalisable et extensible, vous pouvez utiliser certains de ses composants dans vos pipelines ou l'appliquer intégralement à votre application.\n\n## Conclusion\n[Combinez GitLab Flow et GitLab Duo dès aujourd'hui](https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com%2Fblog%2F) pour améliorer considérablement l'efficacité de votre workflow, à chaque étape du cycle de développement logiciel. Ce duo améliore la productivité, la fréquence des déploiements, la qualité du code et la sécurité dans son ensemble, ainsi que la résilience et la disponibilité de l'environnement de production. \n\nPour voir un workflow en action qui combine GitLab Flow et GitLab Duo, et découvrir ses avantages, regardez la vidéo suivante :\n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/CKrZ4_tKY4I?si=Kf6QsYFIzKkJZpJd\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n",[109,686,9],{"slug":839,"featured":6,"template":692},"gitlab-flow-duo","content:fr-fr:blog:gitlab-flow-duo.yml","Gitlab Flow Duo","fr-fr/blog/gitlab-flow-duo.yml","fr-fr/blog/gitlab-flow-duo",{"_path":845,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":846,"content":852,"config":862,"_id":864,"_type":14,"title":865,"_source":16,"_file":866,"_stem":867,"_extension":19},"/fr-fr/blog/gitlab-named-a-leader-in-2024-gartner-magic-quadrant-for-ai-code-assistants",{"title":847,"description":848,"ogTitle":847,"ogDescription":848,"noIndex":6,"ogImage":849,"ogUrl":850,"ogSiteName":674,"ogType":675,"canonicalUrls":850,"schema":851},"Magic Quadrant 2024 : GitLab, Leader des agents IA de code","GitLab reconnue pour sa capacité d'exécution et l'exhaustivité de sa vision en matière de technologie d'assistant IA pour le code.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664458/Blog/Hero%20Images/Gartner_AI_Code_Assistants_Blog_Post_Cover_Image_1800x945.png","https://about.gitlab.com/blog/gitlab-named-a-leader-in-2024-gartner-magic-quadrant-for-ai-code-assistants","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab nommée Leader dans le Magic Quadrant 2024 de Gartner dédié aux assistants IA pour le code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dave Steer\"}],\n        \"datePublished\": \"2024-08-22\",\n      }",{"title":853,"description":854,"authors":855,"heroImage":849,"date":857,"body":858,"category":684,"tags":859,"updatedDate":861},"GitLab nommée Leader dans le Magic Quadrant 2024 de Gartner dédié aux assistants IA pour le code","Dans le premier Magic Quadrant™ de Gartner® applicable à cette catégorie, GitLab est reconnue pour sa capacité d'exécution et l'exhaustivité de sa vision en matière de technologie d'assistant IA pour le code.",[856],"Dave Steer","2024-08-22","Nous sommes ravis d'annoncer que GitLab a été reconnue comme Leader dans la première édition du [Magic Quadrant™ de Gartner® dédié aux assistants IA pour le code](https://about.gitlab.com/fr-fr/gartner-mq-ai-code-assistants/ \"Magic Quadrant™ de Gartner® 2024 dédié aux assistants de codage IA\"). Cette reconnaissance importante à nos yeux souligne notre engagement à fournir à nos clients des capacités alimentées par l'IA qui accélèrent la livraison de logiciels, renforcent la sécurité et stimulent l'innovation. \n\nLes assistants IA pour le code ne se limitent pas à la génération et à la complétion de code. Ce sont des partenaires qui améliorent l'efficacité des équipes de développement dans une démarche de collaboration, en améliorant la qualité du code et en favorisant l'apprentissage continu. Les assistants comme GitLab Duo, notre suite de fonctionnalités alimentées par l'IA, automatisent les tâches routinières et fournissent des suggestions intelligentes. Les développeurs et développeuses ont ainsi plus de temps pour se concentrer sur la résolution de problèmes de plus haut niveau. \n\n![Image assistants d'IA pour le codage Gartner MQ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675964/Blog/Content%20Images/AI_Code_Assistants_MQ_graphic__1_.png)\n\n> Téléchargez le [rapport Magic Quadrant™ 2024 de Gartner® dédié aux assistants IA pour le code](https://about.gitlab.com/fr-fr/gartner-mq-ai-code-assistants/).\n\n## Assistants IA pour le code : rapidité, sécurité et intégration fluide\n\nLes assistants IA pour le code font partie intégrante des entreprises de toutes tailles, aidant les équipes DevSecOps à développer et à déployer des logiciels sécurisés plus rapidement. Cependant, l'IA révèle la pleine étendue de sa valeur lorsqu'elle est intégrée tout au long du cycle de développement logiciel. Contrairement aux solutions d'IA ponctuelles et limitées qui peuvent entraîner la fragmentation des chaînes d'outils et l'apparition de silos de données, la plateforme complète de GitLab intègre l'IA de la planification à la production. Elle comporte des métriques et des tableaux de bord qui offrent une visibilité et des informations globales.\n\n## La puissance de GitLab Duo\n\n[GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/) est une boîte à outils complète de fonctionnalités d'IA, conçue pour améliorer l'expérience des développeurs et développeuses, contrôler la sécurité en amont dans le cycle de développement logiciel et renforcer la collaboration entre les équipes Dev, Sec et Ops. \n\nVoici ses principales fonctionnalités : \n\n* Les suggestions de code permettent la génération et la complétion de code\n* Le chat apporte une assistance contextuelle intégrée au sein de l'application sur l'explication du code, le réusinage du code et la génération de tests\n* L'explication des vulnérabilités permet de mieux comprendre les vulnérabilités dans le code\n* La résolution des vulnérabilités aide à atténuer les vulnérabilités détectées\n* L'analyse des causes profondes résout les problèmes de pipeline\n* Le tableau de bord d'analyse d'impact de l'IA permet d'obtenir des informations en temps réel et d'évaluer le ROI de l'IA dans une entreprise\n\n## Optimisez votre retour sur investissement avec l'IA \n\nLes dirigeants d'entreprise et les ingénieurs ont besoin de visibilité pour savoir comment l'IA est utilisée tout au long du cycle de développement logiciel dans le but d'évaluer le retour de leurs investissements technologiques. Le [tableau de bord d'analyse d'impact de l'IA](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/) de GitLab leur fournit cette visibilité, grâce à des métriques permettant d'évaluer les taux d'adoption de l'IA, les améliorations des performances et plus encore.\n\n## La flexibilité, la confidentialité et la transparence au premier plan\n\nLes clients de GitLab qui souhaitent explorer les capacités alimentées par l'IA peuvent utiliser GitLab Duo pour tirer parti de la puissance de l'intelligence artificielle en toute sécurité dans l'IDE de leur choix ou dans un espace de travail de développement à distance, tout en profitant d'une tarification flexible et d'un essai gratuit. En outre, le [centre de transparence sur l'IA de GitLab](https://about.gitlab.com/fr-fr/ai-transparency-center/) vous donne une visibilité complète sur nos pratiques de gouvernance et de transparence. \n\nBientôt, les entreprises pourront [adapter leur expérience d'IA](https://about.gitlab.com/fr-fr/blog/meet-gitlab-duo-workflow-the-future-of-ai-driven-development/) à leurs exigences stratégiques et réglementaires grâce à la personnalisation des modèles et au déploiement de modèles auto-hébergés. La personnalisation des modèles permettra aux entreprises de personnaliser GitLab Duo et d'exploiter tout le potentiel de l'IA conformément à leurs objectifs commerciaux, à leurs besoins opérationnels et aux attentes de leurs clients. Le déploiement de modèles auto-hébergés garantit que les données ne quittent pas l'environnement sécurisé d'une entreprise, réduisant ainsi le risque d'atteinte à la sécurité et garantissant la conformité dans les secteurs hautement réglementés. \n\n## L'avenir de l'IA au sein des processus DevSecOps\n\nGitLab est votre partenaire de développement de logiciels alimenté par l'IA. Nous donnons aux équipes les outils nécessaires pour créer, sécuriser et déployer des logiciels plus rapidement. Notre engagement en faveur de l'innovation vous permet d'être toujours à la pointe des avancées en matière d'IA. Nous continuons à révolutionner les processus DevSecOps. Retrouvez-nous bientôt pour découvrir de nouvelles mises à jour de notre roadmap.\n\n> [Téléchargez le rapport Magic Quadrant™ 2024 de Gartner® dédié aux assistants IA pour le code](https://about.gitlab.com/fr-fr/gartner-mq-ai-code-assistants/).\n\n***Source : Gartner, Magic Quadrant dédié aux assistants IA pour le code, Arun Batchu, Haritha Khandabattu, Philip Walsh, Matt Brasier, août 2024***\n\n***GARTNER est une marque déposée et une marque de service de Gartner, Inc. et/ou de ses sociétés affiliées aux États-Unis et à l'étranger, et MAGIC QUADRANT est une marque déposée de Gartner, Inc. et/ou de ses sociétés affiliées. Elles sont utilisées ici avec autorisation. Tous droits réservés.***\n\n***Gartner ne cautionne aucun fournisseur, produit ou service décrit dans ses publications de recherche, et ne conseille pas aux utilisateurs de la technologie de sélectionner uniquement les fournisseurs ayant les notes les plus élevées ou toute autre désignation. Les publications de recherche de Gartner reflètent les opinions de l'organisation de recherche de Gartner\net ne doivent pas être interprétées comme des déclarations de fait. Gartner décline toute garantie, expresse ou implicite, à l'égard de cette recherche, y compris toute garantie de qualité marchande ou d'adéquation à un usage particulier.***\n\n***Ce graphique a été publié par Gartner Inc. dans le cadre d'un rapport plus vaste et doit être évalué dans le contexte de l'ensemble du document. Le document produit par Gartner est disponible sur demande auprès de Gartner B.V.***",[798,686,9,860],"research","2024-09-05",{"slug":863,"featured":91,"template":692},"gitlab-named-a-leader-in-2024-gartner-magic-quadrant-for-ai-code-assistants","content:fr-fr:blog:gitlab-named-a-leader-in-2024-gartner-magic-quadrant-for-ai-code-assistants.yml","Gitlab Named A Leader In 2024 Gartner Magic Quadrant For Ai Code Assistants","fr-fr/blog/gitlab-named-a-leader-in-2024-gartner-magic-quadrant-for-ai-code-assistants.yml","fr-fr/blog/gitlab-named-a-leader-in-2024-gartner-magic-quadrant-for-ai-code-assistants",{"_path":869,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":870,"content":876,"config":885,"_id":887,"_type":14,"title":888,"_source":16,"_file":889,"_stem":890,"_extension":19},"/fr-fr/blog/gitlab-named-a-leader-in-the-2024-gartner-magic-quadrant-for-devops",{"title":871,"description":872,"ogTitle":871,"ogDescription":872,"noIndex":6,"ogImage":873,"ogUrl":874,"ogSiteName":674,"ogType":675,"canonicalUrls":874,"schema":875},"Magic Quadrant 2024 : GitLab, Leader des plateformes DevOps","GitLab figure en tête du classement pour sa capacité d'exécution et l'exhaustivité de sa vision avec sa plateforme DevOps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662523/Blog/Hero%20Images/Gartner_DevOps_Blog_Post_Cover_Image_1800x945__2_.png","https://about.gitlab.com/blog/gitlab-named-a-leader-in-the-2024-gartner-magic-quadrant-for-devops","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab nommée Leader dans le Magic Quadrant 2024 de Gartner dédié aux plateformes DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ashley Kramer\"}],\n        \"datePublished\": \"2024-09-05\",\n      }\n                  ",{"title":877,"description":878,"authors":879,"heroImage":873,"date":861,"body":881,"category":798,"tags":882,"updatedDate":884},"GitLab nommée Leader dans le Magic Quadrant 2024 de Gartner dédié aux plateformes DevOps","Notre approche DevOps innovante et le succès de nos clients ont permis à GitLab de figurer en tête du classement pour sa capacité d'exécution et l'exhaustivité de sa vision.",[880],"Ashley Kramer","À l'origine, l'approche DevOps n'était qu'un concept, une méthodologie qui permettait de livrer des logiciels plus rapidement en réunissant des équipes traditionnellement disparates. Il s'agissait de répondre aux problèmes causés par la séparation entre les équipes de développement et celles de déploiement.\n\nChez GitLab, nous avons repris ce concept et l'avons développé : au lieu d'assembler des outils pour créer une chaîne d'outils DevOps complexe, nous avons créé une [plateforme DevOps unique](https://about.gitlab.com/fr-fr/platform/) pour encourager une collaboration plus étroite, une automatisation plus poussée et des processus plus évolutifs et standardisés.\n\nNous sommes convaincus de la valeur de cette stratégie, qui est axée sur la réussite de nos clients. À l'occasion de la deuxième édition du [Magic Quadrant de Gartner dédié aux plateformes DevOps](https://about.gitlab.com/fr-fr/gartner-magic-quadrant/), nous avons à nouveau été reconnus comme un des Leaders, cette fois-ci, dans les deux domaines suivants : Capacité d'exécution et Exhaustivité de la vision.\n\n![Image Gartner MQ pour les plateformes DevOps 2024](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749674334/Blog/Content%20Images/figure1.png)\n\n> Téléchargez le [rapport Magic Quadrant™ 2024 de Gartner® dédié aux plateformes DevOps](https://about.gitlab.com/fr-fr/gartner-magic-quadrant/).\n\nLes fournisseurs de logiciels doivent aujourd'hui faire face à des menaces de sécurité croissantes et à des exigences de conformité complexes, tout en adoptant avec discernement les nouvelles technologies comme l'IA générative. Et bien sûr, ils doivent fournir à leurs clients des services évolutifs et toujours plus innovants.\n\nL'objectif de GitLab est d'aider ses clients à surmonter ces défis et à devenir des leaders dans leurs secteurs. Grâce à notre plateforme DevSecOps alimentée par l'IA, ils peuvent anticiper les problèmes de sécurité et améliorer la visibilité tout au long du cycle de développement, tout en rassemblant les acteurs nécessaires pour créer des logiciels indispensables.\n\n## Aller plus loin dans l'approche DevOps\n\nMais l'aventure ne fait que commencer ! Notre objectif ? Continuer à développer la vision DevOps et faire progresser notre plateforme DevSecOps de deux manières.\n\nPour commencer, nous voulons inviter encore plus d'équipes à collaborer sur la même plateforme, avec des fonctionnalités dédiées à celles impliquées dans [la planification Agile](https://about.gitlab.com/fr-fr/blog/categories/agile-planning/), la [science des données](https://about.gitlab.com/fr-fr/topics/devops/the-role-of-ai-in-devops/) et [l'observabilité](https://about.gitlab.com/fr-fr/blog/observability-vs-monitoring-in-devops/) et la surveillance des applications.\n\nDeuxièmement, nous voulons rendre l’adoption de notre plateforme et les options de déploiement encore plus flexibles pour répondre aux divers besoins de nos clients. Pour ce faire, nous enrichissons [GitLab Dedicated](https://about.gitlab.com/dedicated/), notre option hébergée à locataire unique, afin que les entreprises évoluant dans des secteurs hautement réglementés puissent bénéficier de la simplicité du SaaS et des nouvelles fonctionnalités et capacités, tout en respectant les besoins de conformité des infrastructures isolées.\n\n## Aider les entreprises à créer des logiciels sûrs\n\nAu-delà de la création d'une meilleure plateforme de collaboration pour le développement de logiciels, l'un de nos objectifs clés est d'aider les entreprises à produire des logiciels plus sûrs et plus conformes. C'est cet objectif qui nous démarque de nos concurrents, car GitLab intègre le [scanning de sécurité](https://about.gitlab.com/fr-fr/solutions/security-compliance/) au stade de la validation du code, et non lorsque les applications sont prêtes à être publiées. Les équipes peuvent ainsi détecter plus rapidement les vulnérabilités, ce qui accélère les cycles de sortie. GitLab facilite également le respect de la conformité grâce à la présence de garde-fous au niveau des stratégies et à la génération automatique [d'une nomenclature logicielle](https://about.gitlab.com/fr-fr/blog/the-ultimate-guide-to-sboms/ \"Qu'est-ce qu'une nomenclature logicielle (SBOM) ?\").\n\nNous savons que la sécurité est un enjeu de plus en plus important pour nos clients, à mesure que la surface d'attaque de leur logiciel s'étend. C'est pourquoi, au cours des 12 prochains mois, nous prévoyons de continuer à améliorer nos scanners SAST, d'ajouter des contrôles supplémentaires au niveau des stratégies de sécurité et de compiler [un nouveau gestionnaire de secrets natif](https://about.gitlab.com/blog/gitlab-native-secrets-manager-to-give-software-supply-chain-security-a-boost/).\n\n## Accompagner tout le cycle du développement logiciel grâce à l'IA\n\nNotre vision est également d'être leader dans le domaine de l'IA, à la fois en aidant nos clients à créer des logiciels innovants avec l'IA, mais aussi en exploitant les technologies d'IA respectueuses de la confidentialité. L'IA représente en effet une véritable avancée et offre d'innombrables opportunités lorsqu'elle est intégrée tout au long du cycle de développement logiciel. Mais pour nous, l'innovation doit avant tout se faire de manière responsable. Les préoccupations de nos clients sont claires : ils veulent une [IA avec des garde-fous](https://about.gitlab.com/the-source/ai/velocity-with-guardrails-ai-automation/), une [IA transparente](https://about.gitlab.com/fr-fr/ai-transparency-center/) et une IA qui respecte leur code et leur propriété intellectuelle.\n\nNous nous engageons à enrichir [GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/), une suite de fonctionnalités alimentées par l'IA pour notre plateforme DevSecOps qui sont à la fois complètes, respectueuses de la confidentialité et conçues pour prendre en charge l'ensemble du cycle de développement logiciel.\n\nC'est cet engagement et nos fonctionnalités GitLab Duo qui ont encouragé [Gartner® à nous nommer Leader dans son premier Magic Quadrant™ dédié aux assistants IA pour le code](https://about.gitlab.com/fr-fr/blog/gitlab-named-a-leader-in-2024-gartner-magic-quadrant-for-ai-code-assistants/).\n\nNous sommes fiers de cette reconnaissance qui nous encourage à rester à l'écoute de nos clients afin de continuer à développer notre vision, notre roadmap produit et notre engagement à créer la meilleure plateforme DevSecOps.\n\n> Téléchargez le [rapport Magic Quadrant™ 2024 de Gartner® dédié aux plateformes DevOps](https://about.gitlab.com/fr-fr/gartner-magic-quadrant/).\n\n***Source : Gartner, Magic Quadrant dédié aux plateformes DevOps, Keith Mann, Thomas Murphy, Bill Holz, George Spafford, août 2024***\n\n***GARTNER est une marque déposée et une marque de service de Gartner, Inc. et/ou de ses sociétés affiliées aux États-Unis et à l'étranger et MAGIC QUADRANT est une\nmarque déposée de Gartner, Inc. et/ou de ses sociétés affiliées. Elles sont utilisées ici avec autorisation. Tous droits réservés.***\n\n***Gartner ne cautionne aucun fournisseur, produit ou service décrit dans ses publications de recherche, et ne conseille pas aux utilisateurs de la technologie de sélectionner uniquement les fournisseurs ayant les notes les plus élevées ou toute autre désignation. Les publications de recherche de Gartner reflètent les opinions de l'organisation de recherche de Gartner et ne doivent pas être interprétées comme des déclarations de fait. Gartner décline toute garantie, expresse ou implicite, à l'égard de cette recherche, y compris toute garantie de qualité marchande ou d'adéquation à un usage particulier.***\n\n***Ce graphique a été publié par Gartner Inc. dans le cadre d'un rapport plus vaste et doit être évalué dans le contexte de l'ensemble du document. Le document produit par Gartner est disponible sur demande auprès de Gartner.***",[798,860,688,883,9],"DevOps","2024-10-07",{"slug":886,"featured":91,"template":692},"gitlab-named-a-leader-in-the-2024-gartner-magic-quadrant-for-devops","content:fr-fr:blog:gitlab-named-a-leader-in-the-2024-gartner-magic-quadrant-for-devops.yml","Gitlab Named A Leader In The 2024 Gartner Magic Quadrant For Devops","fr-fr/blog/gitlab-named-a-leader-in-the-2024-gartner-magic-quadrant-for-devops.yml","fr-fr/blog/gitlab-named-a-leader-in-the-2024-gartner-magic-quadrant-for-devops",{"_path":892,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":893,"content":898,"config":907,"_id":909,"_type":14,"title":910,"_source":16,"_file":911,"_stem":912,"_extension":19},"/fr-fr/blog/gitlab-named-a-leader-in-the-2025-gartner-magic-quadrant-for-ai-code-assistants",{"config":894,"title":895,"description":896,"ogTitle":895,"ogDescription":896,"ogImage":897},{"noIndex":6},"Magic Quadrant 2025 : GitLab, Leader des agents IA de code","GitLab obtient le titre de Leader dans le rapport Magic Quadrant™ 2025 de Gartner® dédié aux assistants IA pour le code pour sa vision et son exécution.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1757675943/q9kb7zfiw1cyxx9fcafp.png",{"heroImage":899,"date":900,"authors":901,"body":903,"category":798,"tags":904,"title":905,"description":906},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1757675943/q9kb7zfiw1cyxx9fcafp.png","2025-09-17",[902],"Manav Khurana","Pour la deuxième fois consécutive, GitLab se distingue comme Leader dans le rapport Magic Quadrant™ 2025 de Gartner® dédié aux assistants IA pour le code. Cette distinction confirme un pilier essentiel de notre stratégie d'IA globale : l'évolution de l'assistance intelligente dédiée au code vers une IA complète qui transforme la façon dont les équipes planifient, développent, sécurisent et déploient leurs logiciels.\n\n![Rapport Magic Quadrant™ 2025 de Gartner® dédié aux assistants IA pour le code](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758121248/jfkmhddve6qvlg79xico.png)\n\n> [Téléchargez le rapport complet.](https://about.gitlab.com/gartner-mq-ai-code-assistants/)\n\n## De l'IA à une collaboration intelligente\n\nL'évaluation de Gartner s'est concentrée sur les capacités d'assistance pour le code par IA générative de [GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/ \"GitLab Duo\"). Initialement conçu comme un module d'IA complémentaire à la plateforme [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps ?\") de GitLab, GitLab Duo a posé les fondations de notre vision actuelle : une IA agentique intégrée nativement à la plateforme DevSecOps de GitLab.\n\n[GitLab Duo Agent Platform](https://about.gitlab.com/fr-fr/gitlab-duo/agent-platform/) permet aux équipes de développement de collaborer avec plusieurs agents d'IA qui automatisent des tâches tout au long du cycle de développement logiciel. Ces agents interagissent entre eux et avec les équipes de développement à l'aide du graphe de connaissances de GitLab afin d'avoir une compréhension complète du contexte du projet. Les équipes gagnent ainsi en rapidité tout en conservant visibilité et contrôle sur leurs processus.\n\n* **Des agents spécialisés** prennent en charge simultanément diverses tâches : génération de code, analyse de sécurité et recherche.\n* **Le graphe de connaissances** connecte les agents à un système de référence unifié qui couvre le code, les tickets, les pipelines et les données de conformité.\n* **La collaboration entre humains et agents** s'effectue par le biais d'un chat en langage naturel et de flows personnalisables, avec validation et supervision intégrées.\n* **L'interopérabilité avec les outils et les systèmes externes** est assurée grâce au Model Context Protocol (MCP) et aux frameworks Agent2Agent (A2A).\n\nÉtant donné que les agents gèrent les tâches routinières sous supervision humaine, les équipes peuvent accélérer leur cadence, se concentrer sur les activités à forte valeur ajoutée et maintenir la sécurité et la conformité de leurs projets.\n\n## Conception sécurisée et pratique flexible\n\nGitLab Duo Agent Platform place la [sécurité et la conformité](https://about.gitlab.com/fr-fr/solutions/security-compliance/) au premier plan. Les agents s'exécutent dans l'environnement DevSecOps sécurisé de GitLab, et chaque action peut être suivie et vérifiée avant application des modifications. Les intégrations sécurisées garantissent une gestion sûre des identifiants et données sensibles, tandis que l'interopérabilité via des standards ouverts connecte les agents aux outils externes sans exposer l'entreprise à des risques.\n\nLa plateforme donne aux équipes l'assurance que l'IA améliore leur productivité sans nuire à la gouvernance. \n\nVoici comment chaque partie prenante en bénéficie :\n\n* **Les équipes de développement** se concentrent sur les tâches complexes à fort impact et délèguent les tâches routinières aux agents pour des résultats plus rapides et un contexte plus précis directement dans leurs workflows existants.\n* **Les responsables en ingénierie** gagnent en visibilité sur l'évolution des tâches tout au long du cycle de développement logiciel, car les agents opèrent dans un cadre clairement défini. Ils s'assurent que leurs équipes se concentrent sur les priorités et simplifient l'intégration des nouveaux arrivants à l'aide des agents, qui ont accès au contexte et aux workflows.\n* **Les entreprises informatiques** conservent le contrôle sur l'activité des agents grâce aux fonctionnalités de gouvernance qui appliquent les politiques de codage et de sécurité, offrent une flexibilité dans le choix des modèles et assurent une interopérabilité sécurisée avec une supervision humaine de bout en bout.\n\n## À la pointe du développement avec l’IA native\n\nGitLab poursuit le développement de GitLab Duo et ajoutera de nouveaux agents, des workflows avancés et des capacités d'orchestration étendues à GitLab Duo Agent Platform. Cet engagement en faveur de l'innovation renforce la productivité de vos équipes sur la plateforme que vous connaissez et en laquelle vous avez confiance. Suivez les mises à jour de notre roadmap et découvrez comment nous révolutionnons le DevSecOps avec l'IA native.\n\n> [Téléchargez le rapport Magic Quadrant™ 2025 de Gartner® dédié aux assistants IA pour le code](https://about.gitlab.com/gartner-mq-ai-code-assistants/) et [essayez GitLab Duo Agent Platform dès aujourd'hui](https://about.gitlab.com/fr-fr/gitlab-duo/agent-platform/).\n\n*Source : Gartner, Magic Quadrant for AI Code Assistants, Philip Walsh, Haritha Khandabattu, Matt Brasier, Keith Holloway, Arun Batchu, 15 septembre 2025*\n\n*GARTNER est une marque déposée et une marque de service de Gartner, Inc. et/ou de ses sociétés affiliées aux États-Unis et à l'étranger, et MAGIC QUADRANT est une marque déposée de Gartner Inc. et/ou de ses sociétés affiliées. Elles sont utilisées ici avec autorisation. Tous droits réservés.*\n\n*Gartner ne cautionne aucun fournisseur, produit ou service décrit dans ses publications de recherche, et ne conseille pas aux utilisateurs de la technologie de sélectionner uniquement les fournisseurs ayant les notes les plus élevées ou une autre désignation. Les publications de recherche de Gartner reflètent les opinions de l'organisation de recherche de Gartner et ne doivent pas être interprétées comme des déclarations de fait. Gartner décline toute garantie, expresse ou implicite, à l'égard de cette recherche, y compris toute garantie de qualité marchande ou d'adéquation à un usage particulier.*\n\n*Ce graphique a été publié par Gartner Inc. dans le cadre d'un rapport plus vaste et doit être évalué dans le contexte de l'ensemble du document. Le document Gartner est disponible sur demande auprès de Gartner B.V.*",[799,798,9],"GitLab nommée Leader dans le Magic Quadrant 2025 de Gartner dédié aux assistants IA pour le code","GitLab obtient à nouveau le titre de Leader dans le rapport Magic Quadrant™ 2025 de Gartner® dédié aux assistants IA pour le code pour sa vision et son exécution.",{"featured":6,"template":692,"slug":908},"gitlab-named-a-leader-in-the-2025-gartner-magic-quadrant-for-ai-code-assistants","content:fr-fr:blog:gitlab-named-a-leader-in-the-2025-gartner-magic-quadrant-for-ai-code-assistants.yml","Gitlab Named A Leader In The 2025 Gartner Magic Quadrant For Ai Code Assistants","fr-fr/blog/gitlab-named-a-leader-in-the-2025-gartner-magic-quadrant-for-ai-code-assistants.yml","fr-fr/blog/gitlab-named-a-leader-in-the-2025-gartner-magic-quadrant-for-ai-code-assistants",{"_path":914,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":915,"content":918,"config":929,"_id":931,"_type":14,"title":932,"_source":16,"_file":933,"_stem":934,"_extension":19},"/fr-fr/blog/gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes",{"noIndex":6,"description":916,"title":917},"Découvrez comment l'intégration d'IBM à GitLab allie développement sur mainframe et cloud-native. ","GitLab Ultimate pour IBM Z : DevSecOps moderne sur mainframe",{"heroImage":919,"body":920,"authors":921,"updatedDate":924,"date":925,"title":926,"tags":927,"description":928,"category":799},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750440008/myqt5vcjlffh8sszw507.png","GitLab et IBM unissent leurs forces pour moderniser le développement logiciel sur mainframe. Ce partenariat permet aux équipes de développement mainframe de bénéficier des mêmes outils modernes, workflows et fonctionnalités collaboratives que ceux utilisés dans les environnements distribués. Baptisée GitLab Ultimate pour IBM Z, cette solution d'automatisation DevSecOps intégrée et certifiée par GitLab, adaptée à l'environnement mainframe, relève ce défi. Elle permet aux entreprises de moderniser leurs workflows de développement mainframe grâce à une migration sans accroc depuis les gestionnaires de bibliothèques hérités obsolètes. Avec des pipelines CI/CD exécutés de façon native sur IBM z/OS, ces entreprises sont en mesure d'innover plus rapidement et de réduire les coûts opérationnels.\n\n## Les défis actuels du développement sur mainframe\n\nLes entreprises qui utilisent les systèmes IBM Z pour leurs charges de travail critiques sont confrontées à des défis que les outils DevSecOps classiques ne sont pas en mesure de relever. Tandis que les équipes [cloud-native](https://about.gitlab.com/fr-fr/topics/cloud-native/ \"Qu'est-ce que cloud-native ?\") bénéficient de pipelines [CI/CD](https://about.gitlab.com/topics/ci-cd/) modernes, d'un développement collaboratif fluide et de tests automatisés, les équipes mainframe restent souvent confinées à des outils obsolètes, source d'inefficacités coûteuses et de silos opérationnels.\n\nElles ont souvent recours à des solutions de contournement, telles que les connexions SSH et les transferts manuels de fichiers, qui fragilisent la sécurité et complexifient les audits. Or, dans un contexte de conformité de plus en plus exigeant, ces pratiques improvisées s’exposent à des risques inacceptables. Par ailleurs, les entreprises maintiennent des chaînes d'outils parallèles coûteuses, reposant sur des outils de développement mainframe hérités aux coûts de licence élevés et aux fonctionnalités limitées par rapport aux alternatives modernes.\n\nCette fragmentation crée deux problèmes : des cycles de livraison de logiciels plus lents et une difficulté à attirer des développeurs, qui recherchent des environnements de travail modernes.\n\n> **« GitLab Ultimate pour IBM Z représente une avancée décisive pour résoudre une problématique à laquelle le secteur doit faire face depuis longtemps. D'après les recherches menées par IDC, les équipes de développement mainframe s'appuient encore largement sur des outils hérités qui contribuent à freiner les livraisons et compliquent l'acquisition de nouveaux talents. Avec cette offre conjointe, les fonctionnalités DevSecOps modernes et les workflows unifiés sont intégrés directement au mainframe. Résultat : une collaboration plus fluide et plus efficace pour les équipes de développement, et une accélération de l'innovation pour les entreprises, qui peuvent ainsi totalement intégrer le développement mainframe à leurs stratégies globales de transformation digitale. »** - Katie Norton, Research Manager, DevSecOps and Software Supply Chain Security chez IDC\n\n## Vers des environnements de développement unifiés\n\nUne véritable modernisation du développement mainframe nécessite de concevoir une plateforme unifiée où les équipes mainframe, cloud-native, web et mobile collaborent en harmonie. \n\nGitLab Ultimate pour IBM Z permet aux équipes de développement d'utiliser des workflows cohérents, qu'ils déploient sur z/OS, dans le cloud ou sur une infrastructure locale. Les connaissances sont ainsi transférées entre les équipes au lieu de rester cloisonnées. Les entreprises peuvent ainsi moderniser leurs pratiques progressivement, à leur propre rythme, sans interrompre leurs activités, car les systèmes hérités continuent de fonctionner.\n\nÀ l'heure où les architectures hybrides mêlant mainframe et développement cloud-native deviennent la norme, GitLab fournit une base robuste pour développer des applications entre ces différents environnements.\n\n## Qu'est-ce que GitLab Ultimate pour IBM Z ?\n\nGitLab Ultimate pour IBM Z offre une prise en charge native des runners sur z/OS et permet ainsi une exécution fluide et sécurisée de vos [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD?\") directement sur votre infrastructure mainframe. Cette solution certifiée par GitLab supprime le besoin de solutions de contournement complexes tout en maintenant la sécurité et la fiabilité que vos applications exigent. \n\nEn combinant la plateforme DevSecOps complète de GitLab avec l'expertise approfondie d'IBM en matière de mainframe, cette offre unique et certifiée connecte les systèmes hérités aux pratiques d'innovation cloud-native.\n\n## Quelles fonctionnalités offre GitLab Ultimate pour IBM Z ?\n\nGitLab Ultimate pour IBM Z fournit aux équipes de développement les outils dont elles ont besoin pour moderniser le développement mainframe tout en préservant la continuité des systèmes métier critiques. \n\nVoici les principales fonctionnalités de cette solution intégrée :\n\n**La prise en charge native des runners sur z/OS** : les pipelines CI/CD s'exécutent directement sur votre mainframe. Cette approche réduit les risques de sécurité et les goulots d'étranglement d'évolutivité associés aux connexions distantes, tout en accélérant les déploiements et les livraisons.\n\n**La gestion unifiée du code source** : votre chaîne d'outils est modernisée en remplaçant les outils de gestion de bibliothèques hérités coûteux par le système de dépôt consultable et le [contrôle de version](https://about.gitlab.com/fr-fr/topics/version-control/ \"Qu'est-ce que le contrôle de version ?\") de GitLab. Ainsi, vos coûts de licence et frais de maintenance sont réduits.\n\n**L'intégration fluide** avec IBM Developer for z/OS Enterprise Edition (IDzEE) : les cycles de livraison sont accélérés grâce à des compilations basées sur les dépendances, à une analyse automatique du code et à des outils de débogage complets, directement accessibles dans les environnements de développement habituels. Le tout améliore à la fois la qualité du code et la sécurité des applications, sans perturber les habitudes des équipes. \n\n**La visibilité complète** sur les environnements mainframe et distribués : une gestion complète des projets, de la planification à la production, permet d'automatiser les workflows DevOps et améliore l'expérience développeur grâce à des outils de développement modernes de nouvelle génération.\n\n## Modernisez votre environnement de développement mainframe dès aujourd'hui\n\nGitLab Ultimate pour IBM Z est désormais disponible pour les entreprises prêtes à transformer leur expérience de développement mainframe. Pour en savoir plus, consultez la [page dédiée au partenariat entre GitLab et IBM](https://about.gitlab.com/fr-fr/partners/technology-partners/ibm/).",[922,923],"Mike Flouton","Andy Bradfield","2025-06-30","2025-06-20","GitLab Ultimate pour IBM Z : le DevSecOps moderne sur mainframe",[285,799,109,9],"Découvrez comment l'intégration d'IBM à GitLab allie développement sur mainframe et cloud-native, avec prise en charge des runners CI/CD, visibilité complète et coûts réduits.",{"featured":91,"template":692,"slug":930},"gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes","content:fr-fr:blog:gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes.yml","Gitlab Ultimate For Ibm Z Modern Devsecops For Mainframes","fr-fr/blog/gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes.yml","fr-fr/blog/gitlab-ultimate-for-ibm-z-modern-devsecops-for-mainframes",{"_path":936,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":937,"content":943,"config":949,"_id":951,"_type":14,"title":952,"_source":16,"_file":953,"_stem":954,"_extension":19},"/fr-fr/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code",{"title":938,"description":939,"ogTitle":938,"ogDescription":939,"noIndex":6,"ogImage":940,"ogUrl":941,"ogSiteName":674,"ogType":675,"canonicalUrls":941,"schema":942},"Développement de GitLab Duo : tester et sécuriser le code généré par l'IA ","Découvrez, étape par étape, comment améliorer la fiabilité et la sécurité du code généré par l'IA à l'aide de GitLab Duo et de GitLab Pages.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097183/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750097183481.png","https://about.gitlab.com/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Développement de GitLab Duo : tester et sécuriser le code généré par l'IA \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David O'Regan\"}],\n        \"datePublished\": \"2024-05-30\",\n      }\n                  ",{"title":938,"description":939,"authors":944,"heroImage":940,"date":946,"body":947,"category":684,"tags":948},[945],"David O'Regan","2024-05-30","___L'IA générative marque une avancée majeure dans le domaine du développement logiciel, simplifiant le processus de développement, de sécurisation et d'exploitation des logiciels. Notre nouvelle série d'articles de blog, rédigée par nos équipes produit et ingénierie, vous propose un aperçu de notre processus de création, de test et de déploiement des fonctionnalités d'IA que vous avez besoin d'intégrer dans l'ensemble de l'entreprise. Explorez les nouvelles capacités de GitLab Duo et découvrez comment elles aideront les équipes DevSecOps à livrer de meilleurs résultats aux clients.___\n\nAlors que l’intelligence artificielle continue de révolutionner le domaine du développement logiciel, il est essentiel d’effectuer des tests approfondis du code qu’elle génère pour en assurer sa sécurité. Découvrez dans cet article comment combiner [GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/), notre suite de fonctionnalités d'IA qui alimente le workflow DevSecOps, et [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/) afin de tester rigoureusement et de sécuriser le code généré par l'IA. \n\n## Les défis du code généré par l'IA\n\nLe code généré par l'IA n'est pas toujours parfait et peut parfois être affecté par différents types de problèmes, parmi lesquels : des algorithmes incorrects ou incomplets, des problèmes de dépendance, ou encore des failles de sécurité.\n\nD'après une [étude publiée par l'Association of Computing Machinery](https://dl.acm.org/doi/pdf/10.1145/3613904.3642596), qui a analysé les réponses fournies par ChatGPT aux questions de programmation, 52 % des réponses contenaient des informations incorrectes et 77 % étaient jugées trop prolixes. Malgré ces lacunes, les utilisateurs ont préféré les réponses complètes et bien articulées de ChatGPT dans 35 % des cas, allant même jusqu'à ignorer les informations incorrectes dans 39 % des cas. Pour surmonter ces défis, il est donc essentiel de recourir à des outils et frameworks avancés.\n\n## L'approche de GitLab en matière de sécurité et de tests de l'IA\n\nGitLab a élaboré une stratégie de contenu complète axée sur l’intégration de mesures de sécurité dans le workflow de développement. En tirant parti de GitLab Duo pour la génération de code alimentée par l'IA et de GitLab Pages pour intégrer des rapports de test, les développeurs peuvent ainsi s'assurer que leur code généré par l'IA est à la fois sécurisé et fiable.\n\nVoici un guide détaillé pour intégrer GitLab Duo et GitLab Pages avec un [serveur Web Flask](https://flask.palletsprojects.com/en/3.0.x/).\n\n### 1. Créez un nouveau projet sur GitLab.com\n\n- Accédez à [GitLab.com](http://GitLab.com).\n- Cliquez sur le bouton « Nouveau projet ».\n- Sélectionnez « Créer un projet vide ».\n- Attribuez un nom au projet (par exemple, AI_Code_Security).\n- Définissez le niveau de visibilité (Privé, Interne ou Public).\n- Cliquez sur « Créer le projet ».\n\n### 2. Activez les suggestions de code de GitLab Duo\n\n- Accédez à votre projet.\n- Cliquez sur le bouton « Web IDE » pour ouvrir le Web IDE.\n- Assurez-vous que les fonctionnalités de GitLab Duo, telles que les suggestions de code et GitLab Duo Chat, sont activées.\n- Commencez à coder dans le [Web IDE](https://docs.gitlab.com/ee/user/project/web_ide/). GitLab Duo vous propose des suggestions de code en temps réel pour améliorer votre programmation.\n\n### 3. Créez un serveur Web Flask\n\nVous pouvez créer un serveur Web Flask en utilisant le commentaire (surligné en vert) dans la capture d'écran ci-dessous.\n\n![Test DGD - image 1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750097192520.png)\n\n### 4. Générez des tests avec GitLab Duo\n\nLes tests unitaires sont essentiels pour valider la fonctionnalité du code généré. Utilisez la commande `/tests` de GitLab Duo pour [générer des suggestions de tests directement dans le Web IDE](https://docs.gitlab.com/ee/user/gitlab_duo_chat_examples.html#write-tests-in-the-ide). Cette commande peut être adaptée pour inclure des instructions supplémentaires afin de se concentrer sur certains aspects tels que la performance, la régression ou l'utilisation de frameworks spécifiques.\n\n##### Exemple d'utilisation dans le Web IDE :\n\n- Sélectionnez le code pour lequel vous souhaitez générer des tests.\n- Utilisez la commande `/tests` suivie d'instructions supplémentaires si nécessaire.\n\n![Test DGD - image 2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097192521.png)\n\n### 5. Identifiez les problèmes liés au code généré par l'IA à l'aide de GitLab Duo Chat\n\nEffectuez une revue de code avec GitLab Duo Chat et affinez le code généré par l'IA. Par exemple, vous pouvez rechercher des vulnérabilités de sécurité dans le code du serveur Web Flask :\n\n```unset\nPrompt : Examinez ce code pour détecter d'éventuelles vulnérabilités en matière de sécurité et des problèmes de dépendance.\n```\n\n![Test DGD - image 3](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097192523.png)\n\nGitLab Duo Chat peut permettre d'identifier les vulnérabilités dans le code ci-dessus.\n\n### 6. Générez des rapports de test\nAprès avoir effectué vos tests, générez un rapport de test qui sera déployé à l'aide de GitLab Pages.\n\n```unset\nPrompt : Écrivez-moi un script Python pour générer un rapport de test qui sera déployé à l'aide de GitLab Pages.\n```\n\n![Test DGD - image 4](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097192525.png)\n\nVoici l'exécution du prompt :\n\n- Le script s'assure de l'existence du répertoire test_reports.\n- Il exécute le fichier `test_server.py` à l'aide de `subprocess.run()`, en capturant la sortie.\n- La sortie brute est enregistrée dans `test_reports/test_output.txt`.\n- Un rapport HTML est généré. Il est enregistré sous `test_reports/index.html` et intègre la sortie du test dans des balises `\u003Cpre>` pour en assurer la lisibilité.\n\n### 7. Déployez le rapport de test avec GitLab Pages\n\nUtilisez [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/) pour héberger et afficher le rapport de test. Voici la configuration de notre fichier `.gitlab-ci.yml` pour déployer le rapport de test.\n\n```python\n\nstages:\n  - test\n  - deploy\ntest_job:\n  stage: test\n  script:\n    - python generate_test_report.py\n  artifacts:\n    paths:\n      - test_reports/\npages:\n  stage: deploy\n  script:\n    - mv test_reports public\n  artifacts:\n    paths:\n      - public\n\n ```\n\nAvec cette configuration, l'étape `test_job` exécute le script Python pour générer le rapport de test. L'étape `pages` déplace le répertoire `test_reports` vers `public` que GitLab Pages utilise pour diffuser le contenu.\n\n### 8. Intégrez les rapports de test dans les widgets MR\n\nL'intégration des [rapports de test dans les widgets MR](https://docs.gitlab.com/ee/ci/testing/unit_test_reports.html) permet de visualiser immédiatement les résultats des tests. Vous pouvez ainsi inclure le rapport de test en tant qu'artefact dans la configuration de votre [pipeline CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ? \") :\n\n```python\n\nstages:\n  - build\n  - test\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"Building the project...\"\n    - # Your build commands here\n\ntest_job:\n  stage: test\n  script:\n    - mkdir -p test-reports\n    - python test_server.py > test-reports/results.xml\n  artifacts:\n    when: always\n    reports:\n      junit: test-reports/results.xml\n    paths:\n      - test-reports/results.xml\n\npages:\n  stage: deploy\n  script:\n    - mkdir .public\n    - mv test-reports .public/\n  artifacts:\n    paths:\n      - .public\n\n```\nEn incluant le rapport de test en tant qu'artefact et en l'indiquant dans la section des rapports, GitLab affiche automatiquement les résultats des tests dans les widgets MR. Vous disposez alors d'une visibilité immédiate sur les résultats des tests, renforçant ainsi la transparence et la fiabilité du processus de développement.\n\n### Étude de cas \n\nImaginez qu'un extrait de code généré par l'IA introduise une dépendance présentant des vulnérabilités connues. Avec ses stratégies de sécurité, GitLab Duo signalerait cette dépendance lors du processus de génération de code. Dans l'exemple ci-dessous, l'extrait de code a été généré par l'IA :\n\n```python\n\nimport os\nfrom flask import Flask, request\n\napp = Flask(__name__)\n\n@app.route('/search')\ndef search():\n    query = request.args.get('query')\n    execute_os_command(query)\n    return 'You searched for: ' + query\n\ndef execute_os_command(command):\n    os.system(command)\n\nif __name__ == '__main__':\n    app.run()\n\n```\n\nDans cet exemple, le point de terminaison de recherche est exposé à une vulnérabilité d'injection de commandes dans le système d'exploitation. Grâce au test statique de sécurité des applications ([SAST](https://docs.gitlab.com/ee/user/application_security/sast/)) de GitLab, cette vulnérabilité serait détectée lors de l'exécution du pipeline CI/CD.\n\n##### Intégrez le scan SAST pour détecter les vulnérabilités\n\nLe SAST de GitLab analyse automatiquement votre code à la recherche de failles de sécurité. Voici comment l'intégrer dans votre fichier `.gitlab-ci.yml` pour détecter des problèmes :\n\n```python\n\nstages:\n  - build\n  - test\n  - sast\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"Building the project...\"\n    - # Your build commands here\n\ntest_job:\n  stage: test\n  script:\n    - python test_server.py > test-reports/results.xml\n  artifacts:\n    when: always\n    reports:\n      junit: test-reports/results.xml\n    paths:\n      - test-reports/results.xml\n\nsast_job:\n  stage: sast\n  script:\n    - echo \"Running SAST...\"\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n  only:\n    - branches\n\npages:\n  stage: deploy\n  script:\n    - mv test-reports public\n  artifacts:\n    paths:\n      - public\n\n```\n\nDans cette configuration, l'étape `sast_job` exécute le SAST pour détecter les vulnérabilités dans le code. Un rapport est généré (`gl-sast-report.json`), qui sera inclus dans les artefacts du pipeline. En intégrant des stratégies de sécurité et des frameworks de test robustes, GitLab Duo aide ses clients à s'assurer que leur code généré par l'IA est à la fois efficace et sécurisé.\n\n## Commencez dès maintenant\nL'utilisation de l'IA dans le développement logiciel est très prometteuse, mais présente également de nouveaux défis à relever. En exploitant les fonctionnalités avancées d'outils tels que GitLab Duo et GitLab Pages, les développeurs peuvent désormais réaliser des tests approfondis du code produit par l'IA pour garantir sa sécurité et sa fiabilité. \n\n> [Testez GitLab Ultimate gratuitement](https://gitlab.com/-/trials/new?glm_content=+default-saas-trial&glm_source=about.gitlab.com%2Fblog) et accédez aux fonctionnalités avancées de GitLab Duo et GitLab Pages.\n\n## En savoir plus sur la série d’articles dédiée au « Développement de GitLab Duo »\n\n- [Comment nous validons et testons les modèles d'IA à grande échelle](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale/)\n- [Mesurer le ROI de l’IA avec le tableau de bord d'analyse d'impact](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/)\n- [Comment nous utilisons nos propres fonctionnalités d’IA](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-how-we-are-dogfooding-our-ai-features/)\n",[686,9,687,773],{"slug":950,"featured":6,"template":692},"how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code","content:fr-fr:blog:how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code.yml","How Gitlab Duo Helps Secure And Thoroughly Test Ai Generated Code","fr-fr/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code.yml","fr-fr/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code",{"_path":956,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":957,"content":963,"config":970,"_id":972,"_type":14,"title":973,"_source":16,"_file":974,"_stem":975,"_extension":19},"/fr-fr/blog/introducing-the-source-insights-for-the-future-of-software-development",{"title":958,"description":959,"ogTitle":958,"ogDescription":959,"noIndex":6,"ogImage":960,"ogUrl":961,"ogSiteName":674,"ogType":675,"canonicalUrls":961,"schema":962},"The Source : une mine d'informations sur l'avenir du développement logiciel","Découvrez des stratégies de développement logiciel transformatrices et des conseils d'experts sur les technologies émergentes.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749674616/Blog/Hero%20Images/blog-image-template-1800x945__1_.png","https://about.gitlab.com/blog/introducing-the-source-insights-for-the-future-of-software-development","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The Source : une mine d'informations sur l'avenir du développement logiciel\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chandler Gibbons\"}],\n        \"datePublished\": \"2024-10-29\",\n      }\n                  ",{"title":958,"description":959,"authors":964,"heroImage":960,"date":966,"body":967,"category":798,"tags":968,"updatedDate":969},[965],"Chandler Gibbons","2024-10-29","Le développement logiciel moderne transforme la façon dont les entreprises créent, proposent et développent de la valeur commerciale. Les équipes doivent être en mesure d’élaborer des solutions rapidement et efficacement, tout en gérant les menaces de sécurité croissantes, les technologies émergentes et les exigences de conformité de plus en plus complexes.\n\nAujourd'hui, GitLab lance [The Source](https://about.gitlab.com/fr-fr/the-source/), une nouvelle publication qui couvre l'évolution du développement logiciel en tant que moteur de la réussite commerciale. Nous partageons régulièrement des informations clés sur l'avenir du développement logiciel, étayées par les recherches et les analyses originales de nos experts métier et de nos leaders d'opinion.\n\nThe Source vous permet par exemple de trouver des réponses aux questions suivantes : \n* Comment les dirigeants peuvent-ils mesurer le retour sur investissement de l'IA tout au long du cycle de développement logiciel ?  \n* Quelle est la meilleure façon de garantir la sécurité et la conformité tout au long de la chaîne d'approvisionnement logicielle ?\n* Quels gains de productivité les équipes peuvent-elles réaliser grâce à la consolidation de leur plateforme et de leur chaîne d'outils ?\n\nVoici un aperçu du contenu que vous pouvez d'ores et déjà retrouver sur The Source : \n\n**Mesurer l'impact de l'IA : 4 étapes indispensables**\n\n« L'évaluation de la productivité dans un contexte de développement amélioré par l'IA nécessite une approche plus nuancée que celle reposant sur les indicateurs traditionnels tels que les lignes de code, les validations de code ou l'achèvement des tâches. Elle nécessite une réorientation vers des résultats commerciaux concrets qui permettent d'équilibrer la rapidité de développement, la qualité des logiciels et la sécurité. »\n- [Taylor McCaslin, expert en IA, présente les 4 étapes indispensables pour mesurer l'impact de l'IA.](https://about.gitlab.com/fr-fr/the-source/ai/4-steps-for-measuring-the-impact-of-ai/)\n\n**Identifier et remédier aux points de friction liés à la sécurité**\n\n« Bien que l'approche DevSecOps promette une meilleure intégration entre l'ingénierie et la sécurité, la présence de frustrations et de déséquilibres montre que des défis subsistent. Ce constat reflète un problème plus large lié à la manière dont les entreprises perçoivent la sécurité, organisent la collaboration entre les équipes, et allouent du temps à cette priorité. »\n- [Trouvez le bon équilibre, grâce à l'expertise de Josh Lemos, CISO de GitLab.](https://about.gitlab.com/fr-fr/the-source/security/security-its-more-than-culture-addressing-the-root-cause-of-common-security/)\n\n**L'ingénierie de plateforme au service de la réussite des entreprises**\n\n« En normalisant et en optimisant les workflows des équipes de développement, l'ingénierie de plateforme crée des \"golden paths\" optimisés pour les tâches courantes tout en offrant la flexibilité nécessaire pour les tâches plus uniques et spécialisées. »  \n- [Découvrez les bonnes pratiques de Brian Wald (GitLab Field CTO) en matière d'ingénierie de plateforme.](https://about.gitlab.com/fr-fr/the-source/platform/driving-business-results-with-platform-engineering/)\n\n## The Source, votre partenaire pour la prise de décision\n\nConsultez [The Source](https://about.gitlab.com/fr-fr/the-source/) dès aujourd'hui pour découvrir les dernières informations du secteur, obtenir des réponses en matière de leadership et découvrir les dernières nouveautés du marché à partager avec vos équipes. Vous pouvez également vous abonner à notre newsletter pour recevoir des mises à jour régulières par e-mail. Rejoignez notre communauté de leaders technologiques avant-gardistes et contribuez à façonner l'avenir du développement logiciel.",[686,773,798,9],"2024-11-11",{"slug":971,"featured":91,"template":692},"introducing-the-source-insights-for-the-future-of-software-development","content:fr-fr:blog:introducing-the-source-insights-for-the-future-of-software-development.yml","Introducing The Source Insights For The Future Of Software Development","fr-fr/blog/introducing-the-source-insights-for-the-future-of-software-development.yml","fr-fr/blog/introducing-the-source-insights-for-the-future-of-software-development",{"_path":977,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":978,"content":984,"config":990,"_id":992,"_type":14,"title":993,"_source":16,"_file":994,"_stem":995,"_extension":19},"/fr-fr/blog/jenkins-to-gitlab-migration-made-easy",{"title":979,"description":980,"ogTitle":979,"ogDescription":980,"noIndex":6,"ogImage":981,"ogUrl":982,"ogSiteName":674,"ogType":675,"canonicalUrls":982,"schema":983},"Migrer de Jenkins vers GitLab : le guide complet","Découvrez pourquoi et comment migrer facilement de Jenkins vers GitLab en suivant ce guide étape par étape.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663019/Blog/Hero%20Images/AdobeStock_519147119.jpg","https://about.gitlab.com/blog/jenkins-to-gitlab-migration-made-easy","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Migrer de Jenkins vers GitLab : le guide complet\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fernando Diaz\"}],\n        \"datePublished\": \"2024-02-01\",\n      }",{"title":979,"description":980,"authors":985,"heroImage":981,"date":986,"body":987,"category":10,"tags":988,"updatedDate":989},[770],"2024-02-01","GitLab est la plateforme DevSecOps alimentée par l'IA la plus complète. En effet, GitLab fournit toutes les fonctionnalités dont vous avez besoin pour planifier, développer et livrer des logiciels sécurisés plus rapidement, le tout au sein d'une seule et même plateforme. \n\nLes plateformes comme GitLab éliminent les difficultés et les défis liés à l'intégration de multiples outils (approche DevOps DIY) pour gérer au mieux le cycle de vie du développement logiciel (SDLC). À l'inverse, Jenkins n'étant pas une plateforme, des outils supplémentaires sont nécessaires pour compléter le SDLC. Cette approche DevOps DIY introduit une complexité supplémentaire liée à la chaîne d'outils, et génère un certain nombre d'inconvénients comme : \n\n- La nécessité d'une assistance personnalisée pour l'intégration et l'orchestration des outils\n- La difficulté à tenir à jour/mettre à niveau/sécuriser des outils disparates\n- L'impossibilité de mesurer correctement la transformation organisationnelle\n- Une mauvaise expérience des équipes de développement \n- Des coûts supplémentaires en lien avec la gestion, les délais et le budget\n- Une perte de productivité\n- Un changement de contexte et une inefficacité en terme de collaboration\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752175993/Blog/ikr97sr9jclddeqdg7ew.png\" alt=\"Import project selection\">\n   \u003Cfigcaption>DevOps DIY versus plateforme DevSecOps\u003C/figcaption>\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\nPour ces raisons, de nombreuses équipes de développement utilisant Jenkins envisagent de migrer vers une plateforme [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que l'approche DevSecOps ?\") complète. Si vous recherchez une plateforme puissante, fiable et sécurisée, GitLab est votre meilleure option ! GitLab propose une version gratuite ainsi que différents niveaux d'abonnement en fonction des besoins de votre entreprise. Pour en savoir plus sur nos offres et fonctionnalités, consultez notre [page tarifaire](https://about.gitlab.com/fr-fr/pricing/).\n\nDécouvrez dans cet article de blog :\n- Comment planifier une migration\n- Comment migrer des dépôts depuis d'autres outils de gestion du code source (SCM) vers GitLab\n- Comment migrer des pipelines CI/CD de Jenkins vers GitLab\n\n## Comment planifier une migration de Jenkins vers GitLab ? \n\nAvant d'initier la migration de vos dépôts hébergés sur un autre outil vers GitLab CI/CD, vous devez élaborer un plan de migration. Cette étape technique est importante et vous permet de définir clairement vos attentes. Les outils CI/CD diffèrent par leur approche, leur structure et leurs spécificités techniques. Par conséquent, les migrations ne sont pas de simples transferts directs des données. \n\nUn plan de migration offre les avantages suivants :\n- Il définit et communique une vision claire de vos objectifs de migration, ce qui aide les personnes impliquées à comprendre le but de cette opération. \n- Il vous permet de vous assurer d’obtenir l'aval des équipes de direction concernées pour faciliter cette démarche.\n- Il permet d'expliquer aux utilisateurs les changements à venir.\n- Il permet de trouver des moyens de séquencer ou de retarder certaines étapes de la migration pour éviter l'échec de la migration ou une migration partielle.\n- Il documente les avantages des améliorations apportées par GitLab CI/CD et met à jour votre mise en œuvre à chaque étape de la migration.\n\nUn plan de migration vous aide à mettre en place un processus fluide permettant de migrer progressivement vers GitLab, avec un minimum de perturbations. Il peut s'agir d’exécuter simultanément Jenkins et GitLab, tandis que certains projets sont transférés de Jenkins vers GitLab.\n\n### Définissez un processus de gestion du changement\n\nIl se peut que les développeurs, opérateurs informatiques, administrateurs cloud, équipes en charge de la sécurité, ainsi que les ingénieurs qualité n'aient pas d'expérience avec GitLab et ne sachent pas pourquoi vous ou votre équipe de direction avez choisi de réaliser cette migration. C'est pourquoi votre plan de migration doit inclure un processus efficace de gestion du changement. \n\nLes personnes impactées par cette migration doivent savoir :\n- __Pourquoi__ ce changement est nécessaire\n- __À quoi__ ressemblera le futur système\n- __Comment__ l'entreprise prévoit d'atteindre cet objectif\n- __Vers qui__ se tourner pour obtenir plus d'informations ou de l'aide \n\nÀ cette fin, vous devez réaliser les étapes suivantes afin de gérer efficacement le changement au sein des différentes équipes fonctionnelles : \n- __Analysez l'état actuel__ : documentez les processus existants. Collectez des indicateurs qui serviront de base de référence. Identifiez ce qui fonctionne ou non avec l'[approche CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/ \"Qu'est-ce que le CI/CD ?\") en interrogeant certains membres de votre équipe. Documentez les défis que vous devez relever, et ce d'un point de vue quantitatif et qualitatif. Comme vous allez devoir expliquer les raisons de ce changement et votre vision, plus vous définirez clairement les problématiques que vous espérez résoudre, plus il vous sera facile d'obtenir l'adhésion de tous. \n- __Établissez une vision__ : maintenant que vous avez décrit les points de friction actuels quantitativement avec des indicateurs de référence et qualitativement (en vous basant sur les retours des membres de votre équipe), communiquez une vision de l'état futur. Expliquez pourquoi c'est important (en vous référant aux indicateurs de réussite de votre entreprise) et partagez l’état actuel de la situation et les résultats attendus. Renforcez ce message par le biais de différents canaux de communication : groupes de discussion, réunions rassemblant l'ensemble des acteurs de l'entreprise, ou encore notifications par e-mail.\n- __Formez les collaborateurs__ : investissez dans une [formation sur GitLab CI/CD](https://about.gitlab.com/services/education/gitlab-ci/) dispensée par un expert GitLab. Mesurez l'acquisition et la mémorisation des connaissances à l'aide des [certifications GitLab](https://levelup.gitlab.com/pages/certifications). \n- __Communiquez la roadmap et les ressources__ : partagez avec les membres de votre équipe le calendrier prévu de la migration et les ressources mises à leur disposition pour faciliter la transition. Mentionnez également les ressources communautaires (groupes de discussion, forums), afin que votre équipe puisse poser des questions et obtenir de l'aide. Créez un système qui récompense les équipes qui effectuent rapidement cette transition, et encouragez-les à partager leur expérience avec d'autres équipes similaires au sein de l'entreprise.\n\nSi vous mettez en place ces éléments dès le début de cette transition, cela sera de bon augure pour la réussite de votre migration. \n\n### Définissez des objectifs de migration\n\nAvant d'effectuer votre migration, vous devez avoir une bonne compréhension de vos objectifs et de la façon de les atteindre. Voici par exemple certaines des questions auxquelles vous devez pouvoir répondre :\n\n- Quel est votre calendrier de migration ?\n- Quelle est la configuration actuelle de votre serveur Jenkins ?\n- Combien de projets sont concernés par la migration ?\n- Quel est le degré de complexité de votre pipeline ?\n- Nécessite-t-il des dépendances externes, plusieurs déclencheurs pour s'exécuter, exécute-t-il plusieurs processus en parallèle pour compiler le code, etc. ?\n- Comment/où déployez-vous votre code ?\n- Quel est le processus de revue/sortie des nouvelles versions et de déploiement du code ?\n- Est-il intégré dans Jenkins ou dans un workflow distinct déclenché par Jenkins ?\n- Quels artefacts de compilation ou binaires sont nécessaires au succès du pipeline ?\n- Quels plug-ins sont utilisés par les jobs dans Jenkins aujourd'hui ?\n- Quel logiciel est installé sur les agents Jenkins ?\n- Quelle solution de gestion du code source (SCM) utilisez-vous actuellement ?\n- Utilisez-vous des bibliothèques partagées dans vos jobs Jenkins ?\n- Quelle méthode d'authentification est utilisée pour Jenkins (Basic Authentication, LDAP/AD, SSO) ?\n- Y a-t-il d'autres projets auxquels vous devez accéder depuis votre pipeline ?\n- Des identifiants de connexion dans Jenkins sont-ils utilisés pour accéder à des services externes ?\n\nEn répondant à ces questions, vous saurez comment procéder à la migration, combien de temps durera cette opération et par où commencer. Une fois que vous avez élaboré un plan et que vous êtes conscient des attentes et des écueils possibles, vous pouvez commencer votre processus de migration.\n\n## Prérequis à la migration\n\nUne fois que vous avez créé votre plan de migration et répondu à toutes les attentes associées, vous pouvez commencer à configurer GitLab. \n\nVoici certains des prérequis suggérés pour la migration :\n- Familiarisez-vous avec GitLab et découvrez les [fonctionnalités clés de GitLab CI/CD](https://docs.gitlab.com/ee/ci/index.html).\n- Suivez des tutoriels pour créer votre premier [pipeline GitLab](https://docs.gitlab.com/ee/ci/quick_start/index.html) et des [pipelines plus complexes](https://docs.gitlab.com/ee/ci/quick_start/tutorial.html) qui créent, testent et déploient un site statique.\n- Passez en revue la [liste des mots-clés de configuration .gitlab-ci.yml](https://docs.gitlab.com/ee/ci/yaml/index.html).\n- Configurez GitLab.\n- Testez votre instance GitLab.\n\nUne fois que vous avez compris le fonctionnement de GitLab et qu'une instance a été configurée, vous pouvez suivre votre plan de migration et commencer à déplacer des projets de Jenkins vers GitLab. Vérifiez que votre instance GitLab a été correctement configurée à l'aide des bonnes pratiques et des [architectures de référence](https://docs.gitlab.com/ee/administration/reference_architectures/) de GitLab.\n\n### Migrez vos dépôts vers GitLab\nL'un des principaux inconvénients de Jenkins est qu'il ne fournit pas de solution SCM. Si vous utilisez Jenkins, votre code doit être stocké dans une solution SCM distincte à laquelle Jenkins doit avoir accès. Comme GitLab dispose d'un SCM intégré, la migration depuis Jenkins vous permet également de migrer depuis la solution SCM que vous utilisiez, ce qui entraîne une réduction supplémentaire des coûts.\n\nGitLab fournit des outils pour vous permettre de déplacer facilement votre dépôt et ses métadonnées dans GitLab. Les outils d'importation suivants sont inclus et vous aideront à migrer vos projets vers GitLab :\n\n- [GitHub](https://docs.gitlab.com/ee/user/project/import/github.html)\n- [Autre instance GitLab](https://docs.gitlab.com/ee/user/project/settings/import_export.html)\n- [Bitbucket Cloud](https://docs.gitlab.com/ee/user/project/import/bitbucket.html)\n- [Bitbucket Server](https://docs.gitlab.com/ee/user/project/import/bitbucket_server.html)\n- [FogBugz](https://docs.gitlab.com/ee/user/project/import/fogbugz.html)\n- [Gitea](https://docs.gitlab.com/ee/user/project/import/gitea.html)\n- [Jira (Tickets uniquement)](https://docs.gitlab.com/ee/user/project/import/jira.html)\n- [Dépôt par fichier manifeste](https://docs.gitlab.com/ee/user/project/import/manifest.html)\n- [Dépôt par URL](https://docs.gitlab.com/ee/user/project/import/repo_by_url.html)\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176002/Blog/ie2xrexhbcoq6m8rnhit.png\" alt=\"GitHub to GitLab Repo Exporter\">\n   \u003Cfigcaption>Outil d'exportation de dépôt de GitHub vers GitLab\u003C/figcaption>\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\nChaque outil d'importation importe différentes données d'un projet. Lisez notre [documentation sur l'importation et la migration de projets](https://docs.gitlab.com/ee/user/project/import/) pour en savoir plus sur les outils d'importation fournis et comprendre quelles données sont migrées vers GitLab. De plus, vous pouvez [automatiser l'importation de groupes et de projets](https://docs.gitlab.com/ee/user/project/import/#automate-group-and-project-import) et créer une solution personnalisée pour mieux répondre aux besoins de votre entreprise :\n\n- [Services professionnels](https://about.gitlab.com/services/)\n- [Services de migration](https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/blob/master/docs/using-congregate.md#quick-start)\n- [Foire aux questions sur la migration](https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/blob/master/customer/famq.md)\n\n#### Comment migrer un dépôt ? \n\nLa migration d'un dépôt vers GitLab est facile grâce à nos outils d'importation intégrés. Dans cet exemple, nous allons vous expliquer comment copier un dépôt de GitHub vers GitLab ainsi que [ses ressources](https://docs.gitlab.com/ee/user/project/import/github.html#imported-data) (tickets, pull requests, jalons et plus encore). \n\nAfin de migrer un dépôt depuis GitHub vers GitLab, vous pouvez suivre les étapes ci-dessous :\n\n1. Dans la barre latérale de gauche, en haut, sélectionnez **Créer un nouveau (+)**.\n2. Sélectionnez **Nouveau projet/dépôt**.\n3. Sélectionnez **Importer un projet**.\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176017/Blog/boowmmaqhbredxa3g92s.png\" alt=\"Import project selection\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n4. Cliquez sur le bouton **GitHub**.\n    - Si vous utilisez GitLab Self-Managed, vous devez [activer l'outil d'importation GitHub](https://docs.gitlab.com/ee/administration/settings/import_and_export_settings.html#configure-allowed-import-sources).\n    - Notez que d'autres outils d'importation peuvent être lancés de la même manière.\n5. Vous pouvez ensuite utiliser l'une des deux options ci-dessous :\n    - Autoriser OAuth de GitHub en sélectionnant **Autoriser avec GitHub**.\n    - Utiliser un jeton d'accès personnel GitHub :\n       - Accédez à la page [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new).\n       - Dans le champ **Note**, saisissez une description du token.\n       - Sélectionnez la portée du dépôt.\n       - En option, pour importer des collaborateurs, sélectionnez la portée **read:org**.\n       - Cliquez sur le bouton **Générer un token**.\n       - Sur la page d'importation de GitLab, dans le champ **Jeton d'accès personnel**, collez le jeton d'accès personnel GitHub.\n6. Cliquez sur le bouton **Authentification**.\n7. Sélectionnez les éléments que vous souhaitez migrer.\n8. Sélectionnez les projets que vous souhaitez migrer et leur destination.\n9. Cliquez sur le bouton **Importer**.\n\nLe projet importé devrait maintenant être disponible dans votre espace de travail. Pour en savoir plus sur la migration de GitHub vers GitLab, regardez cette vidéo :\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/0Id5oMl1Kqs?si=TQ5HI9aMwtzJMiMi\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\nUne fois que vous avez terminé la migration de votre dépôt, vous pouvez configurer votre pipeline Jenkins pour exploiter le fichier Jenkinsfile dans GitLab. Pour ce faire, définissez l'URL du dépôt sur le projet que vous venez tout juste d'importer via le menu de configuration du pipeline Jenkins :\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176020/Blog/mu475liw66abcxbu2g6g.png\" alt=\"Jenkins Pipeline SCM settings\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\nCette opération est utile pendant la phase de migration initiale du dépôt et vous permet d'utiliser Jenkins et GitLab en parallèle. Vous évitez ainsi toute interruption de service pendant que vous travaillez sur votre migration.\n\nDe plus, vous pouvez utiliser le [plug-in Jenkins GitLab](https://plugins.jenkins.io/gitlab-plugin/) pour faciliter la migration. Ce plug-in permet à GitLab de déclencher et d'obtenir le statut des compilations Jenkins.\n\n### Migrez vos pipelines CI/CD\nUne fois que vous avez migré vos dépôts vers GitLab, vous pouvez procéder à la migration de vos pipelines Jenkins. Bien qu'assez simple, ce processus nécessite une bonne compréhension des concepts et de la syntaxe Jenkins et GitLab.\n\nJenkins fournit deux types de syntaxe pour la définition des pipelines : une syntaxe déclarative et une syntaxe scriptée. Dans ce guide, nous décrirons la migration à partir des pipelines déclaratifs, car ils sont les plus couramment utilisés.\n\n#### Migrez votre pipeline étape par étape\n\nDans ce tutoriel, nous analyserons un fichier Jenkinsfile (Groovy) ainsi qu'un fichier de configuration GitLab CI/CD (YAML) qui compile, teste et déploie un microservice écrit en Golang. Nous activerons ensuite le pipeline dans GitLab et observerons le résultat. \n\nLe pipeline :\n- Utilisera l'image de conteneur Golang avec le tag **alpine**\n- Exécutera un job pour compiler le code Golang en un fichier binaire exécutable\n   - Stockera le fichier exécutable compilé en tant qu'artefact\n- Exécutera un job pour lancer les tests unitaires\n- Exécutera un job pour effectuer le déploiement sur l'environnement de préproduction\n   - Ne s'exécutera que si la validation cible la branche de **préproduction**\n   - S'exécutera uniquement après la réussite de l'étape de **test**\n   - Utilisera l'artefact exécutable compilé du job précédent\n\nVous trouverez ci-dessous les définitions de pipeline Jenkins et GitLab accompagnées de commentaires descriptifs. Vous pouvez observer le pipeline en action dans le [projet de migration Meow](https://gitlab.com/gitlab-da/projects/blogs/meow-migration).\n\nVoici un fichier Jenkinsfile écrit en Groovy :\n\n```  \n// The top-level of the declarative\n// pipeline.\npipeline {\n\n  // Defines the default agent to use\n  // when it is not explicitly defined\n  // in a job.\n    agent any\n\n  // Defines the stages that will run\n  // in numerical order. Each stage\n  // only runs one job.\n    stages {\n\n    // Defines the name of the stage\n        stage('build') {\n      // Defines the container image to\n      // use for this job, overwriting\n      // the default 'agent any'.\n      // The Jenkins Docker plugin\n      // must be configured for this\n      // to run.\n            agent { docker 'golang:alpine' }\n\n      // Defines the sequence of steps\n      // to execute when the stage is\n      // run.\n            steps {\n                sh 'go build -o bin/meow-micro'\n                sh 'chmod +x bin/meow-micro'\n            }\n\n      // The steps to run after the\n      // stage completes.\n            post {\n              always {\n\n        // Stores the stage artifacts\n        // generated for use in another\n        // job.\n                archiveArtifacts artifacts: 'bin/meow-micro'\n                onlyIfSuccessful: true\n              }\n            }\n        }\n\n    stage('test') {\n            agent { docker 'golang:alpine' }\n            steps {\n                sh 'go test .'\n            }\n        }\n\n        stage('deploy') {\n      // Defines conditions which must\n      // be met in order for the job to\n      // execute. In this case the\n      // deploy job will only run on the \n      // staging branch.\n            when {\n              branch 'staging'\n            }\n            steps {\n                echo 'Deploying meow-micro to staging'\n        // Uses the artifact stored in\n        // the build stage.\n                sh './bin/meow-micro'\n            }\n        }\n    }\n}\n```\n\nVoyons maintenant comment créer la même fonctionnalité dans GitLab :\n\n```\n# Defines the default image to use\n# when it is not explicitly defined in\n# a job.\ndefault:\n  image: alpine:latest\n\n# Defines the order to run the stages.\n# Each stage can have multiple jobs.\nstages:\n  - build\n  - test\n  - deploy\n\n# Defines the name of the job\ncreate-binary:\n # Defines the stage the job will run in\n  stage: build\n # Defines the container image to use\n # for this job, overwriting default.\n  image: golang:alpine\n # Defines the sequence of steps to\n # execute when the job is run.\n  script:\n    - go build -o bin/meow-micro\n    - chmod +x bin/meow-micro\n # Stores the job artifacts generated\n # for use in another job.\n  artifacts:\n    paths:\n      - bin/meow-micro\n    expire_in: 1 week\n\nunit-tests:\n  stage: test\n  image: golang:alpine\n  script:\n    - go test .\n # Defines commands to run after the\n # job.\n after_script:\n  - echo \"Tests Complete\"\n\nstaging-deploy:\n  stage: deploy\n # Defines commands to run before the\n # actual job.\n  before_script:\n    - apk update\n  script:\n    - echo \"Deploying meow-micro to staging environment\"\n    - ./bin/meow-micro\n # Defines conditions which must be met\n # in order for this job to execute. In\n # this case the staging-deploy job will \n # only run on the staging branch.\n  rules:\n    - if: $CI_COMMIT_BRANCH == 'staging'\n # Allows the artifact stored in the\n # build job to be used in this job.\n  artifacts:\n    paths:\n      - bin/meow-micro\n```\n\nComme vous l'avez peut-être remarqué, il existe de nombreuses similitudes entre Jenkins et GitLab en termes de syntaxe, ce qui simplifie la migration du pipeline. Bien que l'exemple ci-dessus fournisse une vue d'ensemble basique, assurez-vous de consulter la liste complète des [comparaisons de fonctionnalités et de concepts](https://docs.gitlab.com/ee/ci/migration/jenkins.html#comparison-of-features-and-concepts) entre les deux outils.\n\nMaintenant que nous comprenons comment transposer Jenkins à GitLab, nous pouvons commencer à créer un pipeline avec les mêmes fonctionnalités dans GitLab. Pour effectuer la migration de votre [pipeline CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\"), suivez les étapes suivantes :\n\n##### 1. Ouvrez le dépôt que vous avez migré vers GitLab dans la section ci-dessus.\n- Dans la barre latérale de gauche, en haut, sélectionnez **Rechercher ou accéder à...**\n- Localisez votre projet.\n\n##### 2. Ouvrez l'[éditeur de pipeline](https://docs.gitlab.com/ee/ci/pipeline_editor/).\n- Dans la barre latérale de gauche, sélectionnez **Compilation > Éditeur de pipeline**.\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176026/Blog/ecp4jh7epho2oxuegaor.png\" alt=\"Pipeline editor menu\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n- Cliquez sur le bouton **Configurer le pipeline**.\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176029/Blog/nypfh01zhwgvzqc0xz3v.png\" alt=\"Configure pipeline selection\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n##### 3. Complétez le fichier [.gitlab-ci.yml](https://docs.gitlab.com/ee/ci/yaml/).\n- Ajoutez le code du pipeline GitLab CI. \n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176031/Blog/nxi6uxxispyyoiiyvxyg.png\" alt=\"Pipeline editor input\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n- Vérifiez que la syntaxe est correcte.\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176037/Blog/x3d4utfsnymye0lvphtf.png\" alt=\"Pipeline syntax validation\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n- Visualisez le pipeline.\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176043/Blog/hipzofpyywjxf62edzfv.png\" alt=\"Pipeline visualization\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n##### 4. Validez le fichier dans la branche principale.\n- Ajoutez un message de validation.\n- Assurez-vous que la branche est définie sur la branche principale.\n- Cliquez sur le bouton __Valider les modifications__.\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176048/Blog/nn8bl7rdysabccoycfrk.png\" alt=\"Commit changes dialog\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\nUne fois le fichier fusionné, le pipeline défini s'exécute. Vous pouvez revenir à votre projet et [observer le pipeline](https://docs.gitlab.com/ee/ci/pipelines/#view-pipelines) en action en le sélectionnant sur la page **Compilation > Pipelines** de votre projet. Comme il a été exécuté sur la branche **principale**, vous ne verrez que les jobs **create-binary** et **unit-tests**. Le job **staging-deploy** s'exécute uniquement sur la branche de préproduction.\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176051/Blog/wfb4k8nkzpg28kpf2pzz.png\" alt=\"Pipeline running on main branch\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\nSi nous créons une branche de préproduction, le pipeline suivant s'exécute.\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176053/Blog/e2jxedpolaniotgixpby.png\" alt=\"Pipeline running on staging branch\">\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\nEn cliquant sur un job, nous pouvons voir la sortie associée :   \n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176056/Blog/fywzwbzkwcvc9zzakilh.png\" alt=\"create-binary job output\">\n   \u003Cfigcaption>Sortie du job create-binary\u003C/figcaption>\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176061/Blog/ekmpd8ecanwwiena9xi9.png\" alt=\"unit-tests job output input\">\n   \u003Cfigcaption>Entrée/sortie du job unit-tests\u003C/figcaption>\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\n\u003Ccenter>\n\u003Cfigure>\n   \u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176065/Blog/h7nqxszy50xdmnvhalfq.png\" alt=\"staging-deploy job output\">\n   \u003Cfigcaption>Sortie du job staging-deploy\u003C/figcaption>\n\u003C/figure>\n\u003C/center>\n\u003Cp>\u003C/p>\n\nL'artefact est stocké dans le job __create-binary__ et utilisé dans le job __staging-deploy__. Et voilà, la migration d'un pipeline de Jenkins vers GitLab est aussi simple que cela !\n\n### Autres conseils à suivre lors de la migration\nVoici quelques conseils pratiques pour simplifier le processus de déploiement :\n\n- N'essayez pas de répliquer les tâches dans des jobs GitLab une à une. Prenez le temps de comprendre le fonctionnement du pipeline actuel et quel problème il résout.\n\n- Certains jobs Jenkins peuvent être trop complexes pour être migrés immédiatement vers GitLab. Il peut donc s'avérer pratique d'utiliser le [plug-in Jenkins GitLab](https://plugins.jenkins.io/gitlab-plugin/) pour lancer les pipelines Jenkins et afficher leurs résultats directement depuis GitLab. Cela vous permet de migrer lentement certaines actions vers GitLab jusqu'à ce que l'ensemble du pipeline puisse être déplacé.\n\n- Mettez en œuvre des [scanners de sécurité et une vérification de la qualité du code](https://docs.gitlab.com/ee/user/application_security/) à l'aide de templates intégrés fournis par GitLab. Cela vous permettra d'intégrer la sécurité en amont et ainsi de réduire le risque potentiel de failles. Simplifiez votre configuration CI/CD et essayez d'utiliser les avantages de chaque fonctionnalité sans tarder. Modularisez le code et implémentez-le en petites itérations.\n\n- Mettez en place le suivi et la gouvernance dès le départ.\n\n- Sachez que GitLab Runner (Go) peut se comporter différemment de l'agent Jenkins (Java). L'utilisation du processeur et la consommation de mémoire peuvent différer. Pensez à effectuer des comparaisons au fil du temps.\n\n- Envisagez d'investir dans des mécanismes de mise à l'échelle automatique et arrêtez les ressources inutiles le week-end ou en dehors des heures de travail.\n\n- Modernisez le développement d'applications en conteneurisant vos jobs. Les jobs Jenkins ne sont pas actuellement exécutés sur un conteneur, mais sur un agent Jenkins s'exécutant en tant que machine virtuelle.\n\nBien que cette liste ne soit pas exhaustive, elle constitue un bon point de départ. Si vous avez besoin d'une aide supplémentaire, GitLab fournit des [services professionnels](https://about.gitlab.com/fr-fr/get-help/) pour vous aider dans votre parcours de migration.\n\n### Conclusion\n\nMerci de votre intérêt pour cet article ! Nous espérons que ce guide vous a aidé à comprendre les avantages d'une migration de Jenkins vers GitLab, et comment procéder. \n\nVous hésitez encore ? [Essayez GitLab gratuitement](https://about.gitlab.com/fr-fr/free-trial/) et découvrez les avantages de notre plateforme DevSecOps.\n\nRessources complémentaires : \n\n- [Migration depuis Jenkins](https://docs.gitlab.com/ee/ci/migration/jenkins.html)\n- [Planification d'une migration](https://docs.gitlab.com/ee/ci/migration/plan_a_migration.html)\n- [Outils d'importation de projets GitLab](https://docs.gitlab.com/ee/user/project/import/)\n- [Migrer de GitHub Advanced Security vers GitLab Ultimate : notre guide complet](https://about.gitlab.com/fr-fr/blog/migration-guide-github-advanced-security-to-gitlab-ultimate/)\n- [Vidéo : Migration facile de GitHub vers GitLab](https://youtu.be/0Id5oMl1Kqs?feature=shared)\n- [De Jenkins vers GitLab : le guide ultime pour moderniser votre environnement CI/CD](https://about.gitlab.com/blog/jenkins-gitlab-ultimate-guide-to-modernizing-cicd-environment/)\n",[109,9],"2025-03-18",{"slug":991,"featured":91,"template":692},"jenkins-to-gitlab-migration-made-easy","content:fr-fr:blog:jenkins-to-gitlab-migration-made-easy.yml","Jenkins To Gitlab Migration Made Easy","fr-fr/blog/jenkins-to-gitlab-migration-made-easy.yml","fr-fr/blog/jenkins-to-gitlab-migration-made-easy",{"_path":997,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":998,"content":1004,"config":1009,"_id":1011,"_type":14,"title":1012,"_source":16,"_file":1013,"_stem":1014,"_extension":19},"/fr-fr/blog/large-language-model",{"title":999,"description":1000,"ogTitle":999,"ogDescription":1000,"noIndex":6,"ogImage":1001,"ogUrl":1002,"ogSiteName":674,"ogType":675,"canonicalUrls":1002,"schema":1003},"Qu’est-ce qu’un grand modèle de langage (LLM) ?","Que sont les grands modèles de langage ? Découvrez leur fonctionnement, leurs applications et leurs impacts dans l’univers DevSecOps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660057/Blog/Hero%20Images/LLM.jpg","https://about.gitlab.com/blog/large-language-model","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Qu’est-ce qu’un grand modèle de langage (LLM) ?\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab France Team\"}],\n        \"datePublished\": \"2025-05-28\",\n      }",{"title":999,"description":1000,"authors":1005,"heroImage":1001,"date":1006,"body":1007,"category":684,"tags":1008},[794],"2025-05-28","Les grands modèles de langage (ou Large Language Models) révolutionnent les approches [DevOps](https://about.gitlab.com/fr-fr/topics/devops/ \"Qu'est-ce que le DevOps ? \") et DevSecOps en simplifiant des tâches complexes, qu’il s’agisse de créer du code, d’examiner des logs ou de détecter des vulnérabilités.\n\nDans cet article, découvrez comment fonctionnent les grands modèles de langage, leurs applications concrètes et les principaux enjeux à surmonter pour exploiter pleinement leur potentiel.\n\n__Sommaire__\n- Qu’est-ce qu’un LLM ?\n- Comment fonctionnent les grands modèles de langage ?\n- Applications des grands modèles de langage dans une approche DevSecOps\n- Quels sont les avantages des grands modèles de langage ?\n- Quels sont les défis liés à l’utilisation des LLM ?\n- Comment GitLab utilise les LLM pour ses fonctionnalités GitLab Duo ?\n\n## Qu’est-ce qu’un LLM ? \n\nLes grands modèles de langage (LLM) sont des systèmes d’intelligence artificielle capables de traiter et de générer du texte de manière autonome. Leur apprentissage repose sur l’analyse de vastes ensembles de données issues de sources variées, afin qu’ils puissent maîtriser les structures linguistiques, les relations contextuelles et les nuances du langage.\n\nLes LLM représentent une avancée majeure dans le domaine de l’IA. Leur capacité à traiter, générer et interpréter du texte repose sur des techniques sophistiquées d’apprentissage automatique et de traitement automatique du langage naturel (NLP). Ces systèmes ne se contentent pas de traiter des mots isolés : ils analysent des séquences complexes pour saisir le sens global, les contextes subtils et les nuances linguistiques.\n\n## Comment fonctionnent les grands modèles de langage ?\n\nPour mieux comprendre leur fonctionnement, explorons certaines des caractéristiques clés des grands modèles de langages.\n\n### Apprentissage supervisé et non supervisé\n\nLes grands modèles de langage sont entraînés selon deux approches complémentaires : l’apprentissage supervisé et l’apprentissage non supervisé. Ces deux approches du machine learning permettent de maximiser leurs capacités à analyser et à générer du texte. \n\n- **L’apprentissage supervisé** repose sur des données étiquetées, où chaque entrée est associée à un résultat attendu. Le modèle apprend à associer ces entrées aux sorties correctes en ajustant ses paramètres internes pour réduire les erreurs de prédiction. Grâce à cette approche, le modèle acquiert des connaissances précises sur des tâches spécifiques, telles que la classification de textes ou la reconnaissance d’entités nommées.\n\n- **L’apprentissage non supervisé (ou apprentissage automatique)**, quant à lui, ne nécessite pas de données étiquetées. Le modèle explore de vastes volumes de texte pour découvrir des structures cachées et identifier des relations sémantiques. Ainsi, le modèle est en capacité d‘apprendre des schémas récurrents, des règles grammaticales implicites dans le texte ou encore de contextualisation des phrases et des concepts. Cette méthode permet d’entraîner les LLM sur de vastes corpus de données, accélérant considérablement leur progression sans intervention humaine directe.\n\nEn combinant ces deux approches, les grands modèles de langage bénéficient autant d'un apprentissage précis guidé par des humains que d’une exploration autonome illimitée. Cette complémentarité leur permet de se développer rapidement, tout en améliorant continuellement leur capacité à comprendre et à générer du texte de manière cohérente et contextuelle.\n\n### Apprentissage reposant sur un large volume de données \n\nLes grands modèles de langage sont entraînés à partir de milliards de phrases issues de sources variées, telles que des articles de presse, des forums en ligne, des documentations techniques, des études scientifiques et bien plus encore. Cette variété de sources leur permet d’acquérir une compréhension étendue et nuancée du langage naturel, allant des expressions courantes aux terminologies spécialisées.\n\nLa richesse des données utilisées est un facteur clé de la performance des LLM. Chaque source apporte des styles d’écriture, des contextes culturels et des niveaux de technicité différents. \n\nPar exemple :\n- __Des articles de presse__ : pour maîtriser un langage informatif et factuel.\n- __Des forums en ligne__ : pour comprendre les conversations informelles et les langages techniques des communautés spécialisées.\n- __Des documentations techniques et études scientifiques__ : pour assimiler des concepts complexes et des terminologies spécifiques, notamment dans des domaines comme le DevOps et le DevSecOps.\n\nCette diversité de contenu permet aux LLM de reconnaître des structures linguistiques complexes, d’interpréter des phrases dans différents contextes et de s’adapter à des domaines très techniques. Dans le DevSecOps, cela signifie comprendre des commandes, des configurations, des protocoles de sécurité et même des concepts liés au développement et à la maintenance de systèmes informatiques.\n\nGrâce à cette formation à grande échelle, les grands modèles de langage peuvent répondre avec précision à des questions complexes, rédiger des documentations techniques ou identifier des vulnérabilités dans des systèmes informatiques.\n\n### Architecture de réseaux neuronaux et « deep learning » \n\nLes grands modèles de langage reposent sur des architectures de réseaux neuronaux avancées. Ces réseaux sont spécialement conçus pour traiter de grandes séquences de texte tout en maintenant une compréhension précise du contexte. Cet apprentissage en « deep learning » constitue un atout majeur dans le domaine du traitement automatique du langage naturel (NLP).\n\nLa plus connue de ces structures est l’architecture des modèles séquence à séquence (transformers). Cette architecture a révolutionné le NLP grâce à sa capacité à analyser simultanément toutes les parties d’un texte, contrairement aux approches séquentielles qui traitent les mots un par un.\n\nLes modèles séquence à séquence excellent dans le traitement des textes longs. Par exemple, dans une conversation ou un document technique détaillé, ils sont capables de relier des informations distantes dans le texte pour produire des réponses précises et bien argumentées. Cette gestion du contexte est essentielle dans une approche DevSecOps, où les instructions peuvent être complexes et réparties sur plusieurs lignes de code ou étapes de configuration.\n\n### Génération de texte prédictive\n\nLorsque l'utilisateur soumet un texte, une requête ou une question, un grand modèle de langage utilise sa capacité de prédiction pour générer la suite la plus probable, fondée sur le contexte fourni.\n\nLe modèle analyse chaque mot, étudie les relations grammaticales et sémantiques, puis sélectionne les termes les plus adaptés pour produire un texte cohérent et informatif. Cette approche permet de générer des réponses précises, détaillées et adaptées au ton attendu.\n\nDans les environnements DevSecOps, cette capacité devient particulièrement utile pour :\n- **l’assistance au codage** : génération de blocs de code ou de scripts adaptés à des configurations spécifiques.\n- **la résolution de problèmes techniques** : propositions de solutions basées sur des descriptions de bogues ou d’erreurs.\n- **la rédaction de documentations techniques** : création automatique de guides, de manuels ou d'instructions.\n\nLa génération de texte prédictive permet ainsi d’automatiser de nombreuses tâches répétitives et d’accélérer le travail des équipes techniques.\n\n## Applications des grands modèles de langage dans une approche DevSecOps\n\nAvec la montée en puissance de l’automatisation, les grands modèles de langage sont devenus des alliés incontournables pour les équipes techniques. Leur capacité à comprendre et à générer du texte de manière contextuelle leur permet d’intervenir efficacement dans des environnements complexes tels que le [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps ?\").\n\nGrâce à leur puissance d’analyse et leur capacité à s’adapter aux besoins spécifiques, ces modèles offrent des solutions sur mesure pour rationaliser les processus et alléger la charge de travail des équipes techniques.\n\n### Génération de code automatisée\n\nLes équipes de développement peuvent exploiter les grands modèles de langage pour transformer des spécifications fonctionnelles en code source de manière automatisée. \n\nGrâce à cette capacité, elles peuvent :\n\n- générer des scripts d'automatisation complexes,\n- créer des pipelines CI/CD adaptés aux processus spécifiques de l'entreprise,\n- produire des correctifs de sécurité sur mesure.\n- générer des explications de code et créer une documentation,\n- refactoriser le code en améliorant sa structure et sa lisibilité sans modifier les fonctionnalités,\n- générer des tests. \n\nEn s'appuyant sur les LLM, les équipes parviennent à accélérer le développement de leurs logiciels tout en réduisant les risques d'erreurs humaines.\n\n### Documentation et partage des connaissances améliorés \n\nCes puissants outils facilitent la création de manuels d'utilisation, de descriptions d'API et de tutoriels sur mesure, parfaitement adaptés au niveau d'expertise de chaque utilisateur. En s’appuyant sur des bases de connaissances existantes, les grands modèles de langages créent des réponses contextuelles aux questions fréquentes. Cela améliore la transmission des savoirs au sein des équipes, accélère l'intégration des nouveaux membres et permet de centraliser les bonnes pratiques.\n\n### Gestion des incidents et dépannage\n\nLors d’un incident, les LLM jouent un rôle crucial en analysant en temps réel les logs et les fichiers de trace. Grâce à leur capacité à croiser des informations provenant de multiples sources, ils identifient les anomalies et proposent des solutions fondées sur des incidents similaires passés. Cette approche réduit significativement le temps de diagnostic. De plus, les LLM peuvent automatiser la création de rapports d'incidents détaillés et recommander des actions correctives précises.\n\n### Création et amélioration des pipelines CI/CD\n\nLes grands modèles de langage révolutionnent la configuration des [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\"). Ils peuvent non seulement aider à créer des pipelines, mais aussi à automatiser ce processus et proposer des configurations optimales basées sur des standards de l'industrie. En adaptant les workflows selon vos besoins spécifiques, ils assurent une cohérence parfaite entre les différents environnements de développement. Les tests automatisés sont renforcés par des suggestions pertinentes, limitant ainsi les risques de défaillance. Les LLM surveillent également en continu l’efficacité des pipelines et ajustent les processus pour garantir un déploiement fluide et sans interruption.\n\n### Sécurité et conformité\n\nDans un environnement DevSecOps, les grands modèles de langage deviennent des alliés précieux pour la [sécurité et la conformité](https://about.gitlab.com/fr-fr/solutions/security-compliance/ \"Sécurité et conformité\"). Ils analysent le code source à la recherche de vulnérabilités potentielles et génèrent des recommandations correctives détaillées. Les LLM peuvent également surveiller l'application des normes de sécurité en temps réel, produire des rapports de conformité complets et automatiser l'application de correctifs de sécurité dès qu'une faille est identifiée. Cette automatisation renforce la sécurité globale et garantit un respect constant des exigences légales et industrielles.\n\n## Quels sont les avantages des grands modèles de langage ?\n\nLes grands modèles de langage transforment en profondeur les approches DevOps et DevSecOps, apportant des améliorations substantielles en matière de productivité, de sécurité et de qualité logicielle. En s’intégrant aux workflows existants, les LLM bouleversent les approches traditionnelles en automatisant des tâches complexes et en fournissant des solutions innovantes.\n\n### Amélioration de la productivité et de l’efficacité\n\nLes grands modèles de langage jouent un rôle central dans l’amélioration de la productivité et de l’efficacité des équipes techniques. En automatisant un large éventail de tâches répétitives, ils libèrent les équipes de développement des opérations routinières. Ces dernières peuvent ainsi se concentrer sur des activités stratégiques à plus forte valeur ajoutée.\n\nEn outre, les LLM agissent comme des assistants techniques intelligents capables de fournir instantanément des extraits de code pertinents, adaptés au contexte spécifique de chaque projet. De cette manière, ils réduisent considérablement le temps de recherche en proposant des solutions prêtes à l’emploi pour assister les équipes dans leur travail. Cette assistance ciblée accélère la résolution des problèmes et diminue les interruptions dans les workflows.\n\nAinsi, la productivité augmente et les projets avancent plus rapidement. Les équipes techniques peuvent prendre en charge un plus grand nombre de tâches sans compromettre la qualité des livrables.\n\n### Amélioration de la qualité du code et de la sécurité \n\nL’utilisation des grands modèles de langage dans le développement logiciel constitue un levier majeur pour améliorer autant la qualité du code que la sécurité des applications. Grâce à leurs capacités d’analyse avancées, les LLM peuvent examiner le code source ligne par ligne et détecter instantanément les erreurs syntaxiques, incohérences logiques et vulnérabilités potentielles. Leur aptitude à reconnaître le code défectueux permet de recommander des corrections adaptées et conformes aux meilleures pratiques du secteur.\n\nLes LLM jouent aussi un rôle préventif essentiel. Ils excellent dans l'identification des failles de sécurité complexes, souvent difficiles à repérer par les humains. En analysant les dépendances, ils peuvent signaler des bibliothèques obsolètes ou vulnérables, et recommander des versions mises à jour plus sûres. Cette approche contribue au maintien d’un environnement sécurisé et conforme aux normes de sécurité en vigueur.\n\nAu-delà de la correction des erreurs existantes, les LLM proposent des améliorations en suggérant des pratiques de codage et des structures de projet optimisées. Ils peuvent générer du code respectant les normes de sécurité les plus avancées, et ce, dès les premières étapes du développement.\n\n### Accélération des cycles de développement\n\nLes grands modèles de langage jouent un rôle déterminant dans l’accélération des cycles de développement logiciel en automatisant des tâches clés qui, autrement, mobiliseraient de précieuses ressources humaines.\n\nLes tâches complexes et répétitives, comme l’écriture de fonctions, la création de tests unitaires ou l’implémentation de composants standards, sont automatisées en quelques instants.\n\nLes LLM accélèrent également la phase de validation grâce à leur capacité à suggérer des scénarios de test complets et adaptés. Ils garantissent une couverture de test plus étendue en un minimum de temps, réduisant les risques d’erreurs et facilitant la détection précoce des anomalies. Cette approche préventive raccourcit le cycle de corrections et limite les retards liés aux problèmes de qualité du code.\n\nEn simplifiant les tâches techniques et en fournissant des solutions rapides et adaptées, les grands modèles de langage favorisent une réponse plus agile des entreprises aux exigences du marché. Cette accélération du cycle de développement se traduit par des mises à jour plus fréquentes, des itérations plus rapides et une meilleure capacité à adapter les produits aux besoins changeants des utilisateurs.\n\nLes cycles de développement deviennent ainsi plus courts, offrant un avantage stratégique essentiel dans un environnement technologique toujours plus exigeant.\n\n## Quels sont les défis liés à l’utilisation des LLM ?\n\nMalgré leurs nombreux avantages, les grands modèles de langage présentent certaines limites qui nécessitent une gestion attentive. Leur efficacité dépend fortement de la qualité des données utilisées lors de leur entraînement et de la mise à jour régulière de leurs bases de connaissances. De plus, des problèmes liés aux biais algorithmiques, à la sécurité des données et à la confidentialité peuvent survenir, exposant les entreprises à des risques opérationnels et juridiques. Une supervision humaine rigoureuse demeure indispensable pour garantir la fiabilité des résultats, assurer la conformité réglementaire et éviter les erreurs critiques.\n\n### Confidentialité et sécurité des données\n\nL’entraînement des LLM repose sur de vastes volumes de données, souvent issues de sources diverses, ce qui soulève des questions quant à la protection des informations confidentielles. Les données sensibles partagées avec des plateformes cloud peuvent donc être exposées à des violations potentielles. Cela inquiète particulièrement les entreprises opérant dans des secteurs réglementés.\n\nEn Europe, où des réglementations strictes comme le RGPD régissent la gestion des données, de nombreuses entreprises hésitent à transférer leurs informations vers des services externes. Les exigences réglementaires, associées à la crainte d'une exploitation non autorisée des données sensibles, incitent certaines entreprises à privilégier des solutions auto-hébergées pour conserver un contrôle total sur leurs systèmes.\n\nDes fournisseurs comme GitLab ont mis en place des garanties de sécurité robustes, telles que la non-rétention intentionnelle des données à caractère personnel et le chiffrement de bout en bout. Toutefois, cela peut ne pas suffire pour les clients les plus exigeants, qui préfèrent une maîtrise complète de leurs environnements. La mise en œuvre de solutions hybrides ou sur site devient alors une nécessité stratégique pour répondre aux exigences de sécurité de certaines entreprises.\n\nPour en savoir plus sur GitLab Duo Self-Hosted, cliquez sur l'image ci-dessous pour accéder à la visite guidée. \n\n\u003Ca href=\"https://gitlab.navattic.com/gitlab-duo-self-hosted\">\u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176132/Blog/chn5c0bsfauypnjfhmxv.png\" alt=\"GitLab Duo Self-Hosted Product Tour\">\u003C/a>\n\n### Précision et fiabilité\n\nBien que les grands modèles de langage soient capables de générer des résultats impressionnants, leur performance n’est pas infaillible. Ils peuvent produire des réponses incorrectes, incomplètes ou incohérentes. Cette imprécision devient particulièrement problématique dans le cadre de tâches critiques comme la génération de code de sécurité ou l'analyse de données sensibles.\n\nDe plus, les LLM fonctionnent sur la base de modèles probabilistes, ce qui signifie qu’ils ne « comprennent » pas véritablement le contenu qu'ils traitent, mais produisent des prédictions basées sur des probabilités statistiques. Cela peut entraîner des recommandations techniquement incorrectes, voire dangereuses, lorsqu'elles sont utilisées sans validation humaine.\n\nPour éviter ces pièges, il est essentiel de maintenir une supervision constante et d’établir des processus de validation rigoureux. Les résultats fournis par les LLM doivent alors toujours être examinés par des humains avant leur intégration dans des systèmes critiques.\n\nUne stratégie de mise à jour régulière des modèles, associée à une surveillance humaine proactive, permet de réduire les erreurs et d'améliorer progressivement la fiabilité des résultats.\n\n## Comment GitLab utilise les LLM pour ses fonctionnalités GitLab Duo ?\n\n[GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/ \"Qu'est-ce que GitLab Duo ? \") exploite la puissance des grands modèles de langage pour transformer les processus DevSecOps en intégrant des fonctionnalités alimentées par l’IA, et ce, tout au long du cycle de vie du développement logiciel. Cette approche vise à améliorer la productivité, renforcer la sécurité et automatiser des tâches complexes afin de permettre aux équipes de développement de se concentrer sur des tâches à forte valeur ajoutée.\n\n### Une assistance IA pour le développement logiciel\n\nGitLab Duo propose un soutien continu tout au long du cycle de développement logiciel grâce à des recommandations en temps réel. Les équipes de développement peuvent automatiquement générer des tests unitaires, obtenir des explications détaillées sur des segments de code complexes et bénéficier de suggestions pour améliorer la qualité de leur code.\n\n### Analyse proactive des défaillances CI/CD\n\nL’une des fonctionnalités clés de GitLab Duo est son assistance à l'analyse des échecs des jobs CI/CD. Grâce au LLM et l’IA, les équipes parviennent à identifier rapidement les sources d'erreurs dans leurs pipelines d’intégration et de déploiement continus. \n\n### Sécurité du code renforcée\n\nGitLab Duo intègre des fonctionnalités de sécurité basées sur l’IA. Le système détecte les vulnérabilités dans le code source et propose des correctifs détaillés pour en réduire les risques. Les équipes reçoivent des explications claires sur la nature des failles identifiées et peuvent appliquer des correctifs automatisés via des [merge requests](https://docs.gitlab.com/ee/user/project/merge_requests/ \"Merge request\") générées directement par GitLab Duo. Cette fonctionnalité permet de sécuriser le développement sans pour autant ralentir les cycles de développement.\n\nPour en savoir plus sur cette fonctionnalité, cliquez sur l'image ci-dessous pour accéder à notre visite guidée. \n\n\u003Ca href=\"https://gitlab.navattic.com/ve-vr-short\">\u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752176145/Blog/bhpatrqtajlcys0lnjwe.png\" alt=\"GitLab Vulnerability Report Product Tour\">\u003C/a>\n\n#### Fonctionnalités clés de GitLab Duo \n\n- [GitLab Duo Chat](https://about.gitlab.com/fr-fr/blog/10-best-practices-for-using-ai-powered-gitlab-duo-chat/ \"GitLab Duo Chat\") : cette fonctionnalité conversationnelle traite et génère du texte et du code de manière intuitive. Elle permet aux utilisateurs de rechercher rapidement des informations pertinentes dans des volumes importants de texte, notamment dans les tickets, les [epics](https://docs.gitlab.com/ee/user/group/epics/ \"Epics\"), le code source et la [documentation GitLab](https://docs.gitlab.com/ \"Documentation GitLab\").\n\n- [GitLab Duo Self-Hosted](https://about.gitlab.com/fr-fr/blog/gitlab-duo-self-hosted-enterprise-ai-built-for-data-privacy/ \"GitLab Duo Self-Hosted\") : GitLab Duo Self-Hosted permet aux entreprises ayant des exigences strictes en matière de confidentialité de leurs données de bénéficier des fonctionnalités d’IA de GitLab Duo avec une flexibilité dans le choix du déploiement et des LLM parmi une liste d’options supportées.\n\n- [Suggestions de code](https://about.gitlab.com/direction/create/code_creation/code_suggestions/ \"Suggestions de code\") : les équipes de développement bénéficient de suggestions de code automatisées, ce qui leur permet d'écrire du code sécurisé plus rapidement. Les tâches de codage répétitives et routinières sont ainsi automatisées, accélérant considérablement les cycles de développement logiciel.\n\nGitLab Duo ne se limite pas à ces fonctionnalités. Il offre une gamme étendue de fonctionnalités destinées à simplifier et à optimiser le développement logiciel. Que ce soit pour automatiser des tests, améliorer la collaboration entre les équipes ou renforcer la sécurité des projets, GitLab Duo constitue une solution complète pour des processus DevSecOps intelligents et efficaces.\n\nPour en savoir plus sur GitLab Duo Enterprise, cliquez sur l'image ci-dessous pour accéder à notre visite guidée. \n\n\u003Ca href=\"https://gitlab.navattic.com/duo-enterprise\">\u003Cimg src=\"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752175911/Blog/b5gdnls7jdyrpeyjby5j.png\" alt=\"GitLab Duo Enterprise Product Tour\">\u003C/a>\n",[686,9],{"slug":1010,"featured":6,"template":692},"large-language-model","content:fr-fr:blog:large-language-model.yml","Large Language Model","fr-fr/blog/large-language-model.yml","fr-fr/blog/large-language-model",{"_path":1016,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1017,"content":1023,"config":1031,"_id":1033,"_type":14,"title":1034,"_source":16,"_file":1035,"_stem":1036,"_extension":19},"/fr-fr/blog/learn-advanced-rust-programming-with-a-little-help-from-ai-code-suggestions",{"title":1018,"description":1019,"ogTitle":1018,"ogDescription":1019,"noIndex":6,"ogImage":1020,"ogUrl":1021,"ogSiteName":674,"ogType":675,"canonicalUrls":1021,"schema":1022},"Programmation en Rust à l’aide de l'IA : tutoriel","Poursuivez votre apprentissage de la programmation en Rust à l'aide de ce tutoriel et des suggestions de code alimentées par l'IA de GitLab Duo.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662439/Blog/Hero%20Images/codewithheart.png","https://about.gitlab.com/blog/learn-advanced-rust-programming-with-a-little-help-from-ai-code-suggestions","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Programmation en Rust à l’aide de l'IA : tutoriel\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2023-10-12\",\n      }",{"title":1018,"description":1019,"authors":1024,"heroImage":1020,"date":1025,"body":1026,"category":684,"tags":1027,"updatedDate":1030},[681],"2023-10-12","Il y a 20 ans, pour apprendre un nouveau langage de programmation, il fallait installer la bibliothèque MSDN de Visual Studio 6 avec 6 CD-ROM. Trouver les bons algorithmes prenait du temps et nécessitait des livres et des recherches manuelles. Aujourd'hui, grâce à la collaboration à distance et à l'intelligence artificielle (IA), vous pouvez facilement créer un [espace de développement à distance](https://about.gitlab.com/blog/quick-start-guide-for-gitlab-workspaces/), partager votre écran et coder en groupe. De plus, [GitLab Duo offre des suggestions de code](/gitlab-duo/) alimentées par l'IA, adaptées à votre style de programmation et à votre expérience, même avec peu d'informations et de contexte.\n\nCe tutoriel basé sur notre [article d'introduction à Rust](/blog/learning-rust-with-a-little-help-from-ai-code-suggestions-getting-started/) vous guidera dans le développement d'une application simple de lecteur de flux.\n\n## Préparations\nConfigurez [VS Code](/blog/learning-rust-with-a-little-help-from-ai-code-suggestions-getting-started/#vs-code) et [votre environnement de développement Rust](/blog/learning-rust-with-a-little-help-from-ai-code-suggestions-getting-started/#development-environment-for-rust).\n\n### Suggestions de code\nVérifiez les suggestions de code avant de les accepter. GitLab Duo génère des suggestions de code en temps réel que vous pouvez accepter en appuyant sur la touche `tab`. Notez qu'il est plus fiable d'écrire du nouveau code que de refactoriser un code existant. Notez aussi que l'IA peut proposer des suggestions différentes pour le même code. Tenez compte des [limitations connues](https://docs.gitlab.com/ee/user/project/repository/code_suggestions.html#known-limitations) qui peuvent affecter votre apprentissage.\n\n**Astuce :** les suggestions de code prennent en charge les instructions multilignes. Affinez les spécifications si besoin pour obtenir de meilleures suggestions.\n\n```rust\n    // Create a function that iterates over the source array\n    // and fetches the data using HTTP from the RSS feed items.\n    // Store the results in a new hash map.\n    // Print the hash map to the terminal.\n```\n\nLe volet de l'extension VS Code s'affiche lorsqu'une suggestion est proposée. Utilisez `tab` pour accepter les lignes suggérées, ou `cmd cursor right` pour accepter un mot. Le menu à trois points vous permet d'afficher la barre d'outils à tout moment.\n\n![Volet de l'extension VS Code des suggestions de code de GitLab Duo avec des instructions](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_code_suggestions_options_overlay_keep_toolbar.png){: .shadow}\n\n## Ressources Rust\nRust est l'un des [langages pris en charge par les suggestions de code](https://docs.gitlab.com/ee/user/project/repository/code_suggestions.html#supported-languages). Le tutoriel [« Rust by Example »](https://doc.rust-lang.org/rust-by-example/) et le [livre officiel « Le langage de programmation Rust »](https://doc.rust-lang.org/book/) sont une bonne aide pour les débutants. Nous les utiliserons également dans cet article.\n\n### Création d'une application de lecture de flux\nIl existe plusieurs façons d'apprendre Rust en créant une application. Vous pouvez utiliser des bibliothèques Rust, appelées `Crates`. Nous les explorerons pus tard dans ce tutoriel. Vous pouvez aussi créer une application pour traiter des fichiers image en ligne de commande, résoudre un labyrinthe ou des Sudokus, ou même développer des jeux. Le livre [Hands-on Rust](https://hands-on-rust.com/) apprend Rust par la création d'un jeu d'exploration de donjon. Ma collègue, Fatima Sarah Khalid, a conçu [Dragon Realm en C++ en s'aidant de l'IA](/blog/building-a-text-adventure-using-cplusplus-and-code-suggestions/).\n\nNous allons construire une application pour collecter des informations depuis des versions de sécurité, des articles de blog et des forums comme Hacker News, via des flux RSS. Nous filtrerons certains mots-clés ou des versions spécifiques dans ces flux. Voici ce que notre application devra faire :\n\n1. Récupérer des données depuis des sites web HTTP, API REST, mais surtout depuis des flux RSS.\n2. Analyser les données.\n3. Présenter les données à l'utilisateur ou les sauvegarder.\n4. Optimiser la lecture des flux.\n\nLes données fournies par l'application dans notre exemple sont présentées dans cet article, après les étapes d'apprentissage :\n\n![Terminal VS Code, exécution de Cargo avec des sorties d'éléments formatées](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_terminal_cargo_run_formatted_output_final.png)\n\nL'application doit être modulaire, servant de base pour ajouter d'autres données, filtres et hooks pour des actions ultérieures.\n\n### Initialisation du projet\nRappel : `cargo init` dans la racine du projet crée la structure du fichier, y compris le point d'entrée `main()`. Nous allons créer et utiliser des modules Rust à l'étape suivante.\n\nD'abord, créez un répertoire nommé `learn-rust-ai-app-reader`, ouvrez-le et exécutez `cargo init`, ce qui initialise également (`git init`) un dépôt Git local. Configurez ensuite le dépôt distant avec l'URL par exemple `https://gitlab.com/gitlab-de/use-cases/ai/learn-with-ai/learn-rust-ai-app-reader`, ajustez le chemin de votre espace de nommage, et effectuez un push pour [créer automatiquement un nouveau projet privé sur GitLab](https://docs.gitlab.com/ee/user/project/#create-a-new-project-with-git-push).\n\n```shell\nmkdir learn-rust-ai-app-reader\ncd learn-rust-ai-app-reader\n\ncargo init\n\ngit remote add origin https://gitlab.com/gitlab-de/use-cases/ai/learn-with-ai/learn-rust-ai-app-reader.git\ngit push --set-upstream origin main\n```\n\nOuvrez VS Code à partir du répertoire créé. La CLI `code` ouvre une fenêtre VS Code sur macOS.\n\n```shell\ncode .\n```\n\n### Définition des URL des flux RSS\nAjoutez une table de hachage pour stocker les URL des flux RSS dans le fichier `src/main.rs` dans la fonction `main()`. Utilisez les suggestions de code de GitLab Duo pour créer un objet [`HashMap`](https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html) avec un commentaire multilignes et initialisez-le avec les valeurs par défaut pour Hacker News et TechCrunch. Vérifiez l'exactitude des URL incluses dans les suggestions.\n\n```rust\nfn main() {\n    // Define RSS feed URLs in the variable rss_feeds\n    // Use a HashMap\n    // Add Hacker News and TechCrunch\n    // Ensure to use String as type\n\n}\n```\n\nLe commentaire intégré au code doit inclure :\n\n1. Le nom de la variable `rss_feeds`.\n2. Le type `HashMap`.\n3. Les paires clé/valeur initiales.\n4. La string comme type utilisable avec les appels `to_string()`).\n\nVoici une suggestion possible :\n\n```rust\nuse std::collections::HashMap;\n\nfn main() {##$_0A$##    // Define RSS feed URLs in the variable rss_feeds##$_0A$##    // Use a HashMap##$_0A$##    // Add Hacker News and TechCrunch##$_0A$##    // Ensure to use String as type##$_0A$##    let rss_feeds = HashMap::from([##$_0A$##        (\"Hacker News\".to_string(), \"https://news.ycombinator.com/rss\".to_string()),##$_0A$##        (\"TechCrunch\".to_string(), \"https://techcrunch.com/feed/\".to_string()),##$_0A$##    ]);##$_0A$####$_0A$##}\n```\n\n![VS Code avec les suggestions de code pour les URL des flux RSS pour Hacker News et TechCrunch](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_main_array_rss_feed_urls_suggested.png)\n\nOuvrez un terminal dans VS Code (cmd+maj+p, recherchez `terminal`), exécutez `cargo build` pour appliquer les modifications. Ajoutez la ligne d'importation `use std::collections::HashMap;` suite au message d'erreur.\n\nEnsuite, utilisez les URL des flux RSS. Dans notre [article](/blog/learning-rust-with-a-little-help-from-ai-code-suggestions-getting-started/) précédent, nous avons expliqué la division du code en fonctions. Ce tutoriel se concentre sur l'organisation modulaire du code avec des modules Rust.\n\n## Modules\nLes [modules](https://doc.rust-lang.org/rust-by-example/mod.html) organisent le code et peuvent restreindre l'accès aux fonctions à partir de la portée main(). Pour notre application, nous récupérerons le flux RSS et analyserons la réponse XML. La structure appelante `main()` n'accèdera qu'à la fonction `get_feeds()`. Les autres fonctionnalités sont disponibles dans le module.\n\nCréez un fichier `feed_reader.rs` dans le répertoire `src/`. Demandez aux suggestions de code de créer un module public nommé `feed_reader` avec une fonction publique `get_feeds()` prenant une string HashMap en entrée. Assurez-vous que le nom du fichier et du module correspondent et suivent la [structure de module Rust](https://doc.rust-lang.org/book/ch07-02-defining-modules-to-control-scope-and-privacy.html).\n\n![Suggestions de code : créez un module public, avec des types de fonctions et d'intrants](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_public_module_function_input.png){: .shadow}\n\nEn fournissant aux suggestions de code le nom de la variable et son type, le module `std::collections::HashMap` sera automatiquement importé. Astuce : ajustez les commentaires et les types de variables pour améliorer les suggestions. Passer des paramètres de fonction sous forme de références d'objet est une bonne pratique en Rust.\n\n```rust\n// Create public module feed_reader\n// Define get_feeds() function which takes rss_feeds as String HashMap reference as input\npub mod feed_reader {\n    use std::collections::HashMap;\n\n    pub fn get_feeds(rss_feeds: &HashMap\u003CString, String>) {\n        // Do something with the RSS feeds\n    }\n}\n```\n\n![Suggestions de code : module public avec la fonction `get_feeds()` et la variable d'intrant suggérée](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_public_module_function_input.png){: .shadow}\n\nPour guider les suggestions de code, suivez ces étapes :\n\n1. `// Iterate over the RSS feed URLs`\n2. `// Fetch URL content`\n3. `// Parse XML body`\n4. `// Print the result`\n\n![Suggestions de code : module public avec la fonction `get_feeds()`, étape 1 : itération](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_module_function_01_iterate.png){: .shadow}\n\n![Suggestions de code : module public avec la fonction `get_feeds()`, étape 2 : récupération du contenu de l'URL](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_module_function_02_fetch_content.png){: .shadow}\n\n![Suggestions de code : module public avec la fonction `get_feeds()`, étape 3 : analyse du corps XML](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_module_function_03_parse_body.png){: .shadow}\n\n![Suggestions de code : module public avec la fonction `get_feeds()`, étape 4 : impression des résultats](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_module_function_04_print_result.png){: .shadow}\n\nSuggestion de code possible :\n\n```rust\n// Create public module feed_reader\n// Define get_feeds() function which takes rss_feeds as String HashMap reference as input\npub mod feed_reader {\n    use std::collections::HashMap;\n\n    pub fn get_feeds(rss_feeds: &HashMap\u003CString, String>) {\n        // Iterate over the RSS feed URLs\n        for (name, url) in rss_feeds {\n            println!(\"{}: {}\", name, url);\n\n            // Fetch URL content\n            let body = reqwest::blocking::get(url).unwrap().text().unwrap();\n\n            // Parse XML body\n            let parsed_body = roxmltree::Document::parse(&body).unwrap();\n\n            // Print the result\n            println!(\"{:#?}\", parsed_body);\n        }\n    }\n}\n```\n\nRemarquez le nouveau mot-clé : [`unwrap()`](https://doc.rust-lang.org/rust-by-example/error/option_unwrap.html). Rust n'accepte pas les valeurs `null` et utilise le [type `Option`](https://doc.rust-lang.org/rust-by-example/std/option.html) pour représenter les valeurs. Si vous avez la certitude d'utiliser un type encapsulé comme `Text` ou `String`, vous pouvez appeler la méthode `unwrap()` pour obtenir la valeur, mais elle provoquera un arrêt brutal du programme si la valeur est `None`.\n\n**Remarque** : les suggestions de code se réfèrent à la fonction `reqwest::blocking::get` pour suivre l'instruction `// Fetch URL content` du commentaire. Le nom de la [crate `reqwest`](https://docs.rs/reqwest/latest/reqwest/) n'est pas une faute de frappe. Cette crate simplifie les requêtes HTTP, en mode asynchrone ou bloquant.\n\nL'analyse XML peut varier selon les flux RSS, alors testez la fonction `get_feeds()` et ajustez le code si nécessaire.\n\n### Appel de la fonction du module dans main()\n\nLa fonction main() ne connaît pas encore la fonction `get_feeds()`. Nous devons donc importer son module. Contrairement à d'autres langages de programmation, qui utilisent les mots-clés `include` ou `import`, Rust utilise des répertoires de fichiers\n\npour organiser les modules. Dans notre exemple, les deux fichiers source existent au même niveau de répertoire. `feed_reader.rs` est interprété comme une crate, contenant un module appelé `feed_reader`, qui définit la fonction `get_feeds()`.\n\n```\nsrc/\n  main.rs\n  feed_reader.rs\n```\n\nPour accéder à `get_feeds()` à partir du fichier `feed_reader.rs`, commencez par [indiquer le chemin du module](https://doc.rust-lang.org/book/ch07-04-bringing-paths-into-scope-with-the-use-keyword.html) dans la portée `main.rs`, puis appeler le chemin complet de la fonction.\n\n```rust\nmod feed_reader;\n\nfn main() {\n\n    feed_reader::feed_reader::get_feeds(&rss_feeds);\n\n```\n\nUtilisez le mot-clé `use` pour importer le chemin complet de la fonction avec un nom court.\n\n```rust\nmod feed_reader;\nuse feed_reader::feed_reader::get_feeds;\n\nfn main() {\n\n    get_feeds(&rss_feeds);\n\n```\n\n**Astuce :** consultez [l'article « Clear explanation of the Rust module system »](https://www.sheshbabu.com/posts/rust-module-system/) pour plus de détails.\n\n```diff\n\nfn main() {\n    // ...\n\n    // Print feed_reader get_feeds() output\n    println!(\"{}\", feed_reader::get_feeds(&rss_feeds));\n```\n\n```rust\nuse std::collections::HashMap;\n\nmod feed_reader;\n// Alternative: Import full function path\n//use feed_reader::feed_reader::get_feeds;\n\nfn main() {\n    // Define RSS feed URLs in the variable rss_feeds\n    // Use a HashMap\n    // Add Hacker News and TechCrunch\n    // Ensure to use String as type\n    let rss_feeds = HashMap::from([\n        (\"Hacker News\".to_string(), \"https://news.ycombinator.com/rss\".to_string()),\n        (\"TechCrunch\".to_string(), \"https://techcrunch.com/feed/\".to_string()),\n    ]);\n\n    // Call get_feeds() from feed_reader module\n    feed_reader::feed_reader::get_feeds(&rss_feeds);\n    // Alternative: Imported full path, use short path here.\n    //get_feeds(&rss_feeds);\n}\n```\n\nExécutez `cargo build` à nouveau dans le terminal pour compiler le code.\n\n```shell\ncargo build\n```\n\nDemander des suggestions de code pour des bibliothèques courantes (comme les requêtes HTTP ou l'analyse XML) peut provoquer des erreurs de compilation telles que :\n\n1. Erreur : `could not find blocking in reqwest`. Solution : activez la fonctionnalité `blocking` pour la crate dans `Config.toml`: `reqwest = { version = \"0.11.20\", features = [\"blocking\"] }`.\n2. Erreur : `failed to resolve: use of undeclared crate or module reqwest`. Solution : ajoutez la crate `reqwest`.\n3. Erreur : `failed to resolve: use of undeclared crate or module roxmltree`. Solution : ajoutez la crate `roxmltree`.\n\n```shell\nvim Config.toml\n\nreqwest = { version = \"0.11.20\", features = [\"blocking\"] }\n```\n\n```shell\ncargo add reqwest\ncargo add roxmltree\n```\n\n**Astuce :** copiez le message d'erreur avec l'en-tête `Rust \u003Cerror message>` dans un navigateur pour vérifier si la crate manquante est disponible. Cette recherche vous dirigera sur crates.io. Ajoutez ensuite les dépendances manquantes.\n\nAprès la compilation, exécutez le code avec `cargo run` et vérifiez la sortie du flux RSS de Hacker News.\n\n![Terminal VS Code, exécution de Cargo pour récupérer le flux XML de Hacker News](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_terminal_fetch_rss_feed_output_hacker_news.png){: .shadow}\n\nProchaine étape : analyse XML dans un format lisible par un humain Nous allons maintenant explorer les solutions existantes et le rôle des crates Rust.\n\n## Crates\nLes flux RSS suivent des protocoles et spécifications communs. Pour analyser les éléments XML et comprendre la structure de l'objet sous-jacent, vérifiez si un développeur a déjà résolu ce problème et utilisez son code.\n\nEn Rust, le code réutilisable est organisé en [`Crates`](https://doc.rust-lang.org/rust-by-example/crates.html) et disponible sur crates.io. Ajoutez ces dépendances dans le fichier `Config.toml` dans la section `[dependencies]` ou avec `cargo add \u003Cname>`.\n\nPour notre application, utilisez la [crate feed-rs](https://crates.io/crates/feed-rs) en exécutant la commande suivante dans le terminal :\n\n```shell\ncargo add feed-rs\n```\n\n![Terminal VS Code Terminal : ajout d'une crate, vérification dans le fichier Config.toml](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_rust_crate_add_feed-rs_explained.png)\n\n### feed-rs pour analyser un flux XML\nAccédez à `src/feed_reader.rs` pour modifier l'analyse XML. GitLab Duo sait appeler la fonction `parser::parse` de la crate `feed-rs`. Les suggestion de code comprennent le cas particulier : `feed-rs` [attend des octets bruts en entrée, et non des chaînes](https://docs.rs/feed-rs/latest/feed_rs/parser/fn.parse_with_uri.html) pour déterminer l'encodage. Fournissez des instructions dans le commentaire pour obtenir le résultat prévu.\n\n```rust\n            // Parse XML body with feed_rs parser, input in bytes\n            let parsed_body = feed_rs::parser::parse(body.as_bytes()).unwrap();\n```\n\n![Suggestions de code : module public avec la fonction `get_feeds()`, étape 5 : modification de l'analyseur XML en feed-rs](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_module_function_05_use_feed_rs_to_parse.png){: .shadow}\n\nLes avantages de `feed-rs` se révèlent en exécutant votre programme avec la commande `cargo run` : les clés et valeurs sont converties en types d'objets Rust réutilisables.\n\n![Terminal VS Code, exécution de Cargo pour récupérer le flux XML de Hacker News](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_terminal_fetch_rss_feed_output_hacker_news_feed_rs.png){: .shadow}\n\n## Configuration du runtime : arguments de programme\nJusqu'à présent, nous avons utilisé des valeurs de flux RSS codées en dur. La prochaine étape est de configurer ces flux RSS au moment de l'exécution.\n\nRust propose des [arguments de programme](https://doc.rust-lang.org/rust-by-example/std_misc/arg.html) via la bibliothèque « Std misc » standard. Il est plus rapide d'apprendre [l'analyse des arguments](https://doc.rust-lang.org/rust-by-example/std_misc/arg/matching.html) directement que d'utiliser des crates (par exemple, la crate [clap](https://docs.rs/clap/latest/clap/)) ou de passer par un fichier de configuration ou un autre format ([TOML](https://toml.io/en/), YAML). Pour cet article, j'ai bien essayé d'autres pistes, mais sans succès. Relevez le défi et essayez de configurer les flux RSS d'une autre manière.\n\nUne méthode simple consiste à passer les paramètres sous la forme `\"name,url\"` avec les valeurs séparées par une virgule `,` pour extraire le nom et l'URL. Demandez aux suggestions de code d'effectuer cette action et d'inclure les nouvelles valeurs dans la table de hachage `rss_feeds`. La variable peut ne pas être modifiable et doit être remplacée par `let mut rss_feeds`.\n\nAccédez à `src/main.rs` et ajoutez le code suivant à la fonction `main()` après la variable `rss_feeds`. Écrivez un commentaire qui définit les arguments de programme et vérifiez le code suggéré.\n\n```rust\n    // Program args, format \"name,url\"\n    // Split value by , into name, url and add to rss_feeds\n```\n\n![Suggestions de code pour les arguments de programme et découpage des paires nom,URL pour la variable rss_feeds](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_program_args_boring_solution.png){: .shadow}\n\nDans notre exemple, le code est le suivant :\n\n```rust\nfn main() {\n    // Define RSS feed URLs in the variable rss_feeds\n    // Use a HashMap\n    // Add Hacker News and TechCrunch\n    // Ensure to use String as type\n    let mut rss_feeds = HashMap::from([\n        (\"Hacker News\".to_string(), \"https://news.ycombinator.com/rss\".to_string()),\n        (\"TechCrunch\".to_string(), \"https://techcrunch.com/feed/\".to_string()),\n    ]);\n\n    // Program args, format \"name,url\"\n    // Split value by , into name, url and add to rss_feeds\n    for arg in std::env::args().skip(1) {\n        let mut split = arg.split(\",\");\n        let name = split.next().unwrap();\n        let url = split.next().unwrap();\n        rss_feeds.insert(name.to_string(), url.to_string());\n    }\n\n    // Call get_feeds() from feed_reader module\n    feed_reader::feed_reader::get_feeds(&rss_feeds);\n    // Alternative: Imported full path, use short path here.\n    //get_feeds(&rss_feeds);\n}\n```\n\nPassez les arguments directement avec `cargo run`, avant les arguments contenant `--`. Ajoutez des guillemets doubles à tous les arguments et une virgule après le nom. Utilisez l'URL du flux RSS comme argument. Séparez les arguments par des espaces.\n\n```\ncargo build\n\ncargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n```\n\n![Terminal VS Code, exemple de sortie de flux RSS pour le blog GitLab](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_terminal_gitlab_blog_rss_feed_example.png){: .shadow}\n\n### Gestion des erreurs des intrants saisis\nSi l'entrée ne correspond pas aux attentes du programme, [générez une erreur](https://doc.rust-lang.org/rust-by-example/error.html) pour aider à corriger les arguments, par exemple en cas d'URL invalide. Ajoutez un commentaire dans le code pour que les suggestions de code incluent une vérification de l'URL.\n\n```rust\n    // Ensure that URL contains a valid format, otherwise throw an error\n```\n\nVérifiez si `url` commence par `http://` ou `https://`. Sinon, utilisez la [macro panic!](https://doc.rust-lang.org/rust-by-example/std/panic.html) pour générer une erreur. Dans notre exemple, le code est le suivant :\n\n```rust\n    // Program args, format \"name,url\"\n    // Split value by , into name, url and add to rss_feeds\n    for arg in std::env::args().skip(1) {\n        let mut split = arg.split(\",\");\n        let name = split.next().unwrap();\n        let url = split.next().unwrap();\n\n        // Ensure that URL contains a valid format, otherwise throw an error\n        if !url.starts_with(\"http://\") && !url.starts_with(\"https://\") {\n            panic!(\"Invalid URL format: {}\", url);\n        }\n\n        rss_feeds.insert(name.to_string(), url.to_string());\n    }\n```\n\nTestez la gestion des erreurs en supprimant `:` dans l'une des chaînes d'URL. Ajoutez la variable d'environnement `RUST_BACKTRACE=full` pour un affichage plus détaillé des résultats lorsque l'appel `panic()`.\n\n```\nRUST_BACKTRACE=full cargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https//www.cncf.io/feed/\"\n```\n\n![Terminal VS Code avec un format d'URL incorrect, traçage des erreurs suite à un arrêt brutal du programme](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_terminal_url_format_error_panic_backtrace.png){: .shadow}\n\n## Persistance et stockage des données\nUne solution classique consiste à stocker les données du flux analysé dans un nouveau fichier. Demandez aux suggestions de code de générer un nom de fichier incluant le nom du flux RSS et la date au format ISO.\n\n```rust\n    // Parse XML body with feed_rs parser, input in bytes\n    let parsed_body = feed_rs::parser::parse(body.as_bytes()).unwrap();\n\n    // Print the result\n    println!(\"{:#?}\", parsed_body);\n\n    // Dump the parsed body to a file, as name-current-iso-date.xml\n    let now = chrono::offset::Local::now();\n    let filename = format!(\"{}-{}.xml\", name, now.format(\"%Y-%m-%d\"));\n    let mut file = std::fs::File::create(filename).unwrap();\n    file.write_all(body.as_bytes()).unwrap();\n```\n\nUtilisez la [crate chrono](https://crates.io/crates/chrono). Ajoutez-la à l'aide de `cargo add chrono`, puis exécutez `cargo build` et `cargo run`.\n\nLes fichiers seront enregistrés dans le répertoire où `cargo run` est exécuté. Si vous exécutez le binaire directement dans le répertoire `target/debug/`, les fichiers y seront sauvegardés.\n\n![VS Code avec fichier de contenu du flux RSS CNCF, enregistré sur le disque](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_cncf_rss_feed_saved_on_disk.png)\n\n## Optimisation\nLes URL dans `rss_feeds` sont traitées de manière séquentielle, ce qui peut être lent avec plus de 100 URL. Pourquoi ne pas les traiter en parallèle ?\n\n### Exécution asynchrone\nRust permet l'exécution asynchrone avec des [threads](https://doc.rust-lang.org/book/ch16-01-threads.html).\n\nLa méthode la plus simple est de créer un thread pour chaque URL de flux RSS. Nous explorerons les stratégies d'optimisation ultérieurement. Avant de passer à l'exécution parallèle, mesurez le temps d'exécution séquentiel en faisant précéder `time` par `cargo run`.\n\n```\ntime cargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n\n0.21s user 0.08s system 10% cpu 2.898 total\n```\n\nCet exercice peut nécessiter du codage manuel. Conservez l'état séquentiel dans une validation Git et une nouvelle branche `sequential-exec` pour comparer l'impact de l'exécution parallèle.\n\n```shell\ngit commit -avm \"Sequential execution working\"\ngit checkout -b sequential-exec\ngit push -u origin sequential-exec\n\ngit checkout main\n```\n\n### Création de threads\nOuvrez `src/feed_reader.rs` et réusinez la fonction `get_feeds()`. Lancez une validation Git de l'état actuel, puis supprimez le contenu de la portée de la fonction. Ajoutez les commentaires suivants dans le code comme instructions pour les suggestions de code :\n\n1. `// Store threads in vector` : stockez les gestionnaires de thread dans un vecteur pour attendre que tous les threads se terminent à la fin de l'appel de la fonction.\n2. `// Loop over rss_feeds and spawn threads` : créez un code standard pour itérer sur les flux RSS et générer un thread pour chacun.\n\nAjoutez les instructions `use` suivantes pour les modules `thread` et `time`.\n\n```rust\n    use std::thread;\n    use std::time::Duration;\n```\n\nContinuez à écrire le code et fermez la boucle for. Ajoutez les gestionnaires de thread au vecteur `threads` et joignez-les à la fin de la fonction.\n\n```rust\n    pub fn get_feeds(rss_feeds: &HashMap\u003CString, String>) {\n\n        // Store threads in vector\n        let mut threads: Vec\u003Cthread::JoinHandle\u003C()>> = Vec::new();\n\n        // Loop over rss_feeds and spawn threads\n        for (name, url) in rss_feeds {\n            let thread_name = name.clone();\n            let thread_url = url.clone();\n            let thread = thread::spawn(move || {\n\n            });\n            threads.push(thread);\n        }\n\n        // Join threads\n        for thread in threads {\n            thread.join().unwrap();\n        }\n    }\n```\n\nAjoutez la crate `thread`, compilez et exécutez le code.\n\n```shell\ncargo add thread\n\ncargo build\n\ncargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n```\n\nAucune donnée n'est traitée ni affichée. Explorez les nouveaux mots-clés avant de réintégrer la fonctionnalité.\n\n### Portées, threads et fermetures des fonctions\nLe code suggéré utilise de nouveaux mots-clés et design patterns. Le gestionnaire de thread de type `thread::JoinHandle` permet d'attendre la fin des threads ([join()](https://doc.rust-lang.org/book/ch16-01-threads.html#waiting-for-all-threads-to-finish-using-join-handles)).\n\n`thread::spawn()` génère un thread pour passer un objet fonction. Une expression [de fermeture](https://doc.rust-lang.org/book/ch13-01-closures.html) est passée en tant que fonction anonyme. Les paramètres de fermeture sont passés avec la syntaxe `||`. La [fermeture `move`](https://doc.rust-lang.org/book/ch16-01-threads.html#using-move-closures-with-threads) déplace les variables de portée de la fonction dans celle du thread. Pas besoin de préciser manuellement les variables qui doivent être passées dans la nouvelle portée de la fonction/fermeture.\n\nCependant, `rss_feeds` est passé comme référence `&` par la structure d'appel de la fonction `get_feeds()` et n'est valide que dans la portée de la fonction. Utilisez le code suivant pour provoquer une erreur :\n\n```rust\npub fn get_feeds(rss_feeds: &HashMap\u003CString, String>) {\n\n    // Store threads in vector\n    let mut threads: Vec\u003Cthread::JoinHandle\u003C()>> = Vec::new();\n\n    // Loop over rss_feeds and spawn threads\n    for (key, value) in rss_feeds {\n        let thread = thread::spawn(move || {\n            println!(\"{}\", key);\n        });\n    }\n}\n```\n\n![Terminal VS Code, erreur liée à la portée de la variable et aux références avec une fermeture déplacée dans un thread](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_terminal_cargo_build_error_function_threads_variable_scopes.png){: .shadow}\n\nLa variable `key`, pourtant créée dans la portée de la fonction, fait référence à `rss_feeds` et ne peut pas être déplacée dans la portée du thread. Les valeurs accessibles depuis la table de hachage des paramètres de fonction `rss_feeds` nécessitent une copie locale avec `clone()`.\n\n![Terminal VS Code, création de thread avec clone](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_rust_thread_spawn_clone.png){: .shadow}\n\n```rust\npub fn get_feeds(rss_feeds: &HashMap\u003CString, String>) {\n\n    // Store threads in vector\n    let mut threads: Vec\u003Cthread::JoinHandle\u003C()>> = Vec::new();\n\n    // Loop over rss_feeds and spawn threads\n    for (name, url) in rss_feeds {\n        let thread_name = name.clone();\n        let thread_url = url.clone();\n        let thread = thread::spawn(move || {\n            // Use thread_name and thread_url as values, see next chapter for instructions.\n```\n\n## Analyse du flux XML dans les types d'objets\nL'étape suivante consiste à analyser le flux RSS dans la fermeture du thread. Ajoutez les commentaires suivants dans le code pour guider les suggestions de code :\n\n1. `// Parse XML body with feed_rs parser, input in bytes` : récupérer le contenu de l'URL du flux RSS et l'analyser avec les fonctions de la crate `feed_rs`.\n2. `// Check feed_type attribute feed_rs::model::FeedType::RSS2 or Atom and print its name` : extraire le type de flux pour comparer l'attribut `feed_type` avec [`feed_rs::model::FeedType`](https://docs.rs/feed-rs/latest/feed_rs/model/enum.FeedType.html). Les suggestions de code doivent aussi recevoir des instructions avec les valeurs enum exactes à comparer.\n\n![Demande adressée aux suggestions de code de comparer les types de flux spécifiques](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_feed_rs_type_condition.png){: .shadow}\n\n```rust\n            // Parse XML body with feed_rs parser, input in bytes\n            let body = reqwest::blocking::get(thread_url).unwrap().bytes().unwrap();\n            let feed = feed_rs::parser::parse(body.as_ref()).unwrap();\n\n            // Check feed_type attribute feed_rs::model::FeedType::RSS2 or Atom and print its name\n            if feed.feed_type == feed_rs::model::FeedType::RSS2 {\n                println!(\"{} is an RSS2 feed\", thread_name);\n            } else if feed.feed_type == feed_rs::model::FeedType::Atom {\n                println!(\"{} is an Atom feed\", thread_name);\n            }\n```\n\nExécutez le programme et vérifiez les données de sortie.\n\n```\ntime cargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n\nCNCF is an RSS2 feed\nTechCrunch is an RSS2 feed\nGitLab Blog is an Atom feed\nHacker News is an RSS2 feed\n```\n\nPour cela, ouvrez les URL des flux dans le navigateur ou en inspectant les fichiers téléchargés.\n\nHacker News utilise RSS 2.0, avec `channel(title,link,description,item(title,link,pubDate,comments))`. TechCrunch et le blog de la CNCF ont une structure similaire.\n```xml\n\u003Crss version=\"2.0\">\u003Cchannel>\u003Ctitle>Hacker News\u003C/title>\u003Clink>https://news.ycombinator.com/\u003C/link>\u003Cdescription>Links for the intellectually curious, ranked by readers.\u003C/description>\u003Citem>\u003Ctitle>Writing a debugger from scratch: Breakpoints\u003C/title>\u003Clink>https://www.timdbg.com/posts/writing-a-debugger-from-scratch-part-5/\u003C/link>\u003CpubDate>Wed, 27 Sep 2023 06:31:25 +0000\u003C/pubDate>\u003Ccomments>https://news.ycombinator.com/item?id=37670938\u003C/comments>\u003Cdescription>\u003C![CDATA[\u003Ca href=\"https://news.ycombinator.com/item?id=37670938\">Comments\u003C/a>]]>\u003C/description>\u003C/item>\u003Citem>\n```\n\nLe blog de GitLab utilise le format de flux [Atom](https://datatracker.ietf.org/doc/html/rfc4287), similaire à RSS, mais nécessitant une logique d'analyse différente.\n```xml\n\u003C?xml version='1.0' encoding='utf-8' ?>\n\u003Cfeed xmlns='http://www.w3.org/2005/Atom'>\n\u003C!-- / Get release posts -->\n\u003C!-- / Get blog posts -->\n\u003Ctitle>GitLab\u003C/title>\n\u003Cid>https://about.gitlab.com/blog\u003C/id>\n\u003Clink href='https://about.gitlab.com/blog/' />\n\u003Cupdated>2023-09-26T00:00:00+00:00\u003C/updated>\n\u003Cauthor>\n\u003Cname>The GitLab Team\u003C/name>\n\u003C/author>\n\u003Centry>\n\u003Ctitle>Atlassian Server ending: Goodbye disjointed toolchain, hello DevSecOps platform\u003C/title>\n\u003Clink href='https://about.gitlab.com/blog/atlassian-server-ending-move-to-a-single-devsecops-platform/' rel='alternate' />\n\u003Cid>https://about.gitlab.com/blog/atlassian-server-ending-move-to-a-single-devsecops-platform/\u003C/id>\n\u003Cpublished>2023-09-26T00:00:00+00:00\u003C/published>\n\u003Cupdated>2023-09-26T00:00:00+00:00\u003C/updated>\n\u003Cauthor>\n\u003Cname>Dave Steer, Justin Farris\u003C/name>\n\u003C/author>\n```\n\n### Cartographie des types de données de flux génériques\nPour utiliser la fonction [`roxmltree::Document::parse`](https://docs.rs/roxmltree/latest/roxmltree/struct.Document.html) vous devez comprendre l'arborescence des nœuds XML et ses noms de balise. Heureusement, [feed_rs::model::Feed](https://docs.rs/feed-rs/latest/feed_rs/model/struct.Feed.html) gère à la fois les flux RSS et Atom. Nous pouvons donc continuer avec la crate `feed_rs`.\n\n1. Atom : Feed->Feed, Entry->Entry\n2. RSS : Channel->Feed, Item->Entry\n\nNous devons extraire les attributs requis et associer leurs types de données. Consultez la [documentation feed_rs::model](https://docs.rs/feed-rs/latest/feed_rs/model/index.html) pour comprendre les structures, leurs champs et implémentations. Cela évitera les erreurs de conversion et les échecs de compilation, spécifiques à l'implémentation de `feed_rs`.\n\nLa structure [`Feed`](https://docs.rs/feed-rs/latest/feed_rs/model/struct.Feed.html) fournit un `title` de type `Option\u003CText>` (avec une valeur ou vide). La structure [`Entry`](https://docs.rs/feed-rs/latest/feed_rs/model/struct.Entry.html) fournit les éléments suivants :\n\n1. `title` : `Option\u003CText>` avec [`Text`](https://docs.rs/feed-rs/latest/feed_rs/model/struct.Text.html) et le champ `content` comme la `String`.\n2. `updated` : `Option\u003CDateTime\u003CUtc>>` avec [`DateTime`](https://docs.rs/chrono/latest/chrono/struct.DateTime.html) avec la [méthode `format()`](https://docs.rs/chrono/latest/chrono/struct.DateTime.html#method.format).\n3. `summary` : `Option\u003CText>` [`Text`](https://docs.rs/feed-rs/latest/feed_rs/model/struct.Text.html) et le champ `content` comme la `String`.\n4. `links` : `Vec\u003CLink>`, vecteur avec les éléments [`Link`](https://docs.rs/feed-rs/latest/feed_rs/model/struct.Link.html). L'attribut `href` fournit la chaîne d'URL brute.\n\nUtilisez ces connaissances pour extraire les données des intrants de flux. Appelez `unwrap()` sur tous les types `Option` et ajoutez des instructions explicites aux suggestions de code.\n\n```rust\n                // https://docs.rs/feed-rs/latest/feed_rs/model/struct.Feed.html\n                // https://docs.rs/feed-rs/latest/feed_rs/model/struct.Entry.html\n                // Loop over all entries, and print\n                // title.unwrap().content\n                // published.unwrap().format\n                // summary.unwrap().content\n                // links href as joined string\n                for entry in feed.entries {\n                    println!(\"Title: {}\", entry.title.unwrap().content);\n                    println!(\"Published: {}\", entry.published.unwrap().format(\"%Y-%m-%d %H:%M:%S\"));\n                    println!(\"Summary: {}\", entry.summary.unwrap().content);\n                    println!(\"Links: {:?}\", entry.links.iter().map(|link| link.href.clone()).collect::\u003CVec\u003CString>>().join(\", \"));\n                    println!();\n                }\n```\n\n![Suggestions de code pour afficher les types d'éléments de flux, avec des exigences spécifiques](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_print_feed_entries_fields_with_rust_type_specifics.png){: .shadow}\n\n### Gestion des erreurs avec l'Option unwrap()\nCompilez, exécutez le programme, puis continuez avec des instructions multilignes. Remarque : `unwrap()` appelle la macro `panic!` et bloque le programme si des valeurs sont vides, comme un champ `summary` non défini dans les données du flux.\n\n```shell\nGitLab Blog is an Atom feed\nTitle: How the Colmena project uses GitLab to support citizen journalists\nPublished: 2023-09-27 00:00:00\nthread '\u003Cunnamed>' panicked at 'called `Option::unwrap()` on a `None` value', src/feed_reader.rs:40:59\n```\n\nUtilisez [`std::Option::unwrap_or_else`](https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap_or_else) pour définir une chaîne vide comme valeur par défaut. La syntaxe nécessite une fermeture qui renvoie une instanciation de structure `Text` vide.\n\nJ'ai dû m'y reprendre à plusieurs fois pour trouver l'initialisation correcte permettant de résoudre le problème, car le passage d'une chaîne vide ne fonctionne pas avec les types personnalisés. Je vais vous montrer mes tentatives et recherches.\n\n```rust\n// Problem: The `summary` attribute is not always initialized. unwrap() will panic! then.\n// Requires use mime; and use feed_rs::model::Text;\n/*\n// 1st attempt: Use unwrap() to extraxt Text from Option\u003CText> type.\nprintln!(\"Summary: {}\", entry.summary.unwrap().content);\n// 2nd attempt. Learned about unwrap_or_else, passing an empty string.\nprintln!(\"Summary: {}\", entry.summary.unwrap_or_else(|| \"\").content);\n// 3rd attempt. summary is of the Text type, pass a new struct instantiation.\nprintln!(\"Summary: {}\", entry.summary.unwrap_or_else(|| Text{}).content);\n// 4th attempt. Struct instantiation requires 3 field values.\nprintln!(\"Summary: {}\", entry.summary.unwrap_or_else(|| Text{\"\", \"\", \"\"}).content);\n// 5th attempt. Struct instantation with public fields requires key: value syntax\nprintln!(\"Summary: {}\", entry.summary.unwrap_or_else(|| Text{content_type: \"\", src: \"\", content: \"\"}).content);\n// 6th attempt. Reviewed expected Text types in https://docs.rs/feed-rs/latest/feed_rs/model/struct.Text.html and created Mime and String objects\nprintln!(\"Summary: {}\", entry.summary.unwrap_or_else(|| Text{content_type: mime::TEXT_PLAIN, src: String::new(), content: String::new()}).content);\n// 7th attempt: String and Option\u003CString> cannot be casted automagically. Compiler suggested using `Option::Some()`.\nprintln!(\"Summary: {}\", entry.summary.unwrap_or_else(|| Text{content_type: mime::TEXT_PLAIN, src: Option::Some(), content: String::new()}).content);\n*/\n\n// xth attempt: Solution. Option::Some() requires a new String object.\nprintln!(\"Summary: {}\", entry.summary.unwrap_or_else(|| Text{content_type: mime::TEXT_PLAIN, src: Option::Some(String::new()), content: String::new()}).content);\n```\n\nCette approche n'était pas satisfaisante, car la ligne de code était difficile à lire et nécessitait une retouche manuelle sans suggestions de code. Puis, j'ai trouvé où se nichait le problème : si `Option` a la valeur `none`, `unwrap()` génère une erreur. J'ai demandé aux suggestions de code s’il existe une méthode plus simple, avec ce nouveau commentaire :\n\n```\n                // xth attempt: Solution. Option::Some() requires a new String object.\n                println!(\"Summary: {}\", entry.summary.unwrap_or_else(|| Text{content_type: mime::TEXT_PLAIN, src: Option::Some(String::new()), content: String::new()}).content);\n\n                // Alternatively, use Option.is_none()\n```\n\n![Demande aux suggestions de code d'une alternative pour Options.is_none](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/code_suggestions_after_complex_unwrap_or_else_ask_for_alternative_option.png){: .shadow}\n\nCette méthode améliore la lisibilité, moins de cycles CPU sont gaspillés sur `unwrap()` et la courbe d'apprentissage est excellente, de la résolution d'un problème complexe à l'utilisation d'une solution standard. Gagnant-gagnant.\n\nAjoutez le stockage des données XML sur le disque pour finaliser l'application de lecteur de flux.\n\n```rust\n                // Dump the parsed body to a file, as name-current-iso-date.xml\n                let file_name = format!(\"{}-{}.xml\", thread_name, chrono::Local::now().format(\"%Y-%m-%d-%H-%M-%S\"));\n                let mut file = std::fs::File::create(file_name).unwrap();\n                file.write_all(body.as_ref()).unwrap();\n```\n\nCompilez et exécutez le programme pour vérifier les données de sortie.\n\n```shell\ncargo build\n\ntime cargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n```\n\n![Terminal VS Code, exécution de Cargo avec des données de sortie d'intrants au format requis](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/vs_code_terminal_cargo_run_formatted_output_final.png)\n\n## Benchmarks\n\n### Exécution séquentielle vs parallèle\nComparez les temps d'exécution du code en créant cinq échantillons pour chaque type d'exécution.\n\n1. Exécution séquentielle. [Exemple de code source de la MR](https://gitlab.com/gitlab-de/use-cases/ai/learn-with-ai/learn-rust-ai-app-reader/-/merge_requests/1)\n2. Exécution parallèle. [Exemple de code source de la MR](https://gitlab.com/gitlab-de/use-cases/ai/learn-with-ai/learn-rust-ai-app-reader/-/merge_requests/3)\n\n```shell\n# Sequential\ngit checkout sequential-exec\n\ntime cargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n\n0.21s user 0.08s system 10% cpu 2.898 total\n0.21s user 0.08s system 11% cpu 2.585 total\n0.21s user 0.09s system 10% cpu 2.946 total\n0.19s user 0.08s system 10% cpu 2.714 total\n0.20s user 0.10s system 10% cpu 2.808 total\n```\n\n```shell\n# Parallel\ngit checkout parallel-exec\n\ntime cargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n\n0.19s user 0.08s system 17% cpu 1.515 total\n0.18s user 0.08s system 16% cpu 1.561 total\n0.18s user 0.07s system 17% cpu 1.414 total\n0.19s user 0.08s system 18% cpu 1.447 total\n0.17s user 0.08s system 16% cpu 1.453 total\n```\nAvec quatre threads RSS en parallèle, le temps total est presque réduit de moitié, mais le CPU est plus sollicité. Optimisons le code et les fonctionnalités.\n\nActuellement, nous utilisons la version de débogage Cargo, mais pas encore les versions optimisées. L'exécution parallèle a ses limites : les points de terminaison HTTP peuvent atteindre leur débit maximum, et \n\nchaque thread nécessite un changement de contexte dans le noyau, consommant des ressources. Lorsqu'un thread reçoit des ressources de calcul, d'autres sont mis en veille. Un trop grand nombre de threads peut ralentir le système. Pour éviter cela, utilisez des design patterns comme les [files d'attente de travail](https://docs.rs/work-queue/latest/work_queue/). Un pool de threads récupère cette tâche pour une exécution asynchrone.\n\nRust garantir la synchronisation des données entre les threads à l'aide des [canaux](https://doc.rust-lang.org/rust-by-example/std_misc/channels.html). Pour garantir un accès simultané aux données, des [mutexes (exclusions mutuelles)](https://doc.rust-lang.org/std/sync/struct.Mutex.html) fournissent des verrous sûrs.\n\n### CI/CD avec mise en cache Rust\nAjoutez la configuration CI/CD suivante dans le fichier `.gitlab-ci.yml`. Le job `run-latest` appelle `cargo run` avec des exemples d'URL de flux RSS et mesure le temps d'exécution en continu.\n\n```\nstages:\n  - build\n  - test\n  - run\n\ndefault:\n  image: rust:latest\n  cache:\n    key: ${CI_COMMIT_REF_SLUG}\n    paths:\n      - .cargo/bin\n      - .cargo/registry/index\n      - .cargo/registry/cache\n      - target/debug/deps\n      - target/debug/build\n    policy: pull-push\n\n# Cargo data needs to be in the project directory for being cached.\nvariables:\n  CARGO_HOME: ${CI_PROJECT_DIR}/.cargo\n\nbuild-latest:\n  stage: build\n  script:\n    - cargo build --verbose\n\ntest-latest:\n  stage: build\n  script:\n    - cargo test --verbose\n\nrun-latest:\n  stage: run\n  script:\n    - time cargo run -- \"GitLab Blog,https://about.gitlab.com/atom.xml\" \"CNCF,https://www.cncf.io/feed/\"\n```\n\n![Pipelines GitLab CI/CD pour Rust, données de sortie de l'exécution Cargo](https://about.gitlab.com/images/blogimages/learn-rust-with-ai-code-suggestions-advanced-programming/gitlab_cicd_pipeline_rust_cargo_run_output.png){: .shadow}\n\n## Étapes suivantes\nRédiger cet article a été un défi pour maîtriser les techniques avancées de Rust et optimiser les suggestions de code. Ces dernières sont très utiles pour générer rapidement du code, avec le contexte local et pour ajuster l'algorithme à mesure que vous écrivez le code. Dans cet article, j'ai partagé les défis et les solutions. L'exemple de code pour l'application de lecture est disponible dans [le projet learn-rust-ai-app-reader](https://gitlab.com/gitlab-de/use-cases/ai/learn-with-ai/learn-rust-ai-app-reader).\n\nL'analyse des flux RSS étant complexe, elle nécessite des structures de données, des requêtes HTTP externes et des optimisations parallèles. Alors, `pourquoi ne pas utiliser la crate std::rss` -- pour une exécution asynchrone avancée. Cela ne démontre pas toutes les fonctionnalités de Rust abordées dans cet article, mais vous pouvez essayer de réécrire le code avec la [crate `rss`](https://docs.rs/rss/latest/rss/) pour pratiquer l'exécution asynchrone.\n\n### Exercices d'apprentissage de l'exécution asynchrone\nCet article pose les bases pour explorer le stockage persistant et la présentation des données. Pour vous perfectionner votre application en Rust, voici quelques idées :\n\n1. Stockage des données : utilisez une base de données comme sqlite et suivez les mises à jour des flux RSS.\n2. Notifications : déclenchez des notifications dans Telegram, ou autres.\n3. Fonctionnalités : étendez les types de lecteurs aux [API REST](https://about.gitlab.com/fr-fr/blog/what-is-rest-api/ \"API REST\")\n4. Configuration : intégrez des fichiers de configuration pour les flux RSS, les API, etc.\n5. Efficacité : ajoutez des filtres et des balises d'abonnement.\n6. Déploiement : utilisez un serveur Web, collectez les indicateurs avec Prometheus et déployez sur Kubernetes.\n\nNous aborderons certains de ces sujets dans un prochain article. En attendant, essayez d'implémenter des flux RSS existants et explorez d'autres bibliothèques Rust (`crates`).\n\n### Votre retour d'expérience\nLorsque vous utilisez les suggestions de code de [GitLab Duo](/gitlab-duo/), n'hésitez pas à [partager vos retours dans le ticket prévu à cet effet](https://gitlab.com/gitlab-org/gitlab/-/issues/405152).\n",[9,1028,687,1029,686],"careers","workflow","2025-01-27",{"slug":1032,"featured":6,"template":692},"learn-advanced-rust-programming-with-a-little-help-from-ai-code-suggestions","content:fr-fr:blog:learn-advanced-rust-programming-with-a-little-help-from-ai-code-suggestions.yml","Learn Advanced Rust Programming With A Little Help From Ai Code Suggestions","fr-fr/blog/learn-advanced-rust-programming-with-a-little-help-from-ai-code-suggestions.yml","fr-fr/blog/learn-advanced-rust-programming-with-a-little-help-from-ai-code-suggestions",{"_path":1038,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1039,"content":1045,"config":1052,"_id":1054,"_type":14,"title":1055,"_source":16,"_file":1056,"_stem":1057,"_extension":19},"/fr-fr/blog/meet-gitlab-duo-workflow-the-future-of-ai-driven-development",{"title":1040,"description":1041,"ogTitle":1040,"ogDescription":1041,"noIndex":6,"ogImage":1042,"ogUrl":1043,"ogSiteName":674,"ogType":675,"canonicalUrls":1043,"schema":1044},"GitLab Duo Workflow et l’avenir du développement logiciel piloté par l’IA","GitLab Duo Workflow, notre agent d'IA autonome, est en passe de révolutionner la manière dont les équipes créent et déploient des logiciels.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658912/Blog/Hero%20Images/blog-image-template-1800x945__20_.png","https://about.gitlab.com/blog/meet-gitlab-duo-workflow-the-future-of-ai-driven-development","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Duo Workflow et l’avenir du développement logiciel piloté par l’IA\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David DeSanto, Chief Product Officer, GitLab\"}],\n        \"datePublished\": \"2024-06-27\",\n      }",{"title":1040,"description":1041,"authors":1046,"heroImage":1042,"date":1048,"body":1049,"category":684,"tags":1050,"updatedDate":1051},[1047],"David DeSanto, Chief Product Officer, GitLab","2024-06-27","Du code qui s’écrit tout seul ? Une telle solution relève encore du rêve, mais elle pourrait bientôt devenir réalité. Grâce aux progrès continus des grands modèles linguistiques (LLM) et à la plateforme DevSecOps unifiée et pilotée par l'IA de GitLab, cet avenir se dessine rapidement. Lors de notre [événement de lancement de GitLab 17](https://about.gitlab.com/fr-fr/seventeen/), nous vous avons présenté GitLab Duo Workflow, un agent d'IA autonome, capable de transformer la manière dont les équipes construisent, sécurisent, déploient et surveillent les logiciels. \n\nGitLab Duo Workflow dépasse l’usage actuel des assistants d'IA réactifs, basés sur des prompts, en s'intégrant pleinement aux équipes et en contribuant de manière proactive à optimiser chaque aspect du cycle du développement logiciel. Workflow se distingue en tirant parti du magasin de données unifié de GitLab, qui connecte, de manière fluide, l'ensemble des données, des projets, des dépôts et de la documentation. Il devient ainsi un agent intelligent, toujours disponible, qui surveille en permanence vos projets : il anticipe les problèmes potentiels dans l'environnement de production, identifie et corrige automatiquement les failles de sécurité, optimise vos applications pour des performances optimales et accélère l'intégration des nouveaux membres de l'équipe. Le tout, en créant rapidement des environnements de développement à distance personnalisés.\n\nL'IA transforme la création de logiciels sécurisés, leur maintenance, leur mise à jour, leur déploiement et leur surveillance. Elle permet aux entreprises de développer plus de logiciels qu'elles n'auraient pu l'imaginer auparavant. Nous souhaitons offrir une approche DevSecOps pilotée par l'AI et GitLab Duo Workflow marque la première étape de notre parcours ambitieux. En effet, notre objectif est de permettre aux développeurs de se concentrer sur la résolution de problèmes, l'innovation et la création de valeur. [GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/) gère quant à lui les tâches répétitives et optimise les processus en arrière-plan.\n\n## La vision de GitLab Duo Workflow\nAvec GitLab Duo Workflow, nous vous offrons la possibilité d'automatiser et d'optimiser intégralement votre processus de développement logiciel pour plusieurs cas d'utilisation essentiels.\n### 1. Un développement automatisé\n\nGitLab Duo Workflow s'intègre directement à l'IDE, facilitant ainsi la planification et la priorisation des tâches selon les projets individuels et les processus organisationnels. Sur la base d'un élément de travail donné (epic, ticket ou tâche), Workflow établit un plan de mise en œuvre que les développeurs peuvent ensuite reprendre et affiner. Workflow passe ensuite en revue le plan, et génère ou réécrit le code afin d'atteindre et de satisfaire les exigences définies. Pour ce faire, le processus se déroule dans un [espace de travail de développement à distance de GitLab](https://about.gitlab.com/blog/quick-start-guide-for-gitlab-workspaces/), ce qui permet à Workflow d'évaluer, d'écrire et de tester les modifications de code en toute sécurité. Ce processus permet également de s'assurer que le code produit par Workflow répond parfaitement aux exigences et qu'il passe tous les tests du pipeline CI, y compris les scans de sécurité. En cas d'échec du pipeline, Workflow traite automatiquement les problèmes et les résout si nécessaire. Il veille à ce que seul un code de haute qualité, conforme aux normes de votre entreprise, soit créé, validé et intégré à vos projets.\n\nLorsque le code est prêt, Workflow crée automatiquement une merge request (requête de fusion) comprenant les modifications de code et suit les processus d'approbation de cette requête. Cela comprend les interactions avec le réviseur ou le chargé de maintenance responsable de valider le code. Vous pouvez même demander à Workflow de procéder à une revue de votre code et de commenter vos merge requests, comme le ferait un réviseur de code humain. Mieux encore, Workflow mettra en œuvre ses suggestions à votre demande. Et ce n'est que le début.\n\n### 2. Une amélioration continue intelligente\nGitLab Duo Workflow analyse votre codebase en temps réel. Il suggère des optimisations d'architecture afin d'améliorer l'efficacité, d'accroître les performances et de réduire les coûts. Il identifie les opportunités de réusinage du code de manière proactive pour favoriser l'évolutivité et s'attaque également à la dette technique en suggérant des modifications aux développeurs ou en les mettant en œuvre automatiquement dans un environnement sandbox. En outre, Workflow utilise des capacités d'automatisation pour ajuster automatiquement l'allocation et l'utilisation des ressources cloud en fonction des besoins fluctuants de vos projets de développement logiciel, afin de s'assurer que vos applications atteignent toujours leurs objectifs de performance.\n\n### 3. Une sécurité et une conformité proactives\nLa sécurité et la conformité sont des priorités absolues pour toute entreprise. GitLab Duo Workflow invite automatiquement et en temps réel les développeurs à appliquer des correctifs, à réusiner le code non sécurisé et à s'adapter aux nouvelles menaces. Notre agent évalue aussi en permanence les risques de sécurité associés à vos applications et à vos environnements de production. Si nécessaire, il vous guide pour mettre en œuvre des mesures d'atténuation.\n\n### 4. Une optimisation autonome des performances\nGitLab Duo Workflow intègre des boucles de rétroaction élaborées, qui permettent un apprentissage et une amélioration continus. En analysant les données des outils de surveillance, les interactions des utilisateurs et les résultats commerciaux, il peut affiner en continu sa vision de votre codebase. Cette démarche garantit l'alignement de l'architecture de vos applications sur les besoins de votre entreprise. Comme c'est le cas pour tous les agents d'IA, Workflow s'améliore constamment : à mesure qu'il devient partenaire à part entière de votre entreprise, il apprend à détecter et à corriger ses propres erreurs.\n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://player.vimeo.com/video/967982166?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" allowfullscreen=\"true\" title=\"GitLab Duo Workflow the future of AI-driven DevSecOps\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n## L'avenir de l'IA est déjà à notre portée\nGitLab Duo Workflow représente une véritable avancée, car cette IA ne nécessite plus d'interventions humaines répétées. À la place, elle pilote les workflows et les processus de développement, en s'adressant aux humains lorsqu'elle en a besoin pour résoudre les problèmes. Grâce à l'interface DevSecOps unifiée et pilotée par l'IA de GitLab, les entreprises peuvent désormais développer une nouvelle génération d'applications propulsées par l'IA avec une rapidité, une efficacité et une innovation inégalées, tout en respectant les normes de sécurité et de conformité les plus rigoureuses. Et sans aucun compromis.\n\nNous continuons d'explorer de nouveaux horizons avec l'IA. Retrouvez-nous bientôt pour découvrir nos futures innovations et en savoir plus sur l'avenir de l'intelligence artificielle dans le DevSecOps. Façonnons ensemble l'avenir du DevSecOps piloté par l'IA et donnons à vos équipes les moyens de réaliser leur plein potentiel.\n\n> [Inscrivez-vous à notre liste d'attente](https://forms.gle/5ppRuNVb8LwSPNVJA), pour accéder au programme de pré-lancement de GitLab Duo Workflow. ",[686,688,9,798,1029],"2024-07-03",{"slug":1053,"featured":91,"template":692},"meet-gitlab-duo-workflow-the-future-of-ai-driven-development","content:fr-fr:blog:meet-gitlab-duo-workflow-the-future-of-ai-driven-development.yml","Meet Gitlab Duo Workflow The Future Of Ai Driven Development","fr-fr/blog/meet-gitlab-duo-workflow-the-future-of-ai-driven-development.yml","fr-fr/blog/meet-gitlab-duo-workflow-the-future-of-ai-driven-development",{"_path":1059,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1060,"content":1064,"config":1071,"_id":1073,"_type":14,"title":1074,"_source":16,"_file":1075,"_stem":1076,"_extension":19},"/fr-fr/blog/migrating-by-direct-transfer-is-generally-available",{"config":1061,"title":1062,"description":1063},{"noIndex":6},"La migration par transfert direct est désormais disponible","Découvrez comment migrer efficacement vos groupes et projets GitLab entre instances GitLab grâce à la migration par transfert direct, performante et sécurisée.",{"title":1062,"description":1063,"authors":1065,"heroImage":1067,"date":1068,"body":1069,"category":799,"tags":1070},[1066],"Magdalena Frankiewicz","https://res.cloudinary.com/about-gitlab-com/image/upload/v1753898687/nlxenzmbdk62dlylt3ey.png","2025-08-04","La migration des groupes et projets GitLab par transfert direct est désormais disponible dans la version GitLab 18.3. Il s'agit d'une méthode simple et automatisée pour migrer des ressources GitLab entre instances GitLab vers un public encore plus large.\n\nLe [transfert direct](https://docs.gitlab.com/user/group/import/) vous permet de créer facilement une copie des ressources GitLab de votre choix sur la même instance ou sur une autre instance GitLab. Vous pouvez utiliser l'interface utilisateur (intuitive et simple d'utilisation), ou [l'API](https://docs.gitlab.com/ee/api/bulk_imports.html) qui offre une flexibilité supplémentaire pour choisir les ressources à copier.\n\nLa migration par transfert direct représente une amélioration majeure par rapport à la [migration de groupes et de projets via l'exportation de fichiers](https://docs.gitlab.com/ee/user/project/settings/import_export.html#migrate-projects-by-uploading-an-export-file) pour les raisons suivantes :\n\n* Vous n'avez plus besoin d'exporter manuellement chaque groupe et projet individuel vers un fichier, puis d'importer tous ces fichiers vers un nouvel emplacement. Désormais, il vous suffit de migrer directement tout groupe de niveau supérieur dont vous avez le rôle de propriétaire avec tous ses sous-groupes et projets.\n* La migration par transfert direct permet le [mappage des contributions utilisateur après l'importation](https://about.gitlab.com/blog/streamline-migrations-with-user-contribution-and-membership-mapping/) (comme la paternité des tickets ou des commentaires), pour plus de flexibilité et de contrôle.\n* Elle fonctionne de manière fiable avec des projets volumineux. Grâce au traitement par lots des ressources et à l'exécution simultanée des processus d'importation et d'exportation, les risques d'interruption ou de délai d'attente dépassé sont considérablement réduits.\n* Elle offre une meilleure visibilité sur la migration pendant son exécution ainsi qu'après sa finalisation. Dans l'interface utilisateur, vous pouvez observer l'augmentation du nombre de fichiers à mesure que de nouveaux éléments sont importés. Ensuite, vous pouvez [vérifier les résultats de l'importation](https://docs.gitlab.com/user/group/import/direct_transfer_migrations/#review-results-of-the-import). Les éléments importés sont indiqués par le badge `Imported` dans l'interface utilisateur GitLab.\n\nNous avons parcouru un long chemin depuis GitLab 14.3, lorsque nous avons commencé à prendre en charge la migration directe des ressources de groupe. Dans GitLab 15.8, nous avons [étendu cette fonctionnalité aux projets en version bêta](https://about.gitlab.com/blog/2023/01/18/try-out-new-way-to-migrate-projects/). Depuis, nous avons travaillé à améliorer l'efficacité et la fiabilité de l'importation, en particulier pour les projets volumineux. Nous avons également minutieusement testé la sécurité et la stabilité des instances de cette nouvelle fonctionnalité.\n\nVoici deux exemples d'importations réussies qui illustrent la taille des groupes et des projets que nous avons testés, ainsi que leur durée d'importation :\n\n* 100 projets (19 900 tickets, 83 000 merge requests, plus de 100 000 pipelines) migrés en 8 heures\n* 1 926 projets (22 000 tickets, 160 000 merge requests, 1,1 million de pipelines) migrés en 34 heures\n\nSur GitLab.com, la migration par transfert direct est activée par défaut, tandis que sur GitLab Self-Managed et sur GitLab Dedicated, un administrateur doit [activer la fonctionnalité dans les paramètres de l'application](https://docs.gitlab.com/ee/administration/settings/import_and_export_settings.html#enable-migration-of-groups-and-projects-by-direct-transfer).\n\n## Quand utiliser la migration par transfert direct et comment obtenir les meilleurs résultats ?\n\nLa migration par transfert direct nécessite une connexion réseau entre les instances ou GitLab.com. Par conséquent, les clients qui utilisent des réseaux air-gapped sans connectivité entre leurs instances GitLab doivent toujours utiliser l'exportation de fichiers pour copier leurs données GitLab. Ils pourront utiliser la migration de groupes et de projets par transfert direct lorsque cette solution [prendra en charge les instances hors ligne](https://gitlab.com/groups/gitlab-org/-/epics/8985).\n\nAvant toute migration, consultez notre [documentation](https://docs.gitlab.com/user/group/import/), y compris les [prérequis](https://docs.gitlab.com/user/group/import/direct_transfer_migrations/#prerequisites), les [éléments de groupe](https://docs.gitlab.com/ee/user/group/import/#migrated-group-items) et les [éléments de projet](https://docs.gitlab.com/ee/user/group/import/#migrated-project-items) qui sont migrés. Certains éléments sont exclus de la migration ou ne sont pas encore pris en charge.\n\n### Migrez entre les versions les plus récentes possibles\n\nNous recommandons de migrer entre des versions aussi récentes que possible. Mettez à jour les instances source et destination pour profiter de toutes les améliorations et corrections de bogues que nous avons ajoutées au fil du temps.\n\n### Préparez-vous au mappage des contributions utilisateur après la migration\n\nFamiliarisez-vous avec le [processus de mappage des contributions et des appartenances utilisateur](https://docs.gitlab.com/user/project/import/#user-contribution-and-membership-mapping) afin de connaître les prochaines étapes à suivre une fois la migration terminée.\n\n### Examinez les options pour réduire la durée de migration\n\nSelon l'endroit où vous migrez (GitLab.com, une instance Self-Managed ou Dedicated) vous pouvez appliquer [diverses stratégies pour réduire la durée de migration](https://docs.gitlab.com/ee/user/group/import/#reducing-migration-duration).\n\n## Comment puis-je examiner les résultats ?\n\nVous pouvez consulter tous les groupes et projets que vous avez migrés par transfert direct sur la [page d'historique d'importation de groupe](https://docs.gitlab.com/user/group/import/direct_transfer_migrations/#group-import-history). Pour chaque groupe et projet, vous avez la possibilité d'afficher les statistiques des éléments importés et d'examiner plus en détails les éléments qui n'ont pas été importés. Vous pouvez également utiliser les [points de terminaison API](https://docs.gitlab.com/ee/api/bulk_imports.html#list-all-group-or-project-migrations-entities) pour faire de même.\n\nDans les cas où la plupart de vos projets se sont terminés avec succès, mais que certaines relations manquent encore dans un ou deux projets, comme des merge requests ou des tickets, nous vous recommandons d'essayer de réimporter ces projets [avec l'API](https://docs.gitlab.com/ee/api/bulk_imports.html#start-a-new-group-or-project-migration).\n\n![](https://res.cloudinary.com/about-gitlab-com/image/upload/v1753961409/ja8agmwarwxxlo9vmqbo.gif)\n\n## Quelle est la prochaine étape pour la migration par transfert direct ?\n\nNous sommes ravis de proposer la migration par transfert direct et espérons que cette amélioration vous plaira ! Nous souhaitons connaître votre avis. Quelle est la fonctionnalité qui, selon vous, manque encore ? Que pouvons-nous améliorer ? Faites-le nous savoir dans [ce ticket](https://gitlab.com/gitlab-org/gitlab/-/issues/284495) et nous continuerons à itérer !",[9,799,689],{"featured":91,"template":692,"slug":1072},"migrating-by-direct-transfer-is-generally-available","content:fr-fr:blog:migrating-by-direct-transfer-is-generally-available.yml","Migrating By Direct Transfer Is Generally Available","fr-fr/blog/migrating-by-direct-transfer-is-generally-available.yml","fr-fr/blog/migrating-by-direct-transfer-is-generally-available",{"_path":1078,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1079,"content":1085,"config":1090,"_id":1092,"_type":14,"title":1093,"_source":16,"_file":1094,"_stem":1095,"_extension":19},"/fr-fr/blog/refactor-code-into-modern-languages-with-ai-powered-gitlab-duo",{"title":1080,"description":1081,"ogTitle":1080,"ogDescription":1081,"noIndex":6,"ogImage":1082,"ogUrl":1083,"ogSiteName":674,"ogType":675,"canonicalUrls":1083,"schema":1084},"Comment réusiner le code dans des langages modernes grâce à GitLab Duo alimenté par l'IA ","Ce tutoriel détaillé à destination des développeurs leur permet d'utiliser l'IA pour moderniser leur code en passant à un nouveau langage de programmation. Il leur offre également l'occasion d'acquérir des connaissances sur les nouvelles fonctionnalités associées à ce langage.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662465/Blog/Hero%20Images/GitLab_Duo_Workflow_Unified_Data_Store__1_.png","https://about.gitlab.com/blog/refactor-code-into-modern-languages-with-ai-powered-gitlab-duo","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Comment réusiner le code dans des langages modernes grâce à GitLab Duo alimenté par l'IA \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2024-08-26\",\n      }\n                  ",{"title":1080,"description":1081,"authors":1086,"heroImage":1082,"date":1087,"body":1088,"category":684,"tags":1089},[681],"2024-08-26","S'il vous incombe de moderniser le code base ou le framework en passant à un nouveau langage de programmation, ou si vous avez besoin d'en savoir plus sur les nouvelles fonctionnalités de ce langage, [GitLab Duo](https://about.gitlab.com/gitlab-duo/) alimenté par l'IA peut vous prêter main forte. Apprenez à aborder les défis posés par le réusinage du code en adoptant de bonnes pratiques grâce à des exemples tirés des 20 dernières années de ma carrière de codeur. \n\nLes prompts et les exemples de cet article sont illustrés dans différents IDE : VS Code et JetBrains (IntelliJ IDEA, PyCharm et CLion), sur lesquels sont installés les [extensions/plugins de GitLab Duo](https://docs.gitlab.com/ee/user/project/repository/code_suggestions/supported_extensions.html). L'environnement de développement utilise GitLab.com, y compris les mises à jour vers le grand modèle de langage (LLM) Claude 3.5 d'Anthropic pour les [suggestions de code](https://docs.gitlab.com/ee/user/gitlab_duo/#code-suggestions) de GitLab Duo et [GitLab Chat](https://docs.gitlab.com/ee/user/gitlab_duo/#gitlab-duo-chat). Pour faire bref : on gagne en puissance et en efficacité.\n\nVous pouvez lire l'article dans son intégralité ou accéder directement à une section spécifique. Le code source et des Challenges, accompagnés d'exercices, sont également fournis à des fins d'auto-apprentissage.\n\n- [Réusiner le code aux normes d'un langage de programmation moderne](#refactor-code-to-modern-programming-language-standards)\n    - [Générer en Java 7 et réusiner en Java 8](#generate-java-7-and-refactor-to-java-8)\n    - [Réusiner pour répondre à différentes normes C++](#refactor-across-c%2B%2B-standards)\n        - [Migration : réusiner de la norme C++03 à C++14](#migration-refactor-c%2B%2B03-into-c%2B%2B14)\n        - [Retour à une version précédente : réusiner de la norme C++23 à C++11](downgrade-refactor-c%2B%2B23-to-c%2B%2B11)\n    - [Expliquer et réusiner en COBOL](#explain-and-refactor-cobol)\n- [Réusiner d'un langage à un autre](#refactor-a-language-into-another-language)\n    - [Réusiner du C en Rust](#refactor-c-to-rust)\n    - [Réusiner du Perl en Python](#refactor-perl-to-python)\n- [Autres exemples pratiques de réusinage](#more-refactoring-hands-on)\n    - [Réusiner du JavaScript](#refactor-javascript)\n    - [Réusiner du Bash en ZSH ou SH](#refactor-bash-to-zsh-or-sh)\n    - [Autres cas d'utilisation et tutoriels](#more-use-cases-and-tutorials)\n- [Principaux points à retenir](#key-take-out)\n\n## Réusiner le code aux normes d'un langage de programmation moderne\n\nLes sections suivantes illustrent comment réusiner le code. Elles fournissent également des explications sur les différences spécifiques au langage de programmation étudié. \n\n### Générer en Java 7 et réusiner en Java 8 \n\nUn client voulait savoir si GitLab Duo prend en charge Java 7. Lorsque j'ai testé les suggestions de code et les prompts de GitLab Chat pour générer du code en Java 7, j'ai également pensé à des conseils pour effectuer la migration. Claude 3.5 d'Anthropic est capable de comprendre les différences entre divers langages de programmation, tout comme GitLab Duo.\n\nL'exemple suivant illustre un prompt pour générer du code en Java 7 à l'aide des suggestions de code.\n\n```java\n// Generate a new class for a File Manager. Use Java 7 features only.\nimport java.io.*;\nimport java.nio.file.*;\nimport java.util.*;\n\npublic class FileManager {\n    private Path rootDirectory;\n\n    public FileManager(String rootPath) throws IOException {\n        this.rootDirectory = Paths.get(rootPath);\n        if (!Files.exists(rootDirectory)) {\n            Files.createDirectories(rootDirectory);\n        }\n    }\n\n    public void createFile(String fileName, String content) throws IOException {\n        Path filePath = rootDirectory.resolve(fileName);\n        Files.write(filePath, content.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);\n    }\n\n    public String readFile(String fileName) throws IOException {\n        Path filePath = rootDirectory.resolve(fileName);\n        return new String(Files.readAllBytes(filePath));\n    }\n\n    public void deleteFile(String fileName) throws IOException {\n        Path filePath = rootDirectory.resolve(fileName);\n        Files.delete(filePath);\n    }\n\n    public List\u003CString> listFiles() throws IOException {\n        List\u003CString> fileList = new ArrayList\u003C>();\n        try (DirectoryStream\u003CPath> stream = Files.newDirectoryStream(rootDirectory)) {\n            for (Path file : stream) {\n                fileList.add(file.getFileName().toString());\n            }\n        }\n        return fileList;\n    }\n\n    public void copyFile(String sourceFileName, String destinationFileName) throws IOException {\n        Path sourcePath = rootDirectory.resolve(sourceFileName);\n        Path destinationPath = rootDirectory.resolve(destinationFileName);\n        Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);\n    }\n\n    public void moveFile(String sourceFileName, String destinationFileName) throws IOException {\n        Path sourcePath = rootDirectory.resolve(sourceFileName);\n        Path destinationPath = rootDirectory.resolve(destinationFileName);\n        Files.move(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);\n    }\n\n    public long getFileSize(String fileName) throws IOException {\n        Path filePath = rootDirectory.resolve(fileName);\n        return Files.size(filePath);\n    }\n\n    public boolean fileExists(String fileName) {\n        Path filePath = rootDirectory.resolve(fileName);\n        return Files.exists(filePath);\n    }\n}\n```\n\nVous pouvez poursuivre dans votre IDE en suivant ces étapes :\n\n1. Parcourez et comprenez le code généré : sélectionnez le code dans l'éditeur (en bleu sur la capture d'écran), ouvrez GitLab Duo Chat et envoyez la commande slash `/explain` comme prompt.\n\n![Validation du code généré avec la commande slash `/explain` dans GitLab Duo Chat](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/intellij_java7_generate_refactor.png)\n\n2. Réusinez le code Java 7 en Java 8 : sélectionnez le code dans l'éditeur, ouvrez GitLab Chat et envoyez `/refactor using Java 8 features` pour affiner le prompt.\n3. Si vous ne souhaitez pas réusiner le code, créez un nouveau fichier `java8.java` et générez du code spécifique en Java 8 à l'aide des suggestions de code en saisissant le prompt `// Generate a new class for a File Manager. Use Java 8 features only.`.\n4. Continuez à écrire du code en Java 8 dans le même contexte en vous servant des complétions de code alimentées par l'IA.\n\nVous pouvez regarder chaque étape dans le vidéo ci-dessous.\n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/XKRv6uBkD2I\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\nLe code source est disponible dans le [projet Challenge GitLab Duo - Générer et réusiner du code de Java 7 à 8](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-generate-refactor-java-7-to-8).\n\n### Réusiner pour répondre à différentes normes C++\n\nFruit d'une longue histoire, la norme C++ peut désormais être considérée comme stable et mature. En fonction de l'architecture et des plateformes cibles, la norme prise en charge dépend du compilateur sur le système d'exploitation hôte.\n\nAu cours de ma carrière, j'ai dû prendre en charge 25 distributions Linux et Windows différentes dans des projets open source. D'après mon expérience, les compilateurs ne prennent pas en charge les fonctionnalités de langage plus récentes et les normes C++ de la même manière. Nous avons adopté les fonctionnalités C++11 en 2015, et n'avons jamais évoqué une migration vers C++14 ou C++17. \n\nLe réusinage des fonctions et des algorithmes pour passer à une nouvelle norme C++ aurait nécessité trop d'efforts, et il aurait fallu recevoir de l'aide pour comprendre les différences. À l'époque, nous faisions nos recherches dans des livres, en ligne, sur Stack Overflow et parfois avec des outils d'aide au réusinage du code.\n\nLes assistants alimentés par l'IA et GitLab Duo ont changé la donne : on a maintenant la possibilité de demander aux suggestions de code et à GitLab Chat de fournir du code source dans une norme C++ spécifique. Il est également possible de comparer les différentes sorties. \n\nL'exemple suivant part d'un prompt pour générer du code source spécifiquement pour la norme C++03. Il implémente un analyseur de configuration simple pour le format de configuration `.ini`.\n\n```c++\n/* Create a config parser which can parse an ini format\nUse C++03 standard only\n */\n\n#include \u003Ciostream>\n#include \u003Cfstream>\n#include \u003Cstring>\n#include \u003Cmap>\n#include \u003Csstream>\n\nclass ConfigParser {\nprivate:\n    std::map\u003Cstd::string, std::map\u003Cstd::string, std::string> > config;\n\npublic:\n    ConfigParser() {}\n\n    bool parse(const std::string& filename) {\n        std::ifstream file(filename.c_str());\n        if (!file.is_open()) {\n            return false;\n        }\n\n        std::string line;\n        std::string currentSection;\n\n        while (std::getline(file, line)) {\n            // Trim whitespace\n            size_t first = line.find_first_not_of(\" \\t\");\n            size_t last = line.find_last_not_of(\" \\t\");\n            if (first == std::string::npos) continue; // Skip empty lines\n            line = line.substr(first, (last - first + 1));\n\n            if (line[0] == '[' && line[line.length() - 1] == ']') {\n                // This is a section\n                currentSection = line.substr(1, line.length() - 2);\n            } else {\n                // This is a key-value pair\n                size_t delimiterPos = line.find('=');\n                if (delimiterPos != std::string::npos) {\n                    std::string key = line.substr(0, delimiterPos);\n                    std::string value = line.substr(delimiterPos + 1);\n                    config[currentSection][key] = value;\n                }\n            }\n        }\n\n        file.close();\n        return true;\n    }\n\n    std::string getValue(const std::string& section, const std::string& key) const {\n        std::map\u003Cstd::string, std::map\u003Cstd::string, std::string> >::const_iterator sectionIt = config.find(section);\n        if (sectionIt != config.end()) {\n            std::map\u003Cstd::string, std::string>::const_iterator keyIt = sectionIt->second.find(key);\n            if (keyIt != sectionIt->second.end()) {\n                return keyIt->second;\n            }\n        }\n        return \"\";\n    }\n\n    void printConfig() const {\n        std::map\u003Cstd::string, std::map\u003Cstd::string, std::string> >::const_iterator sectionIt;\n        for (sectionIt = config.begin(); sectionIt != config.end(); ++sectionIt) {\n            std::cout \u003C\u003C \"[\" \u003C\u003C sectionIt->first \u003C\u003C \"]\" \u003C\u003C std::endl;\n            std::map\u003Cstd::string, std::string>::const_iterator keyIt;\n            for (keyIt = sectionIt->second.begin(); keyIt != sectionIt->second.end(); ++keyIt) {\n                std::cout \u003C\u003C keyIt->first \u003C\u003C \" = \" \u003C\u003C keyIt->second \u003C\u003C std::endl;\n            }\n            std::cout \u003C\u003C std::endl;\n        }\n    }\n};\n\nint main() {\n    ConfigParser parser;\n    if (parser.parse(\"config.ini\")) {\n        std::cout \u003C\u003C \"Config file parsed successfully.\" \u003C\u003C std::endl;\n        parser.printConfig();\n\n        std::cout \u003C\u003C \"Value of 'key1' in 'section1': \" \u003C\u003C parser.getValue(\"section1\", \"key1\") \u003C\u003C std::endl;\n    } else {\n        std::cout \u003C\u003C \"Failed to parse config file.\" \u003C\u003C std::endl;\n    }\n    return 0;\n}\n```\n\nLes mêmes prompts peuvent être utilisés pour l'[explication du code](https://docs.gitlab.com/ee/user/gitlab_duo_chat/examples.html#explain-code-in-the-ide), la [génération de tests](https://docs.gitlab.com/ee/user/gitlab_duo_chat/examples.html#write-tests-in-the-ide), ainsi que le [réusinage du code](https://docs.gitlab.com/ee/user/gitlab_duo_chat/examples.html#refactor-code-in-the-ide): `/explain focus on C++03 features`, `/tests for C++03 features`, `/refactor into C++03`. \n\nLes normes C++ suivantes ont été testées avec les suggestions de code de GitLab Duo :\n\n- C++03\n- C++11\n- C++14\n- C++17\n- C++20\n- C++23\n\nVous pouvez trouver le code source dans le [projet Challenge - Réusiner l'analyseur de configuration aux normes Cpp](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-refactor-cpp-standards-config-parser). \n\nDe nombreuses combinaisons différentes permettent de réusiner le code source pour passer d'une norme C++ à une autre. Les exemples suivants illustrent la modernisation de code en C++ en cas de mise à niveau de la version, mais testent également un retour à une version précédente dans le cas où des développeurs ambitieux qui souhaitaient utiliser C++20 ont dû revenir à C++11 pour prendre en charge les environnements de leurs entreprises clientes.\n\n#### Migration : réusiner de la norme C++03 à C++14 \n\nL'objectif est de moderniser le code et de comprendre les changements entre C++03 et C++14. Ouvrez le code source [03.cpp](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-refactor-cpp-standards-config-parser/-/blob/main/03.cpp?ref_type=heads) dans l'IDE, sélectionnez-le et utilisez le prompt suivant pour GitLab Chat : \n\n```markdown\n/refactor into C++14 and explain the changes\n```\n\nRéponse potentielle de GitLab Duo Chat : \n\n```markdown\n…\n\nExplanations of the changes:\n\n1. Default constructor: Changed `ConfigParser() {}` to `ConfigParser() = default;` to use the default constructor.\n2. File opening: Removed `.c_str()` when opening the file, as C++11 and later support `std::string` directly.\n3. Lambda functions: Introduced a lambda function trim to handle string trimming, making the code more readable and reusable.\n4. Auto keyword: Used `auto` for type deduction in various places, improving code readability.\n5. Range-based for loops: In the `printConfig` method, replaced traditional for loops with range-based for loops, which are more concise and less error-prone.\n6. Structured bindings: Used structured bindings in the range-based for loops to directly access key-value pairs.\n7. If statements with initializers: In the `getValue` method, used if statements with initializers to combine the find operation and the check in a single line.\n8. String member functions: Used `front()` and `back()` instead of array-style access for the first and last characters of strings.\n9. Uniform initialization: Used uniform initialization `{}` instead of parentheses `()` for object creation.\n10. Removed `std::endl`: Replaced `std::endl` with `'\\n'` for better performance, as `std::endl` forces a flush of the output buffer.\n\nThese changes make the code more modern, concise, and potentially more efficient while maintaining the same functionality.\n\n```\n\n![Modifications reflétées dans le code](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/duo_refactor_cpp_clion_chat_cpp03_to_14_01.png)\n\n![Modifications reflétées dans le code 2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675060/Blog/Content%20Images/duo_refactor_cpp_clion_chat_cpp03_to_14_02.png)\n\n#### Retour à une version précédente : réusiner de la norme C++23 à C++11\n\nIl peut arriver que des développeurs commencent à implémenter une nouvelle fonctionnalité ou une étude de faisabilité en utilisant une norme C++ moderne, par exemple la norme C++20, mais que les versions réellement prises en charge par les environnements des entreprises clientes nécessitent des compilateurs plus anciens compatibles C++11. Le retour à une version précédente a un coût. Il faut évaluer quelles fonctionnalités du langage sont toujours prises en charge et anticiper les autres inconvénients qui pourraient survenir.\n\nOuvrez le code source [23.cpp](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-refactor-cpp-standards-config-parser/-/blob/main/23.cpp?ref_type=heads) dans l'IDE, sélectionnez-le et saisissez le prompt suivant dans GitLab Duo : \n\n```markdown\n/refactor into C++11, explain the necessary changes and potential problems\n```\n\nRéponse potentielle de GitLab Duo Chat : \n\n```markdown\nThe main changes required to make this code compatible with C++11 are:\n\n1. Remove the C++23 standard comment, as it's no longer applicable.\n2. Replace `std::string::find_first_not_of` and `std::string::find_last_not_of` with C++11 compatible alternatives in the trim function.\n3. Use `const auto&` instead of `auto` for loop variables to avoid unnecessary copying.\n\nPotential problems in the original code:\n\n1. The original code used C++23 features, which might not be widely supported yet.\n2. The `trim` function used `std::string::find_first_not_of` and `std::string::find_last_not_of`, which are not available in C++11.\n3. The use of `auto` instead of `const auto&` in some loops could lead to unnecessary copying of complex objects.\n\nThese issues have been addressed in the refactored version. The `trim` function now uses `std::find_if_not` with lambda functions to achieve the same result in a C++11 compatible way. The use of `const auto&` ensures that no unnecessary copying occurs when iterating over the config map.\n```\n\n![The `trim` function now uses `std::find_if_not` with lambda functions to achieve the same result in a C++11 compatible way](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/duo_refactor_cpp_clion_chat_cpp23_to_11_01.png)\n\n![The use of `const auto&` ensures that no unnecessary copying occurs when iterating over the config map](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/duo_refactor_cpp_clion_chat_cpp23_to_11_02.png)\n\n**Pratique asynchrone**: testez d'autres scénarios de réusinage de version.\n\n### Expliquer et réusiner en COBOL\n\nVous pouvez utiliser GitLab Duo pour expliquer le code source, analyser, corriger et réusiner les programmes COBOL. Bien que je n'aie jamais appris ou codé en COBOL, j'ai trouvé ce [cours de programmation COBOL](https://github.com/openmainframeproject/cobol-programming-course) et ses nombreux exemples utiles.\n\nJ'ai ensuite demandé à GitLab Chat comment démarrer avec COBOL, créer un programme COBOL et compiler un programme COBOL sur macOS.\n\n```markdown\nPlease explain what COBOL is and its syntax\n\nPlease create a COBOL program that shows the first steps\n\nTell me more about the COBOL compiler. Which system do I need? Can I do it on my macOS?\n\n```\n\n![Demande adressée à GitLab Duo Chat pour qu'il explique COBOL et sa syntaxe](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/vscode_chat_cobol_generate_example.png)\n\nOuvrez un programme COBOL, sélectionnez le code source, passez à GitLab Duo Chat et envoyez le prompt `/explain` pour expliquer l'objectif et la fonctionnalité.\n\nVous pouvez également affiner les prompts pour obtenir des résumés plus généraux, par exemple :\n\n```markdown\n/explain like I am five\n```\n\n> Conseil : les langages de programmation partagent des algorithmes et des fonctionnalités similaires. GitLab Chat a proposé d'expliquer COBOL en Python. Par conséquent, j'ai ajusté les prompts suivants pour demander une explication en Python.\n\n```markdown\n/explain in a different programming language\n```\n\nVous pouvez également utiliser la commande slash `/refactor` comme prompt dans GitLab Chat pour améliorer la qualité du code, résoudre les problèmes potentiels et essayer de réusiner COBOL en Python.\n\n```markdown\n/refactor fix the environment error\n\n/refactor fix potential problems\n\n/refactor into Python\n```\n\nLa vidéo [GitLab Duo Coffee Chat - Challenge : expliquer et réusiner des programmes COBOL](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-explain-refactor-cobol-program) montre toutes les étapes abordées dans un cas d'utilisation pratique. Elle illustre notamment comment trouver une période manquante : \n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/pwlDmLQMMPo\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n## Réusiner d'un langage à un autre\n\nLa modernisation et l'amélioration de la qualité du code nécessitent parfois de changer de langage de programmation. Des prompts de réusinage similaires dans GitLab Duo peuvent accélérer le processus de migration. L'exemple de COBOL avec Python n'est qu'une des nombreuses exigences en vigueur dans les environnements d'entreprise. Examinons d'autres cas d'utilisation.\n\n### Réusiner du C en Rust\n\nAu début de 2024, plusieurs langages de programmation, comme C, ont été accusés de ne pas être à mémoire sécurisée. Les recommandations pour les projets futurs comprennent l'utilisation de [langages à mémoire sécurisée](https://about.gitlab.com/blog/memory-safe-vs-unsafe/) comme Rust. Comment démarrer la migration et quels sont les défis à relever ?\n\nEssayons avec un exemple simple en C. Le code a été généré à l'aide des suggestions de code et devrait contenir les informations de base sur le système d'exploitation, comme le nom, la version et la plateforme. Le code C dispose d'une compatibilité multiplateforme sur Windows, Linux et macOS pour la compilation.\n\n```c\n// Read OS files to identify the platform, name, versions\n// Print them on the terminal\n#include \u003Cstdio.h>\n#include \u003Cstdlib.h>\n#include \u003Cstring.h>\n\n#ifdef _WIN32\n    #include \u003Cwindows.h>\n#elif __APPLE__\n    #include \u003Csys/utsname.h>\n#else\n    #include \u003Csys/utsname.h>\n#endif\n\nvoid get_os_info() {\n    #ifdef _WIN32\n        OSVERSIONINFOEX info;\n        ZeroMemory(&info, sizeof(OSVERSIONINFOEX));\n        info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);\n        GetVersionEx((OSVERSIONINFO*)&info);\n\n        printf(\"Platform: Windows\\n\");\n        printf(\"Version: %d.%d\\n\", info.dwMajorVersion, info.dwMinorVersion);\n        printf(\"Build: %d\\n\", info.dwBuildNumber);\n    #elif __APPLE__\n        struct utsname sys_info;\n        uname(&sys_info);\n\n        printf(\"Platform: macOS\\n\");\n        printf(\"Name: %s\\n\", sys_info.sysname);\n        printf(\"Version: %s\\n\", sys_info.release);\n    #else\n        struct utsname sys_info;\n        uname(&sys_info);\n\n        printf(\"Platform: %s\\n\", sys_info.sysname);\n        printf(\"Name: %s\\n\", sys_info.nodename);\n        printf(\"Version: %s\\n\", sys_info.release);\n    #endif\n}\n\nint main() {\n    get_os_info();\n    return 0;\n}\n```\n\nOuvrez le code source dans [`os.c`](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-refactor-c-to-rust/-/blob/897bf57a14bb7be07d842e7f044f93a61456d611/c/os.c) dans JetBrains CLion, par exemple. Sélectionnez le code source et saisissez le prompt `/explain` dans GitLab Chat pour expliquer l'objectif et la fonctionnalité. Entrez ensuite le prompt `/refactor` dans GitLab Chat pour réusiner le code C, puis poursuivez avec : `/refactor into Rust`.\n\nInitialisez un nouveau projet Rust (astuce : demandez à GitLab Duo Chat) et copiez le code source généré dans le fichier `src/main.rs`. Exécutez `cargo build` pour compiler le code.\n\n![Initialisez un nouveau projet Rust et copiez le code source généré dans le fichier `src/main.rs`. Exécution de `cargo build` pour compiler le code.](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/jetbrains_clion_c_rust.png)\n\nVous pouvez voir toutes les étapes dans la vidéo [GitLab Duo Coffee Chat : Challenge - Réusiner du C en Rust](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-refactor-c-to-rust). Vous verrez en outre une erreur de compilation qui sera corrigée à l'aide de GitLab Chat et de la commande slash `/refactor`. La session montre également comment améliorer la maintenabilité du nouveau code Rust en renforçant la gestion des erreurs. \n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/nf8g2ucqvkI\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### Réusiner du Perl en Python \n\nUn script opérationnel tourne sur des serveurs de production. Son auteur a quitté l'entreprise il y a dix ans et personne ne veut y toucher. Ce problème ne concerne peut-être pas qu'un seul script, mais peut-être plusieurs scripts, voire une application entière. Il a été décidé de tout migrer vers Python 3, dans le but de moderniser le code et de comprendre les changements entre Perl et Python.\n\nRécemment, au cours d'un atelier GitLab Duo, un client a demandé s'il était possible d'effectuer une migration directe avec GitLab Duo. En un mot, la réponse est : oui. Pour clarifier : vous pouvez saisir des prompts plus spécifiques dans GitLab Chat pour réusiner le code Perl en Python, comme dans d'autres exemples de cet article.\n\nOuvrez le code source `script.pl` dans l'IDE, sélectionnez-le et ouvrez GitLab Chat.\n\n```perl\n#!/usr/bin/perl\nuse strict;\nuse warnings;\n\nopen my $md_fh, '\u003C', 'file.md' or die \"Could not open file.md: $!\";\n\nmy $l = 0;\nmy $e = 0;\nmy $h = 0;\n\nwhile (my $line = \u003C$md_fh>) {\n  $l++;\n  if ($line =~ /^\\s*$/) {\n    $e++;\n    next;\n  }\n  if ($line =~ /^#+\\s*(.+)/) {\n    print \"$1\\n\";\n    $h++; \n  }\n}\n\nprint \"\\nS:\\n\"; \nprint \"L: $l\\n\";\nprint \"E: $e\\n\"; \nprint \"H: $h\\n\";\n```\n\nYou can use the following prompts to:\n\n1. `/explain` its purpose, and `/refactor` to improve the code.\n2. `/refactor into Python` pour obtenir un script Python fonctionnel.\n\n![Réusinage en Python](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/pycharm_duo_refactor_perl_python.png)\n\n\n> Astuce : vous pouvez réusiner le code Perl dans d'autres langages cibles. La vidéo [GitLab Duo Coffee Chat : Challenge - Réusiner du Perl en Python](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-refactor-perl-python) fournit des exemples avec PHP, Ruby, Rust, Go, Java, VB.NET, C# et d'autres langages.\n> \n> Si vous souhaitez continuer à utiliser des scripts Perl, vous pouvez configurer [Perl comme langage supplémentaire](https://docs.gitlab.com/ee/user/project/repository/code_suggestions/supported_extensions.html#add-support-for-more-languages) en vous servant des suggestions de code de GitLab Duo. GitLab Chat comprend déjà Perl et peut vous aider si vous utilisez des questions et des prompts de commande slash, comme vous pouvez le voir dans la vidéo ci-dessous.\n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/03HGhxXg9lw\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n## Autres exemples pratiques de réusinage\n\n### Réusiner du JavaScript \n\nEddie Jaoude montre dans un exemple pratique comment réusiner du code JavaScript pour améliorer sa qualité ou ajouter des fonctionnalités. \n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/mHn8KOzpPNY\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### Réusiner du Bash en ZSH ou SH\n\nJ'utilise Bash comme shell depuis 20 ans et je suis récemment passé à ZSH sur macOS. À cause de ce changement, mon script ne fonctionnait pas et mon terminal affichait des erreurs inconnues. Les limitations du shell sont un autre cas d'utilisation. Elles justifient également le réusinage : certains systèmes d'exploitation ou distributions Linux/Unix ne fournissent pas Bash, mais uniquement SH, par exemple Alpine.\n\n![Réusinage de scripts shell](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675059/Blog/Content%20Images/intellj_refactor_shell_scripts.png)\n\nLe [GitLab Duo Coffee Chat : Challenge - Réusiner des scripts shell](https://gitlab.com/gitlab-da/use-cases/ai/ai-workflows/gitlab-duo-challenges/code-challenges/challenge-refactor-shell-scripts) fournit un exemple avec un programme C qui peut suivre les fichiers syslog et un script de compilation écrit en Bash. Tout au long du Challenge, GitLab Chat reçoit des requêtes avec des prompts `/explain` et `/refactor` pour améliorer le code. Il est également possible de réusiner du Bash en SH ou ZSH pour assurer la conformité à POSIX. À la fin de la session, GitLab Chat doit fournir cinq implémentations de scripts shell différentes et expliquer les principaux résumés.\n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/mssqYjlKGzU\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n### Autres cas d'utilisation et tutoriels\n\n- [Documentation : cas d'utilisation de GitLab Duo](https://docs.gitlab.com/ee/user/gitlab_duo/use_cases.html)\n- [Tutoriel : meilleurs conseils pour obtenir des suggestions de code alimentées par l'IA efficaces avec GitLab Duo](https://about.gitlab.com/blog/top-tips-for-efficient-ai-powered-code-suggestions-with-gitlab-duo/)\n- [Tutoriel : 10 bonnes pratiques pour utiliser GitLab Duo Chat alimenté par l'IA](https://about.gitlab.com/blog/10-best-practices-for-using-ai-powered-gitlab-duo-chat/)\n\n## Principaux points à retenir \n\n1. GitLab Duo fournit une aide efficace pour expliquer et réusiner le code. \n2. Il est possible de réusiner le code pour l'adapter aux normes de différents langages et poser des questions de suivi dans GitLab Chat.\n3. Les prompts de suggestion de code peuvent générer des normes spécifiques à des langages de programmation, et la complétion de code respecte le contexte du code actuel.\n4. Le réusinage du code dans de nouveaux langages de programmation contribue aux plans de migration et de modernisation à long terme.\n5. Le code peut être « rétrogradé » à une version précédente lorsque les normes d'un langage sont prises en charge par un ancien système.\n6. GitLab Duo peut expliquer du code complexe et des langages de programmation avec différents exemples de langages de programmation.\n7. La mise à jour vers Claude 3.5 d'Anthropic sur GitLab.com a amélioré une fois de plus la qualité et la rapidité des suggestions de code et de GitLab Chat (il est recommandé de mettre à niveau GitLab Auto-géré vers la version 17.3).\n8. Votre seule limite : votre imagination et les points de friction en production.\n\nApprenez-en plus sur les suggestions de code et les workflows efficaces de GitLab Chat, et commencez à réusiner du code alimenté par l'IA avec GitLab Duo dès aujourd'hui !\n\n> [Commencez votre essai gratuit de GitLab Duo !](https://about.gitlab.com/solutions/gitlab-duo-pro/sales/?type=free-trial&toggle=gitlab-duo-pro_)\n",[686,687,9],{"slug":1091,"featured":6,"template":692},"refactor-code-into-modern-languages-with-ai-powered-gitlab-duo","content:fr-fr:blog:refactor-code-into-modern-languages-with-ai-powered-gitlab-duo.yml","Refactor Code Into Modern Languages With Ai Powered Gitlab Duo","fr-fr/blog/refactor-code-into-modern-languages-with-ai-powered-gitlab-duo.yml","fr-fr/blog/refactor-code-into-modern-languages-with-ai-powered-gitlab-duo",{"_path":1097,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1098,"content":1104,"config":1113,"_id":1115,"_type":14,"title":1116,"_source":16,"_file":1117,"_stem":1118,"_extension":19},"/fr-fr/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale",{"title":1099,"description":1100,"ogTitle":1099,"ogDescription":1100,"noIndex":6,"ogImage":1101,"ogUrl":1102,"ogSiteName":674,"ogType":675,"canonicalUrls":1102,"schema":1103},"Jira vers GitLab : migrer facilement à grande échelle avec Jira2Lab","Découvrez comment Jira2GitLab simplifie les migrations à grande échelle de Jira vers GitLab en gérant des transferts de données complexes, en améliorant l'évolutivité et en assurant une intégration efficace.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663129/Blog/Hero%20Images/blog-image-template-1800x945__28_.png","https://about.gitlab.com/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Jira vers GitLab : migrer facilement à grande échelle avec Jira2Lab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Maximilien Belinga\"}],\n        \"datePublished\": \"2024-10-10\",\n      }",{"title":1099,"description":1100,"authors":1105,"heroImage":1101,"date":1107,"body":1108,"category":1109,"tags":1110,"updatedDate":1112},[1106],"Maximilien Belinga","2024-10-10","[Atlassian Server n'est plus disponible depuis février](https://about.gitlab.com/fr-fr/move-to-gitlab-from-atlassian/), ce qui a incité de nombreux clients à explorer des alternatives telles qu'Atlassian Cloud ou Data Center. Cependant, les entreprises qui utilisaient Atlassian Server recherchent de plus en plus des solutions de planification Agile offrant une flexibilité améliorée, une rentabilité plus élevée et une intégration DevSecOps robuste. Elles doivent également relever des défis liés au volume de données, à la personnalisation, au mappage utilisateur, aux performances et à l'intégrité des données pendant la migration. C'est là qu'intervient [Jira2Lab de GitLab](https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/jira2lab). Jira2Lab apporte une solution qui permet des migrations à grande échelle de Jira vers GitLab, tout en offrant une intégration [CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/ \"Qu'est-ce que le CI/CD ?\") complète.\n\n## Quels sont les principaux défis des migrations Jira à grande échelle ? \n\nLa migration de Jira vers GitLab peut représenter un obstacle majeur, en particulier lorsque les entreprises ont des workflows complexes et doivent déplacer des milliers de tickets. \n\nVoici les défis les plus courants rencontrés lors de ces migrations :\n\n- **Migration massive de données :** la complexité de la migration qui doit être effectuée sans problèmes de performance ni perte de données augmente proportionnellement avec le nombre de tickets, de pièces jointes, de commentaires et de projets qu'elle inclut.\n\n- **Champs et workflows personnalisés :** les instances Jira contiennent souvent des workflows, des champs et des types de tickets personnalisés qui n'ont pas de mappage individuel dans GitLab. Cet écart crée des frictions lors de la migration, car les outils existants nécessitent souvent une intervention manuelle pour déplacer ces éléments.\n\n- **Absence d'intégration DevSecOps complète :** bien que de nombreux outils de migration gèrent les données de gestion des projets, ils n'intègrent pas toutes les fonctionnalités [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que DevSecOps ?\") de GitLab. En conséquence, les équipes doivent configurer manuellement leurs [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\") et leurs systèmes de [contrôle de version](https://about.gitlab.com/fr-fr/topics/version-control/ \"Qu'est-ce que le contrôle de version ?\") après la migration.\n\n## Présentation de Jira2Lab\n\nJira2Lab a été entièrement conçu pour résoudre les défis spécifiques à la migration de Jira vers GitLab à grande échelle. Il ne s'agit pas seulement de déplacer des données, mais aussi de permettre aux équipes de passer sans accroc au puissant environnement DevSecOps de GitLab sans temps d’arrêt ni perte de données.\n\n### Quelles sont les principales fonctionnalités de Jira2Lab ? \n\n1. Traitement efficace des données à grande échelle : Jira2Lab est optimisé pour gérer des milliers de tickets, de pièces jointes, de commentaires et de champs personnalisés sur plusieurs projets sans sacrifier les performances. Il s'adapte à tous les besoins, même pour les plus grandes migrations d'entreprise.\n\n2. Workflow personnalisé et mappage des champs : l'une des fonctionnalités de Jira2Lab est sa capacité à associer automatiquement des workflows et des champs personnalisés entre Jira et GitLab. L'outil fournit une configuration de mappage flexible qui élimine les interventions manuelles pendant le processus de migration, en veillant à ce que toutes les données passent sans accroc de Jira vers GitLab.\n\n3. Intégration du pipeline CI/CD : Jira2Lab ne se contente pas de migrer vos tickets et vos projets. L'outil intègre le pipeline CI/CD complet de GitLab dans le processus de migration. Les équipes de développement peuvent ainsi commencer à utiliser les fonctionnalités DevSecOps de GitLab, telles que les tests automatisés et les pipelines de déploiement, immédiatement après la migration.\n\n4. Migrations pilotes : notre outil prend en charge les migrations pilotes pour permettre aux équipes de tester leurs configurations et leurs workflows avant de migrer l'ensemble des données. Tous les problèmes sont détectés rapidement, ce qui évite les interruptions pendant la migration complète.\n\n5. Surveillance en temps réel : l'outil fournit une surveillance et des journaux en temps réel pendant la migration. Cette transparence totale assure que chaque étape est effectuée correctement et sans erreurs.\n\n6. Personnalisation et flexibilité : même si votre instance Jira dispose de configurations ou de workflows uniques, Jira2Lab vous permet de personnaliser la migration en fonction de vos besoins spécifiques, en veillant à ce que rien ne soit perdu au cours de la transition.\n\n### Comparaison des fonctionnalités : Jira et GitLab\n\nLa migration de Jira vers GitLab permet de consolider les workflows et d'accéder aux fonctionnalités avancées natives de GitLab. Voici une comparaison rapide des principales fonctionnalités des deux plateformes :\n\n| **Fonctionnalité**             | **Jira**                        | **GitLab**                    |\n|-------------------------|----------------------------------|-------------------------------|\n| **Suivi des tickets**       | Oui (Hautement personnalisable)       | Oui (Intégré au DevSecOps)   |\n| **Tableaux Agile**         | Oui (tableau Kanban, Scrum)             | Oui (Tableaux des tickets, jalons) |\n| **CI/CD**                | Non (Requiert des outils externes)    | Oui (CI/CD intégré)           |\n| **Contrôle de version**       | Non (Requiert GitHub/Bitbucket)  | Oui (Prise en charge native de [Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce que Git ? \"))       |\n| **Outils DevSecOps**         | Intégrations limitées            | Cycle de vie DevSecOps complet          |\n\nAvec Jira2Lab, nous veillons à ce que tous les aspects critiques, de la gestion des tickets aux pipelines CI/CD, soient transférés sans heurts. Pour ce faire, nous tirons parti de l'approche intégrée de GitLab en matière de développement et d’opérations.\n\n## La méthodologie de migration\n\nJira2Lab suit une méthodologie de migration structurée en cinq étapes. Cette approche garantit une transition fluide avec un minimum de perturbations :\n\n### 1. Découverte et planification\n\nNous commençons par bien comprendre la configuration Jira du client en identifiant tous les workflows, champs et projets personnalisés qui doivent être migrés. Cette étape implique également une analyse des lacunes pour comparer les fonctionnalités de Jira et de GitLab et planifier le processus de migration.\n\n### 2. Configuration\nAu cours de cette étape, nous configurons l'outil de migration et mettons en place les environnements nécessaires pour Jira et GitLab. Nous vérifions toutes les autorisations et configurons la sauvegarde des données Jira avant le début de la migration.\n\n### 3. Migrations pilotes\nAvant de migrer l'ensemble des données, nous exécutons des migrations pilotes sur des projets sélectionnés afin de tester le processus de migration, les workflows et l'intégrité des données. Nous avons ainsi l'opportunité d'identifier et de résoudre tout problème dès le début du processus.\n\n### 4. Migrations à l'échelle\nAprès avoir validé la migration pilote, nous effectuons la migration de tous les projets, en garantissant des temps d'arrêt minimaux et des transitions en douceur pour les équipes de développement.\n\n### 5. Finalisation et assistance post-migration\nUne fois la migration terminée, nous fournissons une assistance continue afin de garantir que toutes les équipes sont pleinement opérationnelles dans GitLab. Cette étape comprend également la formation des utilisateurs et la désactivation de l'instance Jira, si nécessaire.\n\n## Étude de cas : migration à grande échelle avec Jira2Lab\n\nLors d'une migration récente, une grande entreprise a dû relever le défi de migrer plus de 20 000 tickets sur 50 projets de Jira vers GitLab. Le projet comportait des workflows hautement personnalisés et des milliers de commentaires et de pièces jointes à transférer.\n\nAvec Jira2Lab, nous avons pu :\n\n- Migrer toutes les données, y compris les champs personnalisés, sans aucune perte de données.\n- Configurer des pipelines CI/CD dans GitLab afin que les équipes puissent immédiatement poursuivre leur travail après la migration.\n- Effectuer une migration pilote de deux projets, ce qui nous a permis d'identifier et de corriger des écarts mineurs dans les workflows avant d'effectuer la migration pour l'ensemble de l'entreprise.\n\nEn conséquence, la transition vers GitLab s'est déroulée en toute fluidité. L'ensemble du processus s'est effectué dans les délais prévus et sans temps d'arrêt significatif.\n\n## Commencez dès aujourd'hui avec Jira2Lab\n\nL'outil Jira2Lab apporte une solution aux limitations que d'autres outils de migration ne peuvent pas gérer. Il est conçu spécifiquement pour les migrations à grande échelle et peut s'intégrer au cycle de vie DevSecOps complet de GitLab, contrairement à la plupart des outils qui ne gèrent que les données de gestion de projet. La capacité de l'outil à cartographier des workflows personnalisés et à intégrer des pipelines CI/CD en fait la solution idéale pour les entreprises qui souhaitent améliorer leurs workflows de développement tout en migrant vers GitLab.\n\n> Vous souhaitez faire évoluer vos processus de développement avec GitLab ? Explorez notre [catalogue de services professionnels](https://about.gitlab.com/services/catalog/) pour découvrir comment nous pouvons aider votre équipe à migrer de manière efficace et efficiente. Contactez-nous via le formulaire en bas de page pour planifier une démonstration personnalisée de Jira2Lab de GitLab.\n","agile-planning",[1111,109,9,689,799],"agile","2025-01-02",{"slug":1114,"featured":91,"template":692},"seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale","content:fr-fr:blog:seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale.yml","Seamlessly Migrate From Jira To Gitlab With Jira2lab At Scale","fr-fr/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale.yml","fr-fr/blog/seamlessly-migrate-from-jira-to-gitlab-with-jira2lab-at-scale",{"_path":1120,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1121,"content":1127,"config":1135,"_id":1137,"_type":14,"title":1138,"_source":16,"_file":1139,"_stem":1140,"_extension":19},"/fr-fr/blog/structuring-the-gitlab-package-registry-for-enterprise-scale",{"title":1122,"description":1123,"ogTitle":1122,"ogDescription":1123,"noIndex":6,"ogImage":1124,"ogUrl":1125,"ogSiteName":674,"ogType":675,"canonicalUrls":1125,"schema":1126},"Comment structurer le registre de paquets de GitLab à l'échelle de l'entreprise","Découvrez comment tirer parti du modèle unique de publication des paquets par projet de GitLab, combiné à une utilisation centralisée au niveau du groupe racine.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662332/Blog/Hero%20Images/blog-image-template-1800x945__23_.png","https://about.gitlab.com/blog/structuring-the-gitlab-package-registry-for-enterprise-scale","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Comment structurer le registre de paquets de GitLab à l'échelle de l'entreprise\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tim Rizzi\"}],\n        \"datePublished\": \"2025-02-19\",\n      }",{"title":1122,"description":1123,"authors":1128,"heroImage":1124,"date":1130,"body":1131,"category":799,"tags":1132,"updatedDate":1134},[1129],"Tim Rizzi","2025-02-19","À mesure que les entreprises gagnent en taille et en complexité, la gestion des paquets développés en interne devient de plus en plus complexe. Alors que les gestionnaires de paquets traditionnels, comme JFrog Artifactory et Sonatype Nexus, utilisent un dépôt centralisé, GitLab adopte une approche résolument différente, adaptée aux pratiques des équipes de développement modernes. \n\nDécouvrez dans cet article comment structurer efficacement le registre de paquets de GitLab à l'échelle de votre entreprise, en prenant comme exemples les paquets Maven et npm.\n\n## Comprendre le modèle de registre de paquets de GitLab\n\nSi vous utilisez un gestionnaire de paquets traditionnel, l'approche de GitLab peut sembler différente au premier abord. Au lieu d'utiliser un dépôt centralisé unique, GitLab intègre la gestion des paquets directement dans la structure de vos projets et de vos groupes, et concrètement, cela implique que :\n\n- Vos équipes publient leurs paquets dans les projets spécifiques où réside le code source.\n- Vos équipes utilisent les paquets provenant des registres de groupe racine, qui regroupent tous les paquets des sous-projets.\n- Le contrôle d'accès hérite des autorisations que vous avez définies dans GitLab actuellement.\n\nCe modèle offre plusieurs avantages :\n\n- Une propriété claire des paquets, étroitement liée à leur code source.\n- Un contrôle d'accès granulaire, sans configuration supplémentaire.\n- Une intégration fluide et simplifiée aux pipelines CI/CD.\n- Un alignement naturel sur la structure des équipes.\n- Une URL unique permettant d'accéder à tous les paquets de l'entreprise via le groupe racine.\n\n ### La puissance du registre de paquets au niveau du groupe racine\n\nBien que GitLab prenne en charge l'utilisation de paquets à différents niveaux de groupe, l'utilisation au niveau du groupe racine est une bonne pratique adoptée par nos utilisateurs. Voici pourquoi :\n\n- **Point d'accès unique :** une seule URL permet d'accéder à l'ensemble des paquets privés de votre entreprise.\n- **Nommage cohérent des paquets :** les points de terminaison au niveau des groupes permettent aux équipes de conserver leurs conventions de nommage préférées, sans risque de conflits.\n- **Configuration simplifiée :** tous les développeurs peuvent utiliser la même configuration pour accéder aux paquets.\n- **Gestion sécurisée des accès :** associée aux tokens de déploiement, elle facilite la rotation et renforce le contrôle d'accès.\n- **Organisation hiérarchique :** elle reflète naturellement la structure de votre entreprise tout en garantissant un accès unifié.\n\n## Exemple concret : structure d'entreprise\n\nVoyons comment cela fonctionne dans la pratique avec une grande entreprise :\n\n```\ncompany/ (root group)\n├── retail-division/\n│   ├── shared-libraries/     # Division-specific shared code\n│   └── teams/\n│       ├── checkout/        # Team publishes packages here\n│       └── inventory/       # Team publishes packages here\n├── banking-division/\n│   ├── shared-libraries/    # Division-specific shared code\n│   └── teams/\n│       ├── payments/       # Team publishes packages here\n│       └── fraud/         # Team publishes packages here\n└── shared-platform/        # Enterprise-wide shared code\n    ├── java-commons/      # Shared Java libraries\n    └── ui-components/     # Shared UI components\n```\n\n### Configuration de la publication\n\nLes équipes publient leurs paquets dans les registres de leurs projets respectifs, assurant ainsi une propriété claire et bien définie :\n\n1. Exemple de paquets Maven\n\n```xml\n\u003C!-- checkout/pom.xml -->\n\u003CdistributionManagement>\n    \u003Crepository>\n        \u003Cid>gitlab-maven\u003C/id>\n        \u003Curl>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven\u003C/url>\n    \u003C/repository>\n\u003C/distributionManagement>\n```\n\n2. Exemple de paquets npm\n\n```json\n// ui-components/package.json\n{\n  \"name\": \"@company/ui-components\",\n  \"publishConfig\": {\n    \"registry\": \"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/\"\n  }\n}\n```\n\n### Configuration d'utilisation des paquets\n\nC’est ici que la puissance de l'utilisation au niveau du groupe racine prend tout son sens. Toutes les équipes configurent un point de terminaison unique pour accéder aux paquets :\n\n1. Exemple de paquets Maven\n\n```xml\n\u003C!-- Any project's pom.xml -->\n\u003Crepositories>\n    \u003Crepository>\n        \u003Cid>gitlab-maven\u003C/id>\n        \u003Curl>https://gitlab.example.com/api/v4/groups/company/-/packages/maven\u003C/url>\n    \u003C/repository>\n\u003C/repositories>\n```\n\n2. Exemple de paquets npm\n\n```\n# Any project's .npmrc\n@company:registry=https://gitlab.example.com/api/v4/groups/company/-/packages/npm/\n```\n\nCette configuration fournit automatiquement un accès à l'ensemble des paquets de votre entreprise, tout en conservant les avantages d'une publication basée sur les projets.\n\n## Authentification et contrôle d'accès\n\nLe modèle de GitLab simplifie l'authentification grâce aux tokens de déploiement et à l'intégration avec les [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ? \").\n\n### Pour les pipelines CI/CD\n\nGitLab gère automatiquement l'authentification au sein des pipelines à l'aide du token `CI_JOB_TOKEN` :\n\n```yaml\n# .gitlab-ci.yml\npublish:\n  script:\n    - mvn deploy  # or npm publish\n  # CI_JOB_TOKEN provides automatic authentication\n```\n\n### Pour le développement\n\nUtilisez des tokens de déploiement définis au niveau du groupe pour accéder aux paquets, en suivant les étapes suivantes :\n\n- Créez des tokens de déploiement en lecture seule au niveau du groupe racine.\n- Effectuez régulièrement une rotation des tokens pour renforcer la sécurité. \n- Partagez une configuration unique entre tous les développeurs. \n\n## Les avantages du registre de paquets au niveau du groupe racine\n\n1. Configuration simplifiée\n   - Une seule URL pour accéder à tous les paquets.\n   - Une configuration cohérente entre toutes les équipes.\n   - Une rotation facile des tokens.\n2. Propriété claire\n   - Les paquets restent associés à leur code source.\n   - Les équipes conservent la maîtrise des publications.\n   - L'historique des versions est lié à l'activité du projet.\n3. Organisation naturelle\n   - Elle reflète fidèlement la structure de votre entreprise.\n   - Elle maintient l'autonomie de vos équipes.\n   - Elle facilite la collaboration transversale.\n\n## Étapes à suivre\n\n1. Configurez votre groupe racine\n   - Créez une structure de groupe claire.\n   - Configurez les contrôles d'accès appropriés.\n   - Créez des tokens de déploiement de groupe.\n2. Configurez les projets d'équipe\n   - Configurez la publication au niveau du projet.\n   - Intégrez les pipelines CI/CD.\n   - Documentez les conventions de nommage des paquets.\n3. Normalisez l'utilisation des paquets\n   - Configurez l'accès au registre du groupe racine.\n   - Partagez les tokens de déploiement en toute sécurité.\n   - Documentez le processus d'identification des paquets.\n\n## Résumé\n\nLe modèle de registre de paquets de GitLab, et en particulier l'utilisation au niveau du groupe racine, offre une puissante solution pour la gestion des paquets à l'échelle de l'entreprise. En combinant la publication par projet avec l'utilisation des paquets au niveau du groupe racine, les entreprises profitent des avantages de ces deux approches : une propriété claire et un accès simplifié. Cette approche évolue naturellement avec votre entreprise tout en garantissant la sécurité et la facilité d'utilisation.\n\nCommencez par mettre en œuvre ce modèle au sein d'une équipe ou d'une division pilote, puis étendez-le au reste de l'entreprise à mesure que vous constatez les avantages de cette approche intégrée. Bien que cet article se concentre sur Maven et npm, les principes évoqués ici s'appliquent à tous les types de paquets pris en charge par GitLab.\n\n> Lancez-vous avec les registres de paquets dès aujourd'hui ! Inscrivez-vous à un [essai gratuit de GitLab Ultimate](https://about.gitlab.com/fr-fr/free-trial/).\n",[9,687,1133],"solutions architecture","2025-04-30",{"slug":1136,"featured":91,"template":692},"structuring-the-gitlab-package-registry-for-enterprise-scale","content:fr-fr:blog:structuring-the-gitlab-package-registry-for-enterprise-scale.yml","Structuring The Gitlab Package Registry For Enterprise Scale","fr-fr/blog/structuring-the-gitlab-package-registry-for-enterprise-scale.yml","fr-fr/blog/structuring-the-gitlab-package-registry-for-enterprise-scale",{"_path":1142,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1143,"content":1149,"config":1158,"_id":1160,"_type":14,"title":1161,"_source":16,"_file":1162,"_stem":1163,"_extension":19},"/fr-fr/blog/the-ultimate-guide-to-sboms",{"title":1144,"description":1145,"ogTitle":1144,"ogDescription":1145,"noIndex":6,"ogImage":1146,"ogUrl":1147,"ogSiteName":674,"ogType":675,"canonicalUrls":1147,"schema":1148},"Qu’est-ce qu’une nomenclature logicielle (SBOM) et quel est son rôle ?","Découvrez ce qu'est une nomenclature logicielle et pourquoi elle fait désormais partie intégrante du développement logiciel. Lisez notre guide complet.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664571/Blog/Hero%20Images/blog-image-template-1800x945__8_.png","https://about.gitlab.com/blog/the-ultimate-guide-to-sboms","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Qu’est-ce qu’une nomenclature logicielle (SBOM) et quel est son rôle ?\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sandra Gittlen\"}],\n        \"datePublished\": \"2022-10-25\",\n      }",{"title":1144,"description":1145,"authors":1150,"heroImage":1146,"date":1152,"body":1153,"category":773,"tags":1154,"updatedDate":1157},[1151],"Sandra Gittlen","2022-10-25","Une nomenclature logicielle (ou SBOM) est une liste complète des composants d’un logiciel qui facilite la compréhension du réseau complexe de bibliothèques, d'outils et de processus utilisés tout au long du cycle de développement. Associées à des outils de gestion des vulnérabilités, les SBOM ne se contentent pas de révéler les vulnérabilités potentielles des logiciels, mais ouvrent également la voie à une stratégie d'atténuation des risques. \n\nDécouvrez dans ce guide tout ce que vous devez savoir sur les SBOM, ainsi que le rôle central qu'elles jouent dans une stratégie [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que DevSecOps ?\") multifacette : \n\n- [Qu'est-ce qu'une SBOM ?](#quest-ce-quune-sbom)\n- [Pourquoi les SBOM sont-elles importantes ?](#pourquoi-les-sbom-sont-elles-importantes)\n- [Quels sont les types de normes d'échange de données SBOM ?](#quels-sont-les-types-de-normes-dechange-de-donnees-sbom)\n- [Quels sont les avantages de l'association des SBOM avec la gestion des vulnérabilités logicielles ?](#quels-sont-les-avantages-de-lassociation-des-sbom-avec-la-gestion-des-vulnerabilites-logicielles)\n- [GitLab et les SBOM dynamiques](#gitlab-et-les-sbom-dynamiques)\n- [L'avenir des fonctionnalités SBOM de GitLab](#lavenir-des-fonctionnalites-sbom-de-gitlab)\n- [Commencez à utiliser les SBOM](#commencez-à-utiliser-les-sbom)\n\n## Qu'est-ce qu'une SBOM ?\n\nUne SBOM est un inventaire imbriqué ou une [liste des ingrédients qui constituent les composants logiciels](https://www.cisa.gov/sbom# \"Définition d'une SBOM\"). Les SBOM comprennent des informations critiques sur les bibliothèques, outils et processus utilisés pour développer, construire et déployer un artefact logiciel. \n\nBien que les SBOM soient souvent créées avec des logiciels autonomes, des plateformes DevSecOps comme GitLab intègrent la génération de SBOM dans un workflow DevSecOps.\n\n![Sécurité de la chaîne d'approvisionnement SDLC](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749673653/Blog/Content%20Images/supply_chain_security_sdlc.png)\n\n### Pourquoi les SBOM sont-elles importantes ?\n\nAujourd'hui, le secteur du développement logiciel a tendance à prioriser rapidité et efficacité pour la livraison de logiciels. Cependant, cela induit parfois des __risques de sécurité__ via l'intégration de code moins sécurisé provenant de dépôts open source ou de paquets propriétaires.\n\nSelon le rapport « Open Source Security and Risk Analysis » de Synopsys (2024), qui a analysé plus de 1 000 bases de code commerciales issues de 17 industries différentes en 2023, 96 % de ces bases contenaient du code open source et 84 % de celles évaluées pour les risques contenaient des vulnérabilités.\n\nÀ la lecture de ce rapport, il devient clair qu'intégrer du code provenant de dépôts inconnus augmente le risque de failles exploitables par les hackers.\n\nUn exemple connu, l'[attaque de SolarWinds](https://fr.wikipedia.org/wiki/Cyberattaque_de_2020_contre_les_%C3%89tats-Unis \"Attaque de SolarWinds\") en 2020, a été déclenchée par l'activation d'une __injection malveillante de code__ dans un paquet utilisé par le produit Orion de SolarWinds. Cette dernière n'a pas été sans conséquences puisqu'elle a fortement affecté les clients de l’ensemble de la chaîne d'approvisionnement logicielle.\n\nCette attaque, comme bien d'autres (par exemple, la __vulnérabilité Log4j__) ont mis en lumière l'importance d'effectuer une analyse approfondie des dépendances des applications, y compris des __conteneurs et de l'infrastructure__, afin d'évaluer les [risques potentiels tout au long de la chaîne d'approvisionnement logicielle](https://about.gitlab.com/blog/the-ultimate-guide-to-software-supply-chain-security/ \"Sécurité de la chaîne d'approvisionnement logicielle\").\n\nLe coût lié à l'identification et à la correction d’une faille de sécurité est un facteur important à ne pas négliger. Mais au-delà de l'aspect financier, une attaque sur la chaîne d'approvisionnement logicielle peut gravement affecter __la réputation d'une entreprise__.\n\nNon seulement les SBOM permettent de __limiter les risques d'attaques__ (et donc de préserver votre réputation), mais elles contribuent également à optimiser les coûts liés à la gestion des vulnérabilités : \n\n- En offrant un aperçu de vos dépendances,\n- En identifiant les vulnérabilités ainsi que les licences non conformes aux protocoles de sécurité internes à votre entreprise. \n\n## Quels sont les types de normes d'échange de données SBOM ?\n\nLes SBOM fonctionnent de manière optimale lorsque la génération et l'interprétation d'informations telles que __le nom, la version, ou encore l’empaqueteur, peuvent être automatisées__. Cette automatisation est optimale si toutes les parties prenantes impliquées utilisent un format standard d'échange de données. \n\nIl existe deux principaux types de normes d'échange de données SBOM utilisées aujourd'hui :\n\n- [OWASP CycloneDX](https://cyclonedx.org/capabilities/sbom/ \"OWASP CycloneDX\")\n- [SPDX](https://spdx.dev/ \"SPDX\")\n\nGitLab utilise CycloneDX pour la génération de SBOM, car cette norme est :\n\n- prescriptive (marque un ensemble de normes objectives),\n- facile à comprendre et à prendre en main, \n- capable de simplifier les relations complexes, \n- extensible pour prendre en charge et s'adapter à des cas spécifiques.\n\nDe plus, il existe des outils open source comme cyclonedx-cli et cdx2spdx qui peuvent être utilisés pour convertir des fichiers CycloneDX au format SPDX si nécessaire.\n\n## Quels sont les avantages de l'association des SBOM avec la gestion des vulnérabilités logicielles ?\n\nLes SBOM sont très utiles pour les équipes DevSecOps et les utilisateurs de logiciels, et ce, pour plusieurs raisons :\n\n - Elles permettent une __approche standardisée__ pour comprendre quels composants logiciels supplémentaires sont présents dans une application et où ils sont déclarés.\n - Elles offrent une visibilité continue sur l'__historique de création d'une application__, y compris des détails sur les origines du code tiers et les dépôts hôtes.\n- Elles fournissent un haut niveau de transparence en matière de sécurité, tant pour le code développé en interne que pour les logiciels open source utilisés.\n- Les détails fournis par les SBOM permettent aux [équipes DevOps](https://about.gitlab.com/fr-fr/topics/devops/build-a-devops-team/ \"Construire une équipe DevOps\") d'identifier les vulnérabilités, d'évaluer les risques, puis de les atténuer. \n- Les SBOM fournissent la transparence désormais attendue par les acheteurs d'applications.\n\n## GitLab et les SBOM dynamiques\n\nPour que les SBOM soient les plus efficaces possibles, les entreprises doivent être en mesure :\n\n- de les générer automatiquement,\n- de les connecter à des outils d'analyse de sécurité des applications,\n- d’intégrer les vulnérabilités et les licences dans un tableau de bord (pour faciliter la compréhension et la prise de décision),\n- de les mettre à jour en continu.\n\nSachez que GitLab prend en charge tous ces objectifs. \n\n![Illustration de la gestion dynamique des SBOM](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749673653/Blog/Content%20Images/Screenshot_2024-05-03_at_10.53.28_AM.png)\n\n### Générer et gérer des SBOM à grande échelle\n\nPour se conformer aux réglementations ainsi qu'aux politiques internes de votre entreprise, il est essentiel de disposer de SBOM capables de couvrir tant les logiciels open source que les logiciels tiers et propriétaires.\n\nIl est également nécessaire de mettre en place un processus optimisé afin de créer, fusionner, valider et approuver les SBOM. C'est une condition essentielle à la bonne gestion des SBOM, et ce, pour chaque composant et version de produit.\n\nComment la plateforme GitLab peut-elle vous aider dans la génération de SBOM ? \n\n- La fonctionnalité « [Liste des dépendances](https://docs.gitlab.com/ee/user/application_security/dependency_list/ \"Liste des dépendances de GitLab\") » rassemble les données connues sur les vulnérabilités et les licences dans une vue unique disponible au sein de l'interface utilisateur de GitLab. \n- Des informations sur le graphe des dépendances sont générées dans le cadre du rapport d'analyse des dépendances. Cela permet aux utilisateurs d'obtenir une vue d'ensemble complète sur les dépendances et les vulnérabilités potentielles au sein de leurs projets ou groupes de projets.  \n- Un artefact au format JSON CycloneDX peut être produit dans le [pipeline CI](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI ?\"). Cette API propose une approche plus nuancée et personnalisée de la génération de SBOM. \n- Les SBOM sont exportables depuis l'interface utilisateur, un pipeline ou un projet spécifique, ou via l'API GitLab.\n\n### Ingérer et fusionner des SBOM\n\nEn ingérant des SBOM tiers, GitLab offre un haut degré de transparence en matière de sécurité, que ce soit pour le code développé par des tiers que pour les logiciels open source utilisés. \n\nGitLab vous permet d'utiliser un job [CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/ \"Qu'est-ce que le CI/CD ? \") pour fusionner simplement plusieurs SBOM CycloneDX. En s'appuyant sur les détails spécifiques à l'implémentation dans les métadonnées CycloneDX de chaque SBOM (comme l'emplacement des fichiers de compilation et de verrouillage), __GitLab élimine les doublons__. Ces données sont également enrichies automatiquement avec des informations sur les licences et les vulnérabilités des composants à l'intérieur de la nomenclature logicielle. \n\n### Accélérer l'atténuation des risques pour une meilleure gestion des SBOM\n\nPour pouvoir créer rapidement des produits de haute qualité, les équipes de développement ont besoin de données exploitables pour identifier et corriger les vulnérabilités critiques des applications. GitLab contribue à sécuriser votre chaîne d'approvisionnement logicielle en [analysant les vulnérabilités](https://docs.gitlab.com/ee/user/application_security/secure_your_application.html \"Comment sécuriser son application ? \") dans le code source, dans les conteneurs, les dépendances et les applications en cours d'exécution.\n\nGitLab offre une couverture complète pour aider dans la gestion des vulnérabilités (vulnerability management) grâce à sa large panoplie de scanners de sécurité : \n\n- des tests statiques de sécurité des applications ([SAST](https://docs.gitlab.com/ee/user/application_security/sast/ \"SAST\"))\n- des tests dynamiques de sécurité des applications ([DAST](https://docs.gitlab.com/ee/user/application_security/dast/ \"DAST\"))\n- l'analyse des conteneurs\n- l'analyse de la composition logicielle ([SCA](https://about.gitlab.com/direction/secure/composition-analysis/software-composition-analysis/ \"SCA\")) \n\nPour aider les équipes de développement et d'ingénierie en sécurité à mieux comprendre et corriger les vulnérabilités, GitLab met à disposition de ses utilisateurs la fonctionnalité d'explication des vulnérabilités de [GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/ \"GitLab Duo \"). Cette fonctionnalité alimentée par l'IA fournit une explication sur une vulnérabilité spécifique, comment elle peut être exploitée et, surtout, fournit une recommandation sur la manière de la corriger. Combinée à la [fonctionnalité de résolution des vulnérabilités de GitLab Duo](https://about.gitlab.com/fr-fr/blog/developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities/ \"Développement de GitLab Duo : corriger les failles de sécurité avec l'IA\"), cette fonctionnalité permet aux équipes DevSecOps de rapidement identifier, analyser et corriger les vulnérabilités de leurs applications.\n\nLa plateforme prend également en charge la création de nouvelles règles (et le [respect de leur application](https://docs.gitlab.com/ee/administration/compliance.html)) basées sur les vulnérabilités nouvellement détectées.\n\n### Analyser les SBOM en continu \n\nL’analyse continue des vulnérabilités de GitLab déclenche une analyse sur tous les projets où l'analyse des conteneurs, l'analyse des dépendances, ou les deux, sont activées indépendamment d'un pipeline.\n\nLorsque de nouvelles CVE (Common Vulnerabilities and Exposures) sont signalées, les utilisateurs n'ont pas besoin de relancer leurs pipelines pour obtenir les dernières informations.\n\nEn effet, l'équipe de recherche sur les vulnérabilités de GitLab les ajoute à la base de données des avis ([GitLab Advisory Database](https://docs.gitlab.com/ee/user/application_security/gitlab_advisory_database/ \"GitLab Advisory Database\")) pour être intégrées dans la liste des vulnérabilités connues de GitLab. Cela rend la SBOM de GitLab véritablement dynamique. \n\n### Renforcer la confiance dans les SBOM\n\nGitLab permet aux entreprises nécessitant une [fonctionnalité de conformité](https://about.gitlab.com/fr-fr/solutions/compliance/ \"La conformité des logiciels avec GitLab\") de [générer des attestations pour tous les artefacts de compilation](https://about.gitlab.com/blog/securing-the-software-supply-chain-through-automated-attestation/ \"Sécuriser la chaîne d'approvisionnement logicielle grâce à l'attestation automatisée\") produits par le GitLab Runner. Le processus est sécurisé, car il est réalisé directement par le [GitLab Runner](https://docs.gitlab.com/runner/ \"GitLab Runner\"), sans qu'il y ait de transfert de données vers un service externe.\n\n## L'avenir des fonctionnalités SBOM de GitLab\n\nLes attaques fréquentes contre de grands fournisseurs de logiciels et sur les environnements open source obligent le monde du développement à renforcer ses défenses contre les menaces extérieures. Pour cette raison, la sécurité de la chaîne d'approvisionnement des logiciels est aujourd'hui un sujet central dans l'industrie de la cybersécurité et du logiciel. \n\nBien que les SBOM évoluent rapidement, des préoccupations subsistent néanmoins. Par exemple : \n\n- la manière et la fréquence dont elles sont générées\n- leur stockage\n- la combinaison de plusieurs SBOM pour des applications complexes\n- leur analyse et utilisation pour améliorer la santé des applications.\n\nGitLab a fait des SBOM une partie intégrante de sa stratégie en matière de [chaîne d'approvisionnement logicielle](https://about.gitlab.com/direction/supply-chain/ \"Chaîne d'approvisionnement logicielle\") et continue d'améliorer ses capacités SBOM en permanence, en intégrant régulièrement de nouvelles fonctionnalités.\n\nParmi ces améliorations, nous retrouvons entre autres : l'automatisation des attestations, la signature numérique des artefacts de compilation et la prise en charge des SBOM générées en externe.\n\nGitLab a également mis en place un [modèle de maturité SBOM](https://handbook.gitlab.com/handbook/security/security-assurance/dedicated-compliance/sbom-plan/ \"Modèle de maturité SBOM\") (SBOM Model Maturity) au sein de sa plateforme. Ce modèle inclut des étapes comme la génération automatique de SBOM, l’approvisionnement en SBOM depuis l'environnement de développement, l’analyse des SBOM pour les artefacts et la promotion de la signature numérique des SBOM.\n\n## Commencez à utiliser les SBOM\n\nLa demande en SBOM est déjà très forte.\n\nAux États-Unis, les agences gouvernementales recommandent, voire exigent des fournisseurs et des développeurs de logiciels fédéraux, et même des communautés open source qu'ils créent des SBOM. \n\nA l'échelle européenne, ce sujet est traité au sein du [règlement sur la cyberrésilience (CRA)](https://digital-strategy.ec.europa.eu/fr/news/cyber-resilience-act-enters-force-make-europes-cyberspace-safer-and-more-secure \"règlement sur la cyberrésilience\"). Quant à la France, c'est l'[Agence nationale de la sécurité des systèmes d'information](https://cyber.gouv.fr/ \"Agence nationale de la sécurité des systèmes d'information\") (ANSSI) qui tranche sur ce type de sujets. \n\nAinsi, que ce soit aux États-Unis, en France, mais aussi ailleurs dans le monde, les agences liées à la sécurité informatique informent sur les menaces grandissantes qui pèsent sur le monde du développement logiciel et numérique plus globalement. \n\nPour anticiper ces exigences, consultez les fonctionnalités SBOM de l'édition GitLab Ultimate disponibles dans la [plateforme DevSecOps de GitLab](https://gitlab.com/-/trials/new \"Essai gratuit de la plateforme GitLab \").\n\n## FAQ sur les SBOM\n\n### Qu'est-ce qu'une SBOM ?\n\nUne SBOM est un inventaire détaillé qui répertorie tous les composants, bibliothèques et outils utilisés pour créer, construire et déployer des logiciels. Cette liste exhaustive inclut des informations essentielles sur les origines du code. Cela favorise une compréhension plus approfondie de la composition d'une application et de ses vulnérabilités potentielles.\n\n### Pourquoi les SBOM sont-elles si importantes ?\n\nLes SBOM sont essentielles pour plusieurs raisons. Elles fournissent :\n\n- __Un aperçu des dépendances.__ Elles permettent de comprendre ce qui compose votre logiciel, et donc de mieux identifier et atténuer les risques associés aux composants tiers.\n- __Une sécurité renforcée.__ Avec une visibilité détaillée des composants de leurs applications, les entreprises peuvent rapidement identifier leurs vulnérabilités et prendre des mesures pour les résoudre.\n- __Une conformité réglementaire.__ De plus en plus, les réglementations et les meilleures pratiques recommandent ou exigent une SBOM pour l'empaquetage de logiciels, en particulier dans le secteur public.\n- __Un développement rationalisé.__ Les équipes de développement peuvent s'appuyer sur les SBOM pour obtenir des informations sur les bibliothèques et les composants utilisés, ce qui permet de gagner du temps et de réduire les erreurs dans le cycle de développement logiciel. \n\n### Quels formats sont utilisés pour l'échange de données SBOM ?\n\nIl existe deux normes prédominantes pour l'échange de données SBOM : \n\n- [CycloneDX](https://docs.gitlab.com/ee/user/compliance/license_scanning_of_cyclonedx_files/ \"CycloneDX\") : connue pour être particulièrement intuitive, CycloneDX simplifie les relations complexes entre les composants logiciels et prend en charge des cas d'utilisation spécifiques. \n- [SPDX](https://docs.gitlab.com/ee/raketasks/spdx.html \"SPDX\") : un autre framework largement utilisé pour l'échange de données SBOM. SPDX fournit des informations détaillées sur les composants au sein de l'environnement logiciel. \n\nEn raison de sa nature normative et de son adaptabilité, GitLab utilise spécifiquement CycloneDX pour sa génération de SBOM.\n\n### Quelle est l’approche de GitLab en matière de SBOM ?\n\nGitLab met l'accent sur la création de SBOM dynamiques qui peuvent être : \n\n- Générées automatiquement : garantir des informations à jour sur la composition logicielle\n- Intégrées avec des outils : se connecter à des outils d’analyse de vulnérabilités, pour une meilleure gestion des risques. \n- Faciles à gérer : prendre en charge l'ingestion et la fusion des SBOM pour une analyse complète \n- Analysées en continu : offrir une analyse continue des projets pour détecter les nouvelles vulnérabilités au fur et à mesure de leur apparition\n\n### Comment puis-je commencer à implémenter les SBOM dans mon entreprise ?\n\nPour les entreprises prêtes à adopter les SBOM, l'édition [GitLab Ultimate](https://about.gitlab.com/fr-fr/pricing/ultimate/ \"GitLab Ultimate\") met à disposition des utilisateurs une plateforme robuste pour générer et gérer des SBOM au sein d'un workflow DevSecOps. En tirant parti des outils de GitLab, les équipes de développement peuvent garantir la conformité logicielle, renforcer la sécurité et optimiser les pratiques de développement.\n\nLa demande croissante de SBOM reflète l’importance grandissante accordée à la sécurité logicielle et à l'intégrité de la chaîne d'approvisionnement. En intégrant les fonctionnalités SBOM, les entreprises peuvent mieux se protéger contre les vulnérabilités et se conformer aux nouvelles réglementations en vigueur.\n\n> [Essayez GitLab Ultimate gratuitement.](https://about.gitlab.com/free-trial/fr-fr/devsecops/ \"Essai gratuit de GitLab Ultimate\")\n\n*Avertissement : cet article de blog contient des informations relatives aux produits, fonctionnalités et caractéristiques à venir. Il est important de noter que les informations contenues dans cet article de blog ne sont fournies qu'à titre informatif. Veuillez ne pas vous fier à ces informations à des fins d'achat ou de planification. Comme pour tout projet, les éléments mentionnés dans cet article (et les pages qui y sont liées) sont susceptibles de changer ou d'être retardés. Le développement, la sortie et le calendrier de tout produit ou fonctionnalité restent à la seule discrétion de GitLab.*\n",[773,9,1155,1156,187],"performance","open source","2024-12-16",{"slug":1159,"featured":6,"template":692},"the-ultimate-guide-to-sboms","content:fr-fr:blog:the-ultimate-guide-to-sboms.yml","The Ultimate Guide To Sboms","fr-fr/blog/the-ultimate-guide-to-sboms.yml","fr-fr/blog/the-ultimate-guide-to-sboms",{"_path":1165,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1166,"content":1172,"config":1181,"_id":1183,"_type":14,"title":1184,"_source":16,"_file":1185,"_stem":1186,"_extension":19},"/fr-fr/blog/tutorial-automated-release-and-release-notes-with-gitlab",{"ogTitle":1167,"schema":1168,"ogImage":1169,"ogDescription":1170,"ogSiteName":674,"noIndex":6,"ogType":675,"ogUrl":1171,"title":1167,"canonicalUrls":1171,"description":1170},"Automatisez vos sorties et notes de version avec GitLab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutoriel : Automatisez vos sorties et notes de version avec GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ben Ridley\"}],\n        \"datePublished\": \"2023-11-01\",\n      }","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659978/Blog/Hero%20Images/automation.png","Découvrez comment automatiser vos livraisons de logiciels avec l'API Changelog de GitLab : créez des artefacts, changelogs complets et notes de version clairs.","https://about.gitlab.com/blog/tutorial-automated-release-and-release-notes-with-gitlab",{"heroImage":1169,"body":1173,"authors":1174,"updatedDate":1176,"date":1177,"title":1167,"tags":1178,"description":1170,"category":799},"**Mise à jour 2025** : l'API Changelog de GitLab continue d'évoluer et offre\ndésormais de nouvelles fonctionnalités avancées, telles que la génération de\nchangelogs personnalisés basés sur l'historique de vos commits. Ces\nnouveautés ne sont pas détaillées dans cet article, mais vous pouvez les\nconsulter dans notre[ documentation officielle dédiée aux\nchangelogs.](https://docs.gitlab.com/user/project/changelogs/)\n\n\nLorsque vous développez un logiciel dont les utilisateurs se servent au quotidien, il est essentiel de les informer des modifications apportées à chaque nouvelle version (nouvelles fonctionnalités, modifications ou suppressions). Ils peuvent ainsi tirer pleinement parti du logiciel et éviter les mauvaises surprises lors des mises à niveau.\n\n\nMais historiquement, rédiger les notes de version et maintenir un changelog ont toujours été des tâches laborieuses qui obligent les équipes et les Release Managers à passer au crible les modifications et l'historique des merge requests. Désormais, avec l'API Changelog de GitLab, vous pouvez tirer parti de l'historique détaillé des modifications enregistrées dans votre dépôt [Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce que Git ?\") pour créer automatiquement des notes de version et tenir à jour votre changelog.\n\n\nDécouvrez dans ce tutoriel comment intégrer cette automatisation dans vos [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\").\n\n\n## Sorties de nouvelles versions dans GitLab\n\n\nDans GitLab, une nouvelle version correspond à une version spécifique de votre code, identifiée par un tag git. Elle regroupe les modifications apportées depuis la dernière version, les notes de version associées, ainsi que tous les artefacts générés à partir de cette version du code, tels que les images Docker, les paquets d'installation et la documentation.\n\n\nVous pouvez créer et suivre les sorties de ces nouvelles versions dans GitLab à l'aide de l'interface utilisateur en appelant notre API Release ou en définissant un job de `release` dans un pipeline CI. Nous utiliserons ce dernier dans ce tutoriel afin de bénéficier de l'automatisation déjà en place pour les tests, les scans du code et les autres étapes de validation, et d'automatiser également les sorties de nouvelles versions.\n\n\nNous devons d'abord disposer d'un historique clair de toutes les modifications apportées. C'est ce que fournit précisément le dépôt Git via les messages de commit et le suivi des merge requests. Ce dernier garantit une génération automatisée et fiable des notes de version et du changelog. \n\n\n## Lignes terminales dans un commit\n\n\nLes [lignes terminales dans un commit Git](https://git-scm.com/docs/git-interpret-trailers/fr) sont des métadonnées structurées ajoutées en fin de vos messages de commit, sous la forme simple `\u003CHEADER>:\u003CBODY>`. L'interface de ligne de commande `git` peut ensuite les analyser et les extraire pour les utiliser dans d'autres systèmes, par exemple via la commande `git commit --sign-off` qui permet de confirmer un commit en y ajoutant une ligne terminale `Signed-off-by: \u003CVotre nom>`. Vous pouvez y ajouter n'importe quelle information structurée. Il s'agit donc d'un emplacement idéal pour stocker des métadonnées, et dans notre exemple, pour générer automatiquement notre changelog.\n\n\nEn ajoutant la ligne terminale `Changelog: \u003Cadded/changed/removed>` à la fin de nos messages de commit, l'API Changelog de GitLab l'analysera et créera automatiquement un changelog.\n\n\nNous allons illustrer ce mécanisme en apportant quelques modifications à un code source existant afin de sortir une nouvelle version et de générer automatiquement ses notes de version et les entrées du changelog correspondant.\n\n\n## Exemple concret avec une application Python\n\n\nPartons d'un dépôt contenant une application web simple écrite en Python. Supposons que la version 1.0.0 de cette application vient de sortir et représente l'état actuel du code, et qu'elle a été créée manuellement dans GitLab, sans pipeline de sortie de nouvelle version automatisé :\n\n\n![Capture d'écran de l'interface utilisateur de GitLab montrant la sortie de la nouvelle version 1.0.0](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/1-0-release.png)\n\n\n## Modifications en vue de la version 2.0.0\n\n\nComme nous sommes en mode de développement rapide, nous allons travailler sur la sortie de la version 2.0.0 de notre application dès aujourd'hui. Celle-ci introduira une fonctionnalité de chatbot et supprimera la fonctionnalité de blockchain quantique, qui servait uniquement à impressionner les investisseurs lors de notre premier cycle de financement par capital-risque. Nous allons également ajouter un job de sortie de nouvelle version automatisé à notre pipeline CI/CD.\n\n\nTout d'abord, nous devons supprimer les fonctionnalités obsolètes à l'aide d'une merge request qui contient les suppressions nécessaires en veillant à ce que le message de commit inclue la ligne terminale `Changelog: removed`. Pour cela, nous pouvons par exemple l'inclure directement dans un commit, ou effectuer un [rebasage interactif](https://about.gitlab.com/fr-fr/blog/keep-git-history-clean-with-interactive-rebase/ \"Qu'est-ce que le rebasage interactif ?\") et l'ajouter à l'aide de l'interface de ligne de commande (CLI). \n\n\nMais dans notre exemple, nous traiterons cette étape en dernier, et utiliserons plutôt le bouton `Modifier le message de commit` dans GitLab pour ajouter la ligne terminale au commit comme suit :\n\n\n![Capture d'écran de l'interface utilisateur de GitLab montrant une merge request supprimant les fonctionnalités inutilisées](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/remove-unused-features-mr.png)\n\n\nVous pouvez également modifier le titre du commit pour qu'il soit plus concis. Nous allons donc renommer notre commit « Supprimer les fonctionnalités inutilisées », pour que ce titre apparaisse dans le changelog.\n\n\nEnsuite, ajoutons de nouvelles fonctionnalités pour la version 2.0.0. Là encore, il suffit d'ouvrir une autre merge request qui inclut nos nouvelles fonctionnalités, de modifier le commit pour inclure la ligne terminale `Changelog: added`, puis de modifier son titre pour qu'il soit plus concis :\n\n\n![Capture d'écran de l'interface utilisateur de GitLab montrant une merge request servant à ajouter de nouvelles fonctionnalités](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/add-chatbot-mr.png)\n\n\nNous sommes maintenant prêts à publier la version 2.0.0. Mais cette fois-ci, au lieu de la créer manuellement, nous allons ajouter les jobs nécessaires à notre fichier `.gitlab-ci.yml` : ils gèreront automatiquement la sortie de la nouvelle version à notre place et généreront les notes de version et les entrées du changelog lorsque nous ajouterons à notre code le tag `2.0.0` en référence à la nouvelle version.\n\n\n**Remarque :** pour ajouter facilement des lignes terminales de changelog, utilisez un outil comme [Danger, qui permet de vérifier automatiquement le respect des conventions dans les merge requests](https://docs.gitlab.com/ee/development/dangerbot.html).\n\n\n## Création d'un pipeline automatisé de sortie de nouvelle version\n\n\nLa première étape consiste à créer un token d'accès au projet qui nous permettra d'appeler l'API de GitLab afin de générer les entrées de notre changelog. [Créons un token d'accès au projet avec la portée de l'API](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html#create-a-project-access-token), puis [stockons-le dans les variables CI/CD](https://docs.gitlab.com/ee/ci/variables/#define-a-cicd-variable-in-the-ui) du projet sous le nom `CI_API_JETON`. Nous référencerons cette variable à des fins d'authentification auprès de l'API.\n\n\nEnsuite, ajoutons deux nouveaux jobs à notre fichier `gitlab-ci.yml` :\n\n\n```yaml\n\nprepare_job:\n  stage: prepare\n  image: alpine:latest\n  rules:\n  - if: '$CI_COMMIT_TAG =~ /^v?\\d+\\.\\d+\\.\\d+$/'\n  script:\n    - apk add curl jq\n    - 'curl -H \"PRIVATE-TOKEN: $CI_API_TOKEN\" \"$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/changelog?version=$CI_COMMIT_TAG\" | jq -r .notes > release_notes.md'\n  artifacts:\n    paths:\n    - release_notes.md\n\nrelease_job:\n  stage: release\n  image: registry.gitlab.com/gitlab-org/release-cli:latest\n  needs:\n    - job: prepare_job\n      artifacts: true\n  rules:\n  - if: '$CI_COMMIT_TAG =~ /^v?\\d+\\.\\d+\\.\\d+$/'\n  script:\n    - echo \"Creating release\"\n  release:\n    name: 'Release $CI_COMMIT_TAG'\n    description: release_notes.md\n    tag_name: '$CI_COMMIT_TAG'\n    ref: '$CI_COMMIT_SHA'\n    assets:\n      links:\n        - name: 'Container Image $CI_COMMIT_TAG'\n          url: \"https://$CI_REGISTRE_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA\"\n```\n\n\nDans notre configuration, le job `prepare_job` utilise `curl` et `jq` pour appeler le point de terminaison de l'API Changelog de GitLab, puis transmet le résultat à notre job `release_job` chargé de créer automatiquement la nouvelle version. \n\n\nVoici les principaux éléments à retenir :\n\n\n* Nous utilisons le token d'accès au projet créé précédemment pour appeler l'API Changelog de GitLab, qui génère les notes de version que nous stockons en tant qu'artefact.\n\n* Nous utilisons la variable `$CI_COMMIT_TAG` pour identifier la version. Pour que l'API Changelog fonctionne correctement, nous devons utiliser la gestion sémantique de version pour nos tags (par exemple, `2.0.0`). Nous avons également restreint le job de sortie de nouvelle version à l'aide d'une règle spécifique dans la section `rules`, qui vérifie la présence d'un tag de version sémantique.\n\n  * La gestion sémantique de version est nécessaire pour que l'API Changelog de GitLab déclenche le job. Elle utilise ce format pour trouver la version la plus récente à comparer à notre version actuelle.\n* Nous utilisons l'image `release-cli` officielle de GitLab, indispensable pour exploiter le terme `release` dans un job.\n\n* Nous utilisons le terme `release` pour créer une sortie de nouvelle version dans GitLab et pour le remplissage des champs obligatoires.\n\n* Nous pouvons transmettre un fichier en tant qu'argument pour la `description` de la nouvelle version. Dans notre exemple, il s'agit du fichier que nous avons généré lors du job `prepare_job`, puis transmis à ce job sous forme d'artefact.\n\n* Nous avons également inclus notre image de conteneur, qui a été compilée plus tôt dans le pipeline, en tant que ressource associée à la nouvelle version. Vous pouvez également y joindre les ressources de votre choix, générées lors de votre processus de compilation, telles que des binaires ou de la documentation, à condition de fournir l'URL redirigeant vers l'endroit où vous les avez chargés plus tôt dans le pipeline.\n\n\n## Automatisation d'une sortie de nouvelle version\n\n\nAvec cette configuration, il suffit d'effectuer le push d'un tag respectant notre schéma de gestion des versions vers notre dépôt à l'aide de la CLI ou comme dans notre exemple, directement depuis l'interface utilisateur de GitLab, sur la branche principale, en sélectionnant Code -> Tags -> Nouveau tag dans la barre latérale :\n\n![Capture d'écran de l'interface utilisateur de GitLab montrant comment créer un tag](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/create-2-tag.png)\n\n\nDès la création du tag, nos pipelines commenceront à s'exécuter automatiquement. L'API Changelog de GitLab génère alors des notes de version au format markdown contenant toutes les modifications apportées entre cette version et la version précédente. \n\n\nVoici un extrait du markdown généré dans notre exemple :\n\n\n```md\n\n## 2.0.0 (2023-08-25)\n\n\n### added (1 change)\n\n\n- [Add ChatBot](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo@0c3601a45af617c5481322bfce4d71db1f911b02) ([merge request](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo!4))\n\n\n### removed (1 change)\n\n\n- [Remove Unused Features](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo@463d453c5ae0f4fc611ea969e5442e3298bf0d8a) ([merge request](gl-demo-ultimate-bridley/super-devsecops-incorporated/simply-notes-release-demo!3))\n\n```\n\n\nComme vous pouvez le constater, GitLab a extrait automatiquement les entrées de nos notes de version à l'aide des lignes terminales que nous avons intégrées dans nos messages de commit Git. De plus, des notes incluent des liens vers la merge request associée pour accéder rapidement aux compléments d'information et discussions relatifs aux modifications.\n\n\nVoici notre nouvelle version 2.0.0 :\n\n![Interface utilisateur de la nouvelle version de GitLab montrant la nouvelle version 2.0.0](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/2-0-release.png)\n\n\n## Automatisation de la mise à jour du changelog\n\n\nPour maintenir à jour votre changelog (soit l'historique rassemblant toutes vos notes de version), vous pouvez effectuer une requête `POST` vers le point de terminaison de l'API Changelog utilisé précédemment.\n\n\nSi vous effectuez cette opération dans le cadre de votre pipeline de nouvelle version, intégrez cette étape en ajoutant ce qui suit à la section `script` de votre job de préparation :\n\n\n```sh\n\n'curl -H \"PRIVATE-TOKEN: $CI_API_TOKEN\" -X POST \"$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/changelog?version=$CI_COMMIT_TAG\"\n\n```\n\n\n**Notez que cette opération modifie le dépôt** en créant un commit qui ajoute les notes de la nouvelle version à un fichier `CHANGELOG.md` :\n\n![Capture d'écran du dépôt montrant une validation mettant à jour le fichier changelog](https://about.gitlab.com/images/blogimages/2023-08-22-automated-release-and-release-notes-with-gitlab/changelog-api-commit.png)\n\n\nEt voilà, nous avons terminé ! En utilisant l'historique détaillé fourni par `git` avec quelques lignes terminales de commit pratiques, nous pouvons tirer parti de la puissante de l'API et des pipelines CI/CD de GitLab pour automatiser notre processus de sortie de nouvelle version et de génération de notes de version.\n\n\n> Pour découvrir le projet utilisé dans ce tutoriel, [consultez ce lien](https://gitlab.com/gitlab-learn-labs/sample-projects/release-automation-demo).\n",[1175],"Ben Ridley","2025-07-09","2023-11-01",[1179,109,883,9,1180],"CI","git",{"slug":1182,"featured":6,"template":692},"tutorial-automated-release-and-release-notes-with-gitlab","content:fr-fr:blog:tutorial-automated-release-and-release-notes-with-gitlab.yml","Tutorial Automated Release And Release Notes With Gitlab","fr-fr/blog/tutorial-automated-release-and-release-notes-with-gitlab.yml","fr-fr/blog/tutorial-automated-release-and-release-notes-with-gitlab",{"_path":1188,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1189,"content":1195,"config":1200,"_id":1202,"_type":14,"title":1203,"_source":16,"_file":1204,"_stem":1205,"_extension":19},"/fr-fr/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation",{"ogTitle":1190,"schema":1191,"ogImage":1192,"ogDescription":1193,"ogSiteName":674,"noIndex":6,"ogType":675,"ogUrl":1194,"title":1190,"canonicalUrls":1194,"description":1193},"Approche CI/CD : notre guide complet","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Guide complet sur l'approche CI/CD : des principes fondamentaux à la mise en œuvre avancée\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sandra Gittlen\"}],\n        \"datePublished\": \"2025-06-25\",\n      }\n                  ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660151/Blog/Hero%20Images/blog-image-template-1800x945__26_.png","Découvrez comment transformer vos processus CI/CD en automatisant le développement et la livraison de logiciels tout en renforçant la sécurité des pipelines.","https://about.gitlab.com/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation",{"title":1190,"description":1193,"authors":1196,"heroImage":1192,"date":1197,"body":1198,"category":10,"tags":1199},[1151],"2025-06-25","L'adoption des pratiques [CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/ \"Qu'est-ce que le CI/CD ?\") a révolutionné la création de valeur dans le développement logiciel. L'époque des déploiements manuels et des défis d'intégration complexes est désormais révolue : aujourd'hui, le développement logiciel moderne met l'accent sur l'automatisation, la fiabilité et la rapidité.\n\nL'approche CI/CD repose sur la mise en place d'un pipeline fluide et automatisé qui permet de transférer le code de l'environnement de développement vers l'environnement de production, tout en intégrant les retours et suggestions de modification en temps réel. L'intégration continue (CI) aide les équipes à détecter rapidement les problèmes avant qu'ils ne deviennent coûteux. Les modifications de code sont fréquemment fusionnées dans un dépôt partagé, puis testées automatiquement et validées. La livraison continue (CD) vient compléter cette démarche. Elle vise à automatiser le processus de déploiement, rendant les sorties de nouvelles versions prévisibles et harmonieuses.\n\nGrâce à un pipeline CI/CD robuste, les équipes peuvent compiler, tester et déployer leurs logiciels sans dépendre de processus manuels ou de chaînes d’outils complexes. L'intégration de l'IA aide à optimiser encore davantage ce processus, en générant automatiquement des pipelines CI/CD qui garantissent la cohérence des contrôles de qualité, de conformité et de sécurité.\n\nDécouvrez dans ce guide tout ce que vous devez sur les pipelines CI/CD modernes, des principes de base aux bonnes pratiques, en passant par les stratégies avancées. Apprenez également comment les grandes entreprises leaders dans leur domaine tirent parti de l'approche CI/CD pour atteindre des résultats impressionnants. À l’issue de cette lecture, vous saurez comment faire évoluer votre environnement [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps ?\") afin de développer et de livrer des logiciels de manière [agile](https://about.gitlab.com/fr-fr/topics/ci-cd/continuous-integration-agile/ \"Intégration continue et développement agile\"), automatisée et efficace.\n\n## Qu'est-ce que l'intégration continue ?\n\nL'[intégration continue](https://about.gitlab.com/fr-fr/topics/ci-cd/benefits-continuous-integration/ \"Qu'est-ce que l’intégration continue ?\") (CI) est une pratique qui consiste à intégrer régulièrement les modifications de code dans la branche principale d'un dépôt de code source partagé. Cette intégration s'effectue dès que possible, et fréquemment. Après chaque validation ou merge, les modifications sont automatiquement testées, puis une compilation est déclenchée sans intervention manuelle. Grâce à l'intégration continue, les équipes peuvent identifier et corriger les erreurs, ainsi que les failles de sécurité, plus facilement et beaucoup plus tôt dans le processus de développement.\n\n## Qu'est-ce que la livraison continue ?\n\n[La livraison continue](https://about.gitlab.com/fr-fr/topics/ci-cd/#what-is-continuous-delivery-cd \"Qu'est-ce que la livraison continue ?\") (CD), également appelée *déploiement continu*, automatise le processus de mise en production des applications. Les équipes de développement ont ainsi plus de temps à consacrer au suivi des déploiements en cours pour en garantir la réussite. Avec la livraison continue, les équipes DevSecOps définissent à l'avance les critères de mise à disposition du code. Une fois ces critères remplis et validés, le code est automatiquement déployé dans l'environnement de production. Cette automatisation permet aux entreprises de gagner en flexibilité et de mettre plus rapidement de nouvelles fonctionnalités à disposition des utilisateurs.\n\n## Quel est le lien entre la gestion du code source et l'approche CI/CD ?\n\nLa [gestion du code source (SCM)](https://about.gitlab.com/fr-fr/solutions/source-code-management/ \"Gestion du code source\") et l'approche CI/CD constituent la base des pratiques modernes de développement logiciel. Les systèmes SCM, comme [Git](https://about.gitlab.com/blog/what-is-git-the-ultimate-guide-to-gits-role-and-functionality/ \"Qu'est-ce que Git?\"), offrent une solution centralisée pour suivre les modifications, gérer les versions de code et faciliter la collaboration entre les membres de l'équipe. Lorsqu’un développeur travaille sur une nouvelle fonctionnalité ou une correction de bogues, il crée une branche à partir du code source et apporte ses modifications avant de les [fusionner à l'aide des merge requests](https://docs.gitlab.com/ee/user/project/merge_requests/). Cette stratégie de gestion de branches permet à plusieurs développeurs de travailler simultanément sans interférer avec le code de leurs collègues, tout en maintenant une branche principale stable qui contient un code prêt à être déployé dans l'environnement de production.\n\nL'approche CI/CD automatise les étapes de compilation, de test et de validation du code géré par le système SCM à chaque push de modifications. Lorsqu'un développeur soumet ses modifications de code, le système CI/CD récupère automatiquement le code le plus récent, le combine avec le code source existant, puis exécute une série de vérifications automatisées. Celles-ci comprennent généralement la compilation du code, l'exécution de tests unitaires, l'analyse statique du code et la vérification de la couverture de code. En cas d’échec d’une de ces étapes, l'équipe en est immédiatement informée, ce qui lui permet de résoudre les problèmes avant qu'ils n'affectent d'autres développeurs ou qu'ils n’apparaissent dans l'environnement de production. Cette intégration étroite entre le contrôle de version et l'intégration continue crée une boucle de rétroaction constante qui garantit la qualité du code et prévient l'accumulation de problèmes d'intégration.\n\n## Quels sont les avantages de l'approche CI/CD ?\n\n[L'approche CI/CD apporte de nombreux avantages qui transforment le développement logiciel moderne](https://about.gitlab.com/blog/ten-reasons-why-your-business-needs-ci-cd/) et réduisent considérablement les délais ainsi que les risques associés à la livraison de nouvelles fonctionnalités et corrections de bogues. Grâce à une boucle de rétroaction continue, les équipes DevSecOps peuvent garantir que leurs modifications sont automatiquement validées sur l'ensemble du code source. \n\nRésultat : des logiciels de meilleure qualité, des cycles de livraison plus courts et des sorties de nouvelles versions plus fréquentes pour répondre rapidement aux besoins des utilisateurs et aux demandes du marché.\n\nAu-delà des aspects techniques, l'approche CI/CD favorise une culture de collaboration et de transparence au sein des équipes de développement logiciel. Grâce à une visibilité en temps réel du statut des compilations, des tests et des déploiements, il est plus facile d'identifier et de résoudre les goulots d'étranglement dans le processus de livraison. L'automatisation offerte par l'approche CI/CD réduit également la charge cognitive des équipes de développement qui peuvent ainsi se concentrer sur l'écriture de code plutôt que sur la gestion de processus de déploiement manuels. La satisfaction et la productivité des équipes s’améliorent, tandis que les risques généralement associés aux étapes critiques du processus de publication de logiciel diminuent. Les équipes peuvent expérimenter de nouvelles idées sans craindre de compromettre le projet, sachant que des mécanismes de contrôle robustes, comme les revues de code rapides, sont intégrés au processus. Elles peuvent rapidement annuler les modifications si nécessaire. L'approche CI/CD encourage donc une culture d'innovation et d'amélioration continue.\n\n### Quelles sont les principales différences entre l'approche CI/CD et le développement traditionnel ?\n\nL'approche CI/CD diffère du développement logiciel traditionnel à bien des égards, notamment en ce qui concerne les points suivants :\n\n**Validations fréquentes du code**\n\nDans le développement traditionnel, les équipes de développement travaillent souvent de manière isolée et intègrent rarement leurs modifications dans le code source. Cette situation entraîne des conflits de merge et d'autres problèmes chronophages. Avec l'approche CI/CD, les équipes effectuent régulièrement des push de validation, parfois plusieurs fois par jour. De cette manière, les conflits de merge sont détectés rapidement et le code source est maintenu à jour.\n\n**Réduction des risques**\n\nLes méthodes de développement logiciel traditionnelles reposent sur des cycles de test à rallonge et une planification rigoureuse avant la sortie de chaque nouvelle version. Bien que ce type de développement ait pour objectif de réduire au maximum les risques, il entrave souvent la capacité à identifier et à résoudre les problèmes. À l’inverse, l'approche CI/CD permet de gérer les risques en appliquant de petites modifications incrémentielles. Ces changements, surveillés de près, peuvent être facilement annulés en cas de problème.\n\n**Tests automatisés et continus**\n\nDans le cadre du développement logiciel traditionnel, les tests sont généralement exécutés à la fin du processus de développement, ce qui peut entraîner des retards de livraison et des corrections de bogues coûteuses. L'approche CI/CD, en revanche, intègre des tests automatisés qui sont exécutés en continu tout au long du processus de développement logiciel et déclenchés à chaque validation de code. Cette approche permet aux équipes de développement de recevoir des retours immédiats et d’implémenter rapidement les correctifs nécessaires.\n\n**Déploiements automatisés, reproductibles et fréquents**\n\nL’automatisation des déploiements dans l’approche CI/CD réduit le stress et les efforts habituellement associés aux déploiements massifs de logiciels. Ce processus automatisé est reproductible dans tous les environnements et garantit ainsi un gain de temps, une réduction des risques d’erreurs ainsi qu'une cohérence accrue dans chaque déploiement.\n\n## Quels sont les principes fondamentaux de l'approche CI/CD ?\n\nL'approche CI/CD constitue un framework essentiel pour la mise en place de processus de livraison de logiciels évolutifs et régulièrement mis à jour. Pour les équipes DevSecOps, une maîtrise parfaite de ses concepts fondamentaux est indispensable. Une solide compréhension des principes CI/CD permet aux équipes d'adapter leurs stratégies et leurs pratiques aux évolutions technologiques, en s’affranchissant des limitations des méthodes traditionnelles. \n\n### Qu'est-ce qu'un pipeline CI/CD ?\n\nUn [pipeline CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/) est une série d'étapes (compilation, test et déploiement) qui automatise et rationalise le processus de livraison de logiciels. [Chaque étape agit comme un mur qualité](https://about.gitlab.com/blog/guide-to-ci-cd-pipelines/) et permet de s'assurer que seul le code validé passe à l'étape suivante. Les premières étapes gèrent les vérifications de base, telles que la compilation et les tests unitaires. Les étapes ultérieures, quant à elles, peuvent inclure des tests d'intégration, de performance et de conformité, ainsi que des déploiements échelonnés dans divers environnements.\n\nLe pipeline peut être configuré de manière à nécessiter des approbations manuelles aux points critiques, par exemple avant le déploiement en production, tout en automatisant les tâches routinières. Les équipes de développement obtiennent ainsi un retour rapide sur l'état de leurs modifications. Cette approche structurée assure la cohérence, réduit les erreurs humaines et fournit une piste d'audit claire du transfert des modifications de code de l'environnement de développement vers l'environnement de production. Les pipelines modernes sont souvent implémentés sous forme de code et peuvent ainsi être contrôlés, testés et tenus à jour, de la même manière que le code applicatif.\n\nVoici d'autres termes associés à l'approche CI/CD qu'il est important de connaître :\n\n* **Validation :** une modification apportée au code\n* **Job :** une série d'instructions qu'un runner doit exécuter\n* **Runner :** un agent ou serveur qui exécute chaque job individuellement et qui peut se mettre à l'échelle selon les besoins\n* **Étapes :** un mot-clé qui définit certaines phases spécifiques d'un job, comme la phase de « compilation » et de « déploiement ». Les jobs d'une même étape s’exécutent en parallèle. Les pipelines sont configurés à l'aide d'un fichier YAML nommé `.gitlab-ci.yml`, soumis au contrôle de version et situé à la racine du projet.\n\n![Diagramme représentant un pipeline CI/CD](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749673928/Blog/Content%20Images/1690824533476.png)\n\n## Bonnes pratiques pour réussir votre approche CI/CD\n\nVotre maîtrise de l'approche CI/CD dépend grandement des [bonnes pratiques](https://about.gitlab.com/fr-fr/blog/how-to-keep-up-with-ci-cd-best-practices/) que vous mettez en œuvre. \n\n#### Les bonnes pratiques en matière d'intégration continue\n\n* Validez tôt et souvent.\n* Optimisez les étapes du pipeline.\n* Simplifiez et accélérez les compilations.\n* Utilisez les échecs pour améliorer les processus.\n* Assurez-vous que l'environnement de test reflète l'environnement de production.\n\n#### Les bonnes pratiques en matière de livraison continue\n\n* Lancez-vous avec les outils et infrastructures disponibles, puis itérez pour améliorer vos processus.\n* Utilisez le moins d'outils possibles pour optimiser la livraison continue.\n* Surveillez l’avancée des projets en continu afin d’éviter l’accumulation de tickets ou de merge requests.\n* Simplifiez les tests d'acceptation par l'utilisateur et le déploiement vers l'environnement de préproduction grâce à l'automatisation.\n* Automatisez la gestion du pipeline de sortie des nouvelles versions.\n* Mettez en œuvre la surveillance du pipeline pour gagner en visibilité et en productivité. \n\n> ### Pour en savoir plus sur l'approche CI/CD, consultez notre [webinaire « Intro to CI/CD »](https://www.youtube.com/watch?v=sQ7Nw3o0izc).\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/sQ7Nw3o0izc?si=3HpNqIClrc2ncr7Y\" title=\"Intro to CI/CD webinar\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n## Premiers pas avec l'approche CI/CD\n\nPour commencer à utiliser l'approche CI/CD, identifiez un projet simple mais représentatif qui servira de projet pilote. Sélectionnez une application simple avec des exigences de test basiques. Vous pourrez ainsi vous concentrer sur l'apprentissage du fonctionnement des pipelines plutôt que sur des scénarios de déploiement complexes. Assurez-vous que votre code est soumis au [contrôle de version](https://about.gitlab.com/fr-fr/topics/version-control/ \"Qu'est-ce que le contrôle de version ?\") et qu'il comporte des [tests automatisés basiques](https://about.gitlab.com/blog/develop-c-unit-testing-with-catch2-junit-and-gitlab-ci/). Même quelques tests unitaires suffisent pour débuter. L'objectif est de [créer un pipeline basique](https://about.gitlab.com/blog/how-to-learn-ci-cd-fast/) que vous pourrez améliorer progressivement à mesure que vos compétences progressent.\n\nDans le cas de GitLab, le processus commence par la création d'un fichier `.gitlab-ci.yml` dans le répertoire racine de votre projet. Ce fichier YAML définit les étapes de base (comme la compilation, les tests et le déploiement) et les jobs de votre pipeline. Voici un exemple de pipeline simple : l'étape de « Compilation » compile votre code et crée des artefacts, l'étape de « Test » exécute les tests unitaires et l'étape de « Déploiement » effectue le push de votre application vers un environnement de préproduction. GitLab détecte automatiquement ce fichier et commence à exécuter votre pipeline chaque fois que des modifications sont transmises via un push vers votre dépôt. La plateforme fournit des [runners intégrés](https://docs.gitlab.com/runner/) pour exécuter les jobs de votre pipeline, mais vous pouvez également configurer vos propres runners si vous souhaitez davantage de contrôle.\n\nÀ mesure que vous maîtrisez les éléments de base, enrichissez votre pipeline progressivement avec des fonctionnalités plus avancées. Par exemple, ajoutez des contrôles de qualité du code, [le scanning de sécurité](https://docs.gitlab.com/ee/user/application_security/#security-scanning) ou le déploiement automatisé du nouveau code en production. La plateforme DevSecOps de GitLab inclut des fonctionnalités telles que la [gestion de la conformité](https://about.gitlab.com/blog/meet-regulatory-standards-with-gitlab/), les [variables de déploiement](https://about.gitlab.com/fr-fr/blog/demystifying-ci-cd-variables/) et les portes d'approbation manuelle que vous pouvez intégrer à mesure que votre pipeline évolue. Soyez attentif à la durée d'exécution du pipeline et exécutez dans la mesure du possible des jobs en parallèle. Pensez à ajouter des notifications et un traitement approprié des erreurs afin que les membres de l'équipe soient rapidement informés en cas d’échec de pipeline. Commencez à documenter les problèmes que vous rencontrez le plus souvent et les solutions adoptées. Ces données seront très utiles quand votre équipe s'agrandira.\n\n> ### Vous souhaitez en savoir plus sur l'approche CI/CD ? Inscrivez-vous à notre [cours GitLab University gratuit sur l'approche CI/CD](https://university.gitlab.com/courses/continuous-integration-and-delivery-ci-cd-with-gitlab).\n\n## Sécurité, conformité et approche CI/CD\n\nL'un des plus grands avantages de l'approche CI/CD est la possibilité d'intégrer des contrôles de sécurité et de conformité réguliers, et ce dès les premières étapes du cycle de développement logiciel. Dans GitLab, les équipes peuvent utiliser la configuration `.gitlab-ci.yml` pour déclencher automatiquement des scans de sécurité à plusieurs étapes, de la validation initiale du code à son déploiement en production. Les fonctionnalités d'analyse des conteneurs, d'analyse des dépendances et de scanning de sécurité ([Test dynamique de sécurité des applications](https://docs.gitlab.com/ee/user/application_security/dast/) et [Analyseur Advanced SAST de GitLab](https://about.gitlab.com/blog/gitlab-advanced-sast-is-now-generally-available/)) de la plateforme peuvent être configurées pour s'exécuter automatiquement à chaque modification de code afin de rechercher les vulnérabilités, les violations des exigences de conformité et les erreurs de configuration de sécurité. L'API de la plateforme permet l'intégration avec des [outils de sécurité externes](https://about.gitlab.com/blog/integrate-external-security-scanners-into-your-devsecops-workflow/), tandis que les fonctionnalités de couverture des tests garantissent que les tests de sécurité répondent aux seuils requis.\n\nLes rapports de test de sécurité de GitLab fournissent des informations détaillées sur les découvertes de vulnérabilités afin de remédier rapidement aux problèmes de sécurité avant qu'ils n'atteignent l'environnement de production. Le tableau de bord relatif à la sécurité fournit une vue centralisée des vulnérabilités détectées dans les différents projets, tandis que des [stratégies de sécurité peuvent être appliquées](https://about.gitlab.com/blog/how-gitlab-supports-the-nsa-and-cisa-cicd-security-guidance/) via les approbations de merge request et les portes dans les pipelines. GitLab offre plusieurs niveaux de gestion des secrets pour protéger les données sensibles tout au long du processus CI/CD, y compris des journaux d'audit permettant de suivre l'accès à ces secrets. De plus, un contrôle d'accès basé sur les rôles (RBAC) garantit que seuls les utilisateurs autorisés peuvent consulter ou modifier les données de configuration sensibles.\n\nGitLab prend également en charge la génération de [nomenclatures logicielles (SBOM)](https://about.gitlab.com/fr-fr/blog/the-ultimate-guide-to-sboms/), qui fournissent un inventaire complet de l'ensemble des composants logiciels, dépendances et licences dans une application. Elles permettent aux équipes d'identifier et de corriger rapidement les vulnérabilités, ainsi que de se conformer aux exigences réglementaires.\n\n## Approche CI/CD et cloud\n\nLa plateforme CI/CD de GitLab offre une intégration robuste avec les principaux fournisseurs de services cloud, notamment [Amazon Web Services](https://about.gitlab.com/fr-fr/partners/technology-partners/aws/), [Google Cloud Platform](https://about.gitlab.com/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci/) et [Microsoft Azure](https://docs.gitlab.com/ee/install/azure/). Les équipes de développement logiciel peuvent ainsi automatiser leurs déploiements cloud directement à partir de leurs pipelines. Grâce aux intégrations cloud de GitLab, elles peuvent également gérer les ressources cloud, déployer des applications et surveiller les services cloud directement depuis l'interface de GitLab. Les templates de déploiement cloud intégrés et les fonctionnalités [Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/) de la plateforme réduisent considérablement la complexité des déploiements cloud. Les membres de l'équipe peuvent ainsi se concentrer sur le développement d'applications plutôt que sur la gestion de l'infrastructure. Pour les entreprises qui souhaitent automatiser leur infrastructure informatique à l'aide de [GitOps](https://about.gitlab.com/fr-fr/topics/gitops/ \"Qu'est-ce que GitOps ?\"), GitLab propose l'[intégration Flux CD](https://about.gitlab.com/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab/).\n\nLes fonctionnalités cloud de GitLab vont au-delà de la simple automatisation des déploiements. L'[intégration Kubernetes](https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/ \"Qu'est-ce que Kubernetes ?\") à la plateforme GitLab permet aux équipes de gérer l'orchestration des conteneurs entre plusieurs fournisseurs de services cloud. De plus, les [options d'installation cloud-native de GitLab](https://about.gitlab.com/fr-fr/topics/ci-cd/cloud-native-continuous-integration/) permettent à la plateforme elle-même de fonctionner dans des environnements cloud. Grâce à ces fonctionnalités cloud-native, les équipes peuvent mettre en œuvre des runners à mise à l'échelle automatique qui provisionnent dynamiquement les ressources cloud pour l'exécution de pipelines afin d'optimiser les coûts et les performances. Enfin, l'intégration de la plateforme avec les services de sécurité des fournisseurs de services cloud garantit le respect des exigences de sécurité et de conformité tout au long du processus de déploiement.\n\nPour les environnements multicloud, GitLab fournit des workflows et des outils cohérents, quel que soit le fournisseur de services cloud sous-jacent. Les équipes de développement peuvent utiliser les fonctionnalités de gestion de l'environnement de GitLab pour gérer différentes configurations cloud dans les environnements de développement, de préproduction et de production. La prise en charge de l'[Infrastructure as Code (IaC)](https://docs.gitlab.com/ee/user/infrastructure/iac/) de la plateforme GitLab, en particulier son intégration native avec Terraform, permet aux équipes de développement de contrôler les versions et d'automatiser le provisionnement de leur infrastructure cloud. Les fonctionnalités de surveillance et d'[observabilité](https://about.gitlab.com/fr-fr/blog/observability-vs-monitoring-in-devops/ \"Qu'est-ce que l'observabilité ?\") de GitLab s'intègrent aux indicateurs des fournisseurs de services cloud, offrant une visibilité complète de l'intégrité des applications et de l'infrastructure dans les différents environnements cloud.\n\n## Pipeline CI/CD avancé\n\nL'approche CI/CD a connu une évolution significative qui va bien au-delà de la simple construction et du déploiement de pipelines. Dans les mises en œuvre avancées, elle implique une orchestration sophistiquée des tests automatisés, du scanning de sécurité, du provisionnement de l'infrastructure, de l'IA et de bien d'autres aspects. Voici quelques stratégies CI/CD avancées pour aider les équipes d'ingénierie à améliorer leurs pipelines et à résoudre les problèmes qui surviennent, même lorsque la complexité de l'architecture augmente.\n\n### Réutilisation et automatisation des pipelines CI/CD\n\nGitLab révolutionne les pratiques des équipes de développement logiciel et de gestion des pipelines CI/CD en introduisant deux innovations majeures : le [catalogue CI/CD](https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/) et [CI/CD Steps](https://about.gitlab.com/blog/introducing-ci-cd-steps-a-programming-language-for-devsecops-automation/). Ce dernier est un nouveau langage de programmation expérimental dédié à l'automatisation DevSecOps. Le catalogue CI/CD est une plateforme centralisée où les équipes peuvent découvrir, réutiliser et optimiser les différents composants CI/CD. Ces derniers fonctionnent comme des blocs de construction réutilisables et à usage unique qui simplifient la configuration des pipelines au sein des workflows CI/CD. Parallèlement, CI/CD Steps offre la possibilité de gérer des workflows complexes en permettant aux équipes de configurer les entrées et sorties pour chaque job CI/CD. Avec le catalogue CI/CD et CI/CD Steps, les équipes DevSecOps peuvent facilement standardiser l'approche CI/CD et ses composants, et ainsi simplifier le processus de développement et de maintenance des pipelines CI/CD.\n\n> Pour en savoir plus, consultez notre [FAQ sur le catalogue CI/CD](https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/) et notre [documentation sur CI/CD Steps](https://docs.gitlab.com/ee/ci/steps/).\n\n### Dépannage des pipelines avec l'IA\n\nBien qu'une défaillance des pipelines CI/CD soit possible, le dépannage rapide du problème peut considérablement réduire son impact. L'analyse des causes profondes de [GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/ \"Qu'est-ce que GitLab Duo ?\"), l'une des fonctionnalités alimentées par l'IA, élimine les hypothèses en [déterminant la cause profonde de l'échec d'un pipeline CI/CD](https://about.gitlab.com/fr-fr/blog/quickly-resolve-broken-ci-cd-pipelines-with-ai/ \"Échecs de pipelines CI/CD\"). Lorsqu'un pipeline échoue, GitLab fournit des job logs détaillés, des messages d'erreur et des traces d'exécution qui indiquent exactement où et pourquoi l'échec s'est produit. L'analyse des causes profondes utilise ensuite l'IA pour suggérer une solution.\n\nDécouvrez la fonctionnalité d'analyse des causes profondes de GitLab Duo en action :\n\n\u003C!-- blank line -->\n\n\u003Cfigure class=\"video_container\">\n\u003Ciframe src=\"https://www.youtube.com/embed/sTpSLwX5DIs?si=J6-0Bf6PtYjrHX1K\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n## Comment migrer son code vers un pipeline GitLab CI/CD ?\n\nLa migration vers la plateforme DevSecOps de GitLab et son pipeline CI/CD intégré implique l'analyse systématique de vos configurations de pipeline, dépendances et processus de déploiement existants pour les mapper aux fonctionnalités et à la syntaxe équivalentes de GitLab. \n\nConsultez nos ressources pour faciliter votre migration vers GitLab CI/CD : \n\n* [Migration de Bamboo vers GitLab CI/CD](https://about.gitlab.com/blog/migrating-from-bamboo-to-gitlab-cicd/)\n* [De Jenkins à GitLab : le guide complet pour moderniser votre environnement CI/CD](https://about.gitlab.com/blog/jenkins-gitlab-ultimate-guide-to-modernizing-cicd-environment/)\n* [Migrer de GitHub Advanced Security vers GitLab Ultimate : notre guide complet](https://about.gitlab.com/fr-fr/blog/migration-guide-github-advanced-security-to-gitlab-ultimate/)\n\n## Témoignages d'entreprises leaders dans leur domaine\n\nCes entreprises de premier plan ont migré vers GitLab et profitent des innombrables avantages de l'approche CI/CD. Découvrez leurs témoignages.\n\n* [Lockheed Martin](https://about.gitlab.com/fr-fr/customers/lockheed-martin/)\n* [Indeed](https://about.gitlab.com/fr-fr/blog/how-indeed-transformed-its-ci-platform-with-gitlab/)\n* [CARFAX](https://about.gitlab.com/fr-fr/customers/carfax/)\n* [HackerOne](https://about.gitlab.com/fr-fr/customers/hackerone/)\n* [Betstudios](https://about.gitlab.com/blog/betstudios-cto-on-improving-ci-cd-capabilities-with-gitlab-premium/)\n* [Thales et Carrefour](https://about.gitlab.com/blog/how-carrefour-and-thales-are-evolving-their-ci-cd-platforms/)\n\n## Tutoriels CI/CD\n\nDevenez un expert des pipelines CI/CD à l'aide de ces tutoriels : \n\n* [Intégration continue : créez votre premier pipeline CI avec GitLab](https://about.gitlab.com/fr-fr/blog/basics-of-gitlab-ci-updated/)\n* [Configuration de votre premier composant GitLab CI/CD](https://about.gitlab.com/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component/)\n* [GitLab CI/CD : comment créer facilement un pipeline pour un monorepo](https://about.gitlab.com/fr-fr/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way/)\n* [Déployer en continu dans de multiples environnements avec les pipelines enfants](https://about.gitlab.com/fr-fr/blog/using-child-pipelines-to-continuously-deploy-to-five-environments/)\n* [Refactorisation d'un template CI/CD en composant CI/CD](https://about.gitlab.com/blog/refactoring-a-ci-cd-template-to-a-ci-cd-component/)\n\n> ### Commencez un [essai de GitLab Ultimate](https://gitlab.com/-/trials/new) et essayez gratuitement GitLab CI/CD.",[109,9,688,687,773,799],{"slug":1201,"featured":91,"template":692},"ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation","content:fr-fr:blog:ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation.yml","Ultimate Guide To Ci Cd Fundamentals To Advanced Implementation","fr-fr/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation.yml","fr-fr/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation",{"_path":1207,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1208,"content":1214,"config":1221,"_id":1223,"_type":14,"title":1224,"_source":16,"_file":1225,"_stem":1226,"_extension":19},"/fr-fr/blog/unlocking-agile-excellence-gitlab-epics-for-seamless-portfolio-management",{"title":1209,"description":1210,"ogTitle":1209,"ogDescription":1210,"noIndex":6,"ogImage":1211,"ogUrl":1212,"ogSiteName":674,"ogType":675,"canonicalUrls":1212,"schema":1213},"Améliorer la gestion de portefeuille avec les epics multi-niveaux de GitLab","Découvrez comment les epics multi-niveaux de GitLab révolutionnent la gestion de portefeuille Agile, offrant une approche structurée mais flexible pour une planification stratégique et une exécution efficace.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098713/Blog/Hero%20Images/Blog/Hero%20Images/agile_agile.png_1750098713577.png","https://about.gitlab.com/blog/unlocking-agile-excellence-gitlab-epics-for-seamless-portfolio-management","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Améliorer la gestion de portefeuille avec les epics multi-niveaux de GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Amanda Rueda\"},{\"@type\":\"Person\",\"name\":\"Melissa Ushakov\"}],\n        \"datePublished\": \"2024-02-06\",\n      }",{"title":1209,"description":1210,"authors":1215,"heroImage":1211,"date":1218,"body":1219,"category":1109,"tags":1220},[1216,1217],"Amanda Rueda","Melissa Ushakov","2024-02-06","Dans le paysage en constante évolution du développement de logiciels, le succès des organisations repose essentiellement sur une [gestion de portefeuille](https://about.gitlab.com/fr-fr/solutions/agile-delivery/ \"Gestion de portefeuille GitLab\") efficace. Pour mener à bien votre stratégie commerciale, il est crucial de faire les bons choix, d'allouer des ressources de manière optimale et d'atténuer les risques. Les capacités de gestion de portefeuille de GitLab offrent une approche structurée mais flexible pour aligner la stratégie et l'exécution.\n\nDans cet article de blog, nous explorerons les avantages des epics multi-niveaux de GitLab et leur rôle central dans la gestion de portefeuille Agile.\n\n## Comprendre les epics multi-niveaux de GitLab\n\nLes epics multi-niveaux de [GitLab](https://about.gitlab.com/fr-fr/ \"Plateforme GitLab\") permettent aux organisations d'organiser leur travail selon une structure hiérarchique qui offre une vue claire et détaillée des projets et de leurs interdépendances. De cette manière, les équipes peuvent prendre des décisions éclairées, anticiper les défis potentiels et optimiser leurs workflows pour gagner en efficacité et mener à bien leurs projets.\n\nContrairement à d'autres outils, GitLab permet d'imbriquer les epics sur un maximum de sept niveaux, à l'échelle de différents groupes et projets, ce qui permet une coordination interfonctionnelle efficace.\n\n![epics portfolio management - image 1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098728/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750098727863.png)\n\n## Quels sont les avantages des epics multi-niveaux dans la gestion de portefeuille ?\n\nVoici quatre avantages des epics multi-niveaux dans la gestion de portefeuille.\n\n### 1. Une compatibilité flexible avec les frameworks Agile\n\nLes epics s'adaptent sans difficultés aux divers Scaled Agile Frameworks (SAFe), ce qui permet aux équipes d'ajuster GitLab à leur méthode de travail préférée. Avec leur conception flexible, les epics multi-niveaux permettent de représenter différents éléments de travail de planification de niveau supérieur avec une configuration minimale.\n\nCette adaptabilité permet aux équipes d'utiliser efficacement GitLab pour les workflows de planification de produits, sans avoir à effectuer une configuration approfondie. Elles peuvent ainsi consacrer davantage de temps à la planification stratégique et moins à la configuration des outils.\n\n### 2. Une répartition granulaire du travail\n\nLes epics multi-niveaux de GitLab permettent aux organisations de décomposer les projets complexes en composants plus petits et gérables. Ainsi, les équipes peuvent identifier des itérations plus petites, qui permettent la création plus rapide et plus fréquente de valeur tangible pour les utilisateurs.\n\nLes epics de niveau supérieur fournissent une vue d'ensemble stratégique qui peut s'étendre sur plusieurs années, tandis que les epics plus proches des livrables peuvent généralement être complétés en quelques sprints. Les epics peuvent être divisés en tickets et en tâches afin de combiner les objectifs stratégiques avec des livrables plus tactiques.\n\n![epics portfolio management - image 2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098728/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750098727864.png)\n\n### 3. Une visibilité et une collaboration en temps réel\n\nLes epics de GitLab offrent une visibilité en temps réel sur l'avancement des projets et favorisent une collaboration efficace en équipe. GitLab offre une traçabilité inégalée, avec des mises à jour automatiques de la progression des epics, basées sur l'activité DevSecOps en aval pour les éléments de travail connectés. Ce qui permet aux parties prenantes de prendre des décisions éclairées sur la base des informations les plus à jour, d'allouer efficacement les ressources et d'adopter une approche proactive de la gestion des délais de livraison des produits.\n\n![epics portfolio management - image 3](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098728/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750098727866.png)\n\n### 4. Une planification inter-équipes\n\nLes epics multi-niveaux simplifient le processus pour une planification efficace entre différentes équipes en fournissant une vue centralisée de la répartition du travail et des dépendances dans toute l'organisation, garantissant ainsi une collaboration et une coordination cohérentes des efforts. Toutes les informations nécessaires aux processus de planification Agile et à l'exécution du travail de votre organisation sont ainsi regroupées dans un seul et même outil.\n\n![epics portfolio management - image 4](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098728/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750098727871.png)\n\nLes outils de gestion de portefeuille de GitLab, notamment les epics multi-niveaux, garantissent que la planification stratégique s'aligne parfaitement sur l'exécution des projets, permettant ainsi aux équipes de gérer la complexité du développement logiciel avec précision et efficacité, tout en se concentrant sur les objectifs commerciaux globaux.\n\nPrêt à exploiter pleinement le potentiel des epics multi-niveaux de GitLab et à améliorer votre expérience de la gestion de portefeuille ? Consultez nos [options d'abonnement](https://about.gitlab.com/fr-fr/pricing/ \"Abonnements GitLab\") et découvrez l'ensemble de nos fonctionnalités conçues pour favoriser la collaboration, améliorer la transparence et assurer le succès de vos projets.\n",[1111,9,688],{"slug":1222,"featured":91,"template":692},"unlocking-agile-excellence-gitlab-epics-for-seamless-portfolio-management","content:fr-fr:blog:unlocking-agile-excellence-gitlab-epics-for-seamless-portfolio-management.yml","Unlocking Agile Excellence Gitlab Epics For Seamless Portfolio Management","fr-fr/blog/unlocking-agile-excellence-gitlab-epics-for-seamless-portfolio-management.yml","fr-fr/blog/unlocking-agile-excellence-gitlab-epics-for-seamless-portfolio-management",{"_path":1228,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1229,"content":1235,"config":1240,"_id":1242,"_type":14,"title":1243,"_source":16,"_file":1244,"_stem":1245,"_extension":19},"/fr-fr/blog/what-is-an-okr-definition",{"title":1230,"description":1231,"ogTitle":1230,"ogDescription":1231,"noIndex":6,"ogImage":1232,"ogUrl":1233,"ogSiteName":674,"ogType":675,"canonicalUrls":1233,"schema":1234},"OKR : la méthode pour définir ses objectifs et les atteindre","Dans cet article, découvrez la méthode OKR, comment l′appliquer au sein de votre organisation pour mieux définir vos objectifs et les atteindre.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665726/Blog/Hero%20Images/OKR.jpg","https://about.gitlab.com/blog/what-is-an-okr-definition","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"OKR : la méthode pour définir ses objectifs et les atteindre\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab France Team\"}],\n        \"datePublished\": \"2024-10-02\",\n      }",{"title":1230,"description":1231,"authors":1236,"heroImage":1232,"date":1237,"body":1238,"category":10,"tags":1239},[794],"2024-10-02","Créés par le 3ème employé d′Intel, [Andrew Grove](https://fr.wikipedia.org/wiki/Andrew_Grove \"Biographie de Andrew Grove\"), dans les années 1970, les Objectifs & Résultats Clés (OKR) sont une méthode de gestion pour aider les organisations à atteindre leurs objectifs. Grove a conçu une idée simple mais puissante : définir où l′on veut aller (Objectif) et mesurer le progrès réalisé pour y parvenir (Résultats Clés). Il a contribué à la popularisation de la méthode dans son livre paru en 1995, « High Output Management ». Par la suite, [John Doerr](https://fr.wikipedia.org/wiki/John_Doerr \"Biographie de John Doerr\"), ancien employé d′Intel, introduit cette méthode chez Google et développe la notoriété des OKR à travers son livre « Measure What Matters » ( « Mesurez ce qui compte »). \n\nDans cet article, découvrez les principes de la méthode OKR et comment l′appliquer à votre organisation. \n\n## OKR (Objective and Key Results) : définition\n\nConcrètement, que sont les OKR ? Il s’agit d’une méthode pour définir des objectifs clairs au sein d′une entreprise. Les objectifs sont associés simultanément à des résultats spécifiques et mesurables. Ces indicateurs permettent de suivre le progrès et la réalisation de ces objectifs. \n\nLes OKR sont donc composés de deux éléments : \n- __Les objectifs :__ une description précise, courte et qualitative des objectifs à atteindre.\n- __Les résultats clés__ : l′ensemble des indicateurs pour attester du progrès et de l'atteinte de l'objectif.\n\nGrâce aux résultats clés, les entreprises suivent les progrès des différentes équipes avec objectivité. Généralement, elles définissent des OKR globaux et des OKR pour chaque service. Ceux-ci dépendent des priorités de chaque entreprise en fonction du contexte, des concurrents, des clients actuels, du business model ou encore des plans d′évolution. \n\nMais pourquoi définir des objectifs précis pour chaque équipe ? Les OKR par service précisent les points sur lesquels les employés doivent se concentrer. L′entreprise suit donc avec précision son développement, comprend pourquoi elle atteint (ou non) ses objectifs et ajuste sa stratégie en temps réel en fonction des résultats clés obtenus. \n\n> [Essayez GitLab Ultimate gratuitement.](https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/blog&glm_content=default-saas-trial \"Essai gratuit de GitLab. \") \n\n## Comprendre la méthode OKR \n\nAu sein de votre entreprise, la méthode OKR traduit la vision stratégique globale en objectifs actionnables et mesurables pour vos équipes. \n\nOn peut séparer les OKR en trois grandes catégories : \n\n- __les OKR organisationnels__ : ils sont le cap à prendre pour l’entreprise. Les OKR organisationnels traduisent la vision globale. Généralement définis sur une année, ils assurent l’alignement stratégique de toutes les équipes. \n\n- __les OKR tactiques__ : ils concernent les objectifs de chaque équipe de l’entreprise. Définis sur un cycle plus court (mensuel ou trimestriel), l’entreprise reste agile face aux changements et aux résultats de chaque service. \n\n- __les OKR individuels__ : attribués personnellement à chaque employé, ils permettent d′aligner tous les collaborateurs sur la stratégie de son équipe et globale de l′entreprise. \n\n## Pourquoi utiliser la méthodologie OKR ?\n\nLa méthode OKR encourage une culture de la performance, de la transparence et de l′engagement. Elle aligne les objectifs individuels avec la vision de l′entreprise. Voici trois raisons pour lesquelles vous devriez adopter la méthode OKR au sein de votre entreprise. \n\n### 1 – La clarté des objectifs\n\nAvec la méthode OKR, la définition des objectifs doit être précise et concise. Ils sont révélateurs de ce que l'entreprise souhaite accomplir durant le prochain mois ou trimestre. Puisque des indicateurs spécifiques et mesurables s′ajoutent aux objectifs, les équipes comprennent clairement la direction à prendre. \n\n### 2 – La priorisation des projets\n\nAvec la définition d′un résultat à atteindre dans un laps de temps donné, vous déterminez la priorité pour votre équipe. Vous allouez donc les ressources stratégiquement pour atteindre les résultats escomptés. Le management de l′organisation est également plus simple : tout le monde travaille dans la même direction. La cohésion et la productivité de l′entreprise bénéficient de cette priorisation.\n\n### 3 – La mesure des performances\n\nUn objectif sans résultats clés empêche le suivi précis de sa réalisation. Les indicateurs de performance seuls donnent des résultats sans avoir de direction précise, ni de priorité dans l′amélioration de ces performances. Utiliser la méthode OKR est donc une technique optimale pour faire avancer son organisation vers la réalisation de ses objectifs. Elle mesure efficacement les progrès de l′entreprise et permet d′ajuster les actions en conséquence. \n\n## Comment définir et suivre les OKR ?\n\n1. __La vision.__ Tout commence par la définition de votre cap. Qu′est-ce qui est primordial pour votre entreprise ? Vous pouvez aussi prioriser selon le concept du livre « The One Thing » de Gary Keller : quelle est la tâche à faire pour que tout le reste devienne plus facile ou inutile ? Imaginez l′impact souhaité à la fin du mois ou du trimestre. \n\n2. __L′objectif.__ Une fois que votre vision est clarifiée, il est temps de définir un objectif ambitieux avec un laps de temps précis.\n\nExemple : Une équipe DevSecOps souhaite améliorer son temps de réaction aux incidents de sécurité. Son objectif est de réduire de 25 % le délai moyen de résolution des incidents de sécurité au cours du prochain trimestre.\n\n3. __Les résultats clés.__ Ajoutez des résultats clés mesurables. Si besoin, découpez l′objectif en sous-parties auxquelles vous ajoutez un indicateur de performance. Limitez vos résultats clés à 5 au maximum. Trop d'indicateurs perturbent la lecture de l'atteinte de l'objectif et empêchent les équipes de se focaliser sur un aspect particulier à améliorer. \n\nExemple avec cette même équipe DevSecOps, dont les résultats clés définis sont les suivants : \n- Automatiser au moins 40 % des tâches de résolution des incidents de sécurité,\n- Procéder à un examen de sécurité bimensuel,\n- Implémenter les outils de test de sécurité sur le code.\n\nChaque résultat clé est précis et mesurable et se rapporte à l'objectif de réduction du temps de résolution des problèmes de sécurité.\n\n4. __Le suivi.__ Implémentez les outils de suivi les plus pertinents pour visualiser vos progrès. Affichez ces KPIs clairement au sein de votre entreprise et faites part de vos avancées lors des réunions d’équipe. \n\n5. __Les révisions.__ Organisez des révisions régulières, dont la fréquence est à définir selon l′OKR. Cela permet de corriger la stratégie si nécessaire ou de continuer si vous attestez des progrès. Encouragez les membres de l′équipe à donner leur feedback sur l′efficacité des stratégies et les améliorations potentielles.\n\n6. __Fin du cycle.__ Examinez si les résultats clés sont atteints. Tirez des leçons pour les prochains OKR et recommencez. \n\nPour les équipes DevSecOps, ce cycle permet de voir le fruit de leur travail, mais aussi de l'impact réel sur les utilisateurs et l'entreprise.  \n\n## KPI vs OKR : quelles différences ?\n\nLes KPIs se concentrent sur le suivi de la performance, quand les OKR précisent l'objectif de l'entreprise et les résultats quantifiés pour l′atteindre. Voici en quoi ces deux notions sont différentes : \n\n- __Indicateurs clés de performance (KPI) :__ ils mesurent l'efficacité des processus et des résultats de l′existant. \n- __Objectifs et résultats clés (OKR) :__ ils établissent l′objectif de l′organisation ou d'un service et associent des résultats précis à atteindre pour considérer l'objectif comme réussi.\n\n## Méthode OKR avec GitLab\n\nLes équipes DevSecOps ont la possibilité de définir leurs OKR, puis de suivre leurs progrès directement depuis GitLab. Découvrez en vidéo [comment utiliser GitLab pour vos OKR](https://handbook.gitlab.com/handbook/company/okrs/#how-to-use-gitlab-for-okrs \"Comment utiliser GitLab pour vos OKR\") : \n\n\u003C!-- blank line -->\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/OgJI_Yf4zXs?si=fCMeD-yiIPZtovF_\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\u003C!-- blank line -->\n\n*Nota Bene : la fonctionnalité OKR de GitLab est en cours d’expérimentation et n’est pas disponible par défaut. Pour en savoir plus sur les disponibilités de cette fonctionnalité, [consultez notre documentation](https://docs.gitlab.com/ee/user/okrs.html \"Documentation de GitLab sur les OKR\").* \n\n> [Essayez GitLab Ultimate gratuitement.](https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/blog&glm_content=default-saas-trial \"Essai gratuit de GitLab. \") \n\n## FAQ sur les OKR \n\n### MBO vs OKR : quelle est la différence entre les deux ?\n\nUn MBO (Management by Objectives) est fixé sur une période annuelle et se focalise sur l'objectif à atteindre, sans réel indicateur clé associé. Il est fixé par le manager à une personne en privé et représente un facteur de décision concernant l'augmentation de son salaire annuel. Les OKR sont fixés sur une période mensuelle ou trimestrielle. Liés avec les résultats clés et leurs indicateurs, ces objectifs ambitieux et aspirationnels se concentrent sur l'objectif à atteindre et sur les éléments fondamentaux pour y parvenir. \n\n### Quelles sont les erreurs à éviter lors de la définition et du suivi des OKR ?\n\nSi le principe des OKR est simple par définition, sa mise en place présente quelques challenges. Les erreurs les plus communes à éviter lors de la définition et du suivi des OKR sont (liste non-exhaustive) : \n\n- __Définir un trop grand nombre d′OKR.__ Ce type d'objectifs est là pour prioriser ce qui est important pour une entreprise et pour chaque équipe. Multiplier le nombre d′OKR dilue la concentration et rend l'atteinte des objectifs difficile.\n- __Établir des résultats clés non mesurables.__ Le concept des OKR repose sur des résultats permettant d′attester si l′objectif a été atteint. Sans mesure exacte, il est impossible pour une équipe de savoir à quel point elle a progressé. Attention : les résultats clés ne sont pas obligatoirement une tâche à accomplir. Cela peut aussi être une métrique à respecter comme un temps donné, un pourcentage d′accomplissement ou une marge d′erreur maximum. \n- __Ne pas aligner les OKR d′équipe sur les OKR de l′entreprise.__ Les objectifs de chaque équipe découlent du but et de la vision de l′entreprise. Si chaque équipe avance dans son coin, les OKR de l′entreprise deviennent difficiles à atteindre.\n\n### Les OKR sont-ils utiles dans la tech ?\n\nLes OKR proviennent du monde de la tech. Andrew S. Grove a développé le concept chez Intel, repris ensuite par John Doerr chez Google. Cette méthode est donc particulièrement adaptée aux équipes tech et leurs spécificités.",[9,1111],{"slug":1241,"featured":6,"template":692},"what-is-an-okr-definition","content:fr-fr:blog:what-is-an-okr-definition.yml","What Is An Okr Definition","fr-fr/blog/what-is-an-okr-definition.yml","fr-fr/blog/what-is-an-okr-definition",{"_path":1247,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1248,"content":1254,"config":1260,"_id":1262,"_type":14,"title":1263,"_source":16,"_file":1264,"_stem":1265,"_extension":19},"/fr-fr/blog/what-is-open-source",{"title":1249,"description":1250,"ogTitle":1249,"ogDescription":1250,"noIndex":6,"ogImage":1251,"ogUrl":1252,"ogSiteName":674,"ogType":675,"canonicalUrls":1252,"schema":1253},"Open source : définition, avantages et défis","Qu'est-ce que l'open source ? Apprenez comment ce modèle collaboratif transforme le développement logiciel grâce au libre accès et au partage du code.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662973/Blog/Hero%20Images/open-source-definition.jpg","https://about.gitlab.com/blog/what-is-open-source","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Open source : définition, avantages et défis\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab France Team\"}],\n        \"datePublished\": \"2025-04-16\",\n      }",{"title":1249,"description":1250,"authors":1255,"heroImage":1251,"date":1256,"body":1257,"category":1258,"tags":1259},[794],"2025-04-16","Basé sur des principes fondamentaux tels que l'ouverture, le partage des connaissances et l'amélioration continue, l'open source révolutionne le monde du développement logiciel. En réunissant des développeurs du monde entier, l'open source crée un environnement propice à l'innovation, où les idées et les solutions émergent grâce à la diversité des contributions. \n\nDécouvrez dans cet article les principes fondamentaux du développement [open source](https://about.gitlab.com/fr-fr/solutions/open-source/ \"Solutions GitLab pour les projets open source\"). \n\n## Qu’est-ce que l’open source ? \n\nL'open source est un modèle de développement fondé sur la transparence et la collaboration. Contrairement aux logiciels propriétaires, où seul le détenteur des droits peut modifier le code source ou redistribuer le produit, l'open source rend ce code accessible à tous. Les développeurs du monde entier peuvent ainsi l'examiner, l'améliorer et le partager librement, favorisant l'innovation et le progrès collectif.\n\n> [\nEssayez GitLab Ultimate gratuitement](https://about.gitlab.com/fr-fr/free-trial/devsecops/ \"Essai gratuit de GitLab Ultimate\") et commencez à développer des logiciels open source dès aujourd'hui.\n\n## Quels sont les avantages de l'open source ?\n\nBien plus qu'une alternative technologique, l'open source est un modèle offrant de nombreux avantages. Réduction des coûts, accélération de l'innovation, meilleure sécurité des logiciels, ou encore personnalisation, sont autant d'atouts qui peuvent transformer les projets et stimuler la croissance des entreprises.\n\n### Des coûts réduits \n\nÀ l'opposé des solutions propriétaires parfois onéreuses, les logiciels open source se distinguent souvent par leur faible coût, vous dispensant des dépenses traditionnellement associées aux licences et au support technique. Chez GitLab par exemple, les utilisateurs ont la possibilité d’utiliser gratuitement [GitLab Community Edition (CE)](https://about.gitlab.com/fr-fr/install/ce-or-ee/ \"GitLab Community Edition (CE)\") qui est open source. \n\n### Une meilleure transparence\n\nL'accès au code source permet à qui le souhaite d'examiner, de modifier et d'améliorer les logiciels. Pour les développeurs, cette transparence facilite leur compréhension des logiciels, de la manière dont ils sont construits et des failles de sécurité potentielles qu'ils peuvent contenir. Par exemple, le code source de GitLab est disponible publiquement sur GitLab.com et offre aux utilisateurs l'opportunité d’inspecter le code, de comprendre son fonctionnement et même de contribuer activement à son développement.  \n\n### Des logiciels personnalisables \n\nL'open source offre aux entreprises la possibilité d'adapter leurs logiciels à leurs besoins spécifiques, là où les solutions propriétaires limitent souvent cette liberté. Grâce à leur nature modulable, les logiciels open source permettent d'optimiser l'efficacité opérationnelle en s'adaptant précisément aux besoins des entreprises. GitLab illustre cette flexibilité en offrant à tous la possibilité de contribuer de façon traditionnelle, et en offrant également aux entreprises la possibilité de développer des intégrations et des fonctionnalités sur mesure grâce à son [programme Co-Create](https://about.gitlab.com/community/co-create/ \"Programme Co-Create\").\n\n### Une communauté engagée \n\nLes projets open source reposent sur l'engagement d'une communauté qui partage ses connaissances pour résoudre des problèmes ou proposer des améliorations sur les logiciels. GitLab [tire pleinement parti de cet écosystème](https://about.gitlab.com/community/ \"Communauté de GitLab\") en s'appuyant sur une base d'utilisateurs et de développeurs qui enrichissent activement son développement et [partagent leur expertise](https://forum.gitlab.com/ \"Forum de GitLab\"). GitLab collabore également avec d'autres entreprises sur des projets open source comme Git, renforçant son engagement pour l'innovation collective et la création de solutions évolutives.\n\n### Un accélérateur d’innovations\n\nEn réunissant des talents du monde entier autour de projets communs, l'open source devient un puissant moteur d'innovation. Cette synergie stimule l'amélioration continue et l'enrichissement des logiciels grâce à la diversité des compétences partagées. Ce modèle accélère ainsi le développement technologique en rendant les outils open source accessibles à un large public. GitLab, avec son cycle de release mensuel, [intègre régulièrement de nouvelles fonctionnalités et améliorations](https://about.gitlab.com/releases/ \"Releases GitLab\") fondées sur les retours et contributions de sa communauté d'utilisateurs.\n\n### Des logiciels évolutifs\n\nLes logiciels open source reposent souvent sur des normes ouvertes qui [simplifient leur intégration avec d'autres systèmes](https://about.gitlab.com/fr-fr/integrations/ \"Intégrations GitLab\"). Conçus pour s'adapter à divers environnements, ils offrent aux entreprises la possibilité de créer des solutions sur mesure, performantes et évolutives.\n\n### Une sécurité logicielle renforcée\n\nLa sécurité et la fiabilité sont des piliers essentiels des logiciels open source. Grâce à l'examen continu du code par une large communauté de développeurs, les failles de sécurité sont rapidement identifiées et corrigées. Bien que cette approche ne garantisse pas une sécurité absolue, elle favorise grandement la réactivité des équipes de développement face aux vulnérabilités de toutes sortes. GitLab applique ce principe en [s'appuyant sur sa communauté pour renforcer la sécurité de sa plateforme](https://handbook.gitlab.com/handbook/security/product-security/application-security/runbooks/hackerone-process/).\n\n### Un savoir-faire enrichi\n\nLes logiciels open source représentent une mine d'opportunités d'apprentissage pour les développeurs. En s'impliquant dans ces projets, ils peuvent perfectionner leurs compétences et gagner en expérience auprès d'autres professionnels du domaine, enrichissant leur savoir-faire et accélérant leur développement professionnel.\n\nPar exemple, les développeurs peuvent étudier la base de code de GitLab pour apprendre les meilleures pratiques en matière de développement de plateformes DevSecOps. Les membres de l'équipe GitLab participent par ailleurs à des programmes de mentorat comme [Google Summer of Code](https://about.gitlab.com/blog/google-summer-of-code-2024-contribute-to-gitlab-and-git-to-prepare/ \"Google Summer of Code\") et [Outreachy](https://about.gitlab.com/blog/outreachy-sponsorship-winter-2020/ \"Outreachy\") qui permettent d'apprendre aux nouveaux participants comment contribuer à GitLab ou autres logiciels open source comme Git.\n\n### Des logiciels plus qualitatifs\n\nDe nombreux projets open source bénéficient de la contribution de développeurs talentueux. Grâce à leur expertise, le code des logiciels open source est constamment examiné, amélioré et renforcé, ce qui permet de développer des solutions robustes et performantes.\n\n## Quels sont les défis liés à l’open source\n\nExplorer l'univers des logiciels open source peut être aussi stimulant qu'exigeant. De la création de relations solides avec une communauté au renforcement de la sécurité des projets, chaque étape comporte ses propres défis. Pour réussir, il est essentiel de comprendre ces obstacles et de mettre en place des stratégies adaptées.\n\n### Construire une relation solide avec sa communauté \n\nLe succès du développement open source repose sur la capacité à établir et à maintenir une relation solide avec une communauté de développeurs et d'utilisateurs. Cela nécessite des échanges continus afin de comprendre et de répondre à ses attentes. Puisque la majorité des contributeurs sont bénévoles, il est essentiel de coordonner leurs efforts de manière agile et structurée.\n\nPour maintenir leur motivation sur le long terme, notamment pour les contributeurs œuvrant sans contrepartie financière, il est crucial de reconnaître et de valoriser leur travail. Cela peut passer par des mentions officielles (crédits), des opportunités de formation ou d'autres formes de reconnaissances professionnelles. Sans cette valorisation, les contributeurs risquent de se détourner des projets, voire de créer des initiatives parallèles. Bâtir une communauté engagée et durable est donc au cœur du succès de tout projet open source.\n\n### Trouver un équilibre entre les intérêts de la communauté et celle des entreprises\n\nTrouver un équilibre entre les intérêts des entreprises et ceux de la communauté est un défi central dans le développement open source. Les entreprises impliquées dans ces projets ont généralement des objectifs prioritaires. Ces priorités, souvent commerciales, peuvent entrer en conflit avec les attentes plus larges de la communauté, dont les intérêts sont plutôt axés sur l'innovation libre ou la personnalisation des logiciels.\n\nLorsque les décisions semblent trop axées sur les intérêts de l'entreprise, la communauté risque de se sentir exclue, ce qui peut réduire son engagement et limiter ses contributions. Pour éviter ce désengagement, les entreprises doivent partager clairement leurs objectifs et échanger régulièrement avec leur communauté pour garantir la pérennité et le succès à long terme des projets open source.\n\n### Maintenir la sécurité des logiciels\n\nLes logiciels open source sont exposés à certains défis en matière de sécurité. La transparence du code, bien qu'étant l'un de leurs plus grands atouts, peut aussi les exposer à des attaques ciblées, ce qui peut devenir un risque majeur si l'entreprise à l’origine du projet open source ne corrige pas rapidement les failles identifiées. \n\nLes utilisateurs comptent ainsi sur la réactivité de l'entreprise pour garantir la sécurité de leurs systèmes et de leurs données. \n\n## GitLab : un partenaire incontournable pour les projets open source\n\nLes projets open source sont un moteur d'innovation technologique, et choisir la bonne plateforme pour les héberger est essentiel. Grâce à son système de gestion de versions basé sur [Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce que Git ? \"), GitLab permet aux équipes de développement de collaborer efficacement, de suivre les modifications de code et de conserver un historique complet de leurs projets. \n\n### Une suite complète de fonctionnalités collaboratives\n\nGitLab met à disposition de ses utilisateurs une suite complète de fonctionnalités adaptées au développement et à la gestion de projets open source. Parmi ces fonctionnalités figurent le [suivi des tickets](https://docs.gitlab.com/ee/user/project/issues/ \"Tickets GitLab\"), les [merge requests](https://docs.gitlab.com/ee/user/project/merge_requests/ \"merge requests\"), la [revue de code](https://about.gitlab.com/fr-fr/topics/version-control/what-is-code-review/ \"Qu'est-ce qu'une revue de code ? \"), les [wikis](https://about.gitlab.com/fr-fr/blog/get-to-know-the-gitlab-wiki-for-effective-knowledge-management/ \"GitLab Wiki\") et les [GitLab Pages](https://about.gitlab.com/fr-fr/blog/build-a-new-website-in-a-few-easy-steps-with-gitlab-pages/ \"GitLab Pages\"). Ces fonctionnalités permettent aux équipes de suivre l'évolution des projets, de collaborer, de proposer des améliorations, de corriger des bogues et de documenter leurs progrès en temps réel. \n\n### Des pratiques CI/CD au service des projets open source\n\nLes fonctionnalités [CI/CD](https://about.gitlab.com/fr-fr/blog/how-to-keep-up-with-ci-cd-best-practices/ \"Meilleures pratiques CI/CD\") de GitLab sont un atout majeur pour les projets open source. Elles automatisent des étapes clés du développement logiciel, comme les [tests](https://docs.gitlab.com/ee/ci/testing/), la validation du code et le déploiement de nouvelles versions, assurant ainsi une meilleure fiabilité des logiciels open source et un développement accéléré. Chaque contribution est automatiquement testée dans un environnement dédié, ce qui permet de détecter rapidement les erreurs et de corriger les bogues. Cela réduit les risques de défaillances tout en assurant la stabilité des projets. \n\n### Un cycle de développement logiciel sécurisé\n\nGitLab propose une suite complète de fonctionnalités conçues pour aider les développeurs de projets open source à sécuriser leurs logiciels. Parmi ces fonctionnalités, nous retrouvons :\n\n- __Le test statique de sécurité des applications ([SAST](https://docs.gitlab.com/ee/user/application_security/sast/ \"SAST\"))__ qui examine le code source à la recherche de failles de sécurité en amont de la mise en service des logiciels. \n- __Le test dynamique de sécurité des applications ([DAST](https://docs.gitlab.com/ee/user/application_security/dast/ \"DAST\"))__* qui teste les applications en cours d'exécution au sein d’un environnement déployé pour détecter d'éventuelles vulnérabilités encore non repérées. \n- __L'[analyse des dépendances](https://docs.gitlab.com/ee/user/application_security/dependency_scanning/ \"Analyse des dépendances\")__* qui envoie des alertes sur les bibliothèques obsolètes ou vulnérables. Des rapports détaillés sont générés à chaque étape du développement, offrant une visibilité claire sur l'état de la sécurité du projet. Grâce à cela, les développeurs peuvent rapidement éviter ou corriger les composants à risque.\n\n** Fonctionnalité disponible uniquement pour les utilisateurs de GitLab Ultimate.*\n\nEn intégrant ces fonctionnalités directement dans le [pipeline CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Pipeline CI/CD\"), GitLab réduit le risque d'erreurs humaines et accélère l’identification et la correction des vulnérabilités. Cette approche permet ainsi aux développeurs de projets open source de maintenir un niveau élevé de sécurité tout au long du cycle du développement logiciel. \n\n### Une gestion de projet Agile\n\nGitLab met à disposition des équipes de développement un certain nombre de fonctionnalités pour faciliter la gestion des projets open source comme les [tableaux de tickets](https://docs.gitlab.com/ee/user/project/issue_board.html \"Tableaux de tickets\"), les [listes des jalons](https://docs.gitlab.com/ee/user/project/milestones/ \"Listes des jalons\") ou encore le [suivi du temps](https://docs.gitlab.com/ee/user/project/time_tracking.html \"Suivi du temps\"). Ces dernières permettent de voir facilement les tâches à réaliser, de suivre l'avancement des projets en fixant des échéances claires, mais aussi d’évaluer la charge de travail en vue d'optimiser l'utilisation des ressources. En combinant ces fonctionnalités, GitLab permet aux équipes de mieux coordonner leurs efforts, de maintenir un processus de travail fluide et de progresser efficacement dans la réalisation de leurs projets open source.\n\n### Des contributions simplifiées\n\nLes équipes de développement peuvent facilement contribuer au développement de projets open source en les dupliquant ([fork](https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html \"fork\")) et en créant des merge requests. Elles peuvent créer leurs propres copies du code, travailler sur des améliorations ou des correctifs dans des branches distinctes, puis soumettre leurs changements via des merge requests. Ce processus permet aux équipes de réviser et de valider chaque modification avant son intégration dans la branche principale, favorisant ainsi une amélioration continue des logiciels, tout en renforçant la qualité et la stabilité du code.\n\n### Une intégration facilité avec d’autres outils\n\nGitLab facilite considérablement son intégration avec d’autres outils et workflows , permettant aux équipes de développement de créer un environnement personnalisé en fonction des exigences spécifiques de leur projet. Pour en savoir plus, [consultez notre documentation](https://docs.gitlab.com/ee/api/). \n\n## Développez des logiciels open source avec GitLab \n\nL’open source continue de s'imposer dans le monde du développement logiciel. Avec des plateformes [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que DevSecOps ?\") comme GitLab, les équipes de développement disposent de tous les outils et ressources nécessaires au bon développement de leurs logiciels open source.\n\nEn plus d’aider les entreprises à développer des logiciels performants et sécurisés, GitLab fait évoluer continuellement sa plateforme grâce aux contributions et aux retours de ses utilisateurs. En écoutant sa communauté en permanence, GitLab s'adapte aux transformations du développement logiciel, renforçant ainsi sa présence au sein de l'écosystème open source.\n\n> [\nEssayez GitLab Ultimate gratuitement](https://about.gitlab.com/fr-fr/free-trial/devsecops/ \"Essai gratuit de GitLab Ultimate\") et commencez à développer des logiciels open source dès aujourd'hui.","open-source",[1156,883,9],{"slug":1261,"featured":6,"template":692},"what-is-open-source","content:fr-fr:blog:what-is-open-source.yml","What Is Open Source","fr-fr/blog/what-is-open-source.yml","fr-fr/blog/what-is-open-source",{"_path":1267,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1268,"content":1274,"config":1279,"_id":1281,"_type":14,"title":1282,"_source":16,"_file":1283,"_stem":1284,"_extension":19},"/fr-fr/blog/what-is-rest-api",{"title":1269,"description":1270,"ogTitle":1269,"ogDescription":1270,"noIndex":6,"ogImage":1271,"ogUrl":1272,"ogSiteName":674,"ogType":675,"canonicalUrls":1272,"schema":1273},"API REST : définition et présentation complète","Qu'il s'agisse de développer une application de réservation en ligne, une solution de paiement mobile, ou un service de messagerie, il est fort probable que votre équipe se serve d'une API REST.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662858/Blog/Hero%20Images/API-REST.jpg","https://about.gitlab.com/blog/what-is-rest-api","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"API REST : définition et présentation complète\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab France Team\"}],\n        \"datePublished\": \"2024-09-04\",\n      }",{"title":1269,"description":1270,"authors":1275,"heroImage":1271,"date":1276,"body":1277,"category":10,"tags":1278},[794],"2024-09-04","Qu'est-ce qu'une API REST ? Quels sont ses avantages et comment l'utiliser ? Cet article répond aux questions que vous pourriez vous poser sur l'API REST.\n\n__Sommaire__\n- Qu’est-ce qu’une API REST ?\n- Comment fonctionne une API REST ?\n- Quels sont les principes de l'API REST ?\n- Quels sont les avantages d’une API REST ?\n- Utilisations d'une API REST\n\n## Qu’est-ce qu’une API REST ?\n\nL’API REST est une __API (Interface de Programmation d’Application) qui adhère au standard de l'architecture REST (REpresentational State Transfer)__. D’autres appellations désignent l’API REST : API RESTful ou API Web Restful. \n\nUne API, ou interface de programmation d'application, est un logiciel qui permet à deux applications de communiquer entre elles. En informatique, les APIs sont indispensables pour permettre à diverses applications de fonctionner ensemble. \n\nPour créer une API, les développeurs suivent des méthodes et des principes strictement définis, afin que l'ensemble puisse fonctionner. Avant les années 2000, les développeurs utilisaient SOAP (*Simple Object Access Protocol*), un protocole bâti sur XML, complexe à coordonner et gourmand en ressources. Si SOAP est encore utilisé de nos jours, il a été en grande partie remplacé par l'API REST.\n\nConçu en 2000 par l'informaticien américain __Roy Fielding__ au cours de sa thèse de doctorat, REST (*REpresentational State Transfer*) est devenu le modèle dominant de création des APIs, et un jalon incontournable dans le développement du *World Wide Web*. Aujourd'hui, la grande majorité des APIs sont basées sur REST, particulièrement pour offrir des __services Web, interactifs ou mobiles__. Découvrons le fonctionnement des API RESTful, leurs avantages, et leurs applications très variées.\n\n## Comment fonctionne une API REST ? \n\nDans la pratique, l'API REST fonctionne sur le principe de l'environnement client-serveur. L'API RESTful récupère et transmet d'un côté les requêtes d'un utilisateur ou d'une application, et de l'autre les informations rendues par le serveur (application ou base de données). \n\nQuelques notions clés permettent de saisir le fonctionnement d'une API RESTful. __Le client__ est l'entité effectuant une demande. C'est le cas par exemple d'un utilisateur effectuant une recherche au sein d'un catalogue de produits sur son navigateur. __L'API__ se charge de communiquer au serveur la requête, et de renvoyer vers le client les informations demandées. Les informations qui transitent par l'API sont les ressources. __Le serveur__ traite les requêtes. Dans le cas présent, il renverra la liste des produits correspondant aux critères de recherche.\n\nLes requêtes du client sont formulées à travers le __protocole HTTP__ (*HyperText Transfer Protocol*). Voici les principales méthodes et tâches qu'il permet d'accomplir : \n\n- GET : récupérer des données envoyées par le serveur.\n\n- POST : envoyer et publier des informations vers le serveur (les données d'un formulaire d'inscription par exemple).\n\n- PUT : mettre à jour les informations du serveur.\n\n- PATCH : modifier partiellement une ressource existante.\n\n- DELETE : supprimer des informations du serveur.\n\nLes formats de données pour utiliser une API REST sont divers. Le format JSON (*JavaScript Object Notation*) est un format léger, facile à comprendre, et utilisable par de nombreux langages de programmation. XML (*Extensible Markup Language*) permet de gérer des structures de données complexes, et est compatible avec d'autres standards comme le RSS. YAML et HTML sont d'autres formats souvent utilisés pour communiquer les ressources.\n\n## Quels sont les principes de l'API REST ?\n\nUne API REST suit les principes de REST en termes d'__architecture logicielle__. Ces principes créent une ligne directrice permettant de créer des APIs flexibles et légères, parfaitement adaptées à la transmission de données sur internet. \n\nVoici les six principes architecturaux qui régissent une interface REST : \n\n- __Découplage client-serveur.__ Le client connaît seulement l'URI (Uniform Resource Identifier) de la ressource à récupérer. Le serveur interagit uniquement en transmettant ses données via HTTP.\n\n- __Interface uniforme.__ L'architecture REST uniformise la façon dont les informations sont identifiées, gérées et transmises, et fait appel aux hyperliens pour apporter des ressources supplémentaires au client.\n\n- __Code à la demande.__ Le serveur peut transmettre du code au client pour étendre ses fonctionnalités, par exemple pour aider à repérer les erreurs d'un formulaire.\n\n- __Système en couches.__ Une API RESTful peut s'exécuter sur plusieurs serveurs organisés de façon hiérarchique, pour fournir un service plus stable et performant au client.\n\n- __Mise en cache.__ Le serveur REST peut mettre en cache des données pour mieux servir le client, en stockant par exemple les images d'un site pour les resservir ensuite.\n\n- __Absence d'état (Stateless).__ Chaque requête du client est isolée et traitée indépendamment par le serveur. Ainsi, chaque appel doit contenir tous les éléments nécessaires à son traitement.\n\n## Quels sont les avantages d’une API REST ?\n\nEn respectant les exigences du framework de l'API REST, les développeurs profitent des nombreux avantages des API RESTful pour développer des applications efficaces et puissantes : \n\n- __Polyvalence :__ il n'y a aucune restriction sur le langage de programmation à utiliser, et un grand choix pour le format de données (XML, PYTHON, JSON, HTML, etc.)\n\n- __Légèreté :__ les formats de données légers d'une API REST la rendent idéale pour des applications mobiles ou l'Internet des objets (IoT).\n\n- __Portabilité :__ la séparation client-serveur facilite l'échange de données entre les plateformes.\n\n- __Flexibilité :__ cette API n'a pas les lourdeurs d'un protocole, c'est un style architectural.\n\n- __Indépendance :__ les développeurs peuvent travailler séparément sur la partie client ou serveur. \n\nLes avantages de l'API REST se traduisent en gain de productivité et en évolutivité pour les équipes de développement. La mise à l'échelle des systèmes utilisant API REST est facilitée. Les fonctionnalités sont donc plus à même de soutenir une grande charge d'utilisateurs et d'opérations.\n\n### Des contraintes de sécurité\n\nLa création et la gestion d'une API Web RESTful ne sont pas exemptes de défis. L'__authentification__ des utilisateurs peut devenir complexe lorsqu'elle fait appel à plusieurs méthodes différentes, par HTTP, clés API, ou OAuth (*Open Authorization*). Sur des applications larges et complexes, la __multiplication des points de terminaison__ (*endpoints*) entre le serveur et le client peut nuire à la cohérence d'ensemble, de même que les mises à jour si elles laissent d'anciens points de contact encore actifs. \n\nD'autre part, l'interface REST a une faiblesse, car elle transmet par l'URL des points de terminaison des données potentiellement sensibles, comme les identifiants. Sa sécurisation nécessite des mesures spécifiques comme un chiffrement TLS (*Transport Layer Security*), un modèle d'authentification des utilisateurs robuste, et un système de prise en charge des requêtes abusives et de limitation des débits.\n\n## Utilisations d'une API REST\n\nLes développeurs utilisent des API à l'architecture REST pour créer et maintenir de nombreux services. Ainsi, la plupart des applications web et mobiles utilisent des API REST pour accéder et partager des ressources et des informations. Dans le Cloud, cette API permet de connecter rapidement les services des architectures distribuées et hybrides. Au sein des grandes entreprises, elle facilite l'interopérabilité entre les composants des systèmes d'information. \n\nVoici des exemples d'application d'une API REST au sein de sociétés reconnues : \n\n- __Google Search.__ Cette API fournit en temps réel des millions de résultats de recherche sur Google Web et Google Image.\n\n- __Deezer.__ L'API REST de la plateforme de streaming musical permet de retrouver un album ou un artiste dans la base de données de millions de chansons.\n\nActualiser les prix d'un site e-commerce, modifier un champ dans le code source, automatiser des publications, [orchestrer des clusters Kubernetes](https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/ \"Kubernetes, la solution d’orchestration des conteneurs\"), etc. Le champ d'utilisation des APIs RESTful n'a de limites que celle de l'imagination des développeurs et des créateurs d'applications digitales.\n\n### L'API REST de GitLab\n\nGitLab propose une suite complète d'outils et d'APIs pour l'intégration et l'automatisation d'applications externes. Elle comprend GraphQL, les webhooks, des extensions IDE, et naturellement, une API REST. L'authentification de l'API REST GitLab peut se faire de nombreuses manières, par jeton d'accès, OAuth, ou cookies de session par exemple. Les points de terminaisons sont disponibles pour les templates Dockerfile, .gitignore, GitLab CI/CD YAML et Open source. Pour profiter pleinement de toutes les possibilités de développement de vos applications agiles et cloud-natives, consultez la [documentation complète de l'API REST de GitLab](https://docs.gitlab.com/ee/api/rest/index.html \"Documentation sur l'API REST de GitLab\").  \n\n## FAQ sur l'API REST\n\n### REST vs SOAP\n\n__REST et SOAP__ sont deux standards d'API. L'API REST (*REpresentational State Transfer*) reprend les principes architecturaux de REST, qui permettent de faire communiquer un serveur et un client de façon légère et évolutive. L'API REST est le type d'API le plus répandu. Le protocole SOAP (*Simple Object Access Protocol*) est plus ancien, plus rigide et disponible uniquement en format XML. Ce standard historique peut être encore utilisé pour des applications qui requirent un haut niveau de sécurité.\n\n### Quelle est la différence entre REST et API REST ?\n\nREST est un style d'architecture logicielle destiné à faciliter la création de services web et l'échange de données sur internet, en assurant l'interopérabilité entre les ordinateurs et serveurs. L'API Web RESTful est un type d'API qui se base sur les grands principes de REST. \n\n### Quelle est la différence entre REST et RESTful ?\n\nREST est un ensemble de principes architecturaux qui définissent comment les services web doivent être conçus pour être simples, évolutifs et performants. Une API est dite RESTful lorsqu'elle respecte ces principes, notamment l'utilisation des verbes HTTP standard (GET, POST, PUT, DELETE), l'organisation des ressources via des URLs claires et prévisibles, et l'absence d'état côté serveur. En d'autres termes, une API peut être basée sur REST sans être pleinement RESTful si elle ne respecte pas toutes les bonnes pratiques de cette architecture.\n\n### Quels sont les principes d'une API REST ?\n\nUne API REST respecte les six grands principes de l'architecture REST. Ces principes sont l'interface uniforme, le code à la demande, le système en couches, la mise en cache, l'absence d'état et le découplage client-serveur. Ce dernier principe constitue la base de la structure d'une API RESTful ; il est essentiel au succès de cette API dans le monde des applications Web.\n",[883,9],{"slug":1280,"featured":6,"template":692},"what-is-rest-api","content:fr-fr:blog:what-is-rest-api.yml","What Is Rest Api","fr-fr/blog/what-is-rest-api.yml","fr-fr/blog/what-is-rest-api",{"_path":1286,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1287,"content":1293,"config":1299,"_id":1301,"_type":14,"title":1302,"_source":16,"_file":1303,"_stem":1304,"_extension":19},"/fr-fr/blog/why-are-organizations-moving-to-a-unified-devsecops-platform",{"ogTitle":1288,"schema":1289,"ogImage":1290,"ogDescription":1291,"ogSiteName":674,"noIndex":6,"ogType":675,"ogUrl":1292,"title":1288,"canonicalUrls":1292,"description":1291},"Pourquoi choisir une plateforme DevSecOps unifiée ?","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Pourquoi choisir une plateforme DevSecOps unifiée ?\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2025-06-19\",\n      }\n                  ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097063/Blog/Hero%20Images/Blog/Hero%20Images/securitylifecycle-light_securitylifecycle-light.png_1750097063583.png","Découvrez comment GitLab combine des outils et fonctionnalités avancés, une sécurité renforcée, tout en tirant parti de l'IA pour accélérer et optimiser le développement logiciel.","https://about.gitlab.com/blog/why-are-organizations-moving-to-a-unified-devsecops-platform",{"title":1288,"description":1291,"authors":1294,"heroImage":1290,"date":1296,"body":1297,"category":10,"tags":1298},[1295],"Itzik Gan Baruch","2025-06-19","Face aux défis croissants du développement logiciel moderne, de nombreuses entreprises migrent vers le cloud et adoptent des processus DevSecOps. Elles sont cependant confrontées à un défi de taille : les nombreux outils et systèmes hérités ne sont pas adaptés à cette évolution et les obligent souvent à créer des intégrations complexes entre une multitude d'outils pour la gestion des tâches, les pipelines CI/CD, la sécurité, la surveillance, entre autres. Cette mosaïque d’outils entraîne une complexité opérationnelle, des coûts de maintenance élevés et freine la collaboration entre les équipes de développement et celles des opérations. Les développeurs, quant à eux, éprouvent de la frustration, car ils passent constamment d'un outil à l'autre pour un même workflow de développement, de la planification à la production.\n\n![Complexité et coûts opérationnels inhérents à l'intégration de plusieurs outils dans un processus DevSecOps](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097077/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097077287.jpg)\n\n\u003Ccenter>\u003Ci>Degré de complexité de l'intégration de plusieurs outils dans un processus DevSecOps\u003C/i>\u003C/center>\n\n\u003Cbr>\u003C/br>\n\nBonne nouvelle, une solution existe : une plateforme DevSecOps complète offrant une approche unifiée du développement logiciel.\n\nCette plateforme est conçue pour les entreprises opérant dans des environnements cloud et [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps?\") : tous les aspects du développement logiciel (gestion du code, processus CI/CD, gestion des tâches, sécurité, automatisation pilotée par l'IA) s'effectuent depuis une seule interface. Ainsi, tous les workflows sont centralisés, offrant aux équipes de développement et des opérations une collaboration optimisée, une communication rationalisée et une réduction significative des complexités et des perturbations opérationnelles.\n\nEn outre, l'expérience développeur s'améliore considérablement : les équipes d’ingénierie sont beaucoup plus heureuses de travailler avec un produit conçu spécifiquement pour les besoins du développement moderne.\n\nDécouvrez comment GitLab simplifie la gestion de projet, renforce la [sécurité et la conformité](https://about.gitlab.com/fr-fr/solutions/security-compliance/ \"Sécurité et conformité\"), et intègre l’IA pour transformer le développement logiciel et aider les équipes à surmonter les défis courants.\n\n## Gestion de projet Agile intégrée\n\nGitLab fournit une solution holistique qui rassemble toutes les fonctionnalités nécessaires pour la gestion des projets et des tâches. Cette intégration couvre toutes les étapes du développement logiciel, y compris les [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\"). Les équipes peuvent ainsi suivre en temps réel la progression du projet. Les tickets et les epics sont directement liés aux processus d'automatisation. De la planification au déploiement en production, toutes les étapes s'effectuent sans accroc. La transparence entre les équipes est ainsi renforcée, les retards sont réduits et toutes les parties prenantes ont une vision claire de l'état du développement en temps réel.\n\n![Les tickets et les epics sont directement liés aux processus d'automatisation. De la planification au déploiement en production, toutes les étapes s'effectuent sans accroc.](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097077/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097077288.jpg)\n\n## Sécurité intégrée\n\nLa sécurité est au cœur de GitLab avec l'intégration de fonctionnalités de sécurité complètes. La plateforme intègre un large éventail de [scanners de sécurité](https://about.gitlab.com/fr-fr/blog/how-to-integrate-custom-security-scanners-into-gitlab/ \"Qu'est-ce qu'un scanner de securité ?\") automatisés, notamment :\n\n* [L'analyse des dépendances](https://docs.gitlab.com/user/application_security/dependency_scanning/)\n* [Les tests statiques de sécurité des applications (SAST)](https://docs.gitlab.com/user/application_security/sast/)\n* [Les tests dynamiques de sécurité des applications (DAST)](https://docs.gitlab.com/user/application_security/dast/)\n* [La détection des secrets](https://docs.gitlab.com/user/application_security/secret_detection/)\n* [L'analyse des conteneurs](https://docs.gitlab.com/user/application_security/container_scanning/)\n\n![Fonctionnalités de scanning de sécurité intégrées dans le processus CI/CD à différentes étapes du développement](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097077/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097077289.jpg)\n\n\u003Ccenter>\u003Ci>Fonctionnalités de scanning de sécurité intégrées dans le processus CI/CD à différentes étapes du développement\u003C/i>\u003C/center>\n\n\u003Cbr>\u003C/br>\n\nCes contrôles de sécurité sont intégrés à chaque étape du cycle de développement logiciel, y compris dans les pipelines CI/CD, et offrent aux équipes de développement des retours immédiats sur les failles de sécurité potentielles, et ce dès le début du cycle de développement.\n\n## Conformité et exigences réglementaires\n\nAu-delà de la productivité et de l'expérience utilisateur, de nombreuses entreprises, en particulier celles opérant dans les secteurs réglementés tels que les institutions financières ou les grands groupes, doivent s'assurer que leurs processus respectent des normes de sécurité et de conformité strictes. Elles doivent pouvoir appliquer des stratégies pour différents projets, par exemple en rendant obligatoire l'utilisation d'un scanner de sécurité chaque fois qu'un pipeline CI/CD s'exécute sur des branches de code spécifiques (par exemple, les branches principales ou protégées) ou en exigeant des approbations spécifiques avant de fusionner le code dans la branche principale.\n\nTout devient plus facile avec les [frameworks de conformité](https://about.gitlab.com/blog/introducing-custom-compliance-frameworks-in-gitlab/) de GitLab : cette fonctionnalité permet aux entreprises de définir et d'appliquer des stratégies structurées aux projets sélectionnés. Cette approche garantit la conformité en appliquant sans intervention manuelle des exigences réglementaires et de sécurité, tout en maintenant un workflow de développement fluide et efficace.\n\n## Développement alimenté par l'IA\n\n[GitLab Duo](https://about.gitlab.com/fr-fr/gitlab-duo/) offre une assistance pilotée par l'IA à chaque étape du développement logiciel. Par conséquent, aucun outil externe n'est nécessaire. Chaque requête alimentée par l'IA est traitée dans le contexte complet du projet et du code base, ce qui permet de travailler de façon plus intelligente et plus efficace.\n\nL'IA peut effectuer de nombreuses tâches, notamment :\n\n* Générer automatiquement des descriptions de tâches\n* Synthétiser les discussions des tickets pour gagner un temps précieux\n* Enrichir la revue de code\n* Suggérer des améliorations pour optimiser le code\n* Automatiser la génération de tests\n* Détecter et corriger les failles de sécurité\n* Réaliser une analyse des causes profondes en cas d'échec des pipelines CI\n* Garantir le respect de la confidentialité et la sécurité des données\n\nGrâce à sa compréhension des besoins des entreprises opérant dans les secteurs fortement réglementés, en particulier dans le [secteur public](https://about.gitlab.com/fr-fr/solutions/public-sector/) et le [secteur financier](https://about.gitlab.com/fr-fr/solutions/finance/), GitLab offre une plateforme unique qui permet d'exécuter des modèles d'IA dans un environnement sécurisé.\n\n[GitLab Duo Self-Hosted](https://about.gitlab.com/fr-fr/blog/gitlab-duo-self-hosted-enterprise-ai-built-for-data-privacy/ \"GitLab Duo Self-Hosted\") permet de garder un contrôle total sur la confidentialité des données, la sécurité et le déploiement de [grands modèles de langage (LLM)](https://about.gitlab.com/blog/what-is-a-large-language-model-llm/ \"Qu'est-ce qu'un grand modèle de language ?\") dans leur propre infrastructure et garantit ainsi :\n\n* La protection de la confidentialité des données\n* La conformité aux exigences réglementaires\n* Une sécurité maximale\n* Tous les avantages de l’IA, sans dépendre d’un réseau externe ni exposer vos systèmes à des risques\n\n## GitLab, une plateforme moderne et complète\n\nLes entreprises ont besoin d'une plateforme DevSecOps complète pour rationaliser leurs processus, renforcer la sécurité et accélérer l'innovation. C'est précisément ce qu'offre GitLab : une application unique, qui regroupe tous les outils essentiels aux équipes de développement, de sécurité et des opérations, avec une sécurité intégrée et une automatisation alimentée par l'IA.\n\nPour en savoir plus sur GitLab, découvrez nos démonstrations interactives :\n\n* [GitLab Premium et Ultimate avec GitLab Duo](https://gitlab.navattic.com/gitlab-premium-with-duo) : l'assistance au développement alimentée par l'IA\n* [La sécurité dans les pipelines CI/CD](https://gitlab.navattic.com/gitlab-scans) : l'analyse de sécurité intégrée qui protège vos logiciels\n* [Frameworks de conformité](https://gitlab.navattic.com/compliance) : des stratégies appliquées à l'ensemble des projets pour une meilleure gouvernance\n\n> Participez à notre événement virtuel à l'occasion du lancement de GitLab 18 et découvrez ce que vous réserve notre plateforme DevSecOps, notamment le rôle de l'[IA agentique](https://about.gitlab.com/fr-fr/topics/agentic-ai/ \"Qu'est-ce que l'IA agentique?\"). [Inscrivez-vous dès aujourd'hui !](https://about.gitlab.com/fr-fr/eighteen/)",[9,688,799],{"slug":1300,"featured":6,"template":692},"why-are-organizations-moving-to-a-unified-devsecops-platform","content:fr-fr:blog:why-are-organizations-moving-to-a-unified-devsecops-platform.yml","Why Are Organizations Moving To A Unified Devsecops Platform","fr-fr/blog/why-are-organizations-moving-to-a-unified-devsecops-platform.yml","fr-fr/blog/why-are-organizations-moving-to-a-unified-devsecops-platform",{"_path":1306,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1307,"content":1312,"config":1320,"_id":1322,"_type":14,"title":1323,"_source":16,"_file":1324,"_stem":1325,"_extension":19},"/fr-fr/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops",{"config":1308,"title":1309,"description":1310,"ogTitle":1309,"ogDescription":1310,"ogImage":1311},{"noIndex":6},"Indépendance des entreprises et DevSecOps","Découvrez les avantages de GitLab pour renforcer l'indépendance et la transparence de votre infrastructure DevSecOps.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1756500636/wmey6kqzzuhirk88w2de.png",{"title":1313,"description":1314,"authors":1315,"heroImage":1311,"date":1317,"body":1318,"category":684,"tags":1319},"L'indépendance des entreprises : un sujet plus important que jamais en DevSecOps","Dans un contexte où le contrôle des infrastructures de développement soulève de plus en plus d'interrogations, les avantages de GitLab en matière d'indépendance et de transparence n'ont jamais été aussi pertinents.",[1316],"Robin Schulman","2025-09-03","Depuis plus de dix ans, GitLab s'engage en faveur de la transparence, de l'indépendance et d'une approche axée sur les développeurs. Au vu de l'évolution actuelle du secteur, ces aspects sont plus importants que jamais. Dans les entreprises, trois questions sont au cœur des discussions : qui contrôle réellement l'infrastructure de développement ? Comment le code est-il utilisé dans les systèmes d'IA ? Que se passe-t-il lorsque les priorités des fournisseurs ne répondent plus tout à fait aux exigences ?\n\nLe mois dernier, [nous avons annoncé la sortie de GitLab 18.3](https://about.gitlab.com/fr-fr/blog/gitlab-18-3-expanding-ai-orchestration-in-software-engineering/), la dernière version de notre plateforme [DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps ?\") avec l’IA native. Agent Insights, qui fait partie de GitLab Duo Agent Platform, offre une visibilité sur les processus décisionnels des agents. La prise en charge étendue des modèles d'IA signifie qu'il n'y a aucune dépendance vis-à-vis d'un fournisseur. Par ailleurs, des contrôles de gouvernance améliorés permettent d’assurer la conformité dans plusieurs juridictions.\n\nCes nouveautés sont plus que de simples fonctionnalités. Elles témoignent de la transparence, de l'indépendance et de l'approche axée sur les équipes de développement qui caractérisent GitLab. Voici comment cette stratégie se traduit en pratique.\n\n\u003Cdiv style=\"padding:56.25% 0 0 0;position:relative;\">\u003Ciframe src=\"https://player.vimeo.com/video/1115249475?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"Who is GitLab_Robin_090225_FINAL\">\u003C/iframe>\u003C/div>\u003Cscript src=\"https://player.vimeo.com/api/player.js\">\u003C/script>\n\n## Transparence de l'IA à chaque étape du cycle de développement DevSecOps\n\n**Chez GitLab, notre engagement de longue date en faveur de la transparence répond directement à ces préoccupations.** À mesure que l'intelligence artificielle s'intègre dans les workflows de développement, les entreprises s'inquiètent à juste titre de la façon dont leur code et leurs données sont utilisés pour entraîner l'IA.\n\nLancé en avril 2024, le [Centre pour la transparence de l'IA](https://about.gitlab.com/fr-fr/ai-transparency-center/) de GitLab fournit une documentation claire sur nos pratiques en matière de gouvernance des données, de protection de la vie privée et de principes éthiques relatifs à l'IA. Contrairement aux plateformes qui exploitent des fonctionnalités d'IA avec des politiques d'utilisation des données peu claires, GitLab privilégie la transparence pour que ses clients puissent comprendre [exactement comment leurs données sont traitées](https://docs.gitlab.com/fr/user/gitlab_duo/data_usage/), stockées et protégées, et garantit que la plateforme ne les utilise pas pour entraîner l'IA.\n\nNotre approche se distingue également par la flexibilité des modèles et notre indépendance vis-à-vis des fournisseurs. Tandis que certaines plateformes obligent leurs clients à utiliser un seul fournisseur de [grands modèles de langage (LLM)](https://about.gitlab.com/fr-fr/blog/large-language-model/ \"Qu’est-ce qu’un LLM ?\") et créent des dépendances supplémentaires vis-à-vis des fournisseurs et des points de défaillance potentiels, les fonctionnalités d'IA de GitLab s'appuient sur une variété de modèles. Cette approche nous permet de prendre en charge un large éventail de cas d'utilisation et d'offrir à nos clients la flexibilité nécessaire pour s'aligner sur leurs priorités stratégiques.\n\nÀ mesure que nous développons GitLab Duo Agent Platform, nous continuons à prioriser le contrôle des données et le maintien de contrôles humains complets. Par ailleurs, GitLab Duo Self-Hosted offre une souveraineté complète des données avec des options de déploiement air-gapped, des politiques de conservation des données zero-day et la possibilité de traiter toutes les requêtes d'IA au sein de votre propre infrastructure.\n\nEn mai 2024, nous avons élaboré un [plan de continuité IA](https://handbook.gitlab.com/handbook/product/ai/continuity-plan/) que nous mettons régulièrement à jour. Ce dernier contient un engagement de premier plan dans le secteur comme la capacité d'évaluer et de passer à un nouveau modèle dans les 30 jours si un fournisseur modifie ses pratiques en matière de données client. Cette approche proactive de la gestion des risques liés aux fournisseurs d'IA reflète notre engagement en faveur du contrôle client.\n\n## Choix du déploiement et du fournisseur cloud\n\n**Vous devez pouvoir choisir comment et où déployer votre environnement DevSecOps.** Dans ce domaine, GitLab offre une véritable flexibilité de déploiement. Les entreprises peuvent utiliser leurs propres serveurs, le SaaS multilocataire ou GitLab Dedicated, notre solution SaaS monolocataire entièrement gérée, sans compromettre les fonctionnalités ni subir des restrictions artificielles conçues pour favoriser le verrouillage de l'écosystème. GitLab est également compatible avec toutes les solutions cloud, ce qui permet aux clients d'utiliser le fournisseur qui convient le mieux à leurs besoins et à leur environnement.\n\nCette flexibilité s'avère inestimable face à des exigences juridictionnelles complexes et des défis réglementaires toujours plus nombreux. Lorsque de nouvelles lois sur la localisation des données apparaissent, comme nous l'avons vu dans l'Union européenne et d'autres régions, les entreprises qui utilisent GitLab peuvent rapidement adapter leurs stratégies de déploiement sans être limitées par des dépendances liées à leur écosystème.\n\nDu point de vue des achats et de la gestion des risques, l'indépendance de la plateforme offre également un levier crucial dans les négociations de contrat. Les entreprises ne sont pas contraintes de signer des accords de licence restrictifs qui privilégient les intérêts des fournisseurs au détriment des besoins des clients. Cette indépendance devient particulièrement décisive à mesure que les entreprises se montrent plus vigilantes quant au contrôle de leur pile IA.\n\n## Sécurité et conformité : intégrées et toujours prioritaires\n\n**La sécurité et la conformité sont désormais tout aussi importantes que les fonctionnalités de développement et doivent être intégrées à la plateforme, et non ajoutées après coup.** L'approche  de GitLab, basée sur une plateforme unique, offre des avantages significatifs par rapport aux plateformes fragmentées qui s'appuient sur des modules complémentaires tiers pour proposer des fonctionnalités de sécurité et de gouvernance rudimentaires. Cette différence architecturale a des implications importantes en matière de risques juridiques potentiels, d’efficacité opérationnelle et de conformité réglementaire. Chaque outil supplémentaire représente un point de défaillance potentiel supplémentaire, un nouvel ensemble de conditions générales à négocier et une source de risque additionnelle.\n\nGitLab fournit des fonctionnalités intégrées complètes en matière de sécurité et de conformité, y compris des frameworks de conformité personnalisés, des tests dynamiques de sécurité des applications (DAST), des tests d’API par injection de données aléatoires, des tests à données aléatoires guidé par la couverture de code et des tests d'Infrastructure as Code. Ces fonctionnalités sont intégrées en natif à la plateforme, ce qui permet une application cohérente des politiques et réduit la complexité de la conformité et les coûts supplémentaires liés à la gestion de plusieurs outils tiers.\n\nNotre [Centre de conformité](https://docs.gitlab.com/fr/user/compliance/compliance_center/) offre aux équipes un espace centralisé pour gérer les normes et rapports de conformité, les rapports de violations et les frameworks de conformité de leur groupe. Cette approche unifiée de la gestion de la conformité est particulièrement précieuse pour les entreprises qui opèrent dans des secteurs hautement réglementés où les pistes d'audit et la documentation relative à la conformité sont essentielles.\n\n## À l'écoute de notre communauté open source\n\n**Les meilleurs outils sont façonnés par les personnes qui les utilisent.** Notre engagement envers l'[open source](https://about.gitlab.com/fr-fr/blog/what-is-open-source/ \"Qu’est-ce que l’open source ?\") et notre communauté sont au cœur de GitLab depuis notre création. Par exemple, notre [programme Co-Create](https://about.gitlab.com/community/co-create/) est une initiative collaborative qui permet à nos clients de travailler directement avec les équipes d'ingénierie de GitLab afin d’apporter des améliorations à la plateforme, comme des fonctionnalités ou des correctifs.\n\nNotre engagement en faveur de la transparence reste fondamental pour notre activité. Notre [système de suivi des tickets ouverts](https://gitlab.com/groups/gitlab-org/-/issues), qui permet aux utilisateurs de suivre nos progrès et d'échanger directement avec les équipes de GitLab sur les améliorations produit en est un bon exemple. Nous avons récemment lancé notre [initiative « Healthy Backlog »](https://about.gitlab.com/fr-fr/blog/inside-gitlabs-healthy-backlog-initiative/) pour donner à nos clients une visibilité encore plus grande sur notre calendrier et traiter leurs retours plus efficacement.\n\nNotre approche permet non seulement aux entreprises de contribuer à l'innovation open source et d'en tirer parti, mais aussi d'assurer la gouvernance, les pistes d'audit et les contrôles de sécurité requis pour les environnements réglementés.\n\n## Gouvernance des données : vos données, vos règles\n\n**Vous conservez un contrôle total sur vos données et leur traitement.** La gouvernance des données est devenue un facteur de plus en plus critique dans les décisions technologiques des entreprises, en raison d’un ensemble complexe de lois nationales et régionales sur la protection des données et d’une préoccupation croissante concernant le contrôle des données sensibles, comme le code source, les informations client, les initiatives stratégiques et la veille concurrentielle.\n\nAvec GitLab, vous pouvez gérer le niveau d’accès aux fonctionnalités alimentées par l'IA au sein de la plateforme, qui vont au-delà des simples contrôles d'accès pour inclure des normes de chiffrement et des fonctionnalités d'audit conformes aux cadres réglementaires. De plus, le code et les données clients ne sont jamais utilisés pour entraîner des modèles d'IA.\n\n## Le choix est clair\n\nGitLab continue d'être à la pointe de l'innovation en matière de plateforme DevSecOps avec l'IA native, comment en témoigne notre dernière [version 18.3](https://about.gitlab.com/fr-fr/blog/gitlab-18-3-expanding-ai-orchestration-in-software-engineering/), tout en restant fidèle aux engagements d'indépendance et de transparence qui nous ont toujours guidés.\n\nContrôle total ou dépendance vis-à-vis d'un fournisseur ? Transparence ou incertitude ? Engagement envers l'innovation ou simple rouage dans un écosystème plus large ? Pour les clients, le choix est clair.\n\nGitLab fournit les bases d'une transformation numérique durable qui trouve le juste équilibre entre innovation et indépendance afin d'aider les entreprises à créer de la valeur commerciale pour leurs clients.\n\n[Essayez GitLab Ultimate gratuitement avec GitLab Duo dès aujourd'hui.](https://about.gitlab.com/fr-fr/free-trial/)",[686,9,799,689,1156],{"featured":6,"template":692,"slug":1321},"why-enterprise-independence-matters-more-than-ever-in-devsecops","content:fr-fr:blog:why-enterprise-independence-matters-more-than-ever-in-devsecops.yml","Why Enterprise Independence Matters More Than Ever In Devsecops","fr-fr/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops.yml","fr-fr/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops",{"_path":1327,"_dir":247,"_draft":6,"_partial":6,"_locale":7,"seo":1328,"content":1334,"config":1341,"_id":1343,"_type":14,"title":1344,"_source":16,"_file":1345,"_stem":1346,"_extension":19},"/fr-fr/blog/3-surprising-findings-from-our-2024-global-devsecops-survey",{"title":1329,"description":1330,"ogTitle":1329,"ogDescription":1330,"noIndex":6,"ogImage":1331,"ogUrl":1332,"ogSiteName":674,"ogType":675,"canonicalUrls":1332,"schema":1333},"Rapport Global DevSecOps 2024 : ce qu’il faut retenir ","Cette année, notre enquête montre comment les entreprises adaptent leurs priorités d'investissement face à la montée en puissance de l'IA.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1751993603/Blog/Hero%20Images/fy25-global-devsecops-report-blog-image.png","https://about.gitlab.com/blog/3-surprising-findings-from-our-2024-global-devsecops-survey","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Rapport Global DevSecOps 2024 : ce qu’il faut retenir \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dave Steer\"}],\n        \"datePublished\": \"2024-06-25\",\n      }",{"title":1329,"description":1330,"authors":1335,"heroImage":1331,"date":1336,"body":1337,"category":1338,"tags":1339},[856],"2024-06-25","[Notre enquête réalisée auprès de plus de 5 000 professionnels DevSecOps dans le monde entier](https://about.gitlab.com/fr-fr/developer-survey/) révèle que les entreprises réévaluent leurs priorités d'investissement à mesure qu'elles adoptent de nouvelles technologies telles que l'IA, tout en cherchant activement à améliorer l'expérience des développeurs et des développeuses. Explorons ensemble trois des résultats les plus surprenants révélés par notre enquête, ainsi que ce qu'ils pourraient signifier pour les équipes DevSecOps en 2024 et au-delà.\n\n## 1. L'IA met en lumière la complexité des chaînes d'outils\n\nCette année, notre étude s'est penchée sur l'impact spécifique de l'IA sur les perceptions des équipes DevSecOps concernant leurs chaînes d'outils actuelles. Les résultats ont été révélateurs, puisqu'il est désormais largement admis que l'IA peut simplifier le développement logiciel. Toutefois, selon notre enquête, les personnes interrogées utilisant actuellement l'IA semblent éprouver davantage de frustration à l'égard de leurs chaînes d'outils que ceux qui n'en utilisent pas.\n\nPrès des trois quarts (74 %) des répondants dont les entreprises utilisent actuellement l'IA pour le développement logiciel ont exprimé leur intention de consolider leur chaîne d'outils, contre 57 % de ceux qui n'y ont pas recours. Cependant, il n'y a pas de différence notable entre les deux groupes en ce qui concerne le nombre d'outils que les personnes interrogées déclarent réellement utiliser. En d'autres termes, les répondants qui utilisent actuellement l'IA n'utilisent pas plus d'outils, mais ont néanmoins un plus grand besoin de consolider leur chaîne d'outils.\n\nQuel est le lien entre l'IA et le besoin accru de consolidation ? Ce phénomène pourrait être attribué au fait que l'utilisation de diverses solutions ponctuelles avec différents modèles d'IA entraîne un chaos difficile à gérer (et à mesurer) tout au long du cycle de développement logiciel. Cela souligne les inefficacités des chaînes d'outils trop complexes et contre-productives. À mesure que les entreprises intensifient leurs investissements dans l'IA, la nécessité de consolider et de simplifier leur chaîne d'outils complexe pour accroître l'efficacité devient de plus en plus indispensable. Lorsque les chaînes d'outils sont simplifiées et rationalisées, les équipes tirent davantage de valeur de l'IA, car son intégration tout au long du cycle de développement logiciel devient alors plus facile.\n\nD'après l'un des répondants, « le trop grand nombre d'outils (y compris des outils d'IA) et les changements de contexte » représentent les plus grands défis du développement logiciel en 2024, tandis qu'un autre a souligné la « complexité du paysage fragmenté des outils à tous les niveaux ». \n\nUne troisième personne interrogee a mentionné les possibilités offertes par l'IA pour aider les équipes à relever les défis de la chaîne d'outils : « L'IA évolue rapidement, et notre chaîne d'outils actuelle peut être considérablement améliorée grâce aux intégrations d'outils basés sur l'IA. Nous devons mieux former les membres de l'équipe, afin qu'ils sachent comment intégrer efficacement l'IA à leurs tâches quotidiennes. »\n\n## 2. L'IA accélère l'intégration des équipes de développement, mais les entreprises restent préoccupées\n\nParallèlement à l'augmentation du nombre d'outils utilisés par les équipes, notre enquête révèle une augmentation significative du temps nécessaire pour l'intégration des développeurs et développeuses. Cette année, 70 % des répondants déclarent qu'il faut plus d'un mois pour les intégrer à l'entreprise avant qu'ils ne deviennent productifs, contre 66 % en 2023.\n\nS'il n'est pas surprenant que les [assistants de chat](https://about.gitlab.com/blog/gitlab-duo-chat-now-generally-available/) et les [suggestions de code](https://about.gitlab.com/blog/top-tips-for-efficient-ai-powered-code-suggestions-with-gitlab-duo/) alimentés par l'IA puissent accélérer l'intégration des équipes de développement, leur impact est spectaculaire. Les répondants qui utilisent l'IA pour le développement logiciel sont beaucoup plus enclins à affirmer que l'intégration des développeurs et développeuses prend généralement moins d'un mois. \n\nMalgré les avantages évidents de l'IA pour l'expérience des équipes de développement, les personnes interrogées ont exprimé quelques inquiétudes quant à son adoption rapide. Plus de la moitié (55 %) des répondants estiment que l'introduction de l'IA dans le cycle du développement logiciel est risquée, et 49 % craignent que l'IA ne les remplace dans leur rôle actuel au cours des cinq prochaines années.\n\nRachel Stephens, Senior Analyst chez RedMonk, indique qu' « Il faut prendre en compte la sécurité psychologique et la culture d'équipe, car elles influencent la façon dont les personnes perçoivent l'IA. Les individus peuvent redouter les implications de l'IA en matière de sécurité ou de confidentialité, mais ils peuvent également avoir l'impression d'être pris de court s'ils pensent que l'IA menace leurs moyens de subsistance. »\n\nSelon nous, la valeur de l'IA réside dans sa capacité à automatiser les tâches répétitives et à optimiser les processus en arrière-plan. Les équipes peuvent ainsi se concentrer sur la résolution de problèmes ambitieux, l'innovation et la création de valeur. Il ne s'agit pas de remplacer l'humain dans le développement logiciel, mais de le compléter. Pour résumer la situation, une personne interrogée lors de notre enquête évoque le fait que son équipe est confrontée au défi d'encourager et de maintenir la créativité, tout en s'appuyant sur l'IA. « N'oublions pas que l'IA est simplement un outil que les personnes créatives utilisent pour éliminer tout ce qui peut nuire à leur productivité. Elle ne remplace en aucun cas la créativité humaine. »\n\n## 3. Le cloud devient la norme\n\nDans notre enquête, le cloud computing est systématiquement identifié comme la priorité d'investissement informatique depuis plusieurs années. En 2022, le cloud computing figurait en deuxième position, après la sécurité. Il a ensuite pris la première place en 2023. Un changement attendu, compte tenu de la pression croissante exercée sur les entreprises pour qu'elles effectuent leur [transformation numérique](https://about.gitlab.com/blog/lockheed-martin-aws-gitlab/).\n\nToutefois, en 2024, l'importance du cloud computing a fortement diminué, se classant à la cinquième position cette année. Il est toutefois clair que le cloud n'a pas perdu toute son importance. En effet, nous avons constaté une augmentation significative du nombre de personnes interrogées qui déclarent exécuter 50 % ou plus de leurs applications dans le cloud. Ce chiffre indique que, bien que le cloud soit toujours critique pour de nombreuses entreprises, il est devenu la norme, alors même que la liste des priorités des équipes techniques et des responsables informatiques continue de s'allonger.\n\nD'après Rachel Stephens, du cabinet d'étude RedMonk, « les entreprises font face à des contraintes financières et doivent donc établir des priorités dans leurs investissements technologiques. Elles choisissent par exemple de réaffecter une partie de leur budget de transformation numérique, mais pas la totalité, à d'autres domaines, telle que l'IA. »\n\n## Téléchargez notre rapport \n\nPour en savoir plus sur l'IA, la sécurité, l'expérience des équipes de développement et bien d'autres sujets, [téléchargez notre rapport Global DevSecOps 2024](https://about.gitlab.com/fr-fr/developer-survey/).","insights",[1340,9,686,773,798],"developer survey",{"slug":1342,"featured":6,"template":692},"3-surprising-findings-from-our-2024-global-devsecops-survey","content:fr-fr:blog:3-surprising-findings-from-our-2024-global-devsecops-survey.yml","3 Surprising Findings From Our 2024 Global Devsecops Survey","fr-fr/blog/3-surprising-findings-from-our-2024-global-devsecops-survey.yml","fr-fr/blog/3-surprising-findings-from-our-2024-global-devsecops-survey",4,[667,697,720,740,760,783,807,825,844],1759347886984]