[{"data":1,"prerenderedAt":2824},["ShallowReactive",2],{"/fr-fr/blog/migration-from-azure-devops-to-gitlab":3,"navigation-fr-fr":2031,"banner-fr-fr":2464,"footer-fr-fr":2472,"blog-post-authors-fr-fr-Evgeny Rudinsky|Michael Leopard":2711,"blog-related-posts-fr-fr-migration-from-azure-devops-to-gitlab":2737,"blog-promotions-fr-fr":2762,"next-steps-fr-fr":2815},{"id":4,"title":5,"authors":6,"body":9,"category":2011,"date":2012,"description":2013,"extension":2014,"externalUrl":2015,"faq":2015,"featured":2016,"heroImage":2017,"meta":2018,"navigation":244,"path":2019,"seo":2020,"slug":2023,"stem":2024,"tags":2025,"template":2029,"updatedDate":2015,"__hash__":2030},"blogPosts/fr-fr/blog/migration-from-azure-devops-to-gitlab.md","Migrer d'Azure DevOps vers GitLab :  le guide complet",[7,8],"Evgeny Rudinsky","Michael Leopard",{"type":10,"value":11,"toc":2005},"minimark",[12,16,21,69,72,85,88,300,304,310,327,330,335,349,358,361,376,384,389,424,427,431,434,445,463,468,471,598,601,626,631,634,654,657,664,667,675,680,693,718,727,730,1238,1522,1527,1547,1551,1554,1557,1568,1571,1582,1584,1592,1595,1601,1609,1614,1622,1627,1635,1640,1654,1665,1670,1675,1683,1688,1701,1705,2001],[13,14,15],"p",{},"La migration d'Azure DevOps vers GitLab peut sembler complexe, mais avec la bonne approche et les bons outils, le processus sera fluide et efficace. Ce guide détaille toutes les étapes pour migrer avec succès vos projets, dépôts et pipelines d'Azure DevOps vers GitLab.",[17,18,20],"h2",{"id":19},"vue-densemble","Vue d'ensemble",[13,22,23,24,30,31,36,37,42,43,49,50,56,57,62,63,68],{},"GitLab propose à la fois ",[25,26,29],"a",{"href":27,"rel":28},"https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/",[],"Congregate"," (maintenu par les ",[25,32,35],{"href":33,"rel":34},"https://about.gitlab.com/fr-fr/professional-services/",[],"Services professionnels de GitLab",") et ",[25,38,41],{"href":39,"rel":40},"https://docs.gitlab.com/user/project/import/repo_by_url/",[],"une importation intégrée des dépôts Git"," pour migrer des projets depuis Azure DevOps (ADO). Ces options prennent en charge la migration dépôt par dépôt ou de façon groupée et préservent l'historique des commits ",[25,44,48],{"href":45,"rel":46,"title":47},"https://about.gitlab.com/fr-fr/blog/what-is-git/",[],"Qu'est-ce que Git ?","git",", les branches et les tags. Elles prennent également en charge des éléments supplémentaires tels que les ",[25,51,55],{"href":52,"rel":53,"title":54},"https://about.gitlab.com/fr-fr/blog/get-to-know-the-gitlab-wiki-for-effective-knowledge-management/",[],"GitLab Wiki","wikis",", les éléments de travail, les ",[25,58,61],{"href":59,"rel":60},"https://about.gitlab.com/fr-fr/blog/demystifying-ci-cd-variables/",[],"variables CI/CD",", les images de conteneurs, les paquets, les pipelines et bien plus encore (",[25,64,67],{"href":65,"rel":66},"https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/blob/master/customer/ado-migration-features-matrix.md",[],"matrice de fonctionnalités","). Utilisez ce guide pour planifier et exécuter votre migration, puis accomplir les tâches de suivi post-migration.",[13,70,71],{},"Les entreprises qui migrent d'Azure DevOps vers GitLab suivent généralement une approche en plusieurs étapes :",[73,74,75,79,82],"ul",{},[76,77,78],"li",{},"Elles migrent les dépôts d'Azure DevOps vers GitLab à l'aide de Congregate ou de la migration de dépôt intégrée à GitLab.",[76,80,81],{},"Elles migrent les pipelines d'Azure Pipelines vers GitLab CI/CD.",[76,83,84],{},"Elles migrent les éléments restants tels que les tableaux, les éléments de travail et les artefacts vers les tickets, registres de paquets et de conteneurs GitLab.",[13,86,87],{},"Phases de migration principales :",[89,90,95],"pre",{"className":91,"code":92,"language":93,"meta":94,"style":94},"language-mermaid shiki shiki-themes github-light","graph LR\n    subgraph Prérequis\n        direction TB\n        A[\"Configurer le fournisseur d'identité (IdP)\u003Cbr/>et provisionner les utilisateurs\"]\n        A --> B[\"Configurer les runners et\u003Cbr/>les intégrations tierces\"]\n        B --> I[\"Former les utilisateurs et\u003Cbr/>gérer le changement\"]\n    end\n    \n    subgraph MigrationPhase[\"Phase de migration\"]\n        direction TB\n        C[\"Migrer le code source\"]\n        C --> D[\"Préserver les contributions et\u003Cbr/>l'historique du format\"]\n        D --> E[\"Migrer les éléments de travail,\u003Cbr/>mapper vers \u003Ca href=\"https://docs.gitlab.com/topics/plan_and_track/\">GitLab Plan\u003Cbr/>et suivre le travail\"]\n    end\n    \n    subgraph PostMigration[\"Étapes post-migration\"]\n        direction TB\n        F[\"Créer ou traduire les\u003Cbr/>pipelines ADO vers GitLab CI\"]\n        F --> G[\"Migrer les autres actifs,\u003Cbr/>paquets et images de conteneurs\"]\n        G --> H[\"Introduire des améliorations SDLC et de \u003Ca href=\"https://docs.gitlab.com/user/application_security/secure_your_application/\">sécurité\u003C/a>\u003Cbr/>\"]\n    end\n    \n    Prérequis --> MigrationPhase\n    MigrationPhase --> PostMigration\n\n    style A fill:#FC6D26\n    style B fill:#FC6D26\n    style I fill:#FC6D26\n    style C fill:#8C929D\n    style D fill:#8C929D\n    style E fill:#8C929D\n    style F fill:#FFA500\n    style G fill:#FFA500\n    style H fill:#FFA500\n","mermaid","",[96,97,98,107,113,119,125,131,137,143,149,155,160,166,172,178,183,188,194,199,205,211,217,222,227,233,239,246,252,258,264,270,276,282,288,294],"code",{"__ignoreMap":94},[99,100,103],"span",{"class":101,"line":102},"line",1,[99,104,106],{"class":105},"sgsFI","graph LR\n",[99,108,110],{"class":101,"line":109},2,[99,111,112],{"class":105},"    subgraph Prérequis\n",[99,114,116],{"class":101,"line":115},3,[99,117,118],{"class":105},"        direction TB\n",[99,120,122],{"class":101,"line":121},4,[99,123,124],{"class":105},"        A[\"Configurer le fournisseur d'identité (IdP)\u003Cbr/>et provisionner les utilisateurs\"]\n",[99,126,128],{"class":101,"line":127},5,[99,129,130],{"class":105},"        A --> B[\"Configurer les runners et\u003Cbr/>les intégrations tierces\"]\n",[99,132,134],{"class":101,"line":133},6,[99,135,136],{"class":105},"        B --> I[\"Former les utilisateurs et\u003Cbr/>gérer le changement\"]\n",[99,138,140],{"class":101,"line":139},7,[99,141,142],{"class":105},"    end\n",[99,144,146],{"class":101,"line":145},8,[99,147,148],{"class":105},"    \n",[99,150,152],{"class":101,"line":151},9,[99,153,154],{"class":105},"    subgraph MigrationPhase[\"Phase de migration\"]\n",[99,156,158],{"class":101,"line":157},10,[99,159,118],{"class":105},[99,161,163],{"class":101,"line":162},11,[99,164,165],{"class":105},"        C[\"Migrer le code source\"]\n",[99,167,169],{"class":101,"line":168},12,[99,170,171],{"class":105},"        C --> D[\"Préserver les contributions et\u003Cbr/>l'historique du format\"]\n",[99,173,175],{"class":101,"line":174},13,[99,176,177],{"class":105},"        D --> E[\"Migrer les éléments de travail,\u003Cbr/>mapper vers \u003Ca href=\"https://docs.gitlab.com/topics/plan_and_track/\">GitLab Plan\u003Cbr/>et suivre le travail\"]\n",[99,179,181],{"class":101,"line":180},14,[99,182,142],{"class":105},[99,184,186],{"class":101,"line":185},15,[99,187,148],{"class":105},[99,189,191],{"class":101,"line":190},16,[99,192,193],{"class":105},"    subgraph PostMigration[\"Étapes post-migration\"]\n",[99,195,197],{"class":101,"line":196},17,[99,198,118],{"class":105},[99,200,202],{"class":101,"line":201},18,[99,203,204],{"class":105},"        F[\"Créer ou traduire les\u003Cbr/>pipelines ADO vers GitLab CI\"]\n",[99,206,208],{"class":101,"line":207},19,[99,209,210],{"class":105},"        F --> G[\"Migrer les autres actifs,\u003Cbr/>paquets et images de conteneurs\"]\n",[99,212,214],{"class":101,"line":213},20,[99,215,216],{"class":105},"        G --> H[\"Introduire des améliorations SDLC et de \u003Ca href=\"https://docs.gitlab.com/user/application_security/secure_your_application/\">sécurité\u003C/a>\u003Cbr/>\"]\n",[99,218,220],{"class":101,"line":219},21,[99,221,142],{"class":105},[99,223,225],{"class":101,"line":224},22,[99,226,148],{"class":105},[99,228,230],{"class":101,"line":229},23,[99,231,232],{"class":105},"    Prérequis --> MigrationPhase\n",[99,234,236],{"class":101,"line":235},24,[99,237,238],{"class":105},"    MigrationPhase --> PostMigration\n",[99,240,242],{"class":101,"line":241},25,[99,243,245],{"emptyLinePlaceholder":244},true,"\n",[99,247,249],{"class":101,"line":248},26,[99,250,251],{"class":105},"    style A fill:#FC6D26\n",[99,253,255],{"class":101,"line":254},27,[99,256,257],{"class":105},"    style B fill:#FC6D26\n",[99,259,261],{"class":101,"line":260},28,[99,262,263],{"class":105},"    style I fill:#FC6D26\n",[99,265,267],{"class":101,"line":266},29,[99,268,269],{"class":105},"    style C fill:#8C929D\n",[99,271,273],{"class":101,"line":272},30,[99,274,275],{"class":105},"    style D fill:#8C929D\n",[99,277,279],{"class":101,"line":278},31,[99,280,281],{"class":105},"    style E fill:#8C929D\n",[99,283,285],{"class":101,"line":284},32,[99,286,287],{"class":105},"    style F fill:#FFA500\n",[99,289,291],{"class":101,"line":290},33,[99,292,293],{"class":105},"    style G fill:#FFA500\n",[99,295,297],{"class":101,"line":296},34,[99,298,299],{"class":105},"    style H fill:#FFA500\n",[17,301,303],{"id":302},"planifiez-votre-migration","Planifiez votre migration",[13,305,306],{},[307,308,309],"strong",{},"Pour planifier votre migration, posez-vous ces questions :",[73,311,312,315,318,321,324],{},[76,313,314],{},"Dans quels délais devons-nous achever la migration ?",[76,316,317],{},"Comprenons-nous ce qui sera migré ?",[76,319,320],{},"Qui exécutera la migration ?",[76,322,323],{},"Quelle structure organisationnelle souhaitons-nous mettre en place dans GitLab ?",[76,325,326],{},"Existe-t-il des contraintes, limitations ou pièges à prendre en compte ?",[13,328,329],{},"Déterminez votre calendrier, car il dictera en grande partie votre approche de migration. Identifiez des spécialistes ou des groupes familiarisés avec les plateformes Azure DevOps et GitLab (comme les « Early adopters ») pour faciliter l'adoption et fournir des conseils.",[13,331,332],{},[307,333,334],{},"Faites l'inventaire de ce que vous devez migrer :",[73,336,337,340,343,346],{},[76,338,339],{},"Le nombre de dépôts, de pull requests et de contributeurs",[76,341,342],{},"Le nombre et la complexité des éléments de travail et des pipelines",[76,344,345],{},"Les tailles de dépôts et les relations de dépendance",[76,347,348],{},"Les intégrations critiques et les exigences relatives aux runners (pools d'agents dotés de capacités spécifiques)",[13,350,351,352,357],{},"Utilisez l'outil ",[25,353,356],{"href":354,"rel":355},"https://gitlab.com/gitlab-org/professional-services-automation/tools/utilities/evaluate#beta-azure-devops",[],"Evaluate"," des Services professionnels de GitLab pour produire un inventaire complet de toute votre organisation Azure DevOps avec les dépôts, le nombre de pull requests, les listes de contributeurs, le nombre de pipelines, les éléments de travail, les variables CI/CD et bien plus encore. Si vous travaillez avec l'équipe des Services professionnels de GitLab, partagez ce rapport avec votre responsable de mission ou votre architecte technique pour faciliter la planification de la migration.",[13,359,360],{},"Le calendrier de migration est principalement déterminé par le nombre de pull requests, la taille des dépôts et le volume de contributions (par exemple, les commentaires dans les pull requests, les éléments de travail, etc.). 1 000 petits dépôts avec un nombre limité de pull requests et de contributeurs peuvent migrer beaucoup plus rapidement qu'un ensemble plus restreint de dépôts contenant des dizaines de milliers de pull requests et des milliers de contributeurs. Utilisez vos données d'inventaire pour estimer l'effort et planifier des tests avant de procéder aux migrations de production.",[13,362,363,364,369,370,375],{},"Comparez l'inventaire avec le calendrier souhaité et décidez si vous allez migrer tous les dépôts à la fois ou par lots. Si les équipes ne peuvent pas migrer simultanément, organisez les migrations par lots et échelonnez-les pour vous aligner sur les calendriers des équipes. Par exemple, lors des missions des Services professionnels, nous organisons des migrations par vagues de 200 à 300 projets pour limiter la complexité et respecter les limites de débit des API, à la fois dans ",[25,365,368],{"href":366,"rel":367},"https://docs.gitlab.com/security/rate_limits/",[],"GitLab"," et ",[25,371,374],{"href":372,"rel":373},"https://learn.microsoft.com/en-us/azure/devops/integrate/concepts/rate-limits?view=azure-devops",[],"ADO",".",[13,377,378,379,383],{},"L'",[25,380,382],{"href":39,"rel":381},[],"outil d'importation de dépôt intégré"," de GitLab migre les dépôts Git (commits, branches et tags) un par un. Congregate est conçu pour préserver les pull requests (appelées merge requests dans GitLab), les commentaires et les métadonnées associées lorsque cela est possible ; l'importation simple de dépôt intégrée se concentre uniquement sur les données Git (historique, branches et tags).",[13,385,386],{},[307,387,388],{},"Éléments nécessitant généralement une migration distincte ou une recréation manuelle :",[73,390,391,406,409,412,415],{},[76,392,393,394,399,400,405],{},"Pipelines Azure : créez des pipelines GitLab CI/CD équivalents (consultez la ",[25,395,398],{"href":396,"rel":397},"https://docs.gitlab.com/ci/yaml/",[],"documentation YAML CI/CD"," et/ou les ",[25,401,404],{"href":402,"rel":403},"https://docs.gitlab.com/ci/components/",[],"composants CI/CD","). Vous pouvez également envisager d'utiliser la conversion de pipelines basée sur l'IA disponible dans Congregate.",[76,407,408],{},"Éléments de travail et tableaux : mappez-les vers les tickets, epics et tableaux de tickets de GitLab.",[76,410,411],{},"Artefacts, images de conteneurs (ACR) : migrez-les vers le registre de paquets ou le registre de conteneurs de GitLab.",[76,413,414],{},"Hooks de service et intégrations externes : recréez-les dans GitLab.",[76,416,417,418,423],{},"Les ",[25,419,422],{"href":420,"rel":421},"https://docs.gitlab.com/user/permissions/",[],"modèles de permissions"," diffèrent entre ADO et GitLab ; examinez et planifiez le mappage des permissions plutôt que de supposer une préservation exacte.",[13,425,426],{},"Examinez ce que chaque outil (Congregate vs importation intégrée) va migrer et choisissez celui qui correspond à vos besoins. Dressez une liste de toutes les données ou intégrations qui doivent être migrées ou recréées manuellement.",[13,428,429],{},[307,430,320],{},[13,432,433],{},"Les migrations sont généralement exécutées par un propriétaire de groupe GitLab ou un administrateur d'instance, ou par une personne désignée ayant obtenu les permissions nécessaires relatives au groupe/projet de destination. Congregate et les API d'importation GitLab nécessitent des tokens d'authentification valides pour Azure DevOps et GitLab.",[73,435,436,439,442],{},[76,437,438],{},"Décidez si un propriétaire/administrateur de groupe effectuera les migrations ou si vous accorderez un accès délégué à une équipe/personne spécifique.",[76,440,441],{},"Assurez-vous que la personne dédiée à la migration a correctement configuré les tokens d'accès personnels (Azure DevOps et GitLab) avec les portées requises par votre outil de migration choisi (par exemple, les portées api/read_repository et toute exigence spécifique à l'outil).",[76,443,444],{},"Testez les tokens et les permissions avec une petite migration pilote.",[13,446,447,450,451,456,457,462],{},[307,448,449],{},"Remarque :"," Congregate exploite la fonctionnalité d'importation basée sur des fichiers pour les migrations ADO et nécessite des permissions d'administrateur d'instance pour s'exécuter (",[25,452,455],{"href":453,"rel":454},"https://docs.gitlab.com/user/project/settings/import_export/#migrate-projects-by-uploading-an-export-file",[],"consultez notre documentation","). Si vous migrez vers GitLab.com, envisagez de faire appel aux Services professionnels. Pour plus d'informations, consultez leur ",[25,458,461],{"href":459,"rel":460},"https://about.gitlab.com/professional-services/catalog/",[],"catalogue complet",". Un compte non-administrateur ne peut pas préserver l'attribution des contributions !",[13,464,465],{},[307,466,467],{},"Quelle structure organisationnelle souhaitons-nous dans GitLab ?",[13,469,470],{},"Bien qu'il soit possible de mapper directement la structure ADO vers la structure GitLab, il est recommandé de rationaliser et de simplifier la structure pendant la migration. Réfléchissez à la façon dont les équipes travailleront dans GitLab et concevez la structure de façon à faciliter la collaboration et la gestion des accès. Voici un exemple de mappage de la structure ADO vers la structure GitLab :",[89,472,474],{"className":91,"code":473,"language":93,"meta":94,"style":94},"graph TD\n    subgraph GitLab\n        direction TB\n        A[\"Groupe principal\"]\n        B[\"Sous-groupe (facultatif)\"]\n        C[\"Projets\"]\n        A --> B\n        A --> C\n        B --> C\n    end\n\n    subgraph AzureDevOps[\"Azure DevOps\"]\n        direction TB\n        F[\"Organisations\"]\n        G[\"Projets\"]\n        H[\"Dépôts\"]\n        F --> G\n        G --> H\n    end\n\n    style A fill:#FC6D26\n    style B fill:#FC6D26\n    style C fill:#FC6D26\n    style F fill:#8C929D\n    style G fill:#8C929D\n    style H fill:#8C929D\n",[96,475,476,481,486,490,495,500,505,510,515,520,524,528,533,537,542,547,552,557,562,566,570,574,578,583,588,593],{"__ignoreMap":94},[99,477,478],{"class":101,"line":102},[99,479,480],{"class":105},"graph TD\n",[99,482,483],{"class":101,"line":109},[99,484,485],{"class":105},"    subgraph GitLab\n",[99,487,488],{"class":101,"line":115},[99,489,118],{"class":105},[99,491,492],{"class":101,"line":121},[99,493,494],{"class":105},"        A[\"Groupe principal\"]\n",[99,496,497],{"class":101,"line":127},[99,498,499],{"class":105},"        B[\"Sous-groupe (facultatif)\"]\n",[99,501,502],{"class":101,"line":133},[99,503,504],{"class":105},"        C[\"Projets\"]\n",[99,506,507],{"class":101,"line":139},[99,508,509],{"class":105},"        A --> B\n",[99,511,512],{"class":101,"line":145},[99,513,514],{"class":105},"        A --> C\n",[99,516,517],{"class":101,"line":151},[99,518,519],{"class":105},"        B --> C\n",[99,521,522],{"class":101,"line":157},[99,523,142],{"class":105},[99,525,526],{"class":101,"line":162},[99,527,245],{"emptyLinePlaceholder":244},[99,529,530],{"class":101,"line":168},[99,531,532],{"class":105},"    subgraph AzureDevOps[\"Azure DevOps\"]\n",[99,534,535],{"class":101,"line":174},[99,536,118],{"class":105},[99,538,539],{"class":101,"line":180},[99,540,541],{"class":105},"        F[\"Organisations\"]\n",[99,543,544],{"class":101,"line":185},[99,545,546],{"class":105},"        G[\"Projets\"]\n",[99,548,549],{"class":101,"line":190},[99,550,551],{"class":105},"        H[\"Dépôts\"]\n",[99,553,554],{"class":101,"line":196},[99,555,556],{"class":105},"        F --> G\n",[99,558,559],{"class":101,"line":201},[99,560,561],{"class":105},"        G --> H\n",[99,563,564],{"class":101,"line":207},[99,565,142],{"class":105},[99,567,568],{"class":101,"line":213},[99,569,245],{"emptyLinePlaceholder":244},[99,571,572],{"class":101,"line":219},[99,573,251],{"class":105},[99,575,576],{"class":101,"line":224},[99,577,257],{"class":105},[99,579,580],{"class":101,"line":229},[99,581,582],{"class":105},"    style C fill:#FC6D26\n",[99,584,585],{"class":101,"line":235},[99,586,587],{"class":105},"    style F fill:#8C929D\n",[99,589,590],{"class":101,"line":241},[99,591,592],{"class":105},"    style G fill:#8C929D\n",[99,594,595],{"class":101,"line":248},[99,596,597],{"class":105},"    style H fill:#8C929D\n",[13,599,600],{},"Approche recommandée :",[73,602,603,606,609,612],{},[76,604,605],{},"Mappez chaque organisation ADO à un groupe GitLab (ou un petit ensemble de groupes), et non à de nombreux petits groupes. Évitez de créer un groupe GitLab pour chaque projet d'équipe ADO et utilisez la migration comme une opportunité de rationaliser votre structure GitLab.",[76,607,608],{},"Utilisez des sous-groupes et des permissions au niveau du projet pour regrouper les dépôts associés.",[76,610,611],{},"Gérez l'accès à des ensembles de projets en utilisant les groupes et l'appartenance aux groupes (groupes et sous-groupes) de GitLab plutôt qu'un groupe par projet d'équipe.",[76,613,614,615,619,620,625],{},"Examinez les ",[25,616,618],{"href":420,"rel":617},[],"permissions"," de GitLab et utilisez les ",[25,621,624],{"href":622,"rel":623},"https://docs.gitlab.com/user/group/saml_sso/group_sync/",[],"liens de groupe SAML"," pour mettre en œuvre un modèle de contrôle d'accès basé sur les rôles (RBAC) d'entreprise pour votre instance GitLab (ou un espace de nommage GitLab.com).",[13,627,628],{},[307,629,630],{},"Tableaux ADO et éléments de travail : état de la migration",[13,632,633],{},"Il est important de comprendre comment les éléments de travail migrent d'ADO vers GitLab Plan (tickets, epics et tableaux).",[73,635,636,639,642,645,648,651],{},[76,637,638],{},"Les tableaux et éléments de travail ADO sont mappés vers les tickets, epics et tableaux de tickets de GitLab. Planifiez comment vos workflows et configurations de tableaux seront migrés.",[76,640,641],{},"Les epics et fonctionnalités ADO deviennent des epics GitLab.",[76,643,644],{},"Les autres types d'éléments de travail (user stories, tâches, bogues) deviennent des tickets au niveau du projet.",[76,646,647],{},"La plupart des champs standard sont préservés ; certains champs personnalisés sélectionnés peuvent être migrés lorsqu'ils sont pris en charge.",[76,649,650],{},"Les relations parent-enfant sont conservées afin que les epics référencent tous les tickets associés.",[76,652,653],{},"Les liens vers les pull requests sont convertis en liens de merge requests pour maintenir la traçabilité du développement.",[13,655,656],{},"Exemple d'une migration d'un élément de travail individuel vers un ticket GitLab, avec conservation des champs et relations :",[13,658,659],{},[660,661],"img",{"alt":662,"src":663},"Exemple d'une migration d'un élément de travail individuel vers un ticket GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1764769188/ztesjnxxfbwmfmtckyga.png",[13,665,666],{},"Conseils pour la migration par lots :",[73,668,669,672],{},[76,670,671],{},"Si vous devez exécuter des migrations par lots, utilisez votre nouvelle structure de groupe/sous-groupe pour définir les lots (par exemple, par organisation ADO ou par domaine produit).",[76,673,674],{},"Utilisez les rapports d'inventaire pour orienter la sélection des lots et testez chaque lot avec une migration pilote avant d'effectuer la migration complète.",[13,676,677],{},[307,678,679],{},"Migration des pipelines",[13,681,682,683,688,689,692],{},"Congregate a ",[25,684,687],{"href":685,"rel":686},"https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/merge_requests/1298",[],"récemment introduit"," une conversion basée sur l'IA pour les pipelines YAML multi-étapes d'Azure DevOps vers GitLab CI/CD. Cette conversion automatisée fonctionne avant tout pour les pipelines simples avec un fichier unique et est conçue pour fournir un point de départ fonctionnel plutôt qu'un fichier ",[96,690,691],{},".gitlab-ci.yml"," prêt pour la production. L'outil génère un pipeline GitLab équivalent sur le plan fonctionnel que vous pouvez ensuite affiner et optimiser selon vos besoins.",[73,694,695,700,703,706,709],{},[76,696,697,698],{},"Conversion automatique des pipelines YAML Azure au format ",[96,699,691],{},[76,701,702],{},"Mieux adapté pour les configurations de pipeline simples avec un fichier unique",[76,704,705],{},"Fichier passe-partout fourni pour accélérer la migration, pas un artefact de production final",[76,707,708],{},"Revue et ajustement requis pour les scénarios complexes, les tâches personnalisées ou les exigences de l'entreprise",[76,710,711,712,717],{},"Pas de prise en charge de pipelines de version classiques Azure DevOps, ",[25,713,716],{"href":714,"rel":715},"https://learn.microsoft.com/fr-fr/azure/devops/pipelines/release/from-classic-pipelines?view=azure-devops",[],"conversion en YAML multi-étapes"," nécessaire",[13,719,720,721,726],{},"Les propriétaires de dépôts doivent consulter la ",[25,722,725],{"href":723,"rel":724},"https://docs.gitlab.com/ci/",[],"documentation GitLab CI/CD"," pour optimiser et améliorer davantage leurs pipelines après la conversion initiale.",[13,728,729],{},"Exemple de pipelines convertis :",[89,731,735],{"className":732,"code":733,"language":734,"meta":94,"style":94},"language-yml shiki shiki-themes github-light","\n# azure-pipelines.yml\n\ntrigger:\n  - main\n\nvariables:\n  imageName: myapp\n\nstages:\n  - stage: Build\n    jobs:\n      - job: Build\n        pool:\n          vmImage: 'ubuntu-latest'\n        steps:\n          - checkout: self\n\n          - task: Docker@2\n            displayName: Build Docker image\n            inputs:\n              command: build\n              repository: $(imageName)\n              Dockerfile: '**/Dockerfile'\n              tags: |\n                $(Build.BuildId)\n\n  - stage: Test\n    jobs:\n      - job: Test\n        pool:\n          vmImage: 'ubuntu-latest'\n        steps:\n          - checkout: self\n\n          # Example: run tests inside the container\n          - script: |\n              docker run --rm $(imageName):$(Build.BuildId) npm test\n            displayName: Run tests\n\n  - stage: Push\n    jobs:\n      - job: Push\n        pool:\n          vmImage: 'ubuntu-latest'\n        steps:\n          - checkout: self\n\n          - task: Docker@2\n            displayName: Login to ACR\n            inputs:\n              command: login\n              containerRegistry: '\u003Cyour-acr-service-connection>'\n\n          - task: Docker@2\n            displayName: Push image to ACR\n            inputs:\n              command: push\n              repository: $(imageName)\n              tags: |\n                $(Build.BuildId)\n\n","yml",[96,736,737,741,747,751,760,769,773,780,791,795,802,814,821,833,840,850,857,870,874,886,896,903,913,923,933,944,949,953,964,970,980,986,994,1000,1010,1015,1021,1033,1039,1049,1054,1066,1073,1084,1091,1100,1107,1118,1123,1134,1144,1151,1161,1172,1177,1188,1198,1205,1215,1224,1233],{"__ignoreMap":94},[99,738,739],{"class":101,"line":102},[99,740,245],{"emptyLinePlaceholder":244},[99,742,743],{"class":101,"line":109},[99,744,746],{"class":745},"sAwPA","# azure-pipelines.yml\n",[99,748,749],{"class":101,"line":115},[99,750,245],{"emptyLinePlaceholder":244},[99,752,753,757],{"class":101,"line":121},[99,754,756],{"class":755},"shJU0","trigger",[99,758,759],{"class":105},":\n",[99,761,762,765],{"class":101,"line":127},[99,763,764],{"class":105},"  - ",[99,766,768],{"class":767},"sYBdl","main\n",[99,770,771],{"class":101,"line":133},[99,772,245],{"emptyLinePlaceholder":244},[99,774,775,778],{"class":101,"line":139},[99,776,777],{"class":755},"variables",[99,779,759],{"class":105},[99,781,782,785,788],{"class":101,"line":145},[99,783,784],{"class":755},"  imageName",[99,786,787],{"class":105},": ",[99,789,790],{"class":767},"myapp\n",[99,792,793],{"class":101,"line":151},[99,794,245],{"emptyLinePlaceholder":244},[99,796,797,800],{"class":101,"line":157},[99,798,799],{"class":755},"stages",[99,801,759],{"class":105},[99,803,804,806,809,811],{"class":101,"line":162},[99,805,764],{"class":105},[99,807,808],{"class":755},"stage",[99,810,787],{"class":105},[99,812,813],{"class":767},"Build\n",[99,815,816,819],{"class":101,"line":168},[99,817,818],{"class":755},"    jobs",[99,820,759],{"class":105},[99,822,823,826,829,831],{"class":101,"line":174},[99,824,825],{"class":105},"      - ",[99,827,828],{"class":755},"job",[99,830,787],{"class":105},[99,832,813],{"class":767},[99,834,835,838],{"class":101,"line":180},[99,836,837],{"class":755},"        pool",[99,839,759],{"class":105},[99,841,842,845,847],{"class":101,"line":185},[99,843,844],{"class":755},"          vmImage",[99,846,787],{"class":105},[99,848,849],{"class":767},"'ubuntu-latest'\n",[99,851,852,855],{"class":101,"line":190},[99,853,854],{"class":755},"        steps",[99,856,759],{"class":105},[99,858,859,862,865,867],{"class":101,"line":196},[99,860,861],{"class":105},"          - ",[99,863,864],{"class":755},"checkout",[99,866,787],{"class":105},[99,868,869],{"class":767},"self\n",[99,871,872],{"class":101,"line":201},[99,873,245],{"emptyLinePlaceholder":244},[99,875,876,878,881,883],{"class":101,"line":207},[99,877,861],{"class":105},[99,879,880],{"class":755},"task",[99,882,787],{"class":105},[99,884,885],{"class":767},"Docker@2\n",[99,887,888,891,893],{"class":101,"line":213},[99,889,890],{"class":755},"            displayName",[99,892,787],{"class":105},[99,894,895],{"class":767},"Build Docker image\n",[99,897,898,901],{"class":101,"line":219},[99,899,900],{"class":755},"            inputs",[99,902,759],{"class":105},[99,904,905,908,910],{"class":101,"line":224},[99,906,907],{"class":755},"              command",[99,909,787],{"class":105},[99,911,912],{"class":767},"build\n",[99,914,915,918,920],{"class":101,"line":229},[99,916,917],{"class":755},"              repository",[99,919,787],{"class":105},[99,921,922],{"class":767},"$(imageName)\n",[99,924,925,928,930],{"class":101,"line":235},[99,926,927],{"class":755},"              Dockerfile",[99,929,787],{"class":105},[99,931,932],{"class":767},"'**/Dockerfile'\n",[99,934,935,938,940],{"class":101,"line":241},[99,936,937],{"class":755},"              tags",[99,939,787],{"class":105},[99,941,943],{"class":942},"sD7c4","|\n",[99,945,946],{"class":101,"line":248},[99,947,948],{"class":767},"                $(Build.BuildId)\n",[99,950,951],{"class":101,"line":254},[99,952,245],{"emptyLinePlaceholder":244},[99,954,955,957,959,961],{"class":101,"line":260},[99,956,764],{"class":105},[99,958,808],{"class":755},[99,960,787],{"class":105},[99,962,963],{"class":767},"Test\n",[99,965,966,968],{"class":101,"line":266},[99,967,818],{"class":755},[99,969,759],{"class":105},[99,971,972,974,976,978],{"class":101,"line":272},[99,973,825],{"class":105},[99,975,828],{"class":755},[99,977,787],{"class":105},[99,979,963],{"class":767},[99,981,982,984],{"class":101,"line":278},[99,983,837],{"class":755},[99,985,759],{"class":105},[99,987,988,990,992],{"class":101,"line":284},[99,989,844],{"class":755},[99,991,787],{"class":105},[99,993,849],{"class":767},[99,995,996,998],{"class":101,"line":290},[99,997,854],{"class":755},[99,999,759],{"class":105},[99,1001,1002,1004,1006,1008],{"class":101,"line":296},[99,1003,861],{"class":105},[99,1005,864],{"class":755},[99,1007,787],{"class":105},[99,1009,869],{"class":767},[99,1011,1013],{"class":101,"line":1012},35,[99,1014,245],{"emptyLinePlaceholder":244},[99,1016,1018],{"class":101,"line":1017},36,[99,1019,1020],{"class":745},"          # Example: run tests inside the container\n",[99,1022,1024,1026,1029,1031],{"class":101,"line":1023},37,[99,1025,861],{"class":105},[99,1027,1028],{"class":755},"script",[99,1030,787],{"class":105},[99,1032,943],{"class":942},[99,1034,1036],{"class":101,"line":1035},38,[99,1037,1038],{"class":767},"              docker run --rm $(imageName):$(Build.BuildId) npm test\n",[99,1040,1042,1044,1046],{"class":101,"line":1041},39,[99,1043,890],{"class":755},[99,1045,787],{"class":105},[99,1047,1048],{"class":767},"Run tests\n",[99,1050,1052],{"class":101,"line":1051},40,[99,1053,245],{"emptyLinePlaceholder":244},[99,1055,1057,1059,1061,1063],{"class":101,"line":1056},41,[99,1058,764],{"class":105},[99,1060,808],{"class":755},[99,1062,787],{"class":105},[99,1064,1065],{"class":767},"Push\n",[99,1067,1069,1071],{"class":101,"line":1068},42,[99,1070,818],{"class":755},[99,1072,759],{"class":105},[99,1074,1076,1078,1080,1082],{"class":101,"line":1075},43,[99,1077,825],{"class":105},[99,1079,828],{"class":755},[99,1081,787],{"class":105},[99,1083,1065],{"class":767},[99,1085,1087,1089],{"class":101,"line":1086},44,[99,1088,837],{"class":755},[99,1090,759],{"class":105},[99,1092,1094,1096,1098],{"class":101,"line":1093},45,[99,1095,844],{"class":755},[99,1097,787],{"class":105},[99,1099,849],{"class":767},[99,1101,1103,1105],{"class":101,"line":1102},46,[99,1104,854],{"class":755},[99,1106,759],{"class":105},[99,1108,1110,1112,1114,1116],{"class":101,"line":1109},47,[99,1111,861],{"class":105},[99,1113,864],{"class":755},[99,1115,787],{"class":105},[99,1117,869],{"class":767},[99,1119,1121],{"class":101,"line":1120},48,[99,1122,245],{"emptyLinePlaceholder":244},[99,1124,1126,1128,1130,1132],{"class":101,"line":1125},49,[99,1127,861],{"class":105},[99,1129,880],{"class":755},[99,1131,787],{"class":105},[99,1133,885],{"class":767},[99,1135,1137,1139,1141],{"class":101,"line":1136},50,[99,1138,890],{"class":755},[99,1140,787],{"class":105},[99,1142,1143],{"class":767},"Login to ACR\n",[99,1145,1147,1149],{"class":101,"line":1146},51,[99,1148,900],{"class":755},[99,1150,759],{"class":105},[99,1152,1154,1156,1158],{"class":101,"line":1153},52,[99,1155,907],{"class":755},[99,1157,787],{"class":105},[99,1159,1160],{"class":767},"login\n",[99,1162,1164,1167,1169],{"class":101,"line":1163},53,[99,1165,1166],{"class":755},"              containerRegistry",[99,1168,787],{"class":105},[99,1170,1171],{"class":767},"'\u003Cyour-acr-service-connection>'\n",[99,1173,1175],{"class":101,"line":1174},54,[99,1176,245],{"emptyLinePlaceholder":244},[99,1178,1180,1182,1184,1186],{"class":101,"line":1179},55,[99,1181,861],{"class":105},[99,1183,880],{"class":755},[99,1185,787],{"class":105},[99,1187,885],{"class":767},[99,1189,1191,1193,1195],{"class":101,"line":1190},56,[99,1192,890],{"class":755},[99,1194,787],{"class":105},[99,1196,1197],{"class":767},"Push image to ACR\n",[99,1199,1201,1203],{"class":101,"line":1200},57,[99,1202,900],{"class":755},[99,1204,759],{"class":105},[99,1206,1208,1210,1212],{"class":101,"line":1207},58,[99,1209,907],{"class":755},[99,1211,787],{"class":105},[99,1213,1214],{"class":767},"push\n",[99,1216,1218,1220,1222],{"class":101,"line":1217},59,[99,1219,917],{"class":755},[99,1221,787],{"class":105},[99,1223,922],{"class":767},[99,1225,1227,1229,1231],{"class":101,"line":1226},60,[99,1228,937],{"class":755},[99,1230,787],{"class":105},[99,1232,943],{"class":942},[99,1234,1236],{"class":101,"line":1235},61,[99,1237,948],{"class":767},[89,1239,1243],{"className":1240,"code":1241,"language":1242,"meta":94,"style":94},"language-yaml shiki shiki-themes github-light","\n# .gitlab-ci.yml\n\nvariables:\n  imageName: myapp\n\nstages:\n  - build\n  - test\n  - push\n\nbuild:\n  stage: build\n  image: docker:latest\n  services:\n    - docker:dind\n  script:\n    - docker build -t $imageName:$CI_PIPELINE_ID -f $(find . -name Dockerfile) .\n  only:\n    - main\n\ntest:\n  stage: test\n  image: docker:latest\n  services:\n    - docker:dind\n  script:\n    - docker run --rm $imageName:$CI_PIPELINE_ID npm test\n  only:\n    - main\n\npush:\n  stage: push\n  image: docker:latest\n  services:\n    - docker:dind\n  before_script:\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n  script:\n    - docker tag $imageName:$CI_PIPELINE_ID $CI_REGISTRY/$CI_PROJECT_PATH/$imageName:$CI_PIPELINE_ID\n    - docker push $CI_REGISTRY/$CI_PROJECT_PATH/$imageName:$CI_PIPELINE_ID\n  only:\n    - main\n\n","yaml",[96,1244,1245,1249,1254,1258,1264,1272,1276,1282,1288,1295,1301,1305,1312,1321,1331,1338,1346,1353,1360,1367,1373,1377,1384,1392,1400,1406,1412,1418,1425,1431,1437,1441,1448,1456,1464,1470,1476,1483,1490,1496,1503,1510,1516],{"__ignoreMap":94},[99,1246,1247],{"class":101,"line":102},[99,1248,245],{"emptyLinePlaceholder":244},[99,1250,1251],{"class":101,"line":109},[99,1252,1253],{"class":745},"# .gitlab-ci.yml\n",[99,1255,1256],{"class":101,"line":115},[99,1257,245],{"emptyLinePlaceholder":244},[99,1259,1260,1262],{"class":101,"line":121},[99,1261,777],{"class":755},[99,1263,759],{"class":105},[99,1265,1266,1268,1270],{"class":101,"line":127},[99,1267,784],{"class":755},[99,1269,787],{"class":105},[99,1271,790],{"class":767},[99,1273,1274],{"class":101,"line":133},[99,1275,245],{"emptyLinePlaceholder":244},[99,1277,1278,1280],{"class":101,"line":139},[99,1279,799],{"class":755},[99,1281,759],{"class":105},[99,1283,1284,1286],{"class":101,"line":145},[99,1285,764],{"class":105},[99,1287,912],{"class":767},[99,1289,1290,1292],{"class":101,"line":151},[99,1291,764],{"class":105},[99,1293,1294],{"class":767},"test\n",[99,1296,1297,1299],{"class":101,"line":157},[99,1298,764],{"class":105},[99,1300,1214],{"class":767},[99,1302,1303],{"class":101,"line":162},[99,1304,245],{"emptyLinePlaceholder":244},[99,1306,1307,1310],{"class":101,"line":168},[99,1308,1309],{"class":755},"build",[99,1311,759],{"class":105},[99,1313,1314,1317,1319],{"class":101,"line":174},[99,1315,1316],{"class":755},"  stage",[99,1318,787],{"class":105},[99,1320,912],{"class":767},[99,1322,1323,1326,1328],{"class":101,"line":180},[99,1324,1325],{"class":755},"  image",[99,1327,787],{"class":105},[99,1329,1330],{"class":767},"docker:latest\n",[99,1332,1333,1336],{"class":101,"line":185},[99,1334,1335],{"class":755},"  services",[99,1337,759],{"class":105},[99,1339,1340,1343],{"class":101,"line":190},[99,1341,1342],{"class":105},"    - ",[99,1344,1345],{"class":767},"docker:dind\n",[99,1347,1348,1351],{"class":101,"line":196},[99,1349,1350],{"class":755},"  script",[99,1352,759],{"class":105},[99,1354,1355,1357],{"class":101,"line":201},[99,1356,1342],{"class":105},[99,1358,1359],{"class":767},"docker build -t $imageName:$CI_PIPELINE_ID -f $(find . -name Dockerfile) .\n",[99,1361,1362,1365],{"class":101,"line":207},[99,1363,1364],{"class":755},"  only",[99,1366,759],{"class":105},[99,1368,1369,1371],{"class":101,"line":213},[99,1370,1342],{"class":105},[99,1372,768],{"class":767},[99,1374,1375],{"class":101,"line":219},[99,1376,245],{"emptyLinePlaceholder":244},[99,1378,1379,1382],{"class":101,"line":224},[99,1380,1381],{"class":755},"test",[99,1383,759],{"class":105},[99,1385,1386,1388,1390],{"class":101,"line":229},[99,1387,1316],{"class":755},[99,1389,787],{"class":105},[99,1391,1294],{"class":767},[99,1393,1394,1396,1398],{"class":101,"line":235},[99,1395,1325],{"class":755},[99,1397,787],{"class":105},[99,1399,1330],{"class":767},[99,1401,1402,1404],{"class":101,"line":241},[99,1403,1335],{"class":755},[99,1405,759],{"class":105},[99,1407,1408,1410],{"class":101,"line":248},[99,1409,1342],{"class":105},[99,1411,1345],{"class":767},[99,1413,1414,1416],{"class":101,"line":254},[99,1415,1350],{"class":755},[99,1417,759],{"class":105},[99,1419,1420,1422],{"class":101,"line":260},[99,1421,1342],{"class":105},[99,1423,1424],{"class":767},"docker run --rm $imageName:$CI_PIPELINE_ID npm test\n",[99,1426,1427,1429],{"class":101,"line":266},[99,1428,1364],{"class":755},[99,1430,759],{"class":105},[99,1432,1433,1435],{"class":101,"line":272},[99,1434,1342],{"class":105},[99,1436,768],{"class":767},[99,1438,1439],{"class":101,"line":278},[99,1440,245],{"emptyLinePlaceholder":244},[99,1442,1443,1446],{"class":101,"line":284},[99,1444,1445],{"class":755},"push",[99,1447,759],{"class":105},[99,1449,1450,1452,1454],{"class":101,"line":290},[99,1451,1316],{"class":755},[99,1453,787],{"class":105},[99,1455,1214],{"class":767},[99,1457,1458,1460,1462],{"class":101,"line":296},[99,1459,1325],{"class":755},[99,1461,787],{"class":105},[99,1463,1330],{"class":767},[99,1465,1466,1468],{"class":101,"line":1012},[99,1467,1335],{"class":755},[99,1469,759],{"class":105},[99,1471,1472,1474],{"class":101,"line":1017},[99,1473,1342],{"class":105},[99,1475,1345],{"class":767},[99,1477,1478,1481],{"class":101,"line":1023},[99,1479,1480],{"class":755},"  before_script",[99,1482,759],{"class":105},[99,1484,1485,1487],{"class":101,"line":1035},[99,1486,1342],{"class":105},[99,1488,1489],{"class":767},"docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n",[99,1491,1492,1494],{"class":101,"line":1041},[99,1493,1350],{"class":755},[99,1495,759],{"class":105},[99,1497,1498,1500],{"class":101,"line":1051},[99,1499,1342],{"class":105},[99,1501,1502],{"class":767},"docker tag $imageName:$CI_PIPELINE_ID $CI_REGISTRY/$CI_PROJECT_PATH/$imageName:$CI_PIPELINE_ID\n",[99,1504,1505,1507],{"class":101,"line":1056},[99,1506,1342],{"class":105},[99,1508,1509],{"class":767},"docker push $CI_REGISTRY/$CI_PROJECT_PATH/$imageName:$CI_PIPELINE_ID\n",[99,1511,1512,1514],{"class":101,"line":1068},[99,1513,1364],{"class":755},[99,1515,759],{"class":105},[99,1517,1518,1520],{"class":101,"line":1075},[99,1519,1342],{"class":105},[99,1521,768],{"class":767},[13,1523,1524],{},[307,1525,1526],{},"Liste de contrôle finale :",[73,1528,1529,1532,1535,1538,1541,1544],{},[76,1530,1531],{},"Décidez du calendrier et de la stratégie par lots.",[76,1533,1534],{},"Produisez un inventaire complet des dépôts, pull requests et contributeurs.",[76,1536,1537],{},"Choisissez Congregate ou l'importation intégrée en fonction de la portée (pull requests  et métadonnées vs données Git uniquement).",[76,1539,1540],{},"Décidez qui exécutera les migrations et assurez-vous que les tokens/permissions sont configurés.",[76,1542,1543],{},"Identifiez les éléments qui doivent être migrés séparément (pipelines, éléments de travail, artefacts et hooks) et planifiez ces migrations.",[76,1545,1546],{},"Effectuez des migrations pilotes, validez les résultats, puis passez à la migration complète selon votre calendrier.",[17,1548,1550],{"id":1549},"exécutez-vos-migrations","Exécutez vos migrations",[13,1552,1553],{},"Une fois la planification terminée, exécutez les migrations par étapes, en commençant par des migrations d'essai, qui permettent de faire remonter les problèmes spécifiques à l'organisation tôt et de mesurer la durée, de valider les résultats et d'affiner votre approche avant la production.",[13,1555,1556],{},"Utilisez les migrations d'essai pour valider les éléments suivants :",[73,1558,1559,1562,1565],{},[76,1560,1561],{},"Succès de la migration d'un dépôt donné et des éléments associés (historique, branches, tags ; ainsi que les merge requests/commentaires si vous utilisez Congregate)",[76,1563,1564],{},"Utilisation immédiate de la destination (permissions, runners, variables CI/CD, intégrations)",[76,1566,1567],{},"Durée de chaque lot (afin de définir les calendriers et les attentes des parties prenantes)",[13,1569,1570],{},"Conseils concernant les temps d'arrêt :",[73,1572,1573,1576,1579],{},[76,1574,1575],{},"L'importation Git intégrée de GitLab et Congregate ne nécessitent pas intrinsèquement de temps d'arrêt.",[76,1577,1578],{},"Pour les vagues de production, gelez les modifications dans ADO (protections de branches ou lecture seule) pour éviter les commits manqués, les mises à jour de pull requests ou les éléments de travail créés en cours de migration.",[76,1580,1581],{},"Les essais n'ont pas besoin d'être gelés et peuvent être exécutés à tout moment.",[13,1583,666],{},[73,1585,1586,1589],{},[76,1587,1588],{},"Exécutez des lots d'essai consécutifs pour raccourcir le temps écoulé ; laissez les équipes valider les résultats de manière asynchrone.",[76,1590,1591],{},"Utilisez votre structure de groupe/sous-groupe planifiée pour définir les lots et respectez les limites de débit des API.",[13,1593,1594],{},"Étapes recommandées :",[1596,1597,1598],"ol",{},[76,1599,1600],{},"Créez une destination de test dans GitLab pour les essais :",[73,1602,1603,1606],{},[76,1604,1605],{},"GitLab.com : créez un groupe/espace de nommage dédié (par exemple, my-org-sandbox).",[76,1607,1608],{},"Instance auto-gérée : créez un groupe de niveau supérieur ou une instance de test distincte si nécessaire.",[1596,1610,1611],{"start":109},[76,1612,1613],{},"Préparez l'authentification :",[73,1615,1616,1619],{},[76,1617,1618],{},"PAT Azure DevOps avec les portées requises.",[76,1620,1621],{},"Token d'accès personnel GitLab avec api et read_repository (plus accès administrateur pour les importations basées sur des fichiers utilisées par Congregate).",[1596,1623,1624],{"start":115},[76,1625,1626],{},"Exécutez des migrations d'essai :",[73,1628,1629,1632],{},[76,1630,1631],{},"Dépôts uniquement : utilisez l'importation intégrée de GitLab (dépôt par URL).",[76,1633,1634],{},"Dépôts + pull requests/merge requests et actifs supplémentaires : utilisez Congregate.",[1596,1636,1637],{"start":121},[76,1638,1639],{},"Suivi post-essai :",[73,1641,1642,1645,1648],{},[76,1643,1644],{},"Vérifiez l'historique du dépôt, les branches, les tags ; les merge requests (si elles ont été migrées), les tickets/epics (s'ils ont été migrées), les labels et les relations.",[76,1646,1647],{},"Vérifiez les permissions/rôles, les branches protégées, les approbations requises, les runners/tags, les variables/secrets, les intégrations/webhooks.",[76,1649,1650,1651,1653],{},"Validez les pipelines (",[96,1652,691],{},") ou les pipelines convertis le cas échéant.",[1596,1655,1656,1659,1662],{"start":127},[76,1657,1658],{},"Demandez aux utilisateurs de valider la fonctionnalité et la fidélité des données.",[76,1660,1661],{},"Résolvez les problèmes découverts lors des essais et mettez à jour vos runbooks.",[76,1663,1664],{},"Réseau et sécurité :",[73,1666,1667],{},[76,1668,1669],{},"Si votre destination utilise des listes d'IP autorisées, ajoutez les IP de votre hôte de migration et tous les runners/intégrations requis afin de garantir la réussite des importations.",[1596,1671,1672],{"start":145},[76,1673,1674],{},"Exécutez les migrations de production par vagues :",[73,1676,1677,1680],{},[76,1678,1679],{},"Appliquez des gels de modifications dans ADO pendant chaque vague.",[76,1681,1682],{},"Surveillez la progression et les logs ; réessayez ou ajustez les tailles de lots si vous atteignez les limites de débit.",[1596,1684,1685],{"start":151},[76,1686,1687],{},"Facultatif : supprimez le groupe de l'environnement sandbox ou archivez-le après avoir terminé.",[1689,1690,1693,1694,1700],"figure",{"className":1691},[1692],"video_container","\n      ",[1695,1696],"iframe",{"src":1697,"frameBorder":1698,"allowFullScreen":1699},"https://www.youtube.com/embed/ibIXGfrVbi4?si=ZxOVnXjCF-h4Ne0N","0","true","\n    ",[17,1702,1704],{"id":1703},"références-terminologiques-pour-gitlab-et-azure-devops","Références terminologiques pour GitLab et Azure DevOps",[1706,1707,1708,1723],"table",{},[1709,1710,1711],"thead",{},[1712,1713,1714,1717,1720],"tr",{},[1715,1716,368],"th",{},[1715,1718,1719],{},"Azure DevOps",[1715,1721,1722],{},"Similitudes et différences clés",[1724,1725,1726,1738,1749,1760,1771,1782,1793,1803,1814,1825,1836,1847,1858,1869,1880,1891,1902,1913,1924,1935,1946,1957,1968,1979,1990],"tbody",{},[1712,1727,1728,1732,1735],{},[1729,1730,1731],"td",{},"Groupe",[1729,1733,1734],{},"Organisation",[1729,1736,1737],{},"Espace de nommage principal, adhésion, politiques. Une organisation ADO contient des projets ; un groupe GitLab contient des sous-groupes et des projets.",[1712,1739,1740,1743,1746],{},[1729,1741,1742],{},"Groupe ou sous-groupe",[1729,1744,1745],{},"Projet",[1729,1747,1748],{},"Conteneur logique, limite de permissions. Un projet ADO contient de nombreux dépôts ; les groupes/sous-groupes GitLab contiennent de nombreux projets.",[1712,1750,1751,1754,1757],{},[1729,1752,1753],{},"Projet (inclut un dépôt Git)",[1729,1755,1756],{},"Dépôt (à l'intérieur d'un projet)",[1729,1758,1759],{},"Historique Git, branches, tags. Dans GitLab, un « projet » est le dépôt plus les tickets, CI/CD, wiki, etc. Un dépôt par projet.",[1712,1761,1762,1765,1768],{},[1729,1763,1764],{},"Merge Request (MR)",[1729,1766,1767],{},"Pull Request (PR)",[1729,1769,1770],{},"Revue de code, discussions, approbations. Les règles des MR incluent les approbations, les pipelines requis, les propriétaires de code.",[1712,1772,1773,1776,1779],{},[1729,1774,1775],{},"Branches protégées, règles d'approbation des MR, vérifications de statut",[1729,1777,1778],{},"Politiques des branches",[1729,1780,1781],{},"Imposent des revues et des vérifications. GitLab combine les protections + les règles d'approbation + les vérifications de statut requises.",[1712,1783,1784,1787,1790],{},[1729,1785,1786],{},"GitLab CI/CD",[1729,1788,1789],{},"Pipelines Azure",[1729,1791,1792],{},"Pipelines YAML, étapes/jobs, logs. ADO a également des pipelines UI classiques ; GitLab se concentre sur .gitlab-ci.yml.",[1712,1794,1795,1797,1800],{},[1729,1796,691],{},[1729,1798,1799],{},"azure-pipelines.yml",[1729,1801,1802],{},"Définit les étapes/jobs/déclencheurs. La syntaxe/les fonctionnalités diffèrent ; map job, variables, artefacts et déclencheurs.",[1712,1804,1805,1808,1811],{},[1729,1806,1807],{},"Runners (partagés/spécifiques)",[1729,1809,1810],{},"Agents / pools d'agents",[1729,1812,1813],{},"Exécutent les jobs sur des machines/conteneurs. Ciblent via des demandes (ADO) ou tags (GitLab). L'enregistrement/la portée diffère.",[1712,1815,1816,1819,1822],{},[1729,1817,1818],{},"Variables CI/CD (projet/groupe/instance), protégées/masquées",[1729,1820,1821],{},"Variables de pipeline, groupes de variables, bibliothèque",[1729,1823,1824],{},"Transmettent la configuration/les secrets aux jobs. GitLab prend en charge l'héritage de groupe et les flags de masquage/protection.",[1712,1826,1827,1830,1833],{},[1729,1828,1829],{},"Intégrations, variables CI/CD, clés de déploiement",[1729,1831,1832],{},"Connexions de service",[1729,1834,1835],{},"Authentification externe vers les services/clouds. Map vers les intégrations ou les variables ; des assistants spécifiques au cloud sont disponibles.",[1712,1837,1838,1841,1844],{},[1729,1839,1840],{},"Environnements et déploiements (environnements protégés)",[1729,1842,1843],{},"Environnements (avec approbations)",[1729,1845,1846],{},"Suivent les cibles/l'historique de déploiement. Approbations via environnements protégés et jobs manuels dans GitLab.",[1712,1848,1849,1852,1855],{},[1729,1850,1851],{},"Versions (tag + notes)",[1729,1853,1854],{},"Versions (classiques ou pipelines)",[1729,1856,1857],{},"Notes/artefacts versionnés. La version GitLab est liée aux tags ; les déploiements sont suivis séparément.",[1712,1859,1860,1863,1866],{},[1729,1861,1862],{},"Artefacts de job",[1729,1864,1865],{},"Artefacts de pipeline",[1729,1867,1868],{},"Inscrivent de manière permanente les sorties de job. La rétention/l'expiration sont configurées par job ou par projet.",[1712,1870,1871,1874,1877],{},[1729,1872,1873],{},"Registre de paquets (NuGet/npm/Maven/PyPI/Composer, etc.)",[1729,1875,1876],{},"Artefacts Azure (NuGet/npm/Maven, etc.)",[1729,1878,1879],{},"Hébergement de paquets. L'authentification/l'espace de nommage diffère ; migrez par type de paquets.",[1712,1881,1882,1885,1888],{},[1729,1883,1884],{},"Registre de conteneurs GitLab",[1729,1886,1887],{},"Registre de conteneurs Azure (ACR) ou autres",[1729,1889,1890],{},"Images OCI. GitLab fournit des registres par projet/groupe.",[1712,1892,1893,1896,1899],{},[1729,1894,1895],{},"Tableaux de tickets",[1729,1897,1898],{},"Tableaux",[1729,1900,1901],{},"Affichent les tâches dans des colonnes. Les tableaux GitLab sont pilotés par des labels ; plusieurs tableaux par projet/groupe.",[1712,1903,1904,1907,1910],{},[1729,1905,1906],{},"Tickets (types/labels), epics",[1729,1908,1909],{},"Éléments de travail (user story/bogue/tâche)",[1729,1911,1912],{},"Suivent les unités de travail. Mappent les types/champs ADO vers les labels/champs personnalisés ; epics au niveau du groupe.",[1712,1914,1915,1918,1921],{},[1729,1916,1917],{},"Epics, tickets parent/enfant",[1729,1919,1920],{},"Epics/fonctionnalités",[1729,1922,1923],{},"Hiérarchie du travail. Le schéma diffère ; utilisation des epics + relations de tickets.",[1712,1925,1926,1929,1932],{},[1729,1927,1928],{},"Jalons et itérations",[1729,1930,1931],{},"Chemins d'itération",[1729,1933,1934],{},"Temps limité. Itérations GitLab (fonctionnalité de groupe) ou jalons par projet/groupe.",[1712,1936,1937,1940,1943],{},[1729,1938,1939],{},"Labels (labels à portée)",[1729,1941,1942],{},"Chemins de domaine",[1729,1944,1945],{},"Catégorisation/propriété. Remplacement des domaines hiérarchiques par des labels à portée.",[1712,1947,1948,1951,1954],{},[1729,1949,1950],{},"Wiki de projet/groupe",[1729,1952,1953],{},"Wiki de projet",[1729,1955,1956],{},"Wiki Markdown. Sauvegardes avec des dépôts dans les deux ; la mise en page/l'authentification diffère légèrement.",[1712,1958,1959,1962,1965],{},[1729,1960,1961],{},"Rapports de test via CI, gestion des exigences/tests, intégrations",[1729,1963,1964],{},"Plans/cas/exécutions de test",[1729,1966,1967],{},"QA des preuves/de la traçabilité. Pas de correspondance 1:1 avec les plans de test ADO ; utilisent souvent les rapports CI + tickets/exigences.",[1712,1969,1970,1973,1976],{},[1729,1971,1972],{},"Rôles (propriétaire/chargé de maintenance/développeur/rapporteur/invité) + rôles personnalisés",[1729,1974,1975],{},"Niveaux d'accès + permissions granulaires",[1729,1977,1978],{},"Contrôlent la lecture/l'écriture/l'administration. Les modèles diffèrent ; exploitation de l'héritage de groupe et des ressources protégées.",[1712,1980,1981,1984,1987],{},[1729,1982,1983],{},"Webhooks",[1729,1985,1986],{},"Hooks de service",[1729,1988,1989],{},"Intégrations basées sur les événements. Les noms/charges utiles d'événements diffèrent ; reconfiguration des points de terminaison.",[1712,1991,1992,1995,1998],{},[1729,1993,1994],{},"Recherche avancée",[1729,1996,1997],{},"Recherche de code",[1729,1999,2000],{},"Recherche dans le dépôt en texte intégral. GitLab Self-Managed peut nécessiter Elasticsearch/OpenSearch pour les fonctionnalités avancées.",[2002,2003,2004],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}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);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":94,"searchDepth":109,"depth":109,"links":2006},[2007,2008,2009,2010],{"id":19,"depth":109,"text":20},{"id":302,"depth":109,"text":303},{"id":1549,"depth":109,"text":1550},{"id":1703,"depth":109,"text":1704},"engineering","2025-12-08","Découvrez comment migrer d'Azure DevOps vers GitLab à l'aide des outils de migration des Services professionnels de GitLab, de la planification à l'exécution en passant par les tâches de suivi post-migration.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658924/Blog/Hero%20Images/securitylifecycle-light.png",{},"/fr-fr/blog/migration-from-azure-devops-to-gitlab",{"config":2021,"title":5,"description":2022,"ogImage":2017},{"noIndex":2016},"Découvrez comment migrer d'Azure DevOps vers GitLab à l'aide des outils de migration des Services professionnels de GitLab.","migration-from-azure-devops-to-gitlab","fr-fr/blog/migration-from-azure-devops-to-gitlab",[2026,48,2027,2028],"tutorial","CI/CD","migration","BlogPost","QgeTKhi5KPSu56ybtuJp9Wp33GYuPm9h23bnLukhKtM",{"logo":2032,"freeTrial":2037,"sales":2042,"login":2047,"items":2052,"search":2379,"minimal":2415,"duo":2434,"switchNav":2443,"pricingDeployment":2454},{"config":2033},{"href":2034,"dataGaName":2035,"dataGaLocation":2036},"/fr-fr/","gitlab logo","header",{"text":2038,"config":2039},"Commencer un essai gratuit",{"href":2040,"dataGaName":2041,"dataGaLocation":2036},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":2043,"config":2044},"Demander une démo",{"href":2045,"dataGaName":2046,"dataGaLocation":2036},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":2048,"config":2049},"Connexion",{"href":2050,"dataGaName":2051,"dataGaLocation":2036},"https://gitlab.com/users/sign_in/","sign in",[2053,2082,2182,2187,2301,2357],{"text":2054,"config":2055,"menu":2057},"Plateforme",{"dataNavLevelOne":2056},"platform",{"type":2058,"columns":2059},"cards",[2060,2066,2074],{"title":2054,"description":2061,"link":2062},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":2063,"config":2064},"Explorer notre plateforme",{"href":2065,"dataGaName":2056,"dataGaLocation":2036},"/fr-fr/platform/",{"title":2067,"description":2068,"link":2069},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":2070,"config":2071},"Découvrir GitLab Duo",{"href":2072,"dataGaName":2073,"dataGaLocation":2036},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":2075,"description":2076,"link":2077},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":2078,"config":2079},"En savoir plus",{"href":2080,"dataGaName":2081,"dataGaLocation":2036},"/fr-fr/why-gitlab/","why gitlab",{"text":2083,"left":244,"config":2084,"menu":2086},"Produit",{"dataNavLevelOne":2085},"solutions",{"type":2087,"link":2088,"columns":2092,"feature":2162},"lists",{"text":2089,"config":2090},"Voir toutes les solutions",{"href":2091,"dataGaName":2085,"dataGaLocation":2036},"/fr-fr/solutions/",[2093,2117,2140],{"title":2094,"description":2095,"link":2096,"items":2101},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":2097},{"icon":2098,"href":2099,"dataGaName":2100,"dataGaLocation":2036},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[2102,2105,2108,2113],{"text":2027,"config":2103},{"href":2104,"dataGaLocation":2036,"dataGaName":2027},"/fr-fr/solutions/continuous-integration/",{"text":2067,"config":2106},{"href":2072,"dataGaLocation":2036,"dataGaName":2107},"gitlab duo agent platform - product menu",{"text":2109,"config":2110},"Gestion du code source",{"href":2111,"dataGaLocation":2036,"dataGaName":2112},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":2114,"config":2115},"Livraison de logiciels automatisée",{"href":2099,"dataGaLocation":2036,"dataGaName":2116},"Automated software delivery",{"title":2118,"description":2119,"link":2120,"items":2125},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":2121},{"href":2122,"dataGaName":2123,"dataGaLocation":2036,"icon":2124},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[2126,2130,2135],{"text":2127,"config":2128},"Tests de sécurité des applications",{"href":2122,"dataGaName":2129,"dataGaLocation":2036},"Application security testing",{"text":2131,"config":2132},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":2133,"dataGaLocation":2036,"dataGaName":2134},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":2136,"config":2137},"Conformité logicielle",{"href":2138,"dataGaName":2139,"dataGaLocation":2036},"/fr-fr/solutions/software-compliance/","software compliance",{"title":2141,"link":2142,"items":2147},"Mesures",{"config":2143},{"icon":2144,"href":2145,"dataGaName":2146,"dataGaLocation":2036},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[2148,2152,2157],{"text":2149,"config":2150},"Visibilité et mesures",{"href":2145,"dataGaLocation":2036,"dataGaName":2151},"Visibility and Measurement",{"text":2153,"config":2154},"Gestion de la chaîne de valeur",{"href":2155,"dataGaLocation":2036,"dataGaName":2156},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":2158,"config":2159},"Analyses et informations",{"href":2160,"dataGaLocation":2036,"dataGaName":2161},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":368,"type":2087,"items":2163},[2164,2170,2176],{"text":2165,"config":2166},"Entreprises",{"icon":2167,"href":2168,"dataGaLocation":2036,"dataGaName":2169},"Building","/fr-fr/enterprise/","enterprise",{"text":2171,"config":2172},"Pour les PME",{"icon":2173,"href":2174,"dataGaLocation":2036,"dataGaName":2175},"Work","/fr-fr/small-business/","small business",{"text":2177,"config":2178},"Pour le secteur public",{"icon":2179,"href":2180,"dataGaLocation":2036,"dataGaName":2181},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":2183,"config":2184},"Tarifs",{"href":2185,"dataGaName":2186,"dataGaLocation":2036,"dataNavLevelOne":2186},"/fr-fr/pricing/","pricing",{"text":2188,"config":2189,"menu":2191},"Ressources",{"dataNavLevelOne":2190},"resources",{"type":2087,"link":2192,"columns":2196,"feature":2290},{"text":2193,"config":2194},"Afficher toutes les ressources",{"href":2195,"dataGaName":2190,"dataGaLocation":2036},"/fr-fr/resources/",[2197,2230,2257],{"title":2198,"items":2199},"Premiers pas",[2200,2205,2210,2215,2220,2225],{"text":2201,"config":2202},"Installation",{"href":2203,"dataGaName":2204,"dataGaLocation":2036},"/fr-fr/install/","install",{"text":2206,"config":2207},"Guides de démarrage",{"href":2208,"dataGaName":2209,"dataGaLocation":2036},"/fr-fr/get-started/","quick setup checklists",{"text":2211,"config":2212},"Apprentissage",{"href":2213,"dataGaLocation":2036,"dataGaName":2214},"https://university.gitlab.com/","learn",{"text":2216,"config":2217},"Documentation",{"href":2218,"dataGaName":2219,"dataGaLocation":2036},"https://docs.gitlab.com/","product documentation",{"text":2221,"config":2222},"Vidéos sur les bonnes pratiques",{"href":2223,"dataGaName":2224,"dataGaLocation":2036},"/fr-fr/getting-started-videos/","best practice videos",{"text":2226,"config":2227},"Intégrations",{"href":2228,"dataGaName":2229,"dataGaLocation":2036},"/fr-fr/integrations/","integrations",{"title":2231,"items":2232},"Découvrir",[2233,2238,2243,2248,2252],{"text":2234,"config":2235},"Témoignages clients",{"href":2236,"dataGaName":2237,"dataGaLocation":2036},"/fr-fr/customers/","customer success stories",{"text":2239,"config":2240},"Blog",{"href":2241,"dataGaName":2242,"dataGaLocation":2036},"/fr-fr/blog/","blog",{"text":2244,"config":2245},"Demo Hub",{"href":2246,"dataGaName":2247,"dataGaLocation":2036},"/fr-fr/demo-hub/","demo hub",{"text":2249,"config":2250},"The Source",{"href":2251,"dataGaName":2242,"dataGaLocation":2036},"/fr-fr/the-source/",{"text":2253,"config":2254},"Travail à distance",{"href":2255,"dataGaName":2256,"dataGaLocation":2036},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":2258,"items":2259},"Connecter",[2260,2265,2270,2275,2280,2285],{"text":2261,"config":2262},"Services GitLab",{"href":2263,"dataGaName":2264,"dataGaLocation":2036},"/fr-fr/services/","services",{"text":2266,"config":2267},"Contribuer",{"href":2268,"dataGaName":2269,"dataGaLocation":2036},"https://contributors.gitlab.com","contribute",{"text":2271,"config":2272},"Communauté",{"href":2273,"dataGaName":2274,"dataGaLocation":2036},"/community/","community",{"text":2276,"config":2277},"Forum",{"href":2278,"dataGaName":2279,"dataGaLocation":2036},"https://forum.gitlab.com/","forum",{"text":2281,"config":2282},"Événements",{"href":2283,"dataGaName":2284,"dataGaLocation":2036},"/events/","events",{"text":2286,"config":2287},"Partenaires",{"href":2288,"dataGaName":2289,"dataGaLocation":2036},"/fr-fr/partners/","partners",{"config":2291,"title":2294,"text":2295,"link":2296},{"background":2292,"textColor":2293},"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":2297,"config":2298},"Lire les articles les plus récents",{"href":2299,"dataGaName":2300,"dataGaLocation":2036},"/fr-fr/whats-new/","whats new",{"text":2302,"config":2303,"menu":2305},"Société",{"dataNavLevelOne":2304},"company",{"type":2087,"columns":2306},[2307],{"items":2308},[2309,2314,2320,2322,2327,2332,2337,2342,2347,2352],{"text":2310,"config":2311},"À propos",{"href":2312,"dataGaName":2313,"dataGaLocation":2036},"/fr-fr/company/","about",{"text":2315,"config":2316,"footerGa":2319},"Carrières",{"href":2317,"dataGaName":2318,"dataGaLocation":2036},"/jobs/","jobs",{"dataGaName":2318},{"text":2281,"config":2321},{"href":2283,"dataGaName":2284,"dataGaLocation":2036},{"text":2323,"config":2324},"Leadership",{"href":2325,"dataGaName":2326,"dataGaLocation":2036},"/company/team/e-group/","leadership",{"text":2328,"config":2329},"Manuel",{"href":2330,"dataGaName":2331,"dataGaLocation":2036},"https://handbook.gitlab.com/","handbook",{"text":2333,"config":2334},"Relations avec les investisseurs",{"href":2335,"dataGaName":2336,"dataGaLocation":2036},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2338,"config":2339},"Trust Center",{"href":2340,"dataGaName":2341,"dataGaLocation":2036},"/fr-fr/security/","trust center",{"text":2343,"config":2344},"Centre pour la transparence de l'IA",{"href":2345,"dataGaName":2346,"dataGaLocation":2036},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":2348,"config":2349},"Newsletter",{"href":2350,"dataGaName":2351,"dataGaLocation":2036},"/company/contact/#contact-forms","newsletter",{"text":2353,"config":2354},"Presse",{"href":2355,"dataGaName":2356,"dataGaLocation":2036},"/press/","press",{"text":2358,"config":2359,"menu":2360},"Nous contacter",{"dataNavLevelOne":2304},{"type":2087,"columns":2361},[2362],{"items":2363},[2364,2369,2374],{"text":2365,"config":2366},"Contacter l'équipe commerciale",{"href":2367,"dataGaName":2368,"dataGaLocation":2036},"/fr-fr/sales/","talk to sales",{"text":2370,"config":2371},"Assistance GitLab",{"href":2372,"dataGaName":2373,"dataGaLocation":2036},"https://support.gitlab.com/hc/en-us","support portal",{"text":2375,"config":2376},"Portail clients GitLab",{"href":2377,"dataGaName":2378,"dataGaLocation":2036},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2380,"login":2381,"suggestions":2388},"Fermer",{"text":2382,"link":2383},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":2384,"config":2385},"GitLab.com",{"href":2050,"dataGaName":2386,"dataGaLocation":2387},"search login","search",{"text":2389,"default":2390},"Suggestions",[2391,2394,2399,2401,2406,2411],{"text":2067,"config":2392},{"href":2072,"dataGaName":2393,"dataGaLocation":2387},"GitLab Duo Agent Platform",{"text":2395,"config":2396},"Suggestions de code (IA)",{"href":2397,"dataGaName":2398,"dataGaLocation":2387},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":2027,"config":2400},{"href":2104,"dataGaName":2027,"dataGaLocation":2387},{"text":2402,"config":2403},"GitLab sur AWS",{"href":2404,"dataGaName":2405,"dataGaLocation":2387},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":2407,"config":2408},"GitLab sur Google Cloud",{"href":2409,"dataGaName":2410,"dataGaLocation":2387},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2412,"config":2413},"Pourquoi utiliser GitLab ?",{"href":2080,"dataGaName":2414,"dataGaLocation":2387},"Why GitLab?",{"freeTrial":2416,"mobileIcon":2421,"desktopIcon":2426,"secondaryButton":2429},{"text":2417,"config":2418},"Commencer votre essai gratuit",{"href":2419,"dataGaName":2041,"dataGaLocation":2420},"https://gitlab.com/-/trials/new/","nav",{"altText":2422,"config":2423},"Icône GitLab",{"src":2424,"dataGaName":2425,"dataGaLocation":2420},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2422,"config":2427},{"src":2428,"dataGaName":2425,"dataGaLocation":2420},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2430,"config":2431},"Commencer",{"href":2432,"dataGaName":2433,"dataGaLocation":2420},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":2435,"mobileIcon":2439,"desktopIcon":2441},{"text":2436,"config":2437},"En savoir plus sur GitLab Duo",{"href":2072,"dataGaName":2438,"dataGaLocation":2420},"gitlab duo",{"altText":2422,"config":2440},{"src":2424,"dataGaName":2425,"dataGaLocation":2420},{"altText":2422,"config":2442},{"src":2428,"dataGaName":2425,"dataGaLocation":2420},{"button":2444,"mobileIcon":2449,"desktopIcon":2451},{"text":2445,"config":2446},"/switch",{"href":2447,"dataGaName":2448,"dataGaLocation":2420},"#contact","switch",{"altText":2422,"config":2450},{"src":2424,"dataGaName":2425,"dataGaLocation":2420},{"altText":2422,"config":2452},{"src":2453,"dataGaName":2425,"dataGaLocation":2420},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2455,"mobileIcon":2460,"desktopIcon":2462},{"text":2456,"config":2457},"Retour aux tarifs",{"href":2185,"dataGaName":2458,"dataGaLocation":2420,"icon":2459},"back to pricing","GoBack",{"altText":2422,"config":2461},{"src":2424,"dataGaName":2425,"dataGaLocation":2420},{"altText":2422,"config":2463},{"src":2428,"dataGaName":2425,"dataGaLocation":2420},{"title":2465,"button":2466,"config":2470},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":2078,"config":2467},{"href":2468,"dataGaName":2469,"dataGaLocation":2036},"/fr-fr/gitlab-orbit/","orbit",{"layout":2471,"disabled":2016},"release",{"data":2473},{"text":2474,"source":2475,"edit":2481,"contribute":2486,"config":2490,"items":2495,"minimal":2703},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":2476,"config":2477},"Afficher le code source de la page",{"href":2478,"dataGaName":2479,"dataGaLocation":2480},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2482,"config":2483},"Modifier cette page",{"href":2484,"dataGaName":2485,"dataGaLocation":2480},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2266,"config":2487},{"href":2488,"dataGaName":2489,"dataGaLocation":2480},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2491,"facebook":2492,"youtube":2493,"linkedin":2494},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2496,2542,2595,2638,2670],{"title":2183,"links":2497,"subMenu":2512},[2498,2502,2507],{"text":2499,"config":2500},"Voir les forfaits",{"href":2185,"dataGaName":2501,"dataGaLocation":2480},"view plans",{"text":2503,"config":2504},"GitLab Premium",{"href":2505,"dataGaName":2506,"dataGaLocation":2480},"/fr-fr/pricing/premium/","why premium",{"text":2508,"config":2509},"GitLab Ultimate",{"href":2510,"dataGaName":2511,"dataGaLocation":2480},"/fr-fr/pricing/ultimate/","why ultimate",[2513],{"title":2358,"links":2514},[2515,2517,2519,2522,2527,2532,2537],{"text":2365,"config":2516},{"href":2367,"dataGaName":2046,"dataGaLocation":2480},{"text":2370,"config":2518},{"href":2372,"dataGaName":2373,"dataGaLocation":2480},{"text":2520,"config":2521},"Portail clients",{"href":2377,"dataGaName":2378,"dataGaLocation":2480},{"text":2523,"config":2524},"Statut",{"href":2525,"dataGaName":2526,"dataGaLocation":2480},"https://status.gitlab.com/","status",{"text":2528,"config":2529},"Conditions d'utilisation",{"href":2530,"dataGaName":2531,"dataGaLocation":2480},"/terms/","terms of use",{"text":2533,"config":2534},"Politique de confidentialité",{"href":2535,"dataGaName":2536,"dataGaLocation":2480},"/fr-fr/privacy/","privacy statement",{"text":2538,"config":2539},"Gestion des cookies",{"dataGaName":2540,"dataGaLocation":2480,"id":2541,"isOneTrustButton":244},"cookie preferences","ot-sdk-btn",{"title":2083,"links":2543,"subMenu":2552},[2544,2548],{"text":2545,"config":2546},"Plateforme DevSecOps",{"href":2065,"dataGaName":2547,"dataGaLocation":2480},"devsecops platform",{"text":2549,"config":2550},"Développement assisté par l'IA",{"href":2072,"dataGaName":2551,"dataGaLocation":2480},"ai-assisted development",[2553],{"title":2554,"links":2555},"Thèmes",[2556,2560,2565,2570,2575,2580,2585,2590],{"text":2027,"config":2557},{"href":2558,"dataGaName":2559,"dataGaLocation":2480},"/fr-fr/topics/ci-cd/","cicd",{"text":2561,"config":2562},"GitOps",{"href":2563,"dataGaName":2564,"dataGaLocation":2480},"/fr-fr/topics/gitops/","gitops",{"text":2566,"config":2567},"DevOps",{"href":2568,"dataGaName":2569,"dataGaLocation":2480},"/fr-fr/topics/devops/","devops",{"text":2571,"config":2572},"Contrôle de version",{"href":2573,"dataGaName":2574,"dataGaLocation":2480},"/fr-fr/topics/version-control/","version control",{"text":2576,"config":2577},"DevSecOps",{"href":2578,"dataGaName":2579,"dataGaLocation":2480},"/fr-fr/topics/devsecops/","devsecops",{"text":2581,"config":2582},"Cloud-native",{"href":2583,"dataGaName":2584,"dataGaLocation":2480},"/fr-fr/topics/cloud-native/","cloud native",{"text":2586,"config":2587},"IA pour la programmation",{"href":2588,"dataGaName":2589,"dataGaLocation":2480},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":2591,"config":2592},"IA agentique",{"href":2593,"dataGaName":2594,"dataGaLocation":2480},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":2596,"links":2597},"Solutions",[2598,2601,2603,2608,2611,2614,2617,2620,2622,2625,2628,2633],{"text":2127,"config":2599},{"href":2122,"dataGaName":2600,"dataGaLocation":2480},"Application Security Testing",{"text":2114,"config":2602},{"href":2099,"dataGaName":2100,"dataGaLocation":2480},{"text":2604,"config":2605},"Développement Agile",{"href":2606,"dataGaName":2607,"dataGaLocation":2480},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":2109,"config":2609},{"href":2111,"dataGaName":2610,"dataGaLocation":2480},"source code management",{"text":2027,"config":2612},{"href":2104,"dataGaName":2613,"dataGaLocation":2480},"continuous integration & delivery",{"text":2153,"config":2615},{"href":2155,"dataGaName":2616,"dataGaLocation":2480},"value stream management",{"text":2561,"config":2618},{"href":2619,"dataGaName":2564,"dataGaLocation":2480},"/fr-fr/solutions/gitops/",{"text":2165,"config":2621},{"href":2168,"dataGaName":2169,"dataGaLocation":2480},{"text":2623,"config":2624},"PME",{"href":2174,"dataGaName":2175,"dataGaLocation":2480},{"text":2626,"config":2627},"Secteur public",{"href":2180,"dataGaName":2181,"dataGaLocation":2480},{"text":2629,"config":2630},"Éducation",{"href":2631,"dataGaName":2632,"dataGaLocation":2480},"/fr-fr/solutions/education/","education",{"text":2634,"config":2635},"Services financiers",{"href":2636,"dataGaName":2637,"dataGaLocation":2480},"/fr-fr/solutions/finance/","financial services",{"title":2188,"links":2639},[2640,2642,2644,2646,2649,2651,2654,2656,2658,2660,2662,2664,2666,2668],{"text":2201,"config":2641},{"href":2203,"dataGaName":2204,"dataGaLocation":2480},{"text":2206,"config":2643},{"href":2208,"dataGaName":2209,"dataGaLocation":2480},{"text":2211,"config":2645},{"href":2213,"dataGaName":2214,"dataGaLocation":2480},{"text":2216,"config":2647},{"href":2218,"dataGaName":2648,"dataGaLocation":2480},"docs",{"text":2239,"config":2650},{"href":2241,"dataGaName":2242,"dataGaLocation":2480},{"text":2652,"config":2653},"Nouveautés",{"href":2299,"dataGaName":2300,"dataGaLocation":2480},{"text":2234,"config":2655},{"href":2236,"dataGaName":2237,"dataGaLocation":2480},{"text":2253,"config":2657},{"href":2255,"dataGaName":2256,"dataGaLocation":2480},{"text":2261,"config":2659},{"href":2263,"dataGaName":2264,"dataGaLocation":2480},{"text":2266,"config":2661},{"href":2268,"dataGaName":2269,"dataGaLocation":2480},{"text":2271,"config":2663},{"href":2273,"dataGaName":2274,"dataGaLocation":2480},{"text":2276,"config":2665},{"href":2278,"dataGaName":2279,"dataGaLocation":2480},{"text":2281,"config":2667},{"href":2283,"dataGaName":2284,"dataGaLocation":2480},{"text":2286,"config":2669},{"href":2288,"dataGaName":2289,"dataGaLocation":2480},{"title":2302,"links":2671},[2672,2674,2676,2678,2680,2682,2687,2692,2694,2696,2698],{"text":2310,"config":2673},{"href":2312,"dataGaName":2304,"dataGaLocation":2480},{"text":2315,"config":2675},{"href":2317,"dataGaName":2318,"dataGaLocation":2480},{"text":2323,"config":2677},{"href":2325,"dataGaName":2326,"dataGaLocation":2480},{"text":2328,"config":2679},{"href":2330,"dataGaName":2331,"dataGaLocation":2480},{"text":2333,"config":2681},{"href":2335,"dataGaName":2336,"dataGaLocation":2480},{"text":2683,"config":2684},"Développement durable",{"href":2685,"dataGaName":2686,"dataGaLocation":2480},"/sustainability/","Sustainability",{"text":2688,"config":2689},"Diversité, inclusion et appartenance (DIB)",{"href":2690,"dataGaName":2691,"dataGaLocation":2480},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2338,"config":2693},{"href":2340,"dataGaName":2341,"dataGaLocation":2480},{"text":2348,"config":2695},{"href":2350,"dataGaName":2351,"dataGaLocation":2480},{"text":2353,"config":2697},{"href":2355,"dataGaName":2356,"dataGaLocation":2480},{"text":2699,"config":2700},"Déclaration de transparence sur l'esclavage moderne",{"href":2701,"dataGaName":2702,"dataGaLocation":2480},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2704},[2705,2707,2709],{"text":2528,"config":2706},{"href":2530,"dataGaName":2531,"dataGaLocation":2480},{"text":2538,"config":2708},{"dataGaName":2540,"dataGaLocation":2480,"id":2541,"isOneTrustButton":244},{"text":2533,"config":2710},{"href":2535,"dataGaName":2536,"dataGaLocation":2480},[2712,2725],{"id":2713,"title":7,"body":2015,"config":2714,"content":2716,"description":2015,"extension":734,"meta":2720,"navigation":244,"path":2721,"seo":2722,"stem":2723,"__hash__":2724},"blogAuthors/en-us/blog/authors/evgeny-rudinsky.yml",{"template":2715},"BlogAuthor",{"name":7,"config":2717},{"ctfId":2718,"headshot":2719},"erudinsky","https://res.cloudinary.com/about-gitlab-com/image/upload/v1761069206/yppyhhdmdrw4u1nz7het.jpg",{},"/en-us/blog/authors/evgeny-rudinsky",{},"en-us/blog/authors/evgeny-rudinsky","OtgSXy1cMxWS2khqtu-PdUFWhG9Eck_jUQfH5JUwzWM",{"id":2726,"title":8,"body":2015,"config":2727,"content":2728,"description":2015,"extension":734,"meta":2732,"navigation":244,"path":2733,"seo":2734,"stem":2735,"__hash__":2736},"blogAuthors/en-us/blog/authors/michael-leopard.yml",{"template":2715},{"name":8,"config":2729},{"ctfId":2730,"headshot":2731},"leopardm","https://res.cloudinary.com/about-gitlab-com/image/upload/v1761069206/tjpzzunnzhen77u6tf5s.jpg",{},"/en-us/blog/authors/michael-leopard",{},"en-us/blog/authors/michael-leopard","Yavr1VB0sBdgyY2GfU8OYVm_Byiv9EzriWbuDzn6Al4",[2738,2746,2754],{"title":2739,"description":2740,"heroImage":2741,"category":2011,"date":2742,"authors":2743,"slug":2745,"externalUrl":2015},"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",[2744],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":2747,"description":2748,"heroImage":2749,"category":2011,"date":2750,"authors":2751,"slug":2753,"externalUrl":2015},"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",[2752],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"title":2755,"description":2756,"heroImage":2757,"category":2011,"date":2758,"authors":2759,"slug":2761,"externalUrl":2015},"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",[2760],"Omid Khan","5-ways-gitlab-pipeline-logic-solves-real-engineering-problems",{"promotions":2763},[2764,2778,2790,2802],{"id":2765,"categories":2766,"header":2768,"text":2769,"button":2770,"image":2775},"ai-modernization",[2767],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":2771,"config":2772},"Obtenez votre score de maturité IA",{"href":2773,"dataGaName":2774,"dataGaLocation":2242},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":2776},{"src":2777},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2779,"categories":2780,"header":2782,"text":2769,"button":2783,"image":2787},"devops-modernization",[2781,2579],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":2784,"config":2785},"Obtenez votre score de maturité DevOps",{"href":2786,"dataGaName":2774,"dataGaLocation":2242},"/fr-fr/assessments/devops-modernization-assessment/",{"config":2788},{"src":2789},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2791,"categories":2792,"header":2794,"text":2769,"button":2795,"image":2799},"security-modernization",[2793],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":2796,"config":2797},"Obtenez votre score de maturité en matière de sécurité",{"href":2798,"dataGaName":2774,"dataGaLocation":2242},"/fr-fr/assessments/security-modernization-assessment/",{"config":2800},{"src":2801},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2803,"paths":2804,"header":2806,"text":2807,"button":2808,"image":2813},"github-azure-migration",[2023,2805],"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":2809,"config":2810},"Découvrez les différences entre GitLab et GitHub",{"href":2811,"dataGaName":2812,"dataGaLocation":2242},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2814},{"src":2789},{"header":2816,"blurb":2817,"button":2818,"secondaryButton":2822},"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":2038,"config":2819},{"href":2820,"dataGaName":2041,"dataGaLocation":2821},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":2365,"config":2823},{"href":2367,"dataGaName":2046,"dataGaLocation":2821},1786803776862]