[{"data":1,"prerenderedAt":1323},["ShallowReactive",2],{"/fr-fr/blog/keep-git-history-clean-with-interactive-rebase":3,"navigation-fr-fr":537,"banner-fr-fr":972,"footer-fr-fr":980,"blog-post-authors-fr-fr-Tobias Günther":1219,"blog-related-posts-fr-fr-keep-git-history-clean-with-interactive-rebase":1235,"blog-promotions-fr-fr":1260,"next-steps-fr-fr":1314},{"id":4,"title":5,"authors":6,"body":8,"category":516,"date":517,"description":518,"extension":519,"externalUrl":520,"faq":520,"featured":521,"heroImage":522,"meta":523,"navigation":524,"path":525,"seo":526,"slug":530,"stem":531,"tags":532,"template":535,"updatedDate":520,"__hash__":536},"blogPosts/fr-fr/blog/keep-git-history-clean-with-interactive-rebase.md","Comment conserver un historique Git propre avec le rebase interactif",[7],"Tobias Günther",{"type":9,"value":10,"toc":499},"minimark",[11,16,33,45,51,55,70,73,81,91,97,103,135,138,144,147,150,156,162,166,183,186,192,198,216,226,232,237,240,243,249,252,256,262,265,271,278,282,285,288,295,327,330,336,342,363,370,376,379,389,392,395,401,404,408,417,421,425,440,444,459,463,466,487,495],[12,13,15],"h2",{"id":14},"quest-ce-quun-rebase-interactif","Qu'est-ce qu’un rebase interactif ?",[17,18,19,20,24,25,32],"p",{},"Le rebase interactif, également connu sous le nom de ",[21,22,23],"em",{},"Git rebase interactive"," en anglais, est un peu le « couteau suisse » de ",[26,27,31],"a",{"href":28,"rel":29,"title":30},"https://about.gitlab.com/fr-fr/blog/what-is-git/",[],"Qu'est-ce que Git ? ","Git"," car il permet d’avoir accès à différents outils pour de nombreux usages possibles. Son cas d'utilisation principal restant cependant le nettoyage de l'historique des commits locaux.",[17,34,35,36,39,40,44],{},"Soulignons bien ici le mot ",[21,37,38],{},"local",". Le rebase interactif s'utilise uniquement pour ",[41,42,43],"strong",{},"nettoyer votre propre historique de commits en local",", avant par exemple d'intégrer l’une de vos branches de fonctionnalités au sein d’une branche d’équipe.",[17,46,47,48,50],{},"En revanche, le rebase interactif (ou ",[21,49,23],{},") ne doit pas être utilisé sur un historique de commits Git dont le push a déjà été effectué et partagé sur un dépôt distant. Le rebase interactif est l’un de ces outils qui « réécrivent » l'historique Git ; il ne doit donc pas être utilisé sur des commits déjà partagés avec d'autres personnes. Passé ce petit avertissement, voyons quelques exemples pratiques !",[12,52,54],{"id":53},"corriger-un-ancien-message-de-commit-avec-le-rebase-interactif","Corriger un ancien message de commit avec le rebase interactif",[17,56,57,58,62,63,66,67,69],{},"Parfois, vous remarquez une coquille dans un vieux message de commit. Ou bien, vous oubliez de mentionner quelque chose d'utile dans une description. Si l'on parle du tout dernier commit en date, vous pouvez utiliser l'option ",[59,60,61],"code",{},"--amend"," de la commande ",[59,64,65],{},"git commit",". Mais pour les commits plus anciens, le ",[21,68,23],{}," vous permet de les modifier après coup.",[17,71,72],{},"Voici un exemple de message de commit nécessitant une correction :",[17,74,75,80],{},[76,77],"img",{"alt":78,"src":79},"Un mauvais message de commit qui nécessite une correction","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398506/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/bad-commit-message%402x.png","{: .shadow.medium.center}",[17,82,83,84,86,87,90],{},"La première étape dans toute session de ",[21,85,23],{}," consiste à ",[41,88,89],{},"déterminer quelle partie de l'historique des commits"," vous souhaitez manipuler. Pour modifier le commit incorrect dans l'exemple précédent, nous devons démarrer la session à partir de son commit parent.",[17,92,93,80],{},[76,94],{"alt":95,"src":96},"Démarrage de la session de Git rebase interactive","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398510/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/start-at-parent-commit%402x.png",[17,98,99,100,102],{},"Nous pouvons maintenant transmettre le hash du commit de départ à la commande ",[21,101,23],{}," :",[104,105,110],"pre",{"className":106,"code":107,"language":108,"meta":109,"style":109},"language-shell shiki shiki-themes github-light","$ git rebase -i 0023cddd\n","shell","",[59,111,112],{"__ignoreMap":109},[113,114,117,121,125,128,132],"span",{"class":115,"line":116},"line",1,[113,118,120],{"class":119},"s7eDp","$",[113,122,124],{"class":123},"sYBdl"," git",[113,126,127],{"class":123}," rebase",[113,129,131],{"class":130},"sYu0t"," -i",[113,133,134],{"class":123}," 0023cddd\n",[17,136,137],{},"Une fenêtre d’édition va alors s'ouvrir, contenant la liste des commits que vous venez de sélectionner. Ne soyez pas surpris s’ils apparaissent dans l'ordre inverse. Dans une session de rebase interactif, Git applique les commits élément après élément, du plus ancien au plus récent, ce qui signifie que l'inversion de l'ordre est correcte du point de vue de Git.",[17,139,140,80],{},[76,141],{"alt":142,"src":143},"Fenêtre d'édition avec les commits sélectionnés","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398508/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/editor-window-start-ir%402x.png",[17,145,146],{},"Une chose importante à noter à propos de cette fenêtre d’édition : ce n'est pas ici que vous effectuez les manipulations réelles ! Dans cet exemple concret, ce n’est pas à cet endroit que vous modifiez le message du commit. Vous indiquez seulement le commit que vous allez modifier en appliquant un mot-clé d'action. Dans notre cas, comme nous voulons changer le message d'un commit, nous entrons la ligne « reword ». Si vous sauvegardez et fermez la fenêtre d’édition, une nouvelle fenêtre s'ouvrira, contenant l'ancien message de commit.",[17,148,149],{},"Il est temps d'effectuer vos modifications :",[17,151,152,80],{},[76,153],{"alt":154,"src":155},"Modifications du message du commit","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398507/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/correct-commit-message.gif",[17,157,158,159,161],{},"Après avoir sauvegardé et fermé la fenêtre une fois de plus, la session de ",[21,160,23],{}," est terminée et notre ancien message de commit a été corrigé.",[12,163,165],{"id":164},"combiner-plusieurs-commits-en-un-seul-avec-le-rebase-interactif","Combiner plusieurs commits en un seul avec le rebase interactif",[17,167,168,169,171,172,175,176,182],{},"Autre cas d'usage du ",[21,170,23],{}," : lorsque vous souhaitez ",[41,173,174],{},"combiner plusieurs anciens commentaires en un seul",". Bien entendu, la règle d'or du ",[26,177,181],{"href":178,"rel":179,"title":180},"https://about.gitlab.com/fr-fr/topics/version-control/",[],"Qu'est-ce que le contrôle de version ?","contrôle de version"," s'applique : il est généralement conseillé de créer plus de petits commits plutôt que quelques gros. Cependant, nous pouvons parfois nous laisser emporter, et vouloir ensuite fusionner quelques commits en un seul.",[17,184,185],{},"Prenons un exemple concret, où nous allons entreprendre de combiner les commits suivants :",[17,187,188,80],{},[76,189],{"alt":190,"src":191},"Combinaison de plusieurs commits en un seul","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398510/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-selected-commits%402x.png",[17,193,194,195,197],{},"Comme dans notre premier cas, nous commençons par démarrer la session de ",[21,196,23],{}," au niveau du commit parent de celui que nous voulons manipuler.",[104,199,201],{"className":106,"code":200,"language":108,"meta":109,"style":109},"$ git rebase -i 2b504bee\n",[59,202,203],{"__ignoreMap":109},[113,204,205,207,209,211,213],{"class":115,"line":116},[113,206,120],{"class":119},[113,208,124],{"class":123},[113,210,127],{"class":123},[113,212,131],{"class":130},[113,214,215],{"class":123}," 2b504bee\n",[17,217,218,219,225],{},"Une fois encore, une fenêtre d'édition s'ouvre, listant la partie de notre historique de ",[26,220,224],{"href":221,"rel":222,"title":223},"https://about.gitlab.com/fr-fr/blog/keeping-git-commit-history-clean/",[],"Commits Git","commits Git"," que nous souhaitons manipuler.",[17,227,228,80],{},[76,229],{"alt":230,"src":231},"Marquage des lignes avec « squash » ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398510/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-mark-commit%402x.png",[233,234,236],"h3",{"id":235},"marquer-les-lignes-avec-le-mot-clé-squash","Marquer les lignes avec le mot-clé « squash »",[17,238,239],{},"Le mot-clé d’action que nous allons utiliser ici s'appelle « squash ». Pour bien utiliser cette fonction, retenez que la ligne marquée avec le mot-clé « squash » sera combinée avec la ligne directement au-dessus. Ainsi, comme le montre la capture d'écran ci-dessus, nous avons marqué la ligne #2 avec « squash » afin de la combiner avec le commit de la ligne #1 juste au-dessus.",[17,241,242],{},"Nous pouvons maintenant sauvegarder et fermer la fenêtre d’édition ; une nouvelle fenêtre va alors apparaître. Il nous est maintenant demandé de fournir un message de commit pour le nouveau commit créé en combinant ces deux anciens.",[17,244,245,80],{},[76,246],{"alt":247,"src":248},"Ajout d’un nouveau message pour le nouveau commit fusionné","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398510/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-enter-new-message%402x.png",[17,250,251],{},"Enfin, sauvegardez et fermez cette fenêtre d’édition. Un nouveau commit est créé, contenant les modifications des deux anciens commits.",[12,253,255],{"id":254},"corriger-une-erreur-avec-le-rebase-interactif","Corriger une erreur avec le rebase interactif",[17,257,258,259,261],{},"Un autre cas d’usage du ",[21,260,23],{}," consiste à corriger une erreur identifiée dans l'un de vos commits précédents. La nature exacte de l'erreur n'a pas d'importance. Vous pourriez par exemple avoir oublié d'ajouter un changement, de supprimer un fichier, ou simplement de corriger une faute de frappe.",[17,263,264],{},"Dans une telle situation, nous avons tendance à vouloir créer un nouveau commit pour corriger cette erreur. Cela risque toutefois d'ajouter du désordre à votre historique de commits. Il n'est pas idéal d'ajouter un commit de fortune au commit initial juste pour corriger quelques erreurs. Votre historique de commits deviendra rapidement illisible, car jonché de multiples petits commits de correction.",[17,266,267,268,270],{},"C'est là que vous pouvez profiter de « fixup », l'un des outils fournis avec le ",[21,269,23],{},". « Fixup » applique ce commit de réparation rapide et ses changements au commit initial, le corrigeant ainsi. Ensuite, il se débarrasse simplement du commit de fortune.",[17,272,273,277],{},[76,274],{"alt":275,"src":276},"Fonctionnement de « fixup »","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398508/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/diagram-fixup.png","{: .medium.center}",[233,279,281],{"id":280},"comment-utiliser-fixup","Comment utiliser « fixup » ?",[17,283,284],{},"Une fois la fonction « fixup » utilisée, c'est comme si notre commit initial avait toujours été correct. Voyons cela à l'aide d'un exemple.",[17,286,287],{},"La première étape consiste à faire le nécessaire pour corriger le problème. Il peut s'agir d'ajouter un nouveau fichier, de modifier des fichiers existants ou de supprimer ceux qui sont obsolètes. Vous avez simplement à effectuer les modifications qui corrigent l'erreur.",[17,289,290,291,294],{},"L'étape suivante consiste à valider ces modifications au niveau du dépôt, mais avec un petit truc en plus. Au moment du commit, nous allons ajouter ",[59,292,293],{},"--fixup"," et indiquer à Git le hash de notre mauvais commit :",[104,296,298],{"className":106,"code":297,"language":108,"meta":109,"style":109},"$ git add corrections.txt\n$ git commit --fixup 2b504bee\n",[59,299,300,312],{"__ignoreMap":109},[113,301,302,304,306,309],{"class":115,"line":116},[113,303,120],{"class":119},[113,305,124],{"class":123},[113,307,308],{"class":123}," add",[113,310,311],{"class":123}," corrections.txt\n",[113,313,315,317,319,322,325],{"class":115,"line":314},2,[113,316,120],{"class":119},[113,318,124],{"class":123},[113,320,321],{"class":123}," commit",[113,323,324],{"class":130}," --fixup",[113,326,215],{"class":123},[17,328,329],{},"Jetez maintenant un coup d'œil à votre historique de commits. Vous constaterez qu'un commit d'apparence ordinaire a été créé. Mais à y voir de plus près, il s'est passé quelque chose. Le nouveau commit affiche la mention « fixup ! » et il reprend le sujet de notre mauvais commit.",[17,331,332,80],{},[76,333],{"alt":334,"src":335},"Le commit initial et le commit de correction","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398508/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_create-fix-commit%402x.png",[17,337,338,339,341],{},"Enfin, la troisième étape consiste à démarrer la session de ",[21,340,23],{},". Nous sélectionnons à nouveau le commit parent de notre mauvais commit comme point de départ :",[104,343,345],{"className":106,"code":344,"language":108,"meta":109,"style":109},"$ git rebase -i 0023cddd --autosquash\n",[59,346,347],{"__ignoreMap":109},[113,348,349,351,353,355,357,360],{"class":115,"line":116},[113,350,120],{"class":119},[113,352,124],{"class":123},[113,354,127],{"class":123},[113,356,131],{"class":130},[113,358,359],{"class":123}," 0023cddd",[113,361,362],{"class":130}," --autosquash\n",[17,364,365,366,369],{},"Et pour conclure, nous utilisons notre botte secrète : ",[59,367,368],{},"--autosquash",". Cette option nous assure de ne rien avoir à faire au sein de la fenêtre d’édition désormais ouverte. Regardons de plus près la situation :",[17,371,372,80],{},[76,373],{"alt":374,"src":375},"Notre commit de correction est marqué « fixup » et classé à la bonne position","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398509/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_editor%402x.png",[17,377,378],{},"Git a automatiquement effectué deux choses :",[380,381,382,386],"ol",{},[383,384,385],"li",{},"Le commit de correction de fortune est marqué comme « fixup ».",[383,387,388],{},"L'ordre des lignes fait apparaître notre commit de correction directement sous le mauvais commit. Tout comme « squash », « fixup » combine le commit avec celui de la ligne supérieure.",[17,390,391],{},"Enfin, il ne nous reste plus qu'à sauvegarder et à fermer la fenêtre d’édition.",[17,393,394],{},"Jetons un coup d'œil à l'historique des commits :",[17,396,397,80],{},[76,398],{"alt":399,"src":400},"Problème résolu","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398509/blog/Content%20Images/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_final-corrected%402x.png",[17,402,403],{},"Ainsi, le mauvais commit initial contient maintenant les changements du commit de secours. Mais en plus de cela, le commit de secours a maintenant disparu de l’historique de commits. Tout beau, tout propre, comme s'il n'y avait jamais eu le moindre problème !",[12,405,407],{"id":406},"découvrez-la-puissance-du-rebase-interactif","Découvrez la puissance du rebase interactif",[17,409,410,411,416],{},"Vous allez pouvoir utiliser le Git rebase interactive dans de très nombreux cas, la plupart du temps afin de corriger des erreurs. Pour une vue d'ensemble de toutes les choses utiles à faire avec le rebase interactif, nous vous recommandons ce ",[26,412,415],{"href":413,"rel":414},"https://git-scm.com/book/fr/v2/Utilitaires-Git-R%C3%A9%C3%A9crire-l%E2%80%99historique",[],"guide sur Git",".",[12,418,420],{"id":419},"faq-sur-le-rebase-interactif","FAQ sur le rebase interactif",[233,422,424],{"id":423},"quelle-est-la-différence-entre-rebase-et-merge","Quelle est la différence entre rebase et merge ?",[17,426,427,428,431,432,435,436,439],{},"Voilà une question souvent posée par les développeurs : rebase ou merge ? Ces commandes permettent d'effectuer des changements d'une branche à l'autre. Avec ",[59,429,430],{},"git merge",", nous créons un commit de merge dans la branche locale. Avec ",[59,433,434],{},"git rebase",", chaque commit de la branche locale est recréé en pointe de la branche principale. ",[59,437,438],{},"Git rebase -i"," interactif est similaire à git rebase, mais permet en plus de modifier les commits au moment de les envoyer vers la branche principale.",[233,441,443],{"id":442},"quelle-est-la-différence-entre-le-git-rebase-interactive-et-le-git-rebase","Quelle est la différence entre le Git rebase interactive et le Git rebase ?",[17,445,446,447,450,451,454,455,458],{},"Lorsque l'on ajoute l'option interactive au Git rebase, cela permet d'ouvrir une fenêtre d’édition afin d'éditer en amont chaque commit de votre branche locale avant de les rebaser, notamment pour nettoyer votre historique. Les commandes principales sont ",[59,448,449],{},"reword"," (éditer un message de commit), ",[59,452,453],{},"squash"," (fusionner deux commits), et ",[59,456,457],{},"fixup"," (amender un commit).",[233,460,462],{"id":461},"quelles-sont-les-erreurs-à-éviter-avec-le-rebase-interactif","Quelles sont les erreurs à éviter avec le rebase interactif ?",[17,464,465],{},"Le rebase interactif est généralement conseillé aux utilisateurs plutôt avancés. Lorsque vous utilisez ces commandes, veillez à éviter les pièges suivants :",[467,468,469,475,481],"ul",{},[383,470,471,474],{},[41,472,473],{},"Ordre des commits."," Conservez la logique du workflow lorsque vous réordonnez des commits.",[383,476,477,480],{},[41,478,479],{},"Sauvegarde."," N'oubliez pas de sauvegarder et fermer votre fenêtre d'édition en fin de session de rebase interactif.",[383,482,483,486],{},[41,484,485],{},"Rebasing sur la branche principale."," Le rebase s'applique toujours à des commits de votre branche locale vers la branche publique.",[17,488,489,490,416],{},"Image de couverture par David Taljat sur ",[26,491,494],{"href":492,"rel":493},"https://www.pexels.com/@david-taljat-3748658/",[],"Pexels",[496,497,498],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":109,"searchDepth":314,"depth":314,"links":500},[501,502,503,507,510,511],{"id":14,"depth":314,"text":15},{"id":53,"depth":314,"text":54},{"id":164,"depth":314,"text":165,"children":504},[505],{"id":235,"depth":506,"text":236},3,{"id":254,"depth":314,"text":255,"children":508},[509],{"id":280,"depth":506,"text":281},{"id":406,"depth":314,"text":407},{"id":419,"depth":314,"text":420,"children":512},[513,514,515],{"id":423,"depth":506,"text":424},{"id":442,"depth":506,"text":443},{"id":461,"depth":506,"text":462},"engineering","2020-11-23","Le rebase interactif est l'un des outils les plus polyvalents de Git. Découvrez comment l'utiliser pour corriger vos messages de commit, réparer des erreurs et bien plus encore.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662593/Blog/Hero%20Images/title-image.png",{},true,"/fr-fr/blog/keep-git-history-clean-with-interactive-rebase",{"title":5,"description":518,"ogTitle":5,"ogDescription":518,"noIndex":521,"ogImage":522,"ogUrl":527,"ogSiteName":528,"ogType":529,"canonicalUrls":527},"https://about.gitlab.com/blog/keep-git-history-clean-with-interactive-rebase","https://about.gitlab.com","article","keep-git-history-clean-with-interactive-rebase","fr-fr/blog/keep-git-history-clean-with-interactive-rebase",[533,534],"git","tutorial","BlogPost","8gWlJslQd2JVsTyiJHAoP3KKWSRqZZSQMXouDuqvu8s",{"logo":538,"freeTrial":543,"sales":548,"login":553,"items":558,"search":887,"minimal":923,"duo":942,"switchNav":951,"pricingDeployment":962},{"config":539},{"href":540,"dataGaName":541,"dataGaLocation":542},"/fr-fr/","gitlab logo","header",{"text":544,"config":545},"Commencer un essai gratuit",{"href":546,"dataGaName":547,"dataGaLocation":542},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":549,"config":550},"Demander une démo",{"href":551,"dataGaName":552,"dataGaLocation":542},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":554,"config":555},"Connexion",{"href":556,"dataGaName":557,"dataGaLocation":542},"https://gitlab.com/users/sign_in/","sign in",[559,588,690,695,809,865],{"text":560,"config":561,"menu":563},"Plateforme",{"dataNavLevelOne":562},"platform",{"type":564,"columns":565},"cards",[566,572,580],{"title":560,"description":567,"link":568},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":569,"config":570},"Explorer notre plateforme",{"href":571,"dataGaName":562,"dataGaLocation":542},"/fr-fr/platform/",{"title":573,"description":574,"link":575},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":576,"config":577},"Découvrir GitLab Duo",{"href":578,"dataGaName":579,"dataGaLocation":542},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":581,"description":582,"link":583},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":584,"config":585},"En savoir plus",{"href":586,"dataGaName":587,"dataGaLocation":542},"/fr-fr/why-gitlab/","why gitlab",{"text":589,"left":524,"config":590,"menu":592},"Produit",{"dataNavLevelOne":591},"solutions",{"type":593,"link":594,"columns":598,"feature":669},"lists",{"text":595,"config":596},"Voir toutes les solutions",{"href":597,"dataGaName":591,"dataGaLocation":542},"/fr-fr/solutions/",[599,624,647],{"title":600,"description":601,"link":602,"items":607},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":603},{"icon":604,"href":605,"dataGaName":606,"dataGaLocation":542},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[608,612,615,620],{"text":609,"config":610},"CI/CD",{"href":611,"dataGaLocation":542,"dataGaName":609},"/fr-fr/solutions/continuous-integration/",{"text":573,"config":613},{"href":578,"dataGaLocation":542,"dataGaName":614},"gitlab duo agent platform - product menu",{"text":616,"config":617},"Gestion du code source",{"href":618,"dataGaLocation":542,"dataGaName":619},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":621,"config":622},"Livraison de logiciels automatisée",{"href":605,"dataGaLocation":542,"dataGaName":623},"Automated software delivery",{"title":625,"description":626,"link":627,"items":632},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":628},{"href":629,"dataGaName":630,"dataGaLocation":542,"icon":631},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[633,637,642],{"text":634,"config":635},"Tests de sécurité des applications",{"href":629,"dataGaName":636,"dataGaLocation":542},"Application security testing",{"text":638,"config":639},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":640,"dataGaLocation":542,"dataGaName":641},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":643,"config":644},"Conformité logicielle",{"href":645,"dataGaName":646,"dataGaLocation":542},"/fr-fr/solutions/software-compliance/","software compliance",{"title":648,"link":649,"items":654},"Mesures",{"config":650},{"icon":651,"href":652,"dataGaName":653,"dataGaLocation":542},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[655,659,664],{"text":656,"config":657},"Visibilité et mesures",{"href":652,"dataGaLocation":542,"dataGaName":658},"Visibility and Measurement",{"text":660,"config":661},"Gestion de la chaîne de valeur",{"href":662,"dataGaLocation":542,"dataGaName":663},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":665,"config":666},"Analyses et informations",{"href":667,"dataGaLocation":542,"dataGaName":668},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":670,"type":593,"items":671},"GitLab",[672,678,684],{"text":673,"config":674},"Entreprises",{"icon":675,"href":676,"dataGaLocation":542,"dataGaName":677},"Building","/fr-fr/enterprise/","enterprise",{"text":679,"config":680},"Pour les PME",{"icon":681,"href":682,"dataGaLocation":542,"dataGaName":683},"Work","/fr-fr/small-business/","small business",{"text":685,"config":686},"Pour le secteur public",{"icon":687,"href":688,"dataGaLocation":542,"dataGaName":689},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":691,"config":692},"Tarifs",{"href":693,"dataGaName":694,"dataGaLocation":542,"dataNavLevelOne":694},"/fr-fr/pricing/","pricing",{"text":696,"config":697,"menu":699},"Ressources",{"dataNavLevelOne":698},"resources",{"type":593,"link":700,"columns":704,"feature":798},{"text":701,"config":702},"Afficher toutes les ressources",{"href":703,"dataGaName":698,"dataGaLocation":542},"/fr-fr/resources/",[705,738,765],{"title":706,"items":707},"Premiers pas",[708,713,718,723,728,733],{"text":709,"config":710},"Installation",{"href":711,"dataGaName":712,"dataGaLocation":542},"/fr-fr/install/","install",{"text":714,"config":715},"Guides de démarrage",{"href":716,"dataGaName":717,"dataGaLocation":542},"/fr-fr/get-started/","quick setup checklists",{"text":719,"config":720},"Apprentissage",{"href":721,"dataGaLocation":542,"dataGaName":722},"https://university.gitlab.com/","learn",{"text":724,"config":725},"Documentation",{"href":726,"dataGaName":727,"dataGaLocation":542},"https://docs.gitlab.com/","product documentation",{"text":729,"config":730},"Vidéos sur les bonnes pratiques",{"href":731,"dataGaName":732,"dataGaLocation":542},"/fr-fr/getting-started-videos/","best practice videos",{"text":734,"config":735},"Intégrations",{"href":736,"dataGaName":737,"dataGaLocation":542},"/fr-fr/integrations/","integrations",{"title":739,"items":740},"Découvrir",[741,746,751,756,760],{"text":742,"config":743},"Témoignages clients",{"href":744,"dataGaName":745,"dataGaLocation":542},"/fr-fr/customers/","customer success stories",{"text":747,"config":748},"Blog",{"href":749,"dataGaName":750,"dataGaLocation":542},"/fr-fr/blog/","blog",{"text":752,"config":753},"Demo Hub",{"href":754,"dataGaName":755,"dataGaLocation":542},"/fr-fr/demo-hub/","demo hub",{"text":757,"config":758},"The Source",{"href":759,"dataGaName":750,"dataGaLocation":542},"/fr-fr/the-source/",{"text":761,"config":762},"Travail à distance",{"href":763,"dataGaName":764,"dataGaLocation":542},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":766,"items":767},"Connecter",[768,773,778,783,788,793],{"text":769,"config":770},"Services GitLab",{"href":771,"dataGaName":772,"dataGaLocation":542},"/fr-fr/services/","services",{"text":774,"config":775},"Contribuer",{"href":776,"dataGaName":777,"dataGaLocation":542},"https://contributors.gitlab.com","contribute",{"text":779,"config":780},"Communauté",{"href":781,"dataGaName":782,"dataGaLocation":542},"/community/","community",{"text":784,"config":785},"Forum",{"href":786,"dataGaName":787,"dataGaLocation":542},"https://forum.gitlab.com/","forum",{"text":789,"config":790},"Événements",{"href":791,"dataGaName":792,"dataGaLocation":542},"/events/","events",{"text":794,"config":795},"Partenaires",{"href":796,"dataGaName":797,"dataGaLocation":542},"/fr-fr/partners/","partners",{"config":799,"title":802,"text":803,"link":804},{"background":800,"textColor":801},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":805,"config":806},"Lire les articles les plus récents",{"href":807,"dataGaName":808,"dataGaLocation":542},"/fr-fr/whats-new/","whats new",{"text":810,"config":811,"menu":813},"Société",{"dataNavLevelOne":812},"company",{"type":593,"columns":814},[815],{"items":816},[817,822,828,830,835,840,845,850,855,860],{"text":818,"config":819},"À propos",{"href":820,"dataGaName":821,"dataGaLocation":542},"/fr-fr/company/","about",{"text":823,"config":824,"footerGa":827},"Carrières",{"href":825,"dataGaName":826,"dataGaLocation":542},"/jobs/","jobs",{"dataGaName":826},{"text":789,"config":829},{"href":791,"dataGaName":792,"dataGaLocation":542},{"text":831,"config":832},"Leadership",{"href":833,"dataGaName":834,"dataGaLocation":542},"/company/team/e-group/","leadership",{"text":836,"config":837},"Manuel",{"href":838,"dataGaName":839,"dataGaLocation":542},"https://handbook.gitlab.com/","handbook",{"text":841,"config":842},"Relations avec les investisseurs",{"href":843,"dataGaName":844,"dataGaLocation":542},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":846,"config":847},"Trust Center",{"href":848,"dataGaName":849,"dataGaLocation":542},"/fr-fr/security/","trust center",{"text":851,"config":852},"Centre pour la transparence de l'IA",{"href":853,"dataGaName":854,"dataGaLocation":542},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":856,"config":857},"Newsletter",{"href":858,"dataGaName":859,"dataGaLocation":542},"/company/contact/#contact-forms","newsletter",{"text":861,"config":862},"Presse",{"href":863,"dataGaName":864,"dataGaLocation":542},"/press/","press",{"text":866,"config":867,"menu":868},"Nous contacter",{"dataNavLevelOne":812},{"type":593,"columns":869},[870],{"items":871},[872,877,882],{"text":873,"config":874},"Contacter l'équipe commerciale",{"href":875,"dataGaName":876,"dataGaLocation":542},"/fr-fr/sales/","talk to sales",{"text":878,"config":879},"Assistance GitLab",{"href":880,"dataGaName":881,"dataGaLocation":542},"https://support.gitlab.com/hc/en-us","support portal",{"text":883,"config":884},"Portail clients GitLab",{"href":885,"dataGaName":886,"dataGaLocation":542},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":888,"login":889,"suggestions":896},"Fermer",{"text":890,"link":891},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":892,"config":893},"GitLab.com",{"href":556,"dataGaName":894,"dataGaLocation":895},"search login","search",{"text":897,"default":898},"Suggestions",[899,902,907,909,914,919],{"text":573,"config":900},{"href":578,"dataGaName":901,"dataGaLocation":895},"GitLab Duo Agent Platform",{"text":903,"config":904},"Suggestions de code (IA)",{"href":905,"dataGaName":906,"dataGaLocation":895},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":609,"config":908},{"href":611,"dataGaName":609,"dataGaLocation":895},{"text":910,"config":911},"GitLab sur AWS",{"href":912,"dataGaName":913,"dataGaLocation":895},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":915,"config":916},"GitLab sur Google Cloud",{"href":917,"dataGaName":918,"dataGaLocation":895},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":920,"config":921},"Pourquoi utiliser GitLab ?",{"href":586,"dataGaName":922,"dataGaLocation":895},"Why GitLab?",{"freeTrial":924,"mobileIcon":929,"desktopIcon":934,"secondaryButton":937},{"text":925,"config":926},"Commencer votre essai gratuit",{"href":927,"dataGaName":547,"dataGaLocation":928},"https://gitlab.com/-/trials/new/","nav",{"altText":930,"config":931},"Icône GitLab",{"src":932,"dataGaName":933,"dataGaLocation":928},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":930,"config":935},{"src":936,"dataGaName":933,"dataGaLocation":928},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":938,"config":939},"Commencer",{"href":940,"dataGaName":941,"dataGaLocation":928},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":943,"mobileIcon":947,"desktopIcon":949},{"text":944,"config":945},"En savoir plus sur GitLab Duo",{"href":578,"dataGaName":946,"dataGaLocation":928},"gitlab duo",{"altText":930,"config":948},{"src":932,"dataGaName":933,"dataGaLocation":928},{"altText":930,"config":950},{"src":936,"dataGaName":933,"dataGaLocation":928},{"button":952,"mobileIcon":957,"desktopIcon":959},{"text":953,"config":954},"/switch",{"href":955,"dataGaName":956,"dataGaLocation":928},"#contact","switch",{"altText":930,"config":958},{"src":932,"dataGaName":933,"dataGaLocation":928},{"altText":930,"config":960},{"src":961,"dataGaName":933,"dataGaLocation":928},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":963,"mobileIcon":968,"desktopIcon":970},{"text":964,"config":965},"Retour aux tarifs",{"href":693,"dataGaName":966,"dataGaLocation":928,"icon":967},"back to pricing","GoBack",{"altText":930,"config":969},{"src":932,"dataGaName":933,"dataGaLocation":928},{"altText":930,"config":971},{"src":936,"dataGaName":933,"dataGaLocation":928},{"title":973,"button":974,"config":978},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":584,"config":975},{"href":976,"dataGaName":977,"dataGaLocation":542},"/fr-fr/gitlab-orbit/","orbit",{"layout":979,"disabled":521},"release",{"data":981},{"text":982,"source":983,"edit":989,"contribute":994,"config":998,"items":1003,"minimal":1211},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":984,"config":985},"Afficher le code source de la page",{"href":986,"dataGaName":987,"dataGaLocation":988},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":990,"config":991},"Modifier cette page",{"href":992,"dataGaName":993,"dataGaLocation":988},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":774,"config":995},{"href":996,"dataGaName":997,"dataGaLocation":988},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":999,"facebook":1000,"youtube":1001,"linkedin":1002},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1004,1050,1103,1146,1178],{"title":691,"links":1005,"subMenu":1020},[1006,1010,1015],{"text":1007,"config":1008},"Voir les forfaits",{"href":693,"dataGaName":1009,"dataGaLocation":988},"view plans",{"text":1011,"config":1012},"GitLab Premium",{"href":1013,"dataGaName":1014,"dataGaLocation":988},"/fr-fr/pricing/premium/","why premium",{"text":1016,"config":1017},"GitLab Ultimate",{"href":1018,"dataGaName":1019,"dataGaLocation":988},"/fr-fr/pricing/ultimate/","why ultimate",[1021],{"title":866,"links":1022},[1023,1025,1027,1030,1035,1040,1045],{"text":873,"config":1024},{"href":875,"dataGaName":552,"dataGaLocation":988},{"text":878,"config":1026},{"href":880,"dataGaName":881,"dataGaLocation":988},{"text":1028,"config":1029},"Portail clients",{"href":885,"dataGaName":886,"dataGaLocation":988},{"text":1031,"config":1032},"Statut",{"href":1033,"dataGaName":1034,"dataGaLocation":988},"https://status.gitlab.com/","status",{"text":1036,"config":1037},"Conditions d'utilisation",{"href":1038,"dataGaName":1039,"dataGaLocation":988},"/terms/","terms of use",{"text":1041,"config":1042},"Politique de confidentialité",{"href":1043,"dataGaName":1044,"dataGaLocation":988},"/fr-fr/privacy/","privacy statement",{"text":1046,"config":1047},"Gestion des cookies",{"dataGaName":1048,"dataGaLocation":988,"id":1049,"isOneTrustButton":524},"cookie preferences","ot-sdk-btn",{"title":589,"links":1051,"subMenu":1060},[1052,1056],{"text":1053,"config":1054},"Plateforme DevSecOps",{"href":571,"dataGaName":1055,"dataGaLocation":988},"devsecops platform",{"text":1057,"config":1058},"Développement assisté par l'IA",{"href":578,"dataGaName":1059,"dataGaLocation":988},"ai-assisted development",[1061],{"title":1062,"links":1063},"Thèmes",[1064,1068,1073,1078,1083,1088,1093,1098],{"text":609,"config":1065},{"href":1066,"dataGaName":1067,"dataGaLocation":988},"/fr-fr/topics/ci-cd/","cicd",{"text":1069,"config":1070},"GitOps",{"href":1071,"dataGaName":1072,"dataGaLocation":988},"/fr-fr/topics/gitops/","gitops",{"text":1074,"config":1075},"DevOps",{"href":1076,"dataGaName":1077,"dataGaLocation":988},"/fr-fr/topics/devops/","devops",{"text":1079,"config":1080},"Contrôle de version",{"href":1081,"dataGaName":1082,"dataGaLocation":988},"/fr-fr/topics/version-control/","version control",{"text":1084,"config":1085},"DevSecOps",{"href":1086,"dataGaName":1087,"dataGaLocation":988},"/fr-fr/topics/devsecops/","devsecops",{"text":1089,"config":1090},"Cloud-native",{"href":1091,"dataGaName":1092,"dataGaLocation":988},"/fr-fr/topics/cloud-native/","cloud native",{"text":1094,"config":1095},"IA pour la programmation",{"href":1096,"dataGaName":1097,"dataGaLocation":988},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1099,"config":1100},"IA agentique",{"href":1101,"dataGaName":1102,"dataGaLocation":988},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1104,"links":1105},"Solutions",[1106,1109,1111,1116,1119,1122,1125,1128,1130,1133,1136,1141],{"text":634,"config":1107},{"href":629,"dataGaName":1108,"dataGaLocation":988},"Application Security Testing",{"text":621,"config":1110},{"href":605,"dataGaName":606,"dataGaLocation":988},{"text":1112,"config":1113},"Développement Agile",{"href":1114,"dataGaName":1115,"dataGaLocation":988},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":616,"config":1117},{"href":618,"dataGaName":1118,"dataGaLocation":988},"source code management",{"text":609,"config":1120},{"href":611,"dataGaName":1121,"dataGaLocation":988},"continuous integration & delivery",{"text":660,"config":1123},{"href":662,"dataGaName":1124,"dataGaLocation":988},"value stream management",{"text":1069,"config":1126},{"href":1127,"dataGaName":1072,"dataGaLocation":988},"/fr-fr/solutions/gitops/",{"text":673,"config":1129},{"href":676,"dataGaName":677,"dataGaLocation":988},{"text":1131,"config":1132},"PME",{"href":682,"dataGaName":683,"dataGaLocation":988},{"text":1134,"config":1135},"Secteur public",{"href":688,"dataGaName":689,"dataGaLocation":988},{"text":1137,"config":1138},"Éducation",{"href":1139,"dataGaName":1140,"dataGaLocation":988},"/fr-fr/solutions/education/","education",{"text":1142,"config":1143},"Services financiers",{"href":1144,"dataGaName":1145,"dataGaLocation":988},"/fr-fr/solutions/finance/","financial services",{"title":696,"links":1147},[1148,1150,1152,1154,1157,1159,1162,1164,1166,1168,1170,1172,1174,1176],{"text":709,"config":1149},{"href":711,"dataGaName":712,"dataGaLocation":988},{"text":714,"config":1151},{"href":716,"dataGaName":717,"dataGaLocation":988},{"text":719,"config":1153},{"href":721,"dataGaName":722,"dataGaLocation":988},{"text":724,"config":1155},{"href":726,"dataGaName":1156,"dataGaLocation":988},"docs",{"text":747,"config":1158},{"href":749,"dataGaName":750,"dataGaLocation":988},{"text":1160,"config":1161},"Nouveautés",{"href":807,"dataGaName":808,"dataGaLocation":988},{"text":742,"config":1163},{"href":744,"dataGaName":745,"dataGaLocation":988},{"text":761,"config":1165},{"href":763,"dataGaName":764,"dataGaLocation":988},{"text":769,"config":1167},{"href":771,"dataGaName":772,"dataGaLocation":988},{"text":774,"config":1169},{"href":776,"dataGaName":777,"dataGaLocation":988},{"text":779,"config":1171},{"href":781,"dataGaName":782,"dataGaLocation":988},{"text":784,"config":1173},{"href":786,"dataGaName":787,"dataGaLocation":988},{"text":789,"config":1175},{"href":791,"dataGaName":792,"dataGaLocation":988},{"text":794,"config":1177},{"href":796,"dataGaName":797,"dataGaLocation":988},{"title":810,"links":1179},[1180,1182,1184,1186,1188,1190,1195,1200,1202,1204,1206],{"text":818,"config":1181},{"href":820,"dataGaName":812,"dataGaLocation":988},{"text":823,"config":1183},{"href":825,"dataGaName":826,"dataGaLocation":988},{"text":831,"config":1185},{"href":833,"dataGaName":834,"dataGaLocation":988},{"text":836,"config":1187},{"href":838,"dataGaName":839,"dataGaLocation":988},{"text":841,"config":1189},{"href":843,"dataGaName":844,"dataGaLocation":988},{"text":1191,"config":1192},"Développement durable",{"href":1193,"dataGaName":1194,"dataGaLocation":988},"/sustainability/","Sustainability",{"text":1196,"config":1197},"Diversité, inclusion et appartenance (DIB)",{"href":1198,"dataGaName":1199,"dataGaLocation":988},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":846,"config":1201},{"href":848,"dataGaName":849,"dataGaLocation":988},{"text":856,"config":1203},{"href":858,"dataGaName":859,"dataGaLocation":988},{"text":861,"config":1205},{"href":863,"dataGaName":864,"dataGaLocation":988},{"text":1207,"config":1208},"Déclaration de transparence sur l'esclavage moderne",{"href":1209,"dataGaName":1210,"dataGaLocation":988},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1212},[1213,1215,1217],{"text":1036,"config":1214},{"href":1038,"dataGaName":1039,"dataGaLocation":988},{"text":1046,"config":1216},{"dataGaName":1048,"dataGaLocation":988,"id":1049,"isOneTrustButton":524},{"text":1041,"config":1218},{"href":1043,"dataGaName":1044,"dataGaLocation":988},[1220],{"id":1221,"title":1222,"body":520,"config":1223,"content":1225,"description":520,"extension":1229,"meta":1230,"navigation":524,"path":1231,"seo":1232,"stem":1233,"__hash__":1234},"blogAuthors/en-us/blog/authors/tobias-gnther.yml","Tobias Gnther",{"template":1224},"BlogAuthor",{"name":7,"config":1226},{"headshot":1227,"ctfId":1228},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Tobias-Gnther","yml",{},"/en-us/blog/authors/tobias-gnther",{},"en-us/blog/authors/tobias-gnther","WgOPqQqKCIZhJhmIZ1jxQ6v3clPsCguQGMxL2xiRJnw",[1236,1244,1252],{"title":1237,"description":1238,"heroImage":1239,"category":516,"date":1240,"authors":1241,"slug":1243,"externalUrl":520},"Green DevOps : l'importance de mesurer le bilan carbone de vos pipelines CI/CD","Les pipelines CI/CD ont un bilan carbone caché. Découvrez pourquoi il est crucial de le mesurer et comment vous lancer avec Eco CI et Carmen dans GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-22",[1242],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1245,"description":1246,"heroImage":1247,"category":516,"date":1248,"authors":1249,"slug":1251,"externalUrl":520},"Comment mettre en place l'observabilité CI/CD à grande échelle","Ce guide pratique consacré à l'analyse des pipelines GitLab aide les utilisateurs de GitLab Self-Managed à obtenir des indicateurs opérationnels exploitables grâce à Prometheus et Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-05-18",[1250],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"title":1253,"description":1254,"heroImage":1255,"category":516,"date":1256,"authors":1257,"slug":1259,"externalUrl":520},"5 modèles de pipeline GitLab pour résoudre vos enjeux d'ingénierie","Découvrez comment faire évoluer votre approche CI/CD avec des modèles composables pour les monorepos, les microservices, les environnements et la gouvernance.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1772721753/frfsm1qfscwrmsyzj1qn.png","2026-05-06",[1258],"Omid Khan","5-ways-gitlab-pipeline-logic-solves-real-engineering-problems",{"promotions":1261},[1262,1276,1288,1300],{"id":1263,"categories":1264,"header":1266,"text":1267,"button":1268,"image":1273},"ai-modernization",[1265],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":1269,"config":1270},"Obtenez votre score de maturité IA",{"href":1271,"dataGaName":1272,"dataGaLocation":750},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":1274},{"src":1275},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1277,"categories":1278,"header":1280,"text":1267,"button":1281,"image":1285},"devops-modernization",[1279,1087],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":1282,"config":1283},"Obtenez votre score de maturité DevOps",{"href":1284,"dataGaName":1272,"dataGaLocation":750},"/fr-fr/assessments/devops-modernization-assessment/",{"config":1286},{"src":1287},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1289,"categories":1290,"header":1292,"text":1267,"button":1293,"image":1297},"security-modernization",[1291],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":1294,"config":1295},"Obtenez votre score de maturité en matière de sécurité",{"href":1296,"dataGaName":1272,"dataGaLocation":750},"/fr-fr/assessments/security-modernization-assessment/",{"config":1298},{"src":1299},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1301,"paths":1302,"header":1305,"text":1306,"button":1307,"image":1312},"github-azure-migration",[1303,1304],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Votre équipe est-elle prête pour la migration de GitHub vers Azure ?","GitHub a déjà commencé sa migration vers Azure. Découvrez ce que cela signifie pour vous.",{"text":1308,"config":1309},"Découvrez les différences entre GitLab et GitHub",{"href":1310,"dataGaName":1311,"dataGaLocation":750},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1313},{"src":1287},{"header":1315,"blurb":1316,"button":1317,"secondaryButton":1321},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":544,"config":1318},{"href":1319,"dataGaName":547,"dataGaLocation":1320},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":873,"config":1322},{"href":875,"dataGaName":552,"dataGaLocation":1320},1786803784834]