[{"data":1,"prerenderedAt":2181},["ShallowReactive",2],{"/fr-fr/blog/give-your-ai-agent-direct-structured-gitlab-access-with-glab-cli":3,"navigation-fr-fr":1409,"banner-fr-fr":1832,"footer-fr-fr":1841,"blog-post-authors-fr-fr-Kai Armstrong":2082,"blog-related-posts-fr-fr-give-your-ai-agent-direct-structured-gitlab-access-with-glab-cli":2097,"blog-promotions-fr-fr":2120,"next-steps-fr-fr":2172},{"id":4,"title":5,"authors":6,"body":8,"category":1388,"date":1389,"description":1390,"extension":1391,"externalUrl":1392,"featured":1393,"heroImage":1394,"meta":1395,"navigation":553,"path":1396,"seo":1397,"slug":1401,"stem":1402,"tags":1403,"template":1407,"updatedDate":1392,"__hash__":1408},"blogPosts/fr-fr/blog/give-your-ai-agent-direct-structured-gitlab-access-with-glab-cli.md","Agents d'IA et glab CLI : offrez un accès direct et structuré à GitLab",[7],"Kai Armstrong",{"type":9,"value":10,"toc":1376},"minimark",[11,20,26,32,38,43,56,59,62,94,112,125,128,132,138,143,146,177,180,506,513,517,520,600,746,749,753,759,762,770,776,869,872,881,956,962,966,999,1005,1009,1019,1025,1028,1111,1117,1124,1182,1290,1293,1297,1303,1317,1323,1329,1345,1366,1372],[12,13,14,15,19],"p",{},"Lorsque les équipes utilisent GitLab Duo, Claude, Cursor et d'autres assistants d'IA, une part croissante du workflow de développement passe par un agent d'IA qui agit en votre nom : lecture des tickets, revue des merge requests, exécution des pipelines et livraison plus rapide du code. La plupart des équipes de développement utilisent déjà GitLab CLI (",[16,17,18],"code",{},"glab",") depuis leur terminal pour interagir avec GitLab. Combiner les deux est l'étape logique suivante.",[12,21,22,23,25],{},"Le problème est que sans les bons outils, les agents d'IA naviguent à l'aveugle dans vos projets GitLab. Ils peuvent halluciner et inventer les détails d'un ticket qu'ils n'ont jamais vu, résumer une merge request à partir de données d'entraînement obsolètes plutôt qu'à partir de son état réel, ou vous obliger à copier manuellement le contexte depuis un onglet de navigateur pour le coller dans une fenêtre de chat avant de pouvoir commencer. Chacune de ces solutions de contournement est problématique : elle vous ralentit, introduit un risque d'erreur et limite considérablement ce que votre agent peut réellement accomplir pour vous. ",[16,24,18],{}," change la donne en offrant aux agents une interface directe et fiable à vos projets.",[12,27,28,29,31],{},"Avec ",[16,30,18],{},", votre agent récupère directement ce dont il a besoin depuis GitLab, agit en conséquence et vous rend compte du résultat : vous passez ainsi moins de temps à transmettre des informations et plus de temps sur votre cœur de métier.",[12,33,34,35,37],{},"Dans ce tutoriel, vous apprendrez à utiliser ",[16,36,18],{}," pour offrir à vos agents d'IA un accès structuré et fiable à vos projets GitLab. Vous découvrirez également comment cette approche permet d'obtenir un workflow de développement plus rapide et plus performant.",[39,40,42],"h2",{"id":41},"connecter-votre-agent-dia-à-gitlab-via-le-mcp","Connecter votre agent d'IA à GitLab via le MCP",[12,44,45,46,48,49,55],{},"Pour démultiplier votre workflow d'IA, offrez à votre agent un accès natif à ",[16,47,18],{}," via le Model Context Protocol (",[50,51,54],"a",{"href":52,"rel":53},"https://about.gitlab.com/topics/ai/model-context-protocol/",[],"MCP",").",[12,57,58],{},"Le MCP est une norme ouverte qui permet aux outils d'IA de découvrir et d'utiliser des fonctionnalités externes au moment de l'exécution. Une fois connecté, votre assistant d'IA peut lire les tickets, commenter les merge requests, vérifier l'état des pipelines et écrire dans GitLab, le tout sans que vous ayez à copier quoi que ce soit depuis l'interface utilisateur ni à écrire le moindre appel d'API.",[12,60,61],{},"Pour commencer, exécutez :",[63,64,69],"pre",{"className":65,"code":66,"language":67,"meta":68,"style":68},"language-shell shiki shiki-themes github-light"," # Start the glab MCP server\n glab mcp serve\n","shell","",[16,70,71,80],{"__ignoreMap":68},[72,73,76],"span",{"class":74,"line":75},"line",1,[72,77,79],{"class":78},"sAwPA"," # Start the glab MCP server\n",[72,81,83,87,91],{"class":74,"line":82},2,[72,84,86],{"class":85},"s7eDp"," glab",[72,88,90],{"class":89},"sYBdl"," mcp",[72,92,93],{"class":89}," serve\n",[12,95,96,97,101,102,105,106,111],{},"Une fois votre client MCP configuré, votre IA peut répondre à des questions telles que ",[98,99,100],"em",{},"« Quel est le statut de mes merge requests ouvertes ? »"," ou ",[98,103,104],{},"« Y a-t-il des pipelines en échec sur la branche principale ? »"," en interrogeant directement GitLab, sans extraire des données de l'interface utilisateur Web ni s'appuyer sur des données d'entraînement obsolètes. Consultez la ",[50,107,110],{"href":108,"rel":109},"https://docs.gitlab.com/cli/",[],"documentation complète de configuration"," pour découvrir les étapes de configuration avec Claude Code, Cursor et d'autres éditeurs.",[12,113,114,115,117,118,121,122,124],{},"Un détail important à connaître : ",[16,116,18],{}," ajoute automatiquement ",[16,119,120],{},"--output json"," lorsqu'il est invoqué via le MCP, pour toute commande qui le prend en charge. Votre agent reçoit des données propres et structurées sans que vous ayez à vous soucier des formats des données de sortie. Et comme ",[16,123,18],{}," utilise le SDK MCP officiel, il reste compatible à mesure que le protocole évolue.",[12,126,127],{},"Nous avons également soigneusement sélectionné les commandes accessibles via le MCP. Les commandes qui nécessitent une saisie interactive dans le terminal sont volontairement exclues, afin que votre agent ne se retrouve jamais bloqué à attendre des données d'entrée qui n'arriveront jamais. Seules les commandes qui fonctionnent de manière fiable dans le contexte d'un agent sont disponibles.",[39,129,131],{"id":130},"intégrer-votre-ia-dans-la-revue-de-code","Intégrer votre IA dans la revue de code",[12,133,134,135,137],{},"La plupart des équipes de développement ont un backlog de merge requests en attente de revue. C'est l'une des tâches les plus chronophages du métier et l'un des domaines où l'IA peut être mise à contribution. Avec ",[16,136,18],{},", votre agent ne se contente pas d'observer votre file d'attente de revue : il peut la traiter avec vous.",[139,140,142],"h3",{"id":141},"voir-précisément-ce-qui-reste-à-traiter","Voir précisément ce qui reste à traiter",[12,144,145],{},"Commencez par cette commande :",[63,147,149],{"className":65,"code":148,"language":67,"meta":68,"style":68}," glab mr view 2677 --comments --unresolved --output json\n",[16,150,151],{"__ignoreMap":68},[72,152,153,155,158,161,165,168,171,174],{"class":74,"line":75},[72,154,86],{"class":85},[72,156,157],{"class":89}," mr",[72,159,160],{"class":89}," view",[72,162,164],{"class":163},"sYu0t"," 2677",[72,166,167],{"class":163}," --comments",[72,169,170],{"class":163}," --unresolved",[72,172,173],{"class":163}," --output",[72,175,176],{"class":89}," json\n",[12,178,179],{},"Cette commande renvoie l’intégralité de la merge request : métadonnées, description et toutes les discussions non résolues, sous la forme d'une charge utile JSON unique et structurée. Transmettez-la à votre IA afin que celle-ci dispose de tout ce dont elle a besoin : quels fils de discussion sont ouverts, ce que le relecteur a demandé et dans quel contexte. Plus de changement d'onglet, ni de copier-coller de commentaires individuels.",[63,181,185],{"className":182,"code":183,"language":184,"meta":68,"style":68},"language-json shiki shiki-themes github-light","{\n  \"id\": 2677,\n  \"title\": \"feat: add OAuth2 support\",\n  \"state\": \"opened\",\n  \"author\": { \"username\": \"jdwick\" },\n  \"labels\": [\"backend\", \"needs-review\"],\n  \"blocking_discussions_resolved\": false,\n  \"discussions\": [\n    {\n      \"id\": \"3107030349\",\n      \"resolved\": false,\n      \"notes\": [\n        {\n          \"author\": { \"username\": \"dmurphy\" },\n          \"body\": \"This error handling will swallow panics — consider wrapping with recover()\",\n          \"created_at\": \"2026-03-14T09:23:11.000Z\"\n        }\n      ]\n    },\n    {\n      \"id\": \"3107030412\",\n      \"resolved\": false,\n      \"notes\": [\n        {\n          \"author\": { \"username\": \"sreeves\" },\n          \"body\": \"Token refresh logic needs a test for the expired token case\",\n          \"created_at\": \"2026-03-14T10:05:44.000Z\"\n        }\n      ]\n    }\n  ]\n}\n","json",[16,186,187,193,207,220,233,253,274,287,296,302,315,327,335,341,358,371,382,388,394,400,405,417,428,435,440,456,468,478,483,488,494,500],{"__ignoreMap":68},[72,188,189],{"class":74,"line":75},[72,190,192],{"class":191},"sgsFI","{\n",[72,194,195,198,201,204],{"class":74,"line":82},[72,196,197],{"class":163},"  \"id\"",[72,199,200],{"class":191},": ",[72,202,203],{"class":163},"2677",[72,205,206],{"class":191},",\n",[72,208,210,213,215,218],{"class":74,"line":209},3,[72,211,212],{"class":163},"  \"title\"",[72,214,200],{"class":191},[72,216,217],{"class":89},"\"feat: add OAuth2 support\"",[72,219,206],{"class":191},[72,221,223,226,228,231],{"class":74,"line":222},4,[72,224,225],{"class":163},"  \"state\"",[72,227,200],{"class":191},[72,229,230],{"class":89},"\"opened\"",[72,232,206],{"class":191},[72,234,236,239,242,245,247,250],{"class":74,"line":235},5,[72,237,238],{"class":163},"  \"author\"",[72,240,241],{"class":191},": { ",[72,243,244],{"class":163},"\"username\"",[72,246,200],{"class":191},[72,248,249],{"class":89},"\"jdwick\"",[72,251,252],{"class":191}," },\n",[72,254,256,259,262,265,268,271],{"class":74,"line":255},6,[72,257,258],{"class":163},"  \"labels\"",[72,260,261],{"class":191},": [",[72,263,264],{"class":89},"\"backend\"",[72,266,267],{"class":191},", ",[72,269,270],{"class":89},"\"needs-review\"",[72,272,273],{"class":191},"],\n",[72,275,277,280,282,285],{"class":74,"line":276},7,[72,278,279],{"class":163},"  \"blocking_discussions_resolved\"",[72,281,200],{"class":191},[72,283,284],{"class":163},"false",[72,286,206],{"class":191},[72,288,290,293],{"class":74,"line":289},8,[72,291,292],{"class":163},"  \"discussions\"",[72,294,295],{"class":191},": [\n",[72,297,299],{"class":74,"line":298},9,[72,300,301],{"class":191},"    {\n",[72,303,305,308,310,313],{"class":74,"line":304},10,[72,306,307],{"class":163},"      \"id\"",[72,309,200],{"class":191},[72,311,312],{"class":89},"\"3107030349\"",[72,314,206],{"class":191},[72,316,318,321,323,325],{"class":74,"line":317},11,[72,319,320],{"class":163},"      \"resolved\"",[72,322,200],{"class":191},[72,324,284],{"class":163},[72,326,206],{"class":191},[72,328,330,333],{"class":74,"line":329},12,[72,331,332],{"class":163},"      \"notes\"",[72,334,295],{"class":191},[72,336,338],{"class":74,"line":337},13,[72,339,340],{"class":191},"        {\n",[72,342,344,347,349,351,353,356],{"class":74,"line":343},14,[72,345,346],{"class":163},"          \"author\"",[72,348,241],{"class":191},[72,350,244],{"class":163},[72,352,200],{"class":191},[72,354,355],{"class":89},"\"dmurphy\"",[72,357,252],{"class":191},[72,359,361,364,366,369],{"class":74,"line":360},15,[72,362,363],{"class":163},"          \"body\"",[72,365,200],{"class":191},[72,367,368],{"class":89},"\"This error handling will swallow panics — consider wrapping with recover()\"",[72,370,206],{"class":191},[72,372,374,377,379],{"class":74,"line":373},16,[72,375,376],{"class":163},"          \"created_at\"",[72,378,200],{"class":191},[72,380,381],{"class":89},"\"2026-03-14T09:23:11.000Z\"\n",[72,383,385],{"class":74,"line":384},17,[72,386,387],{"class":191},"        }\n",[72,389,391],{"class":74,"line":390},18,[72,392,393],{"class":191},"      ]\n",[72,395,397],{"class":74,"line":396},19,[72,398,399],{"class":191},"    },\n",[72,401,403],{"class":74,"line":402},20,[72,404,301],{"class":191},[72,406,408,410,412,415],{"class":74,"line":407},21,[72,409,307],{"class":163},[72,411,200],{"class":191},[72,413,414],{"class":89},"\"3107030412\"",[72,416,206],{"class":191},[72,418,420,422,424,426],{"class":74,"line":419},22,[72,421,320],{"class":163},[72,423,200],{"class":191},[72,425,284],{"class":163},[72,427,206],{"class":191},[72,429,431,433],{"class":74,"line":430},23,[72,432,332],{"class":163},[72,434,295],{"class":191},[72,436,438],{"class":74,"line":437},24,[72,439,340],{"class":191},[72,441,443,445,447,449,451,454],{"class":74,"line":442},25,[72,444,346],{"class":163},[72,446,241],{"class":191},[72,448,244],{"class":163},[72,450,200],{"class":191},[72,452,453],{"class":89},"\"sreeves\"",[72,455,252],{"class":191},[72,457,459,461,463,466],{"class":74,"line":458},26,[72,460,363],{"class":163},[72,462,200],{"class":191},[72,464,465],{"class":89},"\"Token refresh logic needs a test for the expired token case\"",[72,467,206],{"class":191},[72,469,471,473,475],{"class":74,"line":470},27,[72,472,376],{"class":163},[72,474,200],{"class":191},[72,476,477],{"class":89},"\"2026-03-14T10:05:44.000Z\"\n",[72,479,481],{"class":74,"line":480},28,[72,482,387],{"class":191},[72,484,486],{"class":74,"line":485},29,[72,487,393],{"class":191},[72,489,491],{"class":74,"line":490},30,[72,492,493],{"class":191},"    }\n",[72,495,497],{"class":74,"line":496},31,[72,498,499],{"class":191},"  ]\n",[72,501,503],{"class":74,"line":502},32,[72,504,505],{"class":191},"}\n",[12,507,508,509,512],{},"Au lieu de lire chaque fil de discussion vous-même, vous demandez à votre agent ",[98,510,511],{},"« quels sont les éléments à corriger dans la merge request 2677 ? »"," et vous obtenez un résumé priorisé avec des suggestions de modifications, le tout à partir d'une seule commande.",[139,514,516],{"id":515},"boucler-la-boucle-de-manière-programmatique","Boucler la boucle de manière programmatique",[12,518,519],{},"Une fois que votre IA vous a aidé à traiter les retours, elle peut résoudre les discussions :",[63,521,523],{"className":65,"code":522,"language":67,"meta":68,"style":68},"# List all discussions — structured, ready for the agent to process\nglab mr note list 456 --output json\n\n# Resolve a discussion once the feedback is addressed\nglab mr note resolve 456 3107030349\n\n# Reopen if something needs another look\nglab mr note reopen 456 3107030349\n",[16,524,525,530,549,555,560,576,580,585],{"__ignoreMap":68},[72,526,527],{"class":74,"line":75},[72,528,529],{"class":78},"# List all discussions — structured, ready for the agent to process\n",[72,531,532,534,536,539,542,545,547],{"class":74,"line":82},[72,533,18],{"class":85},[72,535,157],{"class":89},[72,537,538],{"class":89}," note",[72,540,541],{"class":89}," list",[72,543,544],{"class":163}," 456",[72,546,173],{"class":163},[72,548,176],{"class":89},[72,550,551],{"class":74,"line":209},[72,552,554],{"emptyLinePlaceholder":553},true,"\n",[72,556,557],{"class":74,"line":222},[72,558,559],{"class":78},"# Resolve a discussion once the feedback is addressed\n",[72,561,562,564,566,568,571,573],{"class":74,"line":235},[72,563,18],{"class":85},[72,565,157],{"class":89},[72,567,538],{"class":89},[72,569,570],{"class":89}," resolve",[72,572,544],{"class":163},[72,574,575],{"class":163}," 3107030349\n",[72,577,578],{"class":74,"line":255},[72,579,554],{"emptyLinePlaceholder":553},[72,581,582],{"class":74,"line":276},[72,583,584],{"class":78},"# Reopen if something needs another look\n",[72,586,587,589,591,593,596,598],{"class":74,"line":289},[72,588,18],{"class":85},[72,590,157],{"class":89},[72,592,538],{"class":89},[72,594,595],{"class":89}," reopen",[72,597,544],{"class":163},[72,599,575],{"class":163},[63,601,603],{"className":182,"code":602,"language":184,"meta":68,"style":68},"[\n  {\n    \"id\": 3107030349,\n    \"body\": \"This error handling will swallow panics — consider wrapping with recover()\",\n    \"author\": { \"username\": \"dmurphy\" },\n    \"resolved\": false,\n    \"resolvable\": true\n  },\n  {\n    \"id\": 3107030412,\n    \"body\": \"Token refresh logic needs a test for the expired token case\",\n    \"author\": { \"username\": \"sreeves\" },\n    \"resolved\": false,\n    \"resolvable\": true\n  }\n]\n",[16,604,605,610,615,627,638,653,664,674,679,683,694,704,718,728,736,741],{"__ignoreMap":68},[72,606,607],{"class":74,"line":75},[72,608,609],{"class":191},"[\n",[72,611,612],{"class":74,"line":82},[72,613,614],{"class":191},"  {\n",[72,616,617,620,622,625],{"class":74,"line":209},[72,618,619],{"class":163},"    \"id\"",[72,621,200],{"class":191},[72,623,624],{"class":163},"3107030349",[72,626,206],{"class":191},[72,628,629,632,634,636],{"class":74,"line":222},[72,630,631],{"class":163},"    \"body\"",[72,633,200],{"class":191},[72,635,368],{"class":89},[72,637,206],{"class":191},[72,639,640,643,645,647,649,651],{"class":74,"line":235},[72,641,642],{"class":163},"    \"author\"",[72,644,241],{"class":191},[72,646,244],{"class":163},[72,648,200],{"class":191},[72,650,355],{"class":89},[72,652,252],{"class":191},[72,654,655,658,660,662],{"class":74,"line":255},[72,656,657],{"class":163},"    \"resolved\"",[72,659,200],{"class":191},[72,661,284],{"class":163},[72,663,206],{"class":191},[72,665,666,669,671],{"class":74,"line":276},[72,667,668],{"class":163},"    \"resolvable\"",[72,670,200],{"class":191},[72,672,673],{"class":163},"true\n",[72,675,676],{"class":74,"line":289},[72,677,678],{"class":191},"  },\n",[72,680,681],{"class":74,"line":298},[72,682,614],{"class":191},[72,684,685,687,689,692],{"class":74,"line":304},[72,686,619],{"class":163},[72,688,200],{"class":191},[72,690,691],{"class":163},"3107030412",[72,693,206],{"class":191},[72,695,696,698,700,702],{"class":74,"line":317},[72,697,631],{"class":163},[72,699,200],{"class":191},[72,701,465],{"class":89},[72,703,206],{"class":191},[72,705,706,708,710,712,714,716],{"class":74,"line":329},[72,707,642],{"class":163},[72,709,241],{"class":191},[72,711,244],{"class":163},[72,713,200],{"class":191},[72,715,453],{"class":89},[72,717,252],{"class":191},[72,719,720,722,724,726],{"class":74,"line":337},[72,721,657],{"class":163},[72,723,200],{"class":191},[72,725,284],{"class":163},[72,727,206],{"class":191},[72,729,730,732,734],{"class":74,"line":343},[72,731,668],{"class":163},[72,733,200],{"class":191},[72,735,673],{"class":163},[72,737,738],{"class":74,"line":360},[72,739,740],{"class":191},"  }\n",[72,742,743],{"class":74,"line":373},[72,744,745],{"class":191},"]\n",[12,747,748],{},"Les identifiants de notes sont directement visibles dans l'interface de GitLab et l'API, aucune recherche supplémentaire n'est nécessaire. Votre agent peut parcourir la liste complète, vérifier chaque correction et résoudre les discussions au fur et à mesure.",[39,750,752],{"id":751},"communiquer-plus-efficacement-avec-votre-ia","Communiquer plus efficacement avec votre IA",[12,754,755,756,758],{},"Même si vous n'exécutez pas de serveur MCP, utiliser ",[16,757,18],{}," pour fournir de meilleures informations à votre IA peut faire une différence considérable.",[12,760,761],{},"Pensez à la dernière fois que vous avez demandé à un assistant d'IA de vous aider à trier des tickets ou à déboguer un pipeline en échec. Vous avez probablement copié du texte depuis l'interface de GitLab pour le coller dans le chat. Voici ce avec quoi votre agent travaille réellement dans ce cas :",[63,763,768],{"className":764,"code":766,"language":767,"meta":68},[765],"language-text","open issues: 12 • milestone: 17.10 • label: bug, needs-triage ...\n","text",[16,769,766],{"__ignoreMap":68},[12,771,772,773,775],{},"Comparez cela avec ce qu'il obtient via ",[16,774,18],{}," :",[63,777,779],{"className":182,"code":778,"language":184,"meta":68,"style":68},"[\n  {\n    \"iid\": 902,\n    \"title\": \"Pipeline fails on merge to main\",\n    \"labels\": [\"bug\", \"needs-triage\"],\n    \"milestone\": { \"title\": \"17.10\" },\n    \"assignees\": []\n  },\n  ...\n]\n",[16,780,781,785,789,801,813,830,847,855,859,865],{"__ignoreMap":68},[72,782,783],{"class":74,"line":75},[72,784,609],{"class":191},[72,786,787],{"class":74,"line":82},[72,788,614],{"class":191},[72,790,791,794,796,799],{"class":74,"line":209},[72,792,793],{"class":163},"    \"iid\"",[72,795,200],{"class":191},[72,797,798],{"class":163},"902",[72,800,206],{"class":191},[72,802,803,806,808,811],{"class":74,"line":222},[72,804,805],{"class":163},"    \"title\"",[72,807,200],{"class":191},[72,809,810],{"class":89},"\"Pipeline fails on merge to main\"",[72,812,206],{"class":191},[72,814,815,818,820,823,825,828],{"class":74,"line":235},[72,816,817],{"class":163},"    \"labels\"",[72,819,261],{"class":191},[72,821,822],{"class":89},"\"bug\"",[72,824,267],{"class":191},[72,826,827],{"class":89},"\"needs-triage\"",[72,829,273],{"class":191},[72,831,832,835,837,840,842,845],{"class":74,"line":255},[72,833,834],{"class":163},"    \"milestone\"",[72,836,241],{"class":191},[72,838,839],{"class":163},"\"title\"",[72,841,200],{"class":191},[72,843,844],{"class":89},"\"17.10\"",[72,846,252],{"class":191},[72,848,849,852],{"class":74,"line":276},[72,850,851],{"class":163},"    \"assignees\"",[72,853,854],{"class":191},": []\n",[72,856,857],{"class":74,"line":289},[72,858,678],{"class":191},[72,860,861],{"class":74,"line":298},[72,862,864],{"class":863},"sB1qb","  ...\n",[72,866,867],{"class":74,"line":304},[72,868,745],{"class":191},[12,870,871],{},"Des données structurées, typées, complètes : aucune ambiguïté, aucune analyse syntaxique hasardeuse. C'est la différence entre un agent capable d'agir et un agent contraint de poser des questions complémentaires.",[12,873,874,875,877,878,880],{},"Si vous utilisez le serveur MCP, vous profitez automatiquement de cette approche : ",[16,876,18],{}," ajoute ",[16,879,120],{}," pour toute commande qui le prend en charge. Si vous travaillez directement depuis le terminal, ajoutez simplement le flag vous-même :",[63,882,884],{"className":65,"code":883,"language":67,"meta":68,"style":68},"# Pull open issues for triage\nglab issue list --label \"needs-triage\" --output json\n\n# Check pipeline status\nglab ci status --output json\n\n# Get full MR details\nglab mr view 456 --output json\n",[16,885,886,891,910,914,919,933,937,942],{"__ignoreMap":68},[72,887,888],{"class":74,"line":75},[72,889,890],{"class":78},"# Pull open issues for triage\n",[72,892,893,895,898,900,903,906,908],{"class":74,"line":82},[72,894,18],{"class":85},[72,896,897],{"class":89}," issue",[72,899,541],{"class":89},[72,901,902],{"class":163}," --label",[72,904,905],{"class":89}," \"needs-triage\"",[72,907,173],{"class":163},[72,909,176],{"class":89},[72,911,912],{"class":74,"line":209},[72,913,554],{"emptyLinePlaceholder":553},[72,915,916],{"class":74,"line":222},[72,917,918],{"class":78},"# Check pipeline status\n",[72,920,921,923,926,929,931],{"class":74,"line":235},[72,922,18],{"class":85},[72,924,925],{"class":89}," ci",[72,927,928],{"class":89}," status",[72,930,173],{"class":163},[72,932,176],{"class":89},[72,934,935],{"class":74,"line":255},[72,936,554],{"emptyLinePlaceholder":553},[72,938,939],{"class":74,"line":276},[72,940,941],{"class":78},"# Get full MR details\n",[72,943,944,946,948,950,952,954],{"class":74,"line":289},[72,945,18],{"class":85},[72,947,157],{"class":89},[72,949,160],{"class":89},[72,951,544],{"class":163},[72,953,173],{"class":163},[72,955,176],{"class":89},[12,957,958,959,961],{},"La prise en charge des données de sortie JSON a été considérablement étendue dans les releases récentes. Elle couvre désormais le statut CI, les jalons, les labels, les releases, les planifications, les agents de cluster, les éléments de travail, les approbateurs de merge requests, les contributeurs aux dépôts, et bien plus encore. Si ",[16,960,18],{}," peut le récupérer, votre IA peut l'exploiter correctement.",[139,963,965],{"id":964},"workflow-concret","Workflow concret",[63,967,969],{"className":65,"code":968,"language":67,"meta":68,"style":68},"$ glab issue list --label \"needs-triage\" --milestone \"17.10\"\n--output json\n",[16,970,971,992],{"__ignoreMap":68},[72,972,973,976,978,980,982,984,986,989],{"class":74,"line":75},[72,974,975],{"class":85},"$",[72,977,86],{"class":89},[72,979,897],{"class":89},[72,981,541],{"class":89},[72,983,902],{"class":163},[72,985,905],{"class":89},[72,987,988],{"class":163}," --milestone",[72,990,991],{"class":89}," \"17.10\"\n",[72,993,994,997],{"class":74,"line":82},[72,995,996],{"class":85},"--output",[72,998,176],{"class":89},[63,1000,1003],{"className":1001,"code":1002,"language":767,"meta":68},[765],"Agent: I found 2 unassigned bugs in the 17.10 milestone that need triage:\n1. #902 — Pipeline fails on merge to main (opened 5 days ago)\n2. #903 — Auth token not refreshing on expiry (opened 4 days ago)\nBoth are unassigned. Want me to draft triage notes and suggest assignees based on recent commit history?\n",[16,1004,1002],{"__ignoreMap":68},[39,1006,1008],{"id":1007},"aucune-limitation-de-votre-agent-aux-commandes-intégrées","Aucune limitation de votre agent aux commandes intégrées",[12,1010,1011,1012,1014,1015,1018],{},"Les commandes natives de ",[16,1013,18],{}," couvrent les workflows les plus courants, mais votre agent n'est jamais limité à celles-ci. Via ",[16,1016,1017],{},"glab api",", votre agent dispose d'un accès authentifié à l'intégralité de la surface API REST et GraphQL de GitLab, en utilisant la même session, sans identifiants ni configuration supplémentaires.",[12,1020,1021,1022,1024],{},"Voilà ce qui change vraiment la donne. La plupart des outils en ligne de commande s'arrêtent à ce que leurs commandes mettent à disposition. Avec ",[16,1023,18],{},", si l'API GitLab le prend en charge, votre agent peut le faire. Il opère toujours depuis un contexte de confiance et authentifié.",[12,1026,1027],{},"Un exemple concret : récupérer la liste des fichiers modifiés dans une merge request avant de décider quels diffs extraire en intégralité :",[63,1029,1031],{"className":65,"code":1030,"language":67,"meta":68,"style":68},"# Get changed file paths — lightweight, no diff content yet\nglab api \"/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/diffs?per_page=100\" \\\n| jq '.[].new_path'\n\n# Then fetch only the specific file your agent needs\nglab api \"/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/diffs?per_page=100\" \\\n| jq '.[] | select(.new_path == \"path/to/file.go\")'\n",[16,1032,1033,1038,1063,1075,1079,1084,1102],{"__ignoreMap":68},[72,1034,1035],{"class":74,"line":75},[72,1036,1037],{"class":78},"# Get changed file paths — lightweight, no diff content yet\n",[72,1039,1040,1042,1045,1048,1051,1054,1057,1060],{"class":74,"line":82},[72,1041,18],{"class":85},[72,1043,1044],{"class":89}," api",[72,1046,1047],{"class":89}," \"/projects/",[72,1049,1050],{"class":191},"$CI_PROJECT_ID",[72,1052,1053],{"class":89},"/merge_requests/",[72,1055,1056],{"class":191},"$CI_MERGE_REQUEST_IID",[72,1058,1059],{"class":89},"/diffs?per_page=100\"",[72,1061,1062],{"class":163}," \\\n",[72,1064,1065,1069,1072],{"class":74,"line":209},[72,1066,1068],{"class":1067},"sD7c4","|",[72,1070,1071],{"class":85}," jq",[72,1073,1074],{"class":89}," '.[].new_path'\n",[72,1076,1077],{"class":74,"line":222},[72,1078,554],{"emptyLinePlaceholder":553},[72,1080,1081],{"class":74,"line":235},[72,1082,1083],{"class":78},"# Then fetch only the specific file your agent needs\n",[72,1085,1086,1088,1090,1092,1094,1096,1098,1100],{"class":74,"line":255},[72,1087,18],{"class":85},[72,1089,1044],{"class":89},[72,1091,1047],{"class":89},[72,1093,1050],{"class":191},[72,1095,1053],{"class":89},[72,1097,1056],{"class":191},[72,1099,1059],{"class":89},[72,1101,1062],{"class":163},[72,1103,1104,1106,1108],{"class":74,"line":276},[72,1105,1068],{"class":1067},[72,1107,1071],{"class":85},[72,1109,1110],{"class":89}," '.[] | select(.new_path == \"path/to/file.go\")'\n",[63,1112,1115],{"className":1113,"code":1114,"language":767,"meta":68},[765],"\"internal/auth/token.go\"\n\"internal/auth/token_test.go\"\n\"internal/oauth/refresh.go\"\n",[16,1116,1114],{"__ignoreMap":68},[12,1118,1119,1120,1123],{},"Pour tout ce que l'API REST ne couvre pas (epics, certaines requêtes d'éléments de travail, données inter-projets complexes), ",[16,1121,1122],{},"glab api graphql"," vous donne accès à l'interface GraphQL complète :",[63,1125,1127],{"className":65,"code":1126,"language":67,"meta":68,"style":68},"  glab api graphql -f query='\n{\n  project(fullPath: \"gitlab-org/gitlab\") {\n    mergeRequest(iid: \"12345\") {\n      title\n      reviewers { nodes { username } }\n    }\n  }\n}'\n",[16,1128,1129,1145,1149,1154,1159,1164,1169,1173,1177],{"__ignoreMap":68},[72,1130,1131,1134,1136,1139,1142],{"class":74,"line":75},[72,1132,1133],{"class":85},"  glab",[72,1135,1044],{"class":89},[72,1137,1138],{"class":89}," graphql",[72,1140,1141],{"class":163}," -f",[72,1143,1144],{"class":89}," query='\n",[72,1146,1147],{"class":74,"line":82},[72,1148,192],{"class":89},[72,1150,1151],{"class":74,"line":209},[72,1152,1153],{"class":89},"  project(fullPath: \"gitlab-org/gitlab\") {\n",[72,1155,1156],{"class":74,"line":222},[72,1157,1158],{"class":89},"    mergeRequest(iid: \"12345\") {\n",[72,1160,1161],{"class":74,"line":235},[72,1162,1163],{"class":89},"      title\n",[72,1165,1166],{"class":74,"line":255},[72,1167,1168],{"class":89},"      reviewers { nodes { username } }\n",[72,1170,1171],{"class":74,"line":276},[72,1172,493],{"class":89},[72,1174,1175],{"class":74,"line":289},[72,1176,740],{"class":89},[72,1178,1179],{"class":74,"line":298},[72,1180,1181],{"class":89},"}'\n",[63,1183,1185],{"className":182,"code":1184,"language":184,"meta":68,"style":68},"{\n  \"data\": {\n    \"project\": {\n      \"mergeRequest\": {\n        \"title\": \"feat: add OAuth2 support\",\n        \"reviewers\": {\n          \"nodes\": [\n            { \"username\": \"dmurphy\" },\n            { \"username\": \"sreeves\" }\n          ]\n        }\n      }\n    }\n  }\n}\n\n",[16,1186,1187,1191,1199,1206,1213,1224,1231,1238,1251,1264,1269,1273,1278,1282,1286],{"__ignoreMap":68},[72,1188,1189],{"class":74,"line":75},[72,1190,192],{"class":191},[72,1192,1193,1196],{"class":74,"line":82},[72,1194,1195],{"class":163},"  \"data\"",[72,1197,1198],{"class":191},": {\n",[72,1200,1201,1204],{"class":74,"line":209},[72,1202,1203],{"class":163},"    \"project\"",[72,1205,1198],{"class":191},[72,1207,1208,1211],{"class":74,"line":222},[72,1209,1210],{"class":163},"      \"mergeRequest\"",[72,1212,1198],{"class":191},[72,1214,1215,1218,1220,1222],{"class":74,"line":235},[72,1216,1217],{"class":163},"        \"title\"",[72,1219,200],{"class":191},[72,1221,217],{"class":89},[72,1223,206],{"class":191},[72,1225,1226,1229],{"class":74,"line":255},[72,1227,1228],{"class":163},"        \"reviewers\"",[72,1230,1198],{"class":191},[72,1232,1233,1236],{"class":74,"line":276},[72,1234,1235],{"class":163},"          \"nodes\"",[72,1237,295],{"class":191},[72,1239,1240,1243,1245,1247,1249],{"class":74,"line":289},[72,1241,1242],{"class":191},"            { ",[72,1244,244],{"class":163},[72,1246,200],{"class":191},[72,1248,355],{"class":89},[72,1250,252],{"class":191},[72,1252,1253,1255,1257,1259,1261],{"class":74,"line":298},[72,1254,1242],{"class":191},[72,1256,244],{"class":163},[72,1258,200],{"class":191},[72,1260,453],{"class":89},[72,1262,1263],{"class":191}," }\n",[72,1265,1266],{"class":74,"line":304},[72,1267,1268],{"class":191},"          ]\n",[72,1270,1271],{"class":74,"line":317},[72,1272,387],{"class":191},[72,1274,1275],{"class":74,"line":329},[72,1276,1277],{"class":191},"      }\n",[72,1279,1280],{"class":74,"line":337},[72,1281,493],{"class":191},[72,1283,1284],{"class":74,"line":343},[72,1285,740],{"class":191},[72,1287,1288],{"class":74,"line":360},[72,1289,505],{"class":191},[12,1291,1292],{},"Votre agent dispose d'un point d'entrée unique et authentifié vers tout ce que GitLab met à disposition, sans besoin de jongler avec les tokens, sans clients API distincts ni surcharge de configuration.",[39,1294,1296],{"id":1295},"perspectives-et-retours","Perspectives et retours",[12,1298,1299,1300,1302],{},"Deux améliorations en cours de développement renforceront encore davantage l'utilité de ",[16,1301,18],{}," pour les workflows d'agents :",[12,1304,1305,1309,1310,1313,1314,1316],{},[1306,1307,1308],"strong",{},"Texte d'aide adapté aux agents."," Aujourd'hui, les données de sortie de ",[16,1311,1312],{},"--help"," sont rédigées pour des équipes devant un terminal. Nous avons décidé de les mettre à jour pour présenter l'alternative non interactive de chaque commande interactive, indiquer quelles commandes prennent en charge ",[16,1315,120],{}," et faire de l'aide une ressource utile aux agents qui découvrent les fonctionnalités au moment de l'exécution, pas uniquement aux équipes.",[12,1318,1319,1322],{},[1306,1320,1321],{},"Meilleurs messages d'erreur lisibles par les machines."," Lorsqu'un problème survient aujourd'hui, les agents reçoivent les mêmes messages d'erreur lisibles par les équipes que les utilisateurs du terminal. Nous avons décidé de modifier les messages pour que les erreurs en mode JSON renvoient des données de sortie structurées qui fournissent à votre agent les informations nécessaires pour gérer les échecs avec élégance, réessayer avec intelligence ou remonter le bon contexte vers vous.",[12,1324,1325,1326,1328],{},"Ces deux améliorations sont en cours de développement. Si vous utilisez déjà ",[16,1327,18],{}," avec un outil d'IA, vous êtes exactement le public dont nous attendons les retours.",[1330,1331,1332,1339],"ul",{},[1333,1334,1335,1338],"li",{},[1306,1336,1337],{},"Quelles frictions rencontrez-vous ?"," Des commandes qui ne fonctionnent pas correctement dans un contexte d'agent, des messages d'erreur non exploitables, des lacunes dans la couverture JSON ? Dites-nous tout.",[1333,1340,1341,1344],{},[1306,1342,1343],{},"Quels workflows avez-vous débloqués ?"," Les cas d'utilisation réels nous aident à prioriser les prochains développements.",[12,1346,1347,1348,1353,1354,1359,1360,1365],{},"Rejoignez la discussion dans ",[50,1349,1352],{"href":1350,"rel":1351},"https://gitlab.com/gitlab-org/cli/-/issues/8177",[],"notre ticket"," : c'est là que nous mettons au point la roadmap dédiée à la compatibilité avec les agents, et c'est là que votre contribution aura le plus d'impact. Si vous avez identifié une lacune spécifique, ",[50,1355,1358],{"href":1356,"rel":1357},"https://gitlab.com/gitlab-org/cli/-/issues/new",[],"ouvrez un ticket",". Si vous avez une correction en tête, n'hésitez pas à apporter votre contribution. Consultez ",[50,1361,1364],{"href":1362,"rel":1363},"https://gitlab.com/gitlab-org/cli/-/blob/main/CONTRIBUTING.md",[],"CONTRIBUTING.md"," pour vous lancer.",[12,1367,1368,1369,1371],{},"L'interface en ligne de commande GitLab a toujours eu pour vocation de donner aux équipes de développement un meilleur contrôle sur leur workflow. À mesure que l'IA prend une place croissante dans notre façon de travailler, nous avons pour objectif de faire de ",[16,1370,18],{}," la meilleure interface possible entre vos outils d'IA et vos projets GitLab. Nous ne faisons que commencer, et nous serions ravis de développer les prochaines étapes avec vous.",[1373,1374,1375],"style",{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .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 .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sB1qb, html code.shiki .sB1qb{--shiki-default:#B31D28;--shiki-default-font-style:italic}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":68,"searchDepth":82,"depth":82,"links":1377},[1378,1379,1383,1386,1387],{"id":41,"depth":82,"text":42},{"id":130,"depth":82,"text":131,"children":1380},[1381,1382],{"id":141,"depth":209,"text":142},{"id":515,"depth":209,"text":516},{"id":751,"depth":82,"text":752,"children":1384},[1385],{"id":964,"depth":209,"text":965},{"id":1007,"depth":82,"text":1008},{"id":1295,"depth":82,"text":1296},"ai","2026-06-03","GitLab CLI (glab) offre à vos agents d'IA un accès structuré et fiable à vos projets via le MCP afin d'éliminer les frictions. Découvrez dans ce tutoriel comment accélérer la revue de code et le classement des tickets.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1776347152/unw3mzatkd5xyfbzcnni.png",{},"/fr-fr/blog/give-your-ai-agent-direct-structured-gitlab-access-with-glab-cli",{"config":1398,"title":1399,"description":1400},{"noIndex":1393},"Agents d'IA et glab CLI : un accès direct à GitLab","Ce tutoriel explique comment GitLab CLI (glab) offre à vos agents d'IA un accès structuré et fiable à vos projets via le MCP.","give-your-ai-agent-direct-structured-gitlab-access-with-glab-cli","fr-fr/blog/give-your-ai-agent-direct-structured-gitlab-access-with-glab-cli",[1404,1405,1406],"AI/ML","product","tutorial","BlogPost","Unwt62m5MKS4VJm49yhdtEczdtH4ORlai4vC9y8RkhY",{"logo":1410,"freeTrial":1415,"sales":1420,"login":1425,"items":1430,"search":1747,"minimal":1783,"duo":1802,"switchNav":1811,"pricingDeployment":1822},{"config":1411},{"href":1412,"dataGaName":1413,"dataGaLocation":1414},"/fr-fr/","gitlab logo","header",{"text":1416,"config":1417},"Commencer un essai gratuit",{"href":1418,"dataGaName":1419,"dataGaLocation":1414},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":1421,"config":1422},"Contacter l’équipe commerciale",{"href":1423,"dataGaName":1424,"dataGaLocation":1414},"/fr-fr/sales/","sales",{"text":1426,"config":1427},"Connexion",{"href":1428,"dataGaName":1429,"dataGaLocation":1414},"https://gitlab.com/users/sign_in/","sign in",[1431,1460,1562,1567,1671,1727],{"text":1432,"config":1433,"menu":1435},"Plateforme",{"dataNavLevelOne":1434},"platform",{"type":1436,"columns":1437},"cards",[1438,1444,1452],{"title":1432,"description":1439,"link":1440},"La plateforme d’orchestration intelligente pour le DevSecOps",{"text":1441,"config":1442},"Explorer notre plateforme",{"href":1443,"dataGaName":1434,"dataGaLocation":1414},"/fr-fr/platform/",{"title":1445,"description":1446,"link":1447},"GitLab Duo Agent Platform","L’IA agentique pour l’ensemble du cycle de développement logiciel",{"text":1448,"config":1449},"Découvrir GitLab Duo",{"href":1450,"dataGaName":1451,"dataGaLocation":1414},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1453,"description":1454,"link":1455},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":1456,"config":1457},"En savoir plus",{"href":1458,"dataGaName":1459,"dataGaLocation":1414},"/fr-fr/why-gitlab/","why gitlab",{"text":1461,"left":553,"config":1462,"menu":1464},"Produit",{"dataNavLevelOne":1463},"solutions",{"type":1465,"link":1466,"columns":1470,"feature":1541},"lists",{"text":1467,"config":1468},"Voir toutes les solutions",{"href":1469,"dataGaName":1463,"dataGaLocation":1414},"/fr-fr/solutions/",[1471,1496,1519],{"title":1472,"description":1473,"link":1474,"items":1479},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":1475},{"icon":1476,"href":1477,"dataGaName":1478,"dataGaLocation":1414},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[1480,1484,1487,1492],{"text":1481,"config":1482},"CI/CD",{"href":1483,"dataGaLocation":1414,"dataGaName":1481},"/fr-fr/solutions/continuous-integration/",{"text":1445,"config":1485},{"href":1450,"dataGaLocation":1414,"dataGaName":1486},"gitlab duo agent platform - product menu",{"text":1488,"config":1489},"Gestion du code source",{"href":1490,"dataGaLocation":1414,"dataGaName":1491},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":1493,"config":1494},"Livraison de logiciels automatisée",{"href":1477,"dataGaLocation":1414,"dataGaName":1495},"Automated software delivery",{"title":1497,"description":1498,"link":1499,"items":1504},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":1500},{"href":1501,"dataGaName":1502,"dataGaLocation":1414,"icon":1503},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1505,1509,1514],{"text":1506,"config":1507},"Tests de sécurité des applications",{"href":1501,"dataGaName":1508,"dataGaLocation":1414},"Application security testing",{"text":1510,"config":1511},"Sécurité de la chaîne d’approvisionnement logicielle",{"href":1512,"dataGaLocation":1414,"dataGaName":1513},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":1515,"config":1516},"Conformité logicielle",{"href":1517,"dataGaName":1518,"dataGaLocation":1414},"/fr-fr/solutions/software-compliance/","software compliance",{"title":1520,"link":1521,"items":1526},"Mesures",{"config":1522},{"icon":1523,"href":1524,"dataGaName":1525,"dataGaLocation":1414},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[1527,1531,1536],{"text":1528,"config":1529},"Visibilité et mesures",{"href":1524,"dataGaLocation":1414,"dataGaName":1530},"Visibility and Measurement",{"text":1532,"config":1533},"Gestion de la chaîne de valeur",{"href":1534,"dataGaLocation":1414,"dataGaName":1535},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":1537,"config":1538},"Analyses et informations",{"href":1539,"dataGaLocation":1414,"dataGaName":1540},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":1542,"type":1465,"items":1543},"GitLab",[1544,1550,1556],{"text":1545,"config":1546},"Pour les entreprises",{"icon":1547,"href":1548,"dataGaLocation":1414,"dataGaName":1549},"Building","/fr-fr/enterprise/","enterprise",{"text":1551,"config":1552},"Pour les PME",{"icon":1553,"href":1554,"dataGaLocation":1414,"dataGaName":1555},"Work","/fr-fr/small-business/","small business",{"text":1557,"config":1558},"Pour le secteur public",{"icon":1559,"href":1560,"dataGaLocation":1414,"dataGaName":1561},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":1563,"config":1564},"Tarifs",{"href":1565,"dataGaName":1566,"dataGaLocation":1414,"dataNavLevelOne":1566},"/fr-fr/pricing/","pricing",{"text":1568,"config":1569,"menu":1571},"Ressources",{"dataNavLevelOne":1570},"resources",{"type":1465,"link":1572,"columns":1576,"feature":1660},{"text":1573,"config":1574},"Afficher toutes les ressources",{"href":1575,"dataGaName":1570,"dataGaLocation":1414},"/fr-fr/resources/",[1577,1610,1632],{"title":1578,"items":1579},"Premiers pas",[1580,1585,1590,1595,1600,1605],{"text":1581,"config":1582},"Installation",{"href":1583,"dataGaName":1584,"dataGaLocation":1414},"/fr-fr/install/","install",{"text":1586,"config":1587},"Guides de démarrage",{"href":1588,"dataGaName":1589,"dataGaLocation":1414},"/fr-fr/get-started/","quick setup checklists",{"text":1591,"config":1592},"Apprentissage",{"href":1593,"dataGaLocation":1414,"dataGaName":1594},"https://university.gitlab.com/","learn",{"text":1596,"config":1597},"Documentation",{"href":1598,"dataGaName":1599,"dataGaLocation":1414},"https://docs.gitlab.com/","product documentation",{"text":1601,"config":1602},"Vidéos sur les bonnes pratiques",{"href":1603,"dataGaName":1604,"dataGaLocation":1414},"/fr-fr/getting-started-videos/","best practice videos",{"text":1606,"config":1607},"Intégrations",{"href":1608,"dataGaName":1609,"dataGaLocation":1414},"/fr-fr/integrations/","integrations",{"title":1611,"items":1612},"Découvrir",[1613,1618,1623,1627],{"text":1614,"config":1615},"Témoignages clients",{"href":1616,"dataGaName":1617,"dataGaLocation":1414},"/fr-fr/customers/","customer success stories",{"text":1619,"config":1620},"Blog",{"href":1621,"dataGaName":1622,"dataGaLocation":1414},"/fr-fr/blog/","blog",{"text":1624,"config":1625},"The Source",{"href":1626,"dataGaName":1622,"dataGaLocation":1414},"/fr-fr/the-source/",{"text":1628,"config":1629},"Travail à distance",{"href":1630,"dataGaName":1631,"dataGaLocation":1414},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1633,"items":1634},"Connecter",[1635,1640,1645,1650,1655],{"text":1636,"config":1637},"Services GitLab",{"href":1638,"dataGaName":1639,"dataGaLocation":1414},"/fr-fr/services/","services",{"text":1641,"config":1642},"Communauté",{"href":1643,"dataGaName":1644,"dataGaLocation":1414},"/community/","community",{"text":1646,"config":1647},"Forum",{"href":1648,"dataGaName":1649,"dataGaLocation":1414},"https://forum.gitlab.com/","forum",{"text":1651,"config":1652},"Événements",{"href":1653,"dataGaName":1654,"dataGaLocation":1414},"/events/","events",{"text":1656,"config":1657},"Partenaires",{"href":1658,"dataGaName":1659,"dataGaLocation":1414},"/fr-fr/partners/","partners",{"config":1661,"title":1664,"text":1665,"link":1666},{"background":1662,"textColor":1663},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Restez informé des dernières fonctionnalités et améliorations.",{"text":1667,"config":1668},"Lire les articles les plus récents",{"href":1669,"dataGaName":1670,"dataGaLocation":1414},"/fr-fr/whats-new/","whats new",{"text":1672,"config":1673,"menu":1675},"Société",{"dataNavLevelOne":1674},"company",{"type":1465,"columns":1676},[1677],{"items":1678},[1679,1684,1690,1692,1697,1702,1707,1712,1717,1722],{"text":1680,"config":1681},"À propos",{"href":1682,"dataGaName":1683,"dataGaLocation":1414},"/fr-fr/company/","about",{"text":1685,"config":1686,"footerGa":1689},"Carrières",{"href":1687,"dataGaName":1688,"dataGaLocation":1414},"/jobs/","jobs",{"dataGaName":1688},{"text":1651,"config":1691},{"href":1653,"dataGaName":1654,"dataGaLocation":1414},{"text":1693,"config":1694},"Leadership",{"href":1695,"dataGaName":1696,"dataGaLocation":1414},"/company/team/e-group/","leadership",{"text":1698,"config":1699},"Manuel",{"href":1700,"dataGaName":1701,"dataGaLocation":1414},"https://handbook.gitlab.com/","handbook",{"text":1703,"config":1704},"Relations avec les investisseurs",{"href":1705,"dataGaName":1706,"dataGaLocation":1414},"https://ir.gitlab.com/","investor relations",{"text":1708,"config":1709},"Trust Center",{"href":1710,"dataGaName":1711,"dataGaLocation":1414},"/fr-fr/security/","trust center",{"text":1713,"config":1714},"Centre pour la transparence de l’IA",{"href":1715,"dataGaName":1716,"dataGaLocation":1414},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":1718,"config":1719},"Newsletter",{"href":1720,"dataGaName":1721,"dataGaLocation":1414},"/company/contact/#contact-forms","newsletter",{"text":1723,"config":1724},"Presse",{"href":1725,"dataGaName":1726,"dataGaLocation":1414},"/press/","press",{"text":1728,"config":1729,"menu":1730},"Nous contacter",{"dataNavLevelOne":1674},{"type":1465,"columns":1731},[1732],{"items":1733},[1734,1737,1742],{"text":1421,"config":1735},{"href":1423,"dataGaName":1736,"dataGaLocation":1414},"talk to sales",{"text":1738,"config":1739},"Portail d'assistance",{"href":1740,"dataGaName":1741,"dataGaLocation":1414},"https://support.gitlab.com","support portal",{"text":1743,"config":1744},"Portail clients GitLab",{"href":1745,"dataGaName":1746,"dataGaLocation":1414},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1748,"login":1749,"suggestions":1756},"Fermer",{"text":1750,"link":1751},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1752,"config":1753},"GitLab.com",{"href":1428,"dataGaName":1754,"dataGaLocation":1755},"search login","search",{"text":1757,"default":1758},"Suggestions",[1759,1762,1767,1769,1774,1779],{"text":1445,"config":1760},{"href":1450,"dataGaName":1761,"dataGaLocation":1755},"GitLab Duo Agent Platform",{"text":1763,"config":1764},"Suggestions de code (IA)",{"href":1765,"dataGaName":1766,"dataGaLocation":1755},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1481,"config":1768},{"href":1483,"dataGaName":1481,"dataGaLocation":1755},{"text":1770,"config":1771},"GitLab sur AWS",{"href":1772,"dataGaName":1773,"dataGaLocation":1755},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1775,"config":1776},"GitLab sur Google Cloud",{"href":1777,"dataGaName":1778,"dataGaLocation":1755},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1780,"config":1781},"Pourquoi utiliser GitLab ?",{"href":1458,"dataGaName":1782,"dataGaLocation":1755},"Why GitLab?",{"freeTrial":1784,"mobileIcon":1789,"desktopIcon":1794,"secondaryButton":1797},{"text":1785,"config":1786},"Commencer votre essai gratuit",{"href":1787,"dataGaName":1419,"dataGaLocation":1788},"https://gitlab.com/-/trials/new/","nav",{"altText":1790,"config":1791},"Icône GitLab",{"src":1792,"dataGaName":1793,"dataGaLocation":1788},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1790,"config":1795},{"src":1796,"dataGaName":1793,"dataGaLocation":1788},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1798,"config":1799},"Commencer",{"href":1800,"dataGaName":1801,"dataGaLocation":1788},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1803,"mobileIcon":1807,"desktopIcon":1809},{"text":1804,"config":1805},"En savoir plus sur GitLab Duo",{"href":1450,"dataGaName":1806,"dataGaLocation":1788},"gitlab duo",{"altText":1790,"config":1808},{"src":1792,"dataGaName":1793,"dataGaLocation":1788},{"altText":1790,"config":1810},{"src":1796,"dataGaName":1793,"dataGaLocation":1788},{"button":1812,"mobileIcon":1817,"desktopIcon":1819},{"text":1813,"config":1814},"/switch",{"href":1815,"dataGaName":1816,"dataGaLocation":1788},"#contact","switch",{"altText":1790,"config":1818},{"src":1792,"dataGaName":1793,"dataGaLocation":1788},{"altText":1790,"config":1820},{"src":1821,"dataGaName":1793,"dataGaLocation":1788},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1823,"mobileIcon":1828,"desktopIcon":1830},{"text":1824,"config":1825},"Retour aux tarifs",{"href":1565,"dataGaName":1826,"dataGaLocation":1788,"icon":1827},"back to pricing","GoBack",{"altText":1790,"config":1829},{"src":1792,"dataGaName":1793,"dataGaLocation":1788},{"altText":1790,"config":1831},{"src":1796,"dataGaName":1793,"dataGaLocation":1788},{"title":1833,"button":1834,"config":1839},"Découvrez comment l'IA agentique transforme la livraison logicielle",{"text":1835,"config":1836},"Rejoindre GitLab Transcend en direct le 10 juin",{"href":1837,"dataGaName":1838,"dataGaLocation":1414},"/fr-fr/events/transcend/virtual/","transcend event",{"layout":1840,"disabled":1393},"release",{"data":1842},{"text":1843,"source":1844,"edit":1850,"contribute":1855,"config":1860,"items":1865,"minimal":2073},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1845,"config":1846},"Afficher le code source de la page",{"href":1847,"dataGaName":1848,"dataGaLocation":1849},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1851,"config":1852},"Modifier cette page",{"href":1853,"dataGaName":1854,"dataGaLocation":1849},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1856,"config":1857},"Veuillez contribuer",{"href":1858,"dataGaName":1859,"dataGaLocation":1849},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1861,"facebook":1862,"youtube":1863,"linkedin":1864},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1866,1913,1966,2010,2040],{"title":1563,"links":1867,"subMenu":1882},[1868,1872,1877],{"text":1869,"config":1870},"Voir les forfaits",{"href":1565,"dataGaName":1871,"dataGaLocation":1849},"view plans",{"text":1873,"config":1874},"GitLab Premium",{"href":1875,"dataGaName":1876,"dataGaLocation":1849},"/fr-fr/pricing/premium/","why premium",{"text":1878,"config":1879},"GitLab Ultimate",{"href":1880,"dataGaName":1881,"dataGaLocation":1849},"/fr-fr/pricing/ultimate/","why ultimate",[1883],{"title":1728,"links":1884},[1885,1888,1891,1893,1898,1903,1908],{"text":1886,"config":1887},"Contacter l'équipe commerciale",{"href":1423,"dataGaName":1424,"dataGaLocation":1849},{"text":1889,"config":1890},"Assistance GitLab",{"href":1740,"dataGaName":1741,"dataGaLocation":1849},{"text":1743,"config":1892},{"href":1745,"dataGaName":1746,"dataGaLocation":1849},{"text":1894,"config":1895},"Statut",{"href":1896,"dataGaName":1897,"dataGaLocation":1849},"https://status.gitlab.com/","status",{"text":1899,"config":1900},"Conditions d'utilisation",{"href":1901,"dataGaName":1902,"dataGaLocation":1849},"/terms/","terms of use",{"text":1904,"config":1905},"Politique de confidentialité",{"href":1906,"dataGaName":1907,"dataGaLocation":1849},"/fr-fr/privacy/","privacy statement",{"text":1909,"config":1910},"Gérer vos cookies",{"dataGaName":1911,"dataGaLocation":1849,"id":1912,"isOneTrustButton":553},"cookie preferences","ot-sdk-btn",{"title":1461,"links":1914,"subMenu":1923},[1915,1919],{"text":1916,"config":1917},"Plateforme DevSecOps",{"href":1443,"dataGaName":1918,"dataGaLocation":1849},"devsecops platform",{"text":1920,"config":1921},"Développement assisté par l'IA",{"href":1450,"dataGaName":1922,"dataGaLocation":1849},"ai-assisted development",[1924],{"title":1925,"links":1926},"Thèmes",[1927,1931,1936,1941,1946,1951,1956,1961],{"text":1481,"config":1928},{"href":1929,"dataGaName":1930,"dataGaLocation":1849},"/fr-fr/topics/ci-cd/","cicd",{"text":1932,"config":1933},"GitOps",{"href":1934,"dataGaName":1935,"dataGaLocation":1849},"/fr-fr/topics/gitops/","gitops",{"text":1937,"config":1938},"DevOps",{"href":1939,"dataGaName":1940,"dataGaLocation":1849},"/fr-fr/topics/devops/","devops",{"text":1942,"config":1943},"Contrôle de version",{"href":1944,"dataGaName":1945,"dataGaLocation":1849},"/fr-fr/topics/version-control/","version control",{"text":1947,"config":1948},"DevSecOps",{"href":1949,"dataGaName":1950,"dataGaLocation":1849},"/fr-fr/topics/devsecops/","devsecops",{"text":1952,"config":1953},"Cloud-native",{"href":1954,"dataGaName":1955,"dataGaLocation":1849},"/fr-fr/topics/cloud-native/","cloud native",{"text":1957,"config":1958},"IA pour la programmation",{"href":1959,"dataGaName":1960,"dataGaLocation":1849},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1962,"config":1963},"IA agentique",{"href":1964,"dataGaName":1965,"dataGaLocation":1849},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1967,"links":1968},"Solutions",[1969,1972,1974,1979,1982,1985,1988,1991,1994,1997,2000,2005],{"text":1506,"config":1970},{"href":1501,"dataGaName":1971,"dataGaLocation":1849},"Application Security Testing",{"text":1493,"config":1973},{"href":1477,"dataGaName":1478,"dataGaLocation":1849},{"text":1975,"config":1976},"Développement Agile",{"href":1977,"dataGaName":1978,"dataGaLocation":1849},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":1488,"config":1980},{"href":1490,"dataGaName":1981,"dataGaLocation":1849},"source code management",{"text":1481,"config":1983},{"href":1483,"dataGaName":1984,"dataGaLocation":1849},"continuous integration & delivery",{"text":1532,"config":1986},{"href":1534,"dataGaName":1987,"dataGaLocation":1849},"value stream management",{"text":1932,"config":1989},{"href":1990,"dataGaName":1935,"dataGaLocation":1849},"/fr-fr/solutions/gitops/",{"text":1992,"config":1993},"Entreprises",{"href":1548,"dataGaName":1549,"dataGaLocation":1849},{"text":1995,"config":1996},"PME",{"href":1554,"dataGaName":1555,"dataGaLocation":1849},{"text":1998,"config":1999},"Secteur public",{"href":1560,"dataGaName":1561,"dataGaLocation":1849},{"text":2001,"config":2002},"Éducation",{"href":2003,"dataGaName":2004,"dataGaLocation":1849},"/fr-fr/solutions/education/","education",{"text":2006,"config":2007},"Services financiers",{"href":2008,"dataGaName":2009,"dataGaLocation":1849},"/fr-fr/solutions/finance/","financial services",{"title":1568,"links":2011},[2012,2014,2016,2018,2021,2023,2026,2028,2030,2032,2034,2036,2038],{"text":1581,"config":2013},{"href":1583,"dataGaName":1584,"dataGaLocation":1849},{"text":1586,"config":2015},{"href":1588,"dataGaName":1589,"dataGaLocation":1849},{"text":1591,"config":2017},{"href":1593,"dataGaName":1594,"dataGaLocation":1849},{"text":1596,"config":2019},{"href":1598,"dataGaName":2020,"dataGaLocation":1849},"docs",{"text":1619,"config":2022},{"href":1621,"dataGaName":1622,"dataGaLocation":1849},{"text":2024,"config":2025},"Quoi de neuf",{"href":1669,"dataGaName":1670,"dataGaLocation":1849},{"text":1614,"config":2027},{"href":1616,"dataGaName":1617,"dataGaLocation":1849},{"text":1628,"config":2029},{"href":1630,"dataGaName":1631,"dataGaLocation":1849},{"text":1636,"config":2031},{"href":1638,"dataGaName":1639,"dataGaLocation":1849},{"text":1641,"config":2033},{"href":1643,"dataGaName":1644,"dataGaLocation":1849},{"text":1646,"config":2035},{"href":1648,"dataGaName":1649,"dataGaLocation":1849},{"text":1651,"config":2037},{"href":1653,"dataGaName":1654,"dataGaLocation":1849},{"text":1656,"config":2039},{"href":1658,"dataGaName":1659,"dataGaLocation":1849},{"title":1672,"links":2041},[2042,2044,2046,2048,2050,2052,2057,2062,2064,2066,2068],{"text":1680,"config":2043},{"href":1682,"dataGaName":1674,"dataGaLocation":1849},{"text":1685,"config":2045},{"href":1687,"dataGaName":1688,"dataGaLocation":1849},{"text":1693,"config":2047},{"href":1695,"dataGaName":1696,"dataGaLocation":1849},{"text":1698,"config":2049},{"href":1700,"dataGaName":1701,"dataGaLocation":1849},{"text":1703,"config":2051},{"href":1705,"dataGaName":1706,"dataGaLocation":1849},{"text":2053,"config":2054},"Développement durable",{"href":2055,"dataGaName":2056,"dataGaLocation":1849},"/sustainability/","Sustainability",{"text":2058,"config":2059},"Diversité, inclusion et appartenance (DIB)",{"href":2060,"dataGaName":2061,"dataGaLocation":1849},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1708,"config":2063},{"href":1710,"dataGaName":1711,"dataGaLocation":1849},{"text":1718,"config":2065},{"href":1720,"dataGaName":1721,"dataGaLocation":1849},{"text":1723,"config":2067},{"href":1725,"dataGaName":1726,"dataGaLocation":1849},{"text":2069,"config":2070},"Déclaration de transparence sur l'esclavage moderne",{"href":2071,"dataGaName":2072,"dataGaLocation":1849},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2074},[2075,2077,2080],{"text":1899,"config":2076},{"href":1901,"dataGaName":1902,"dataGaLocation":1849},{"text":2078,"config":2079},"Gestion des cookies",{"dataGaName":1911,"dataGaLocation":1849,"id":1912,"isOneTrustButton":553},{"text":1904,"config":2081},{"href":1906,"dataGaName":1907,"dataGaLocation":1849},[2083],{"id":2084,"title":7,"body":1392,"config":2085,"content":2087,"description":1392,"extension":2091,"meta":2092,"navigation":553,"path":2093,"seo":2094,"stem":2095,"__hash__":2096},"blogAuthors/en-us/blog/authors/kai-armstrong.yml",{"template":2086},"BlogAuthor",{"name":7,"config":2088},{"headshot":2089,"ctfId":2090},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682535/Blog/Author%20Headshots/phikai-headshot.png","phikai","yml",{},"/en-us/blog/authors/kai-armstrong",{},"en-us/blog/authors/kai-armstrong","Y-yZG9fBOoKU-_K9heV2LiGg7xuWxyCx1fnfpM9-82g",[2098,2106,2113],{"title":2099,"description":2100,"heroImage":2101,"category":1388,"date":2102,"authors":2103,"slug":2105,"externalUrl":1392},"GitLab Orbit : contexte complet du code et du cycle de développement, en une seule requête","Avec GitLab Orbit, vos agents logiciels sont jusqu'à 11 fois plus rapides, consomment jusqu'à 4,5 fois moins de tokens et répondent à des questions restées jusqu'ici sans réponse.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1780996524/sd1vpl8empy26wizarqj.png","2026-06-10",[2104],"Rebecca Carter","introducing-gitlab-orbit",{"title":2107,"description":2108,"heroImage":2109,"category":1388,"date":2102,"authors":2110,"slug":2112,"externalUrl":1392},"GitLab Flex : un seul engagement et une flexibilité totale sur vos sièges et vos dépenses d'IA","À l'ère agentique, vous ne pouvez prévoir vos besoins en sièges, en IA ou en fonctionnalités. Avec GitLab Flex, vous disposez d'un engagement qui s'adapte à l'évolution de vos besoins.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1772047747/ntihfmnu2fepamqemaas.png",[2111],"Talia Armato-Helle","introducing-gitlab-flex",{"title":2114,"description":2115,"heroImage":2116,"category":1388,"date":2102,"authors":2117,"slug":2119,"externalUrl":1392},"GitLab : une plateforme conçue pour l'ère de l'ingénierie agentique","Découvrez toutes les nouveautés annoncées lors de GitLab Transcend, et comment une seule plateforme offre la vitesse agentique avec le contrôle dont les entreprises ont besoin.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1781032585/go3d7pb9opmux7rwhpev.png",[2118],"Manav Khurana","gitlab-transcend-announcements",{"promotions":2121},[2122,2135,2146,2158],{"id":2123,"categories":2124,"header":2125,"text":2126,"button":2127,"image":2132},"ai-modernization",[1388],"L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":2128,"config":2129},"Obtenez votre score de maturité IA",{"href":2130,"dataGaName":2131,"dataGaLocation":1622},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":2133},{"src":2134},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2136,"categories":2137,"header":2138,"text":2126,"button":2139,"image":2143},"devops-modernization",[1405,1950],"Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":2140,"config":2141},"Obtenez votre score de maturité DevOps",{"href":2142,"dataGaName":2131,"dataGaLocation":1622},"/fr-fr/assessments/devops-modernization-assessment/",{"config":2144},{"src":2145},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2147,"categories":2148,"header":2150,"text":2126,"button":2151,"image":2155},"security-modernization",[2149],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":2152,"config":2153},"Obtenez votre score de maturité en matière de sécurité",{"href":2154,"dataGaName":2131,"dataGaLocation":1622},"/fr-fr/assessments/security-modernization-assessment/",{"config":2156},{"src":2157},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2159,"paths":2160,"header":2163,"text":2164,"button":2165,"image":2170},"github-azure-migration",[2161,2162],"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":2166,"config":2167},"Découvrez les différences entre GitLab et GitHub",{"href":2168,"dataGaName":2169,"dataGaLocation":1622},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2171},{"src":2145},{"header":2173,"blurb":2174,"button":2175,"secondaryButton":2179},"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":1416,"config":2176},{"href":2177,"dataGaName":1419,"dataGaLocation":2178},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":1886,"config":2180},{"href":1423,"dataGaName":1424,"dataGaLocation":2178},1781392680970]