[{"data":1,"prerenderedAt":1463},["ShallowReactive",2],{"/fr-fr/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab":3,"navigation-fr-fr":681,"banner-fr-fr":1114,"footer-fr-fr":1122,"blog-post-authors-fr-fr-Tim Rizzi":1361,"blog-related-posts-fr-fr-automating-container-image-migration-from-amazon-ecr-to-gitlab":1376,"blog-promotions-fr-fr":1401,"next-steps-fr-fr":1454},{"id":4,"title":5,"authors":6,"body":8,"category":656,"date":657,"description":658,"extension":659,"externalUrl":660,"faq":660,"featured":328,"heroImage":661,"meta":662,"navigation":328,"path":663,"seo":664,"slug":669,"stem":670,"tags":671,"template":678,"updatedDate":679,"__hash__":680},"blogPosts/fr-fr/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab.md","Comment automatiser la migration des images de conteneurs d'Amazon ECR vers GitLab",[7],"Tim Rizzi",{"type":9,"value":10,"toc":645},"minimark",[11,15,18,23,34,38,41,46,49,210,214,217,280,284,293,365,368,375,378,422,427,430,469,474,477,560,564,567,582,585,589,592,610,614,617,631,641],[12,13,14],"p",{},"« Nous devons migrer des centaines d'images de conteneurs d'Amazon Elastic Container Registry (ECR) vers GitLab. Pouvez-vous nous aider ? » Cette question revenait sans cesse lors de nos échanges avec des ingénieurs de plateforme. En pleine modernisation de leur chaîne d'outils DevSecOps avec GitLab, ils se retrouvaient bloqués au moment de déplacer leurs images de conteneurs. D’un point de vue technique, chaque transfert est simple. Mais, l'opération était longue et fastidieuse en raison du volume considérable d'images.",[12,16,17],{},"Un ingénieur de plateforme a parfaitement résumé la situation : « Je connais parfaitement le processus : effectuer un pull, retagger, effectuer un push. Le problème, c'est que je gère 200 microservices, chacun contenant plusieurs tags. Je ne peux pas passer plusieurs semaines sur cette migration alors que j'ai des tâches critiques à effectuer au niveau de l'infrastructure. »",[19,20,22],"h2",{"id":21},"le-défi","Le défi",[12,24,25,26,33],{},"Cette conversation nous a fait réfléchir et a donné naissance à une idée. Et si nous pouvions automatiser l'ensemble du processus ? Lorsqu'une équipe de plateforme DevOps transfère ses ",[27,28,32],"a",{"href":29,"rel":30,"title":31},"https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/",[],"Qu'est-ce qu'un pipeline CI/CD ?","pipelines CI/CD"," vers GitLab, la migration des images de conteneurs ne devrait pas poser de difficulté particulière. Le processus manuel est rudimentaire, mais répétitif : il s'agit d'effectuer un pull de chaque image, de la retagger et d'effectuer un push pour la migrer vers le registre de conteneurs de GitLab. Réaliser cette même opération pour des dizaines de dépôts et plusieurs tags par image requiert des jours ou des semaines de travail chronophage.",[19,35,37],{"id":36},"la-solution","La solution",[12,39,40],{},"Nous avons donc entrepris de créer un pipeline GitLab qui effectuerait automatiquement cette lourde tâche. L'objectif était clair : fournir aux ingénieurs de plateforme un outil qu'ils pourraient configurer en quelques minutes et qui, en une seule nuit, parviendrait à migrer toutes leurs images.",[42,43,45],"h3",{"id":44},"configuration-des-accès","Configuration des accès",[12,47,48],{},"Commençons par l'essentiel : les aspects liés à la sécurité. Nous voulions nous assurer que les équipes puissent exécuter cette migration avec un minimum d'autorisations sur AWS. Voici la politique de gestion des identités et des accès (IAM) en lecture seule dont vous avez besoin :",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-json shiki shiki-themes github-light","{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"ecr:GetAuthorizationToken\",\n                \"ecr:BatchCheckLayerAvailability\",\n                \"ecr:GetDownloadUrlForLayer\",\n                \"ecr:DescribeRepositories\",\n                \"ecr:ListImages\",\n                \"ecr:DescribeImages\",\n                \"ecr:BatchGetImage\"\n            ],\n            \"Resource\": \"*\"\n        }\n    ]\n}\n","json","",[57,58,59,68,85,94,100,113,121,129,137,145,153,161,169,175,181,192,198,204],"code",{"__ignoreMap":55},[60,61,64],"span",{"class":62,"line":63},"line",1,[60,65,67],{"class":66},"sgsFI","{\n",[60,69,71,75,78,82],{"class":62,"line":70},2,[60,72,74],{"class":73},"sYu0t","    \"Version\"",[60,76,77],{"class":66},": ",[60,79,81],{"class":80},"sYBdl","\"2012-10-17\"",[60,83,84],{"class":66},",\n",[60,86,88,91],{"class":62,"line":87},3,[60,89,90],{"class":73},"    \"Statement\"",[60,92,93],{"class":66},": [\n",[60,95,97],{"class":62,"line":96},4,[60,98,99],{"class":66},"        {\n",[60,101,103,106,108,111],{"class":62,"line":102},5,[60,104,105],{"class":73},"            \"Effect\"",[60,107,77],{"class":66},[60,109,110],{"class":80},"\"Allow\"",[60,112,84],{"class":66},[60,114,116,119],{"class":62,"line":115},6,[60,117,118],{"class":73},"            \"Action\"",[60,120,93],{"class":66},[60,122,124,127],{"class":62,"line":123},7,[60,125,126],{"class":80},"                \"ecr:GetAuthorizationToken\"",[60,128,84],{"class":66},[60,130,132,135],{"class":62,"line":131},8,[60,133,134],{"class":80},"                \"ecr:BatchCheckLayerAvailability\"",[60,136,84],{"class":66},[60,138,140,143],{"class":62,"line":139},9,[60,141,142],{"class":80},"                \"ecr:GetDownloadUrlForLayer\"",[60,144,84],{"class":66},[60,146,148,151],{"class":62,"line":147},10,[60,149,150],{"class":80},"                \"ecr:DescribeRepositories\"",[60,152,84],{"class":66},[60,154,156,159],{"class":62,"line":155},11,[60,157,158],{"class":80},"                \"ecr:ListImages\"",[60,160,84],{"class":66},[60,162,164,167],{"class":62,"line":163},12,[60,165,166],{"class":80},"                \"ecr:DescribeImages\"",[60,168,84],{"class":66},[60,170,172],{"class":62,"line":171},13,[60,173,174],{"class":80},"                \"ecr:BatchGetImage\"\n",[60,176,178],{"class":62,"line":177},14,[60,179,180],{"class":66},"            ],\n",[60,182,184,187,189],{"class":62,"line":183},15,[60,185,186],{"class":73},"            \"Resource\"",[60,188,77],{"class":66},[60,190,191],{"class":80},"\"*\"\n",[60,193,195],{"class":62,"line":194},16,[60,196,197],{"class":66},"        }\n",[60,199,201],{"class":62,"line":200},17,[60,202,203],{"class":66},"    ]\n",[60,205,207],{"class":62,"line":206},18,[60,208,209],{"class":66},"}\n",[42,211,213],{"id":212},"configuration-de-gitlab","Configuration de GitLab",[12,215,216],{},"Une fois la sécurité en place, l'étape suivante consiste à configurer GitLab. Nous avons volontairement réduit cela au strict minimum : il vous suffit de configurer les variables suivantes dans les paramètres CI/CD de votre projet :",[50,218,222],{"className":219,"code":220,"language":221,"meta":55,"style":55},"language-yaml shiki shiki-themes github-light","AWS_ACCOUNT_ID: Your AWS account number\nAWS_DEFAULT_REGION: Your ECR region\nAWS_ACCESS_KEY_ID: [Masked]\nAWS_SECRET_ACCESS_KEY: [Masked]\nBULK_MIGRATE: true\n","yaml",[57,223,224,235,245,259,270],{"__ignoreMap":55},[60,225,226,230,232],{"class":62,"line":63},[60,227,229],{"class":228},"shJU0","AWS_ACCOUNT_ID",[60,231,77],{"class":66},[60,233,234],{"class":80},"Your AWS account number\n",[60,236,237,240,242],{"class":62,"line":70},[60,238,239],{"class":228},"AWS_DEFAULT_REGION",[60,241,77],{"class":66},[60,243,244],{"class":80},"Your ECR region\n",[60,246,247,250,253,256],{"class":62,"line":87},[60,248,249],{"class":228},"AWS_ACCESS_KEY_ID",[60,251,252],{"class":66},": [",[60,254,255],{"class":80},"Masked",[60,257,258],{"class":66},"]\n",[60,260,261,264,266,268],{"class":62,"line":96},[60,262,263],{"class":228},"AWS_SECRET_ACCESS_KEY",[60,265,252],{"class":66},[60,267,255],{"class":80},[60,269,258],{"class":66},[60,271,272,275,277],{"class":62,"line":102},[60,273,274],{"class":228},"BULK_MIGRATE",[60,276,77],{"class":66},[60,278,279],{"class":73},"true\n",[42,281,283],{"id":282},"le-pipeline-de-migration","Le pipeline de migration",[12,285,286,287,292],{},"Passons maintenant à la partie la plus intéressante. Nous avons créé le pipeline en utilisant ",[27,288,291],{"href":289,"rel":290,"title":291},"https://about.gitlab.com/fr-fr/blog/what-is-docker-comprehensive-guide/",[],"Docker","-in-Docker pour gérer toutes les opérations liées aux images de manière fiable :",[50,294,296],{"className":219,"code":295,"language":221,"meta":55,"style":55},"image: docker:20.10\nservices:\n  - docker:20.10-dind\n\nbefore_script:\n  - apk add --no-cache aws-cli jq\n  - aws sts get-caller-identity\n  - aws ecr get-login-password | docker login --username AWS --password-stdin\n  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}\n",[57,297,298,308,316,324,330,337,344,351,358],{"__ignoreMap":55},[60,299,300,303,305],{"class":62,"line":63},[60,301,302],{"class":228},"image",[60,304,77],{"class":66},[60,306,307],{"class":80},"docker:20.10\n",[60,309,310,313],{"class":62,"line":70},[60,311,312],{"class":228},"services",[60,314,315],{"class":66},":\n",[60,317,318,321],{"class":62,"line":87},[60,319,320],{"class":66},"  - ",[60,322,323],{"class":80},"docker:20.10-dind\n",[60,325,326],{"class":62,"line":96},[60,327,329],{"emptyLinePlaceholder":328},true,"\n",[60,331,332,335],{"class":62,"line":102},[60,333,334],{"class":228},"before_script",[60,336,315],{"class":66},[60,338,339,341],{"class":62,"line":115},[60,340,320],{"class":66},[60,342,343],{"class":80},"apk add --no-cache aws-cli jq\n",[60,345,346,348],{"class":62,"line":123},[60,347,320],{"class":66},[60,349,350],{"class":80},"aws sts get-caller-identity\n",[60,352,353,355],{"class":62,"line":131},[60,354,320],{"class":66},[60,356,357],{"class":80},"aws ecr get-login-password | docker login --username AWS --password-stdin\n",[60,359,360,362],{"class":62,"line":139},[60,361,320],{"class":66},[60,363,364],{"class":80},"docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}\n",[12,366,367],{},"Le pipeline fonctionne en trois phases, chacune s'appuyant sur la précédente :",[369,370,371],"ol",{},[372,373,374],"li",{},"Identification",[12,376,377],{},"Dans un premier temps, il détecte l'ensemble de vos dépôts :",[50,379,383],{"className":380,"code":381,"language":382,"meta":55,"style":55},"language-bash shiki shiki-themes github-light","REPOS=$(aws ecr describe-repositories --query 'repositories[*].repositoryName' --output text)\n","bash",[57,384,385],{"__ignoreMap":55},[60,386,387,390,394,397,401,404,407,410,413,416,419],{"class":62,"line":63},[60,388,389],{"class":66},"REPOS",[60,391,393],{"class":392},"sD7c4","=",[60,395,396],{"class":66},"$(",[60,398,400],{"class":399},"s7eDp","aws",[60,402,403],{"class":80}," ecr",[60,405,406],{"class":80}," describe-repositories",[60,408,409],{"class":73}," --query",[60,411,412],{"class":80}," 'repositories[*].repositoryName'",[60,414,415],{"class":73}," --output",[60,417,418],{"class":80}," text",[60,420,421],{"class":66},")\n",[369,423,424],{"start":70},[372,425,426],{},"Énumération des tags",[12,428,429],{},"Ensuite, pour chaque dépôt, il récupère l'ensemble des tags :",[50,431,433],{"className":380,"code":432,"language":382,"meta":55,"style":55},"TAGS=$(aws ecr describe-images --repository-name $repo --query 'imageDetails[*].imageTags[]' --output text)\n",[57,434,435],{"__ignoreMap":55},[60,436,437,440,442,444,446,448,451,454,457,460,463,465,467],{"class":62,"line":63},[60,438,439],{"class":66},"TAGS",[60,441,393],{"class":392},[60,443,396],{"class":66},[60,445,400],{"class":399},[60,447,403],{"class":80},[60,449,450],{"class":80}," describe-images",[60,452,453],{"class":73}," --repository-name",[60,455,456],{"class":66}," $repo ",[60,458,459],{"class":73},"--query",[60,461,462],{"class":80}," 'imageDetails[*].imageTags[]'",[60,464,415],{"class":73},[60,466,418],{"class":80},[60,468,421],{"class":66},[369,470,471],{"start":87},[372,472,473],{},"Transfert",[12,475,476],{},"Enfin, il gère la migration proprement dite :",[50,478,480],{"className":380,"code":479,"language":382,"meta":55,"style":55},"docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}\ndocker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag} ${CI_REGISTRY_IMAGE}/${repo}:${tag}\ndocker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}\n",[57,481,482,511,542],{"__ignoreMap":55},[60,483,484,487,490,493,496,499,502,505,508],{"class":62,"line":63},[60,485,486],{"class":399},"docker",[60,488,489],{"class":80}," pull",[60,491,492],{"class":66}," ${AWS_ACCOUNT_ID}",[60,494,495],{"class":80},".dkr.ecr.",[60,497,498],{"class":66},"${AWS_DEFAULT_REGION}",[60,500,501],{"class":80},".amazonaws.com/",[60,503,504],{"class":66},"${repo}",[60,506,507],{"class":80},":",[60,509,510],{"class":66},"${tag}\n",[60,512,513,515,518,520,522,524,526,528,530,533,536,538,540],{"class":62,"line":70},[60,514,486],{"class":399},[60,516,517],{"class":80}," tag",[60,519,492],{"class":66},[60,521,495],{"class":80},[60,523,498],{"class":66},[60,525,501],{"class":80},[60,527,504],{"class":66},[60,529,507],{"class":80},[60,531,532],{"class":66},"${tag} ${CI_REGISTRY_IMAGE}",[60,534,535],{"class":80},"/",[60,537,504],{"class":66},[60,539,507],{"class":80},[60,541,510],{"class":66},[60,543,544,546,549,552,554,556,558],{"class":62,"line":87},[60,545,486],{"class":399},[60,547,548],{"class":80}," push",[60,550,551],{"class":66}," ${CI_REGISTRY_IMAGE}",[60,553,535],{"class":80},[60,555,504],{"class":66},[60,557,507],{"class":80},[60,559,510],{"class":66},[19,561,563],{"id":562},"résultats","Résultats",[12,565,566],{},"Voici ce que cette solution offre comme avantages aux ingénieurs de plateforme qui ne veulent pas passer plusieurs semaines sur la migration :",[568,569,570,573,576,579],"ul",{},[372,571,572],{},"Identification et migration automatisées de l'ensemble des dépôts et tags",[372,574,575],{},"Dénomination cohérente des images entre ECR et GitLab",[372,577,578],{},"Gestion des échecs de transferts",[372,580,581],{},"Journalisation claire pour suivre la progression",[12,583,584],{},"Au lieu d'écrire des scripts et de surveiller la migration, l'ingénieur de plateforme peut se concentrer sur des tâches à plus grande valeur ajoutée.",[19,586,588],{"id":587},"utilisation","Utilisation",[12,590,591],{},"La première étape est très simple :",[369,593,594,601,604],{},[372,595,596,597,600],{},"Copiez le fichier ",[57,598,599],{},".gitlab-ci.yml"," dans votre dépôt.",[372,602,603],{},"Configurez les variables AWS et GitLab.",[372,605,606,607,609],{},"Définissez ",[57,608,274],{}," sur « true » pour déclencher la migration.",[19,611,613],{"id":612},"bonnes-pratiques","Bonnes pratiques",[12,615,616],{},"En accompagnant plusieurs équipes dans leur migration, nous avons tiré quelques enseignements pratiques :",[568,618,619,622,625,628],{},[372,620,621],{},"Exécutez la migration en dehors des heures de pointe pour réduire au maximum l'impact sur votre équipe.",[372,623,624],{},"Consultez les logs de pipeline qui vous indiqueront si un élément nécessite votre attention.",[372,626,627],{},"Ne désactivez pas votre registre ECR avant d'avoir vérifié que toutes les images ont bien été transférées.",[372,629,630],{},"Pour les migrations à grande échelle, envisagez d'ajouter une limite de débit pour éviter de saturer votre réseau.",[12,632,633,634,640],{},"Nous mettons ce pipeline à disposition en open source dans notre dépôt GitLab public, car nous sommes convaincus que les ingénieurs de plateforme devraient passer leur temps à créer de la valeur, plutôt qu'à copier des images de conteneurs. N'hésitez pas à l'adapter à vos besoins ou à poser vos questions sur sa mise en œuvre. Consultez notre documentation pour en savoir plus sur les ",[27,635,639],{"href":636,"rel":637,"title":638},"https://gitlab.com/explore/catalog/components/package",[],"Catalogues CI/CD","catalogues CI/CD",".",[642,643,644],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}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 .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}",{"title":55,"searchDepth":70,"depth":70,"links":646},[647,648,653,654,655],{"id":21,"depth":70,"text":22},{"id":36,"depth":70,"text":37,"children":649},[650,651,652],{"id":44,"depth":87,"text":45},{"id":212,"depth":87,"text":213},{"id":282,"depth":87,"text":283},{"id":562,"depth":70,"text":563},{"id":587,"depth":70,"text":588},{"id":612,"depth":70,"text":613},"engineering","2025-02-13","Suivez ce guide étape par étape pour automatiser le processus de migration de vos images de conteneurs d’Amazon ECR vers GitLab.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663129/Blog/Hero%20Images/blog-image-template-1800x945__28_.png",{},"/fr-fr/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",{"title":5,"description":658,"ogTitle":5,"ogDescription":658,"noIndex":665,"ogImage":661,"ogUrl":666,"ogSiteName":667,"ogType":668,"canonicalUrls":666},false,"https://about.gitlab.com/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab","https://about.gitlab.com","article","automating-container-image-migration-from-amazon-ecr-to-gitlab","fr-fr/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",[672,673,674,675,676,677],"CI/CD","AWS","tutorial","DevSecOps platform","product","solutions architecture","BlogPost","2025-04-07","oYfY46P_YXNhiUxc-6ebfI_YO-DfxTsH76y_fzfy1NY",{"logo":682,"freeTrial":687,"sales":692,"login":697,"items":702,"search":1029,"minimal":1065,"duo":1084,"switchNav":1093,"pricingDeployment":1104},{"config":683},{"href":684,"dataGaName":685,"dataGaLocation":686},"/fr-fr/","gitlab logo","header",{"text":688,"config":689},"Commencer un essai gratuit",{"href":690,"dataGaName":691,"dataGaLocation":686},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":693,"config":694},"Demander une démo",{"href":695,"dataGaName":696,"dataGaLocation":686},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":698,"config":699},"Connexion",{"href":700,"dataGaName":701,"dataGaLocation":686},"https://gitlab.com/users/sign_in/","sign in",[703,732,833,838,951,1007],{"text":704,"config":705,"menu":707},"Plateforme",{"dataNavLevelOne":706},"platform",{"type":708,"columns":709},"cards",[710,716,724],{"title":704,"description":711,"link":712},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":713,"config":714},"Explorer notre plateforme",{"href":715,"dataGaName":706,"dataGaLocation":686},"/fr-fr/platform/",{"title":717,"description":718,"link":719},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":720,"config":721},"Découvrir GitLab Duo",{"href":722,"dataGaName":723,"dataGaLocation":686},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":725,"description":726,"link":727},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":728,"config":729},"En savoir plus",{"href":730,"dataGaName":731,"dataGaLocation":686},"/fr-fr/why-gitlab/","why gitlab",{"text":733,"left":328,"config":734,"menu":736},"Produit",{"dataNavLevelOne":735},"solutions",{"type":737,"link":738,"columns":742,"feature":812},"lists",{"text":739,"config":740},"Voir toutes les solutions",{"href":741,"dataGaName":735,"dataGaLocation":686},"/fr-fr/solutions/",[743,767,790],{"title":744,"description":745,"link":746,"items":751},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":747},{"icon":748,"href":749,"dataGaName":750,"dataGaLocation":686},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[752,755,758,763],{"text":672,"config":753},{"href":754,"dataGaLocation":686,"dataGaName":672},"/fr-fr/solutions/continuous-integration/",{"text":717,"config":756},{"href":722,"dataGaLocation":686,"dataGaName":757},"gitlab duo agent platform - product menu",{"text":759,"config":760},"Gestion du code source",{"href":761,"dataGaLocation":686,"dataGaName":762},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":764,"config":765},"Livraison de logiciels automatisée",{"href":749,"dataGaLocation":686,"dataGaName":766},"Automated software delivery",{"title":768,"description":769,"link":770,"items":775},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":771},{"href":772,"dataGaName":773,"dataGaLocation":686,"icon":774},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[776,780,785],{"text":777,"config":778},"Tests de sécurité des applications",{"href":772,"dataGaName":779,"dataGaLocation":686},"Application security testing",{"text":781,"config":782},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":783,"dataGaLocation":686,"dataGaName":784},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":786,"config":787},"Conformité logicielle",{"href":788,"dataGaName":789,"dataGaLocation":686},"/fr-fr/solutions/software-compliance/","software compliance",{"title":791,"link":792,"items":797},"Mesures",{"config":793},{"icon":794,"href":795,"dataGaName":796,"dataGaLocation":686},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[798,802,807],{"text":799,"config":800},"Visibilité et mesures",{"href":795,"dataGaLocation":686,"dataGaName":801},"Visibility and Measurement",{"text":803,"config":804},"Gestion de la chaîne de valeur",{"href":805,"dataGaLocation":686,"dataGaName":806},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":808,"config":809},"Analyses et informations",{"href":810,"dataGaLocation":686,"dataGaName":811},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":813,"type":737,"items":814},"GitLab",[815,821,827],{"text":816,"config":817},"Entreprises",{"icon":818,"href":819,"dataGaLocation":686,"dataGaName":820},"Building","/fr-fr/enterprise/","enterprise",{"text":822,"config":823},"Pour les PME",{"icon":824,"href":825,"dataGaLocation":686,"dataGaName":826},"Work","/fr-fr/small-business/","small business",{"text":828,"config":829},"Pour le secteur public",{"icon":830,"href":831,"dataGaLocation":686,"dataGaName":832},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":834,"config":835},"Tarifs",{"href":836,"dataGaName":837,"dataGaLocation":686,"dataNavLevelOne":837},"/fr-fr/pricing/","pricing",{"text":839,"config":840,"menu":842},"Ressources",{"dataNavLevelOne":841},"resources",{"type":737,"link":843,"columns":847,"feature":940},{"text":844,"config":845},"Afficher toutes les ressources",{"href":846,"dataGaName":841,"dataGaLocation":686},"/fr-fr/resources/",[848,881,908],{"title":849,"items":850},"Premiers pas",[851,856,861,866,871,876],{"text":852,"config":853},"Installation",{"href":854,"dataGaName":855,"dataGaLocation":686},"/fr-fr/install/","install",{"text":857,"config":858},"Guides de démarrage",{"href":859,"dataGaName":860,"dataGaLocation":686},"/fr-fr/get-started/","quick setup checklists",{"text":862,"config":863},"Apprentissage",{"href":864,"dataGaLocation":686,"dataGaName":865},"https://university.gitlab.com/","learn",{"text":867,"config":868},"Documentation",{"href":869,"dataGaName":870,"dataGaLocation":686},"https://docs.gitlab.com/","product documentation",{"text":872,"config":873},"Vidéos sur les bonnes pratiques",{"href":874,"dataGaName":875,"dataGaLocation":686},"/fr-fr/getting-started-videos/","best practice videos",{"text":877,"config":878},"Intégrations",{"href":879,"dataGaName":880,"dataGaLocation":686},"/fr-fr/integrations/","integrations",{"title":882,"items":883},"Découvrir",[884,889,894,899,903],{"text":885,"config":886},"Témoignages clients",{"href":887,"dataGaName":888,"dataGaLocation":686},"/fr-fr/customers/","customer success stories",{"text":890,"config":891},"Blog",{"href":892,"dataGaName":893,"dataGaLocation":686},"/fr-fr/blog/","blog",{"text":895,"config":896},"Demo Hub",{"href":897,"dataGaName":898,"dataGaLocation":686},"/fr-fr/demo-hub/","demo hub",{"text":900,"config":901},"The Source",{"href":902,"dataGaName":893,"dataGaLocation":686},"/fr-fr/the-source/",{"text":904,"config":905},"Travail à distance",{"href":906,"dataGaName":907,"dataGaLocation":686},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":909,"items":910},"Connecter",[911,915,920,925,930,935],{"text":912,"config":913},"Services GitLab",{"href":914,"dataGaName":312,"dataGaLocation":686},"/fr-fr/services/",{"text":916,"config":917},"Contribuer",{"href":918,"dataGaName":919,"dataGaLocation":686},"https://contributors.gitlab.com","contribute",{"text":921,"config":922},"Communauté",{"href":923,"dataGaName":924,"dataGaLocation":686},"/community/","community",{"text":926,"config":927},"Forum",{"href":928,"dataGaName":929,"dataGaLocation":686},"https://forum.gitlab.com/","forum",{"text":931,"config":932},"Événements",{"href":933,"dataGaName":934,"dataGaLocation":686},"/events/","events",{"text":936,"config":937},"Partenaires",{"href":938,"dataGaName":939,"dataGaLocation":686},"/fr-fr/partners/","partners",{"config":941,"title":944,"text":945,"link":946},{"background":942,"textColor":943},"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":947,"config":948},"Lire les articles les plus récents",{"href":949,"dataGaName":950,"dataGaLocation":686},"/fr-fr/whats-new/","whats new",{"text":952,"config":953,"menu":955},"Société",{"dataNavLevelOne":954},"company",{"type":737,"columns":956},[957],{"items":958},[959,964,970,972,977,982,987,992,997,1002],{"text":960,"config":961},"À propos",{"href":962,"dataGaName":963,"dataGaLocation":686},"/fr-fr/company/","about",{"text":965,"config":966,"footerGa":969},"Carrières",{"href":967,"dataGaName":968,"dataGaLocation":686},"/jobs/","jobs",{"dataGaName":968},{"text":931,"config":971},{"href":933,"dataGaName":934,"dataGaLocation":686},{"text":973,"config":974},"Leadership",{"href":975,"dataGaName":976,"dataGaLocation":686},"/company/team/e-group/","leadership",{"text":978,"config":979},"Manuel",{"href":980,"dataGaName":981,"dataGaLocation":686},"https://handbook.gitlab.com/","handbook",{"text":983,"config":984},"Relations avec les investisseurs",{"href":985,"dataGaName":986,"dataGaLocation":686},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":988,"config":989},"Trust Center",{"href":990,"dataGaName":991,"dataGaLocation":686},"/fr-fr/security/","trust center",{"text":993,"config":994},"Centre pour la transparence de l'IA",{"href":995,"dataGaName":996,"dataGaLocation":686},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":998,"config":999},"Newsletter",{"href":1000,"dataGaName":1001,"dataGaLocation":686},"/company/contact/#contact-forms","newsletter",{"text":1003,"config":1004},"Presse",{"href":1005,"dataGaName":1006,"dataGaLocation":686},"/press/","press",{"text":1008,"config":1009,"menu":1010},"Nous contacter",{"dataNavLevelOne":954},{"type":737,"columns":1011},[1012],{"items":1013},[1014,1019,1024],{"text":1015,"config":1016},"Contacter l'équipe commerciale",{"href":1017,"dataGaName":1018,"dataGaLocation":686},"/fr-fr/sales/","talk to sales",{"text":1020,"config":1021},"Assistance GitLab",{"href":1022,"dataGaName":1023,"dataGaLocation":686},"https://support.gitlab.com/hc/en-us","support portal",{"text":1025,"config":1026},"Portail clients GitLab",{"href":1027,"dataGaName":1028,"dataGaLocation":686},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1030,"login":1031,"suggestions":1038},"Fermer",{"text":1032,"link":1033},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1034,"config":1035},"GitLab.com",{"href":700,"dataGaName":1036,"dataGaLocation":1037},"search login","search",{"text":1039,"default":1040},"Suggestions",[1041,1044,1049,1051,1056,1061],{"text":717,"config":1042},{"href":722,"dataGaName":1043,"dataGaLocation":1037},"GitLab Duo Agent Platform",{"text":1045,"config":1046},"Suggestions de code (IA)",{"href":1047,"dataGaName":1048,"dataGaLocation":1037},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":672,"config":1050},{"href":754,"dataGaName":672,"dataGaLocation":1037},{"text":1052,"config":1053},"GitLab sur AWS",{"href":1054,"dataGaName":1055,"dataGaLocation":1037},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1057,"config":1058},"GitLab sur Google Cloud",{"href":1059,"dataGaName":1060,"dataGaLocation":1037},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1062,"config":1063},"Pourquoi utiliser GitLab ?",{"href":730,"dataGaName":1064,"dataGaLocation":1037},"Why GitLab?",{"freeTrial":1066,"mobileIcon":1071,"desktopIcon":1076,"secondaryButton":1079},{"text":1067,"config":1068},"Commencer votre essai gratuit",{"href":1069,"dataGaName":691,"dataGaLocation":1070},"https://gitlab.com/-/trials/new/","nav",{"altText":1072,"config":1073},"Icône GitLab",{"src":1074,"dataGaName":1075,"dataGaLocation":1070},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1072,"config":1077},{"src":1078,"dataGaName":1075,"dataGaLocation":1070},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1080,"config":1081},"Commencer",{"href":1082,"dataGaName":1083,"dataGaLocation":1070},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1085,"mobileIcon":1089,"desktopIcon":1091},{"text":1086,"config":1087},"En savoir plus sur GitLab Duo",{"href":722,"dataGaName":1088,"dataGaLocation":1070},"gitlab duo",{"altText":1072,"config":1090},{"src":1074,"dataGaName":1075,"dataGaLocation":1070},{"altText":1072,"config":1092},{"src":1078,"dataGaName":1075,"dataGaLocation":1070},{"button":1094,"mobileIcon":1099,"desktopIcon":1101},{"text":1095,"config":1096},"/switch",{"href":1097,"dataGaName":1098,"dataGaLocation":1070},"#contact","switch",{"altText":1072,"config":1100},{"src":1074,"dataGaName":1075,"dataGaLocation":1070},{"altText":1072,"config":1102},{"src":1103,"dataGaName":1075,"dataGaLocation":1070},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1105,"mobileIcon":1110,"desktopIcon":1112},{"text":1106,"config":1107},"Retour aux tarifs",{"href":836,"dataGaName":1108,"dataGaLocation":1070,"icon":1109},"back to pricing","GoBack",{"altText":1072,"config":1111},{"src":1074,"dataGaName":1075,"dataGaLocation":1070},{"altText":1072,"config":1113},{"src":1078,"dataGaName":1075,"dataGaLocation":1070},{"title":1115,"button":1116,"config":1120},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":728,"config":1117},{"href":1118,"dataGaName":1119,"dataGaLocation":686},"/fr-fr/gitlab-orbit/","orbit",{"layout":1121,"disabled":665},"release",{"data":1123},{"text":1124,"source":1125,"edit":1131,"contribute":1136,"config":1140,"items":1145,"minimal":1353},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1126,"config":1127},"Afficher le code source de la page",{"href":1128,"dataGaName":1129,"dataGaLocation":1130},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1132,"config":1133},"Modifier cette page",{"href":1134,"dataGaName":1135,"dataGaLocation":1130},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":916,"config":1137},{"href":1138,"dataGaName":1139,"dataGaLocation":1130},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1141,"facebook":1142,"youtube":1143,"linkedin":1144},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1146,1192,1245,1288,1320],{"title":834,"links":1147,"subMenu":1162},[1148,1152,1157],{"text":1149,"config":1150},"Voir les forfaits",{"href":836,"dataGaName":1151,"dataGaLocation":1130},"view plans",{"text":1153,"config":1154},"GitLab Premium",{"href":1155,"dataGaName":1156,"dataGaLocation":1130},"/fr-fr/pricing/premium/","why premium",{"text":1158,"config":1159},"GitLab Ultimate",{"href":1160,"dataGaName":1161,"dataGaLocation":1130},"/fr-fr/pricing/ultimate/","why ultimate",[1163],{"title":1008,"links":1164},[1165,1167,1169,1172,1177,1182,1187],{"text":1015,"config":1166},{"href":1017,"dataGaName":696,"dataGaLocation":1130},{"text":1020,"config":1168},{"href":1022,"dataGaName":1023,"dataGaLocation":1130},{"text":1170,"config":1171},"Portail clients",{"href":1027,"dataGaName":1028,"dataGaLocation":1130},{"text":1173,"config":1174},"Statut",{"href":1175,"dataGaName":1176,"dataGaLocation":1130},"https://status.gitlab.com/","status",{"text":1178,"config":1179},"Conditions d'utilisation",{"href":1180,"dataGaName":1181,"dataGaLocation":1130},"/terms/","terms of use",{"text":1183,"config":1184},"Politique de confidentialité",{"href":1185,"dataGaName":1186,"dataGaLocation":1130},"/fr-fr/privacy/","privacy statement",{"text":1188,"config":1189},"Gestion des cookies",{"dataGaName":1190,"dataGaLocation":1130,"id":1191,"isOneTrustButton":328},"cookie preferences","ot-sdk-btn",{"title":733,"links":1193,"subMenu":1202},[1194,1198],{"text":1195,"config":1196},"Plateforme DevSecOps",{"href":715,"dataGaName":1197,"dataGaLocation":1130},"devsecops platform",{"text":1199,"config":1200},"Développement assisté par l'IA",{"href":722,"dataGaName":1201,"dataGaLocation":1130},"ai-assisted development",[1203],{"title":1204,"links":1205},"Thèmes",[1206,1210,1215,1220,1225,1230,1235,1240],{"text":672,"config":1207},{"href":1208,"dataGaName":1209,"dataGaLocation":1130},"/fr-fr/topics/ci-cd/","cicd",{"text":1211,"config":1212},"GitOps",{"href":1213,"dataGaName":1214,"dataGaLocation":1130},"/fr-fr/topics/gitops/","gitops",{"text":1216,"config":1217},"DevOps",{"href":1218,"dataGaName":1219,"dataGaLocation":1130},"/fr-fr/topics/devops/","devops",{"text":1221,"config":1222},"Contrôle de version",{"href":1223,"dataGaName":1224,"dataGaLocation":1130},"/fr-fr/topics/version-control/","version control",{"text":1226,"config":1227},"DevSecOps",{"href":1228,"dataGaName":1229,"dataGaLocation":1130},"/fr-fr/topics/devsecops/","devsecops",{"text":1231,"config":1232},"Cloud-native",{"href":1233,"dataGaName":1234,"dataGaLocation":1130},"/fr-fr/topics/cloud-native/","cloud native",{"text":1236,"config":1237},"IA pour la programmation",{"href":1238,"dataGaName":1239,"dataGaLocation":1130},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1241,"config":1242},"IA agentique",{"href":1243,"dataGaName":1244,"dataGaLocation":1130},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1246,"links":1247},"Solutions",[1248,1251,1253,1258,1261,1264,1267,1270,1272,1275,1278,1283],{"text":777,"config":1249},{"href":772,"dataGaName":1250,"dataGaLocation":1130},"Application Security Testing",{"text":764,"config":1252},{"href":749,"dataGaName":750,"dataGaLocation":1130},{"text":1254,"config":1255},"Développement Agile",{"href":1256,"dataGaName":1257,"dataGaLocation":1130},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":759,"config":1259},{"href":761,"dataGaName":1260,"dataGaLocation":1130},"source code management",{"text":672,"config":1262},{"href":754,"dataGaName":1263,"dataGaLocation":1130},"continuous integration & delivery",{"text":803,"config":1265},{"href":805,"dataGaName":1266,"dataGaLocation":1130},"value stream management",{"text":1211,"config":1268},{"href":1269,"dataGaName":1214,"dataGaLocation":1130},"/fr-fr/solutions/gitops/",{"text":816,"config":1271},{"href":819,"dataGaName":820,"dataGaLocation":1130},{"text":1273,"config":1274},"PME",{"href":825,"dataGaName":826,"dataGaLocation":1130},{"text":1276,"config":1277},"Secteur public",{"href":831,"dataGaName":832,"dataGaLocation":1130},{"text":1279,"config":1280},"Éducation",{"href":1281,"dataGaName":1282,"dataGaLocation":1130},"/fr-fr/solutions/education/","education",{"text":1284,"config":1285},"Services financiers",{"href":1286,"dataGaName":1287,"dataGaLocation":1130},"/fr-fr/solutions/finance/","financial services",{"title":839,"links":1289},[1290,1292,1294,1296,1299,1301,1304,1306,1308,1310,1312,1314,1316,1318],{"text":852,"config":1291},{"href":854,"dataGaName":855,"dataGaLocation":1130},{"text":857,"config":1293},{"href":859,"dataGaName":860,"dataGaLocation":1130},{"text":862,"config":1295},{"href":864,"dataGaName":865,"dataGaLocation":1130},{"text":867,"config":1297},{"href":869,"dataGaName":1298,"dataGaLocation":1130},"docs",{"text":890,"config":1300},{"href":892,"dataGaName":893,"dataGaLocation":1130},{"text":1302,"config":1303},"Nouveautés",{"href":949,"dataGaName":950,"dataGaLocation":1130},{"text":885,"config":1305},{"href":887,"dataGaName":888,"dataGaLocation":1130},{"text":904,"config":1307},{"href":906,"dataGaName":907,"dataGaLocation":1130},{"text":912,"config":1309},{"href":914,"dataGaName":312,"dataGaLocation":1130},{"text":916,"config":1311},{"href":918,"dataGaName":919,"dataGaLocation":1130},{"text":921,"config":1313},{"href":923,"dataGaName":924,"dataGaLocation":1130},{"text":926,"config":1315},{"href":928,"dataGaName":929,"dataGaLocation":1130},{"text":931,"config":1317},{"href":933,"dataGaName":934,"dataGaLocation":1130},{"text":936,"config":1319},{"href":938,"dataGaName":939,"dataGaLocation":1130},{"title":952,"links":1321},[1322,1324,1326,1328,1330,1332,1337,1342,1344,1346,1348],{"text":960,"config":1323},{"href":962,"dataGaName":954,"dataGaLocation":1130},{"text":965,"config":1325},{"href":967,"dataGaName":968,"dataGaLocation":1130},{"text":973,"config":1327},{"href":975,"dataGaName":976,"dataGaLocation":1130},{"text":978,"config":1329},{"href":980,"dataGaName":981,"dataGaLocation":1130},{"text":983,"config":1331},{"href":985,"dataGaName":986,"dataGaLocation":1130},{"text":1333,"config":1334},"Développement durable",{"href":1335,"dataGaName":1336,"dataGaLocation":1130},"/sustainability/","Sustainability",{"text":1338,"config":1339},"Diversité, inclusion et appartenance (DIB)",{"href":1340,"dataGaName":1341,"dataGaLocation":1130},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":988,"config":1343},{"href":990,"dataGaName":991,"dataGaLocation":1130},{"text":998,"config":1345},{"href":1000,"dataGaName":1001,"dataGaLocation":1130},{"text":1003,"config":1347},{"href":1005,"dataGaName":1006,"dataGaLocation":1130},{"text":1349,"config":1350},"Déclaration de transparence sur l'esclavage moderne",{"href":1351,"dataGaName":1352,"dataGaLocation":1130},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1354},[1355,1357,1359],{"text":1178,"config":1356},{"href":1180,"dataGaName":1181,"dataGaLocation":1130},{"text":1188,"config":1358},{"dataGaName":1190,"dataGaLocation":1130,"id":1191,"isOneTrustButton":328},{"text":1183,"config":1360},{"href":1185,"dataGaName":1186,"dataGaLocation":1130},[1362],{"id":1363,"title":7,"body":660,"config":1364,"content":1366,"description":660,"extension":1370,"meta":1371,"navigation":328,"path":1372,"seo":1373,"stem":1374,"__hash__":1375},"blogAuthors/en-us/blog/authors/tim-rizzi.yml",{"template":1365},"BlogAuthor",{"name":7,"config":1367},{"headshot":1368,"ctfId":1369},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661866/Blog/Author%20Headshots/trizzi-headshot.jpg","trizzi","yml",{},"/en-us/blog/authors/tim-rizzi",{},"en-us/blog/authors/tim-rizzi","ADPqrpcnKveFJS0m_zFV0VLtb_h_txu59QVgz_YwKMc",[1377,1385,1393],{"title":1378,"description":1379,"heroImage":1380,"category":656,"date":1381,"authors":1382,"slug":1384,"externalUrl":660},"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",[1383],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1386,"description":1387,"heroImage":1388,"category":656,"date":1389,"authors":1390,"slug":1392,"externalUrl":660},"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",[1391],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"title":1394,"description":1395,"heroImage":1396,"category":656,"date":1397,"authors":1398,"slug":1400,"externalUrl":660},"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",[1399],"Omid Khan","5-ways-gitlab-pipeline-logic-solves-real-engineering-problems",{"promotions":1402},[1403,1417,1428,1440],{"id":1404,"categories":1405,"header":1407,"text":1408,"button":1409,"image":1414},"ai-modernization",[1406],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":1410,"config":1411},"Obtenez votre score de maturité IA",{"href":1412,"dataGaName":1413,"dataGaLocation":893},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":1415},{"src":1416},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1418,"categories":1419,"header":1420,"text":1408,"button":1421,"image":1425},"devops-modernization",[676,1229],"Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":1422,"config":1423},"Obtenez votre score de maturité DevOps",{"href":1424,"dataGaName":1413,"dataGaLocation":893},"/fr-fr/assessments/devops-modernization-assessment/",{"config":1426},{"src":1427},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1429,"categories":1430,"header":1432,"text":1408,"button":1433,"image":1437},"security-modernization",[1431],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":1434,"config":1435},"Obtenez votre score de maturité en matière de sécurité",{"href":1436,"dataGaName":1413,"dataGaLocation":893},"/fr-fr/assessments/security-modernization-assessment/",{"config":1438},{"src":1439},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1441,"paths":1442,"header":1445,"text":1446,"button":1447,"image":1452},"github-azure-migration",[1443,1444],"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":1448,"config":1449},"Découvrez les différences entre GitLab et GitHub",{"href":1450,"dataGaName":1451,"dataGaLocation":893},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1453},{"src":1427},{"header":1455,"blurb":1456,"button":1457,"secondaryButton":1461},"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":688,"config":1458},{"href":1459,"dataGaName":691,"dataGaLocation":1460},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":1015,"config":1462},{"href":1017,"dataGaName":696,"dataGaLocation":1460},1786803775834]