[{"data":1,"prerenderedAt":1591},["ShallowReactive",2],{"/fr-fr/blog/automating-agile-workflows-with-the-gitlab-triage-gem":3,"navigation-fr-fr":809,"banner-fr-fr":1242,"footer-fr-fr":1250,"blog-post-authors-fr-fr-GitLab":1488,"blog-related-posts-fr-fr-automating-agile-workflows-with-the-gitlab-triage-gem":1503,"blog-promotions-fr-fr":1529,"next-steps-fr-fr":1582},{"id":4,"title":5,"authors":6,"body":8,"category":787,"date":788,"description":789,"extension":790,"externalUrl":791,"faq":791,"featured":792,"heroImage":793,"meta":794,"navigation":218,"path":795,"seo":796,"slug":800,"stem":801,"tags":802,"template":806,"updatedDate":807,"__hash__":808},"blogPosts/fr-fr/blog/automating-agile-workflows-with-the-gitlab-triage-gem.md","La gemme gitlab-triage : votre alliée pour des workflows Agile automatisés",[7],"GitLab",{"type":9,"value":10,"toc":779},"minimark",[11,26,38,43,46,52,75,82,88,115,125,129,132,142,166,172,194,200,207,388,391,400,405,408,446,470,474,487,538,562,578,582,587,614,736,743,751,757,760,766,769,775],[12,13,14],"p",{},[15,16,17,18,25],"em",{},"Bienvenue dans notre série d'articles de blog baptisée « Premiers pas avec GitLab », dans laquelle nous aidons les nouveaux utilisateurs à se familiariser avec la plateforme ",[19,20,24],"a",{"href":21,"rel":22,"title":23},"https://about.gitlab.com/fr-fr/topics/devsecops/",[],"Qu'est-ce que DevSecOps ?","DevSecOps"," de GitLab.",[12,27,28,29,37],{},"Découvrez dans cet article une alliée précieuse pour automatiser vos workflows Agile : la gemme ",[19,30,33],{"href":31,"rel":32},"https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage",[],[34,35,36],"code",{},"gitlab-triage",". Finies les tâches manuelles fastidieuses, place à une productivité maximale et à des processus simplifiés !",[39,40,42],"h2",{"id":41},"pourquoi-automatiser-votre-workflow","Pourquoi automatiser votre workflow ?",[12,44,45],{},"Dans le domaine du développement logiciel, la productivité est la clé du succès. En automatisant des tâches répétitives telles que le classement des tickets et des merge requests par ordre de priorité, votre équipe peut se concentrer sur sa mission première : concevoir des logiciels robustes et innovants.",[12,47,48,49,51],{},"Avec la gemme ",[34,50,36],{},", vous pouvez :",[53,54,55],"ul",{},[56,57,58,62,63,66,67,70,71,74],"li",{},[59,60,61],"strong",{},"Assurer la cohérence :"," appliquez des labels et attribuez des tickets automatiquement en fonction de règles prédéfinies.  - ",[59,64,65],{},"Améliorer les temps de réponse :"," obtenez des retours immédiats et traitez rapidement les nouveaux tickets et merge requests.  - ",[59,68,69],{},"Éliminer les tâches manuelles :"," triez, classez, priorisez, mettez à jour les tickets sans intervention humaine.  - ",[59,72,73],{},"Stimuler la productivité :"," offrez à votre équipe plus de temps pour coder, innover et se concentrer sur des tâches à forte valeur ajoutée.",[39,76,78,79,81],{"id":77},"quest-ce-que-la-gemme-gitlab-triage","Qu'est-ce que la gemme ",[34,80,36],{}," ?",[12,83,84,85,87],{},"La gemme ",[34,86,36],{}," est une bibliothèque Ruby qui vous permet de créer des bots capables d'interagir intelligemment avec vos projets GitLab et qui peuvent effectuer automatiquement un large éventail d'actions, notamment :",[53,89,90],{},[56,91,92,95,96,99,100,103,104,107,108,111,112],{},[59,93,94],{},"Ajout de labels :"," classez automatiquement vos tickets et vos merge requests.  - ",[59,97,98],{},"Commentaires automatisés :"," fournissez des retours, posez des questions ou partagez des informations clés.  - ",[59,101,102],{},"Attribution intelligente :"," attribuez les tickets et les merge requests aux membres appropriés de votre équipe, selon des critères définis.  - ",[59,105,106],{},"Fermeture automatique :"," clôturez les tickets et merge requests obsolètes ou résolus.  - ",[59,109,110],{},"Création conditionnelle :"," générez de nouveaux tickets en fonction d'événements ou de conditions spécifiques.  - ",[59,113,114],{},"Et bien plus encore !",[12,116,117,118,124],{},"Pour en savoir plus, consultez le ",[19,119,121,122],{"href":31,"rel":120},[],"dépôt de la gemme ",[34,123,36],{},".",[39,126,128],{"id":127},"configuration-de-votre-bot-de-classement","Configuration de votre bot de classement",[12,130,131],{},"Prêt à mettre en place votre premier bot de tri automatisé ? Suivez le guide !",[133,134,135],"ol",{},[56,136,137,138,141],{},"Installez la gemme. Remarque : assurez-vous que Ruby est installé sur votre machine, puis exécutez la commande ",[34,139,140],{},"gem"," suivante :",[143,144,149],"pre",{"className":145,"code":146,"language":147,"meta":148,"style":148},"language-bash shiki shiki-themes github-light","gem install gitlab-triage\n","bash","",[34,150,151],{"__ignoreMap":148},[152,153,156,159,163],"span",{"class":154,"line":155},"line",1,[152,157,140],{"class":158},"s7eDp",[152,160,162],{"class":161},"sYBdl"," install",[152,164,165],{"class":161}," gitlab-triage\n",[133,167,169],{"start":168},2,[56,170,171],{},"Récupérez votre token d'API GitLab.",[53,173,174],{},[56,175,176,177,182,183,186,187,190,191],{},"Accédez aux ",[19,178,181],{"href":179,"rel":180},"https://gitlab.com/-/profile/preferences",[],"paramètres de votre profil"," GitLab.  * Cliquez sur ",[59,184,185],{},"Jetons d'accès",".  * Créez un nouveau jeton d’accès avec la portée ",[34,188,189],{},"api",".  * ",[59,192,193],{},"Conservez-le en lieu sûr et définissez sa date d'expiration selon la durée de ce tutoriel.",[133,195,197],{"start":196},3,[56,198,199],{},"Définissez vos stratégies de classement.",[12,201,202,203,206],{},"Créez un fichier nommé ",[34,204,205],{},".triage-policies.yml"," dans le répertoire racine de votre projet. Il contiendra les règles qui régissent le comportement de votre bot. Voici un exemple simple :",[143,208,212],{"className":209,"code":210,"language":211,"meta":148,"style":148},"language-yaml shiki shiki-themes github-light","\n---\n- name: \"Apply 'WIP' label\"\n  condition:\n    draft: true\n  action:\n    labels:\n      - status::wip\n\n- name: \"Request more information on old issue\"\n  condition:\n   date:\n    attribute: updated_at\n    condition: older_than\n    interval_type: months\n    interval: 12\n  action:\n    comment: |\n      {{author}} This issue has been open for more than 12 months, is this still an issue?\n","yaml",[34,213,214,220,225,241,250,262,270,278,287,292,304,311,319,330,341,352,363,370,382],{"__ignoreMap":148},[152,215,216],{"class":154,"line":155},[152,217,219],{"emptyLinePlaceholder":218},true,"\n",[152,221,222],{"class":154,"line":168},[152,223,224],{"class":158},"---\n",[152,226,227,231,235,238],{"class":154,"line":196},[152,228,230],{"class":229},"sgsFI","- ",[152,232,234],{"class":233},"shJU0","name",[152,236,237],{"class":229},": ",[152,239,240],{"class":161},"\"Apply 'WIP' label\"\n",[152,242,244,247],{"class":154,"line":243},4,[152,245,246],{"class":233},"  condition",[152,248,249],{"class":229},":\n",[152,251,253,256,258],{"class":154,"line":252},5,[152,254,255],{"class":233},"    draft",[152,257,237],{"class":229},[152,259,261],{"class":260},"sYu0t","true\n",[152,263,265,268],{"class":154,"line":264},6,[152,266,267],{"class":233},"  action",[152,269,249],{"class":229},[152,271,273,276],{"class":154,"line":272},7,[152,274,275],{"class":233},"    labels",[152,277,249],{"class":229},[152,279,281,284],{"class":154,"line":280},8,[152,282,283],{"class":229},"      - ",[152,285,286],{"class":161},"status::wip\n",[152,288,290],{"class":154,"line":289},9,[152,291,219],{"emptyLinePlaceholder":218},[152,293,295,297,299,301],{"class":154,"line":294},10,[152,296,230],{"class":229},[152,298,234],{"class":233},[152,300,237],{"class":229},[152,302,303],{"class":161},"\"Request more information on old issue\"\n",[152,305,307,309],{"class":154,"line":306},11,[152,308,246],{"class":233},[152,310,249],{"class":229},[152,312,314,317],{"class":154,"line":313},12,[152,315,316],{"class":233},"   date",[152,318,249],{"class":229},[152,320,322,325,327],{"class":154,"line":321},13,[152,323,324],{"class":233},"    attribute",[152,326,237],{"class":229},[152,328,329],{"class":161},"updated_at\n",[152,331,333,336,338],{"class":154,"line":332},14,[152,334,335],{"class":233},"    condition",[152,337,237],{"class":229},[152,339,340],{"class":161},"older_than\n",[152,342,344,347,349],{"class":154,"line":343},15,[152,345,346],{"class":233},"    interval_type",[152,348,237],{"class":229},[152,350,351],{"class":161},"months\n",[152,353,355,358,360],{"class":154,"line":354},16,[152,356,357],{"class":233},"    interval",[152,359,237],{"class":229},[152,361,362],{"class":260},"12\n",[152,364,366,368],{"class":154,"line":365},17,[152,367,267],{"class":233},[152,369,249],{"class":229},[152,371,373,376,378],{"class":154,"line":372},18,[152,374,375],{"class":233},"    comment",[152,377,237],{"class":229},[152,379,381],{"class":380},"sD7c4","|\n",[152,383,385],{"class":154,"line":384},19,[152,386,387],{"class":161},"      {{author}} This issue has been open for more than 12 months, is this still an issue?\n",[12,389,390],{},"Cette configuration définit deux stratégies :",[53,392,393],{},[56,394,395,396,399],{},"La première applique automatiquement le label ",[34,397,398],{},"status::wip"," à tout ticket enregistré en tant que brouillon.  * La deuxième ajoute un commentaire à tout ticket qui n'a pas été mis à jour depuis 12 mois.",[133,401,402],{"start":243},[56,403,404],{},"Exécutez votre bot.",[12,406,407],{},"Vous pouvez exécuter votre bot manuellement à l'aide de la commande suivante :",[143,409,411],{"className":145,"code":410,"language":147,"meta":148,"style":148},"gitlab-triage -t \u003Cyour_api_token> -p \u003Cyour_project_id>\n",[34,412,413],{"__ignoreMap":148},[152,414,415,417,420,423,426,429,432,435,437,440,443],{"class":154,"line":155},[152,416,36],{"class":158},[152,418,419],{"class":260}," -t",[152,421,422],{"class":380}," \u003C",[152,424,425],{"class":161},"your_api_toke",[152,427,428],{"class":229},"n",[152,430,431],{"class":380},">",[152,433,434],{"class":260}," -p",[152,436,422],{"class":380},[152,438,439],{"class":161},"your_project_i",[152,441,442],{"class":229},"d",[152,444,445],{"class":380},">\n",[12,447,448,449,452,453,456,457,462,463,466,467,124],{},"Remplacez ",[34,450,451],{},"\u003Cyour_api_token>"," par votre token d'API GitLab et ",[34,454,455],{},"\u003Cyour_project_id>"," par l'",[19,458,461],{"href":459,"rel":460},"https://docs.gitlab.com/user/project/working_with_projects/#access-a-project-by-using-the-project-id",[],"ID de votre projet GitLab",". Pour effectuer un test sans appliquer les actions (mode simulation), ajoutez l’option ",[34,464,465],{},"-n"," ou ",[34,468,469],{},"--dry-run",[39,471,473],{"id":472},"automatisation-avec-gitlab-cicd","Automatisation avec GitLab CI/CD",[12,475,476,477,482,483,486],{},"Pour aller plus loin, vous pouvez intégrer l’exécution de votre bot directement dans vos pipelines GitLab ",[19,478,481],{"href":479,"rel":480},"https://about.gitlab.com/fr-fr/topics/ci-cd/",[],"CI/CD",". Voici un exemple de configuration ",[34,484,485],{},".gitlab-ci.yml"," :",[143,488,490],{"className":209,"code":489,"language":211,"meta":148,"style":148},"\ntriage:\n  script:\n    - gem install gitlab-triage\n    - gitlab-triage -t $GITLAB_TOKEN -p $CI_PROJECT_ID\n  only:\n    - schedules\n",[34,491,492,496,503,510,517,524,531],{"__ignoreMap":148},[152,493,494],{"class":154,"line":155},[152,495,219],{"emptyLinePlaceholder":218},[152,497,498,501],{"class":154,"line":168},[152,499,500],{"class":233},"triage",[152,502,249],{"class":229},[152,504,505,508],{"class":154,"line":196},[152,506,507],{"class":233},"  script",[152,509,249],{"class":229},[152,511,512,515],{"class":154,"line":243},[152,513,514],{"class":229},"    - ",[152,516,146],{"class":161},[152,518,519,521],{"class":154,"line":252},[152,520,514],{"class":229},[152,522,523],{"class":161},"gitlab-triage -t $GITLAB_TOKEN -p $CI_PROJECT_ID\n",[152,525,526,529],{"class":154,"line":264},[152,527,528],{"class":233},"  only",[152,530,249],{"class":229},[152,532,533,535],{"class":154,"line":272},[152,534,514],{"class":229},[152,536,537],{"class":161},"schedules\n",[12,539,540,541,543,544,549,550,553,554,557,558,561],{},"Cette configuration définit un job nommé « triage » qui installe la gemme ",[34,542,36],{}," et exécute le bot à l'aide de deux ",[19,545,548],{"href":546,"rel":547},"https://about.gitlab.com/fr-fr/blog/demystifying-ci-cd-variables/",[],"variables CI/CD"," prédéfinis : ",[34,551,552],{},"$GITLAB_TOKEN"," et ",[34,555,556],{},"$CI_PROJECT_ID",". La clause ",[34,559,560],{},"only: schedules"," garantit que ce job s'exécute uniquement selon un calendrier défini.",[12,563,564,565,570,571,573,574,577],{},"Pour ",[19,566,569],{"href":567,"rel":568},"https://docs.gitlab.com/ci/pipelines/schedules/",[],"automatiser l’exécution de votre bot à intervalles réguliers",", accédez aux paramètres ",[59,572,481],{}," de votre projet GitLab, puis à l'onglet ",[59,575,576],{},"Calendriers",". Créez un calendrier de planification et définissez la fréquence d'exécution de votre bot (par exemple, quotidiennement, toutes les heures).",[39,579,581],{"id":580},"stratégies-de-classement-avancées","Stratégies de classement avancées",[12,583,84,584,586],{},[34,585,36],{}," offre un large éventail de fonctionnalités avancées pour créer des stratégies de classement plus complexes :",[53,588,589],{},[56,590,591,594,595,598,599,602,603,608,609,124],{},[59,592,593],{},"Expressions régulières :"," pour des correspondances plus puissantes dans vos stratégies.  - ",[59,596,597],{},"Stratégies de synthèse :"," pour regrouper des tickets associés en un ticket unique récapitulatif. - ",[59,600,601],{},"Actions personnalisées :"," pour effectuer des opérations plus complexes à l'aide de l'API GitLab, en utilisant des ",[19,604,607],{"href":605,"rel":606},"https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage#can-i-customize",[],"blocs de code Ruby",".\nVoici deux exemples concrets utilisés par l'équipe Developer Advocacy de GitLab. Vous pouvez consulter l'intégralité des stratégies dans ",[19,610,613],{"href":611,"rel":612},"https://gitlab.com/gitlab-da/projects/devrel-bot/-/blob/master/.triage-policies.yml?ref_type=heads",[],"ce fichier",[143,615,617],{"className":209,"code":616,"language":211,"meta":148,"style":148},"- name: Issues where DA team member is an assignee outside DA-Meta project i.e. DevRel-Influenced\n  conditions:\n    assignee_member:\n      source: group\n      condition: member_of\n      source_id: 1008\n    state: opened\n    ruby: get_project_id != 18     forbidden_labels:\n      - developer-advocacy\n  actions:       labels:\n      - developer-advocacy\n      - DevRel-Influenced\n      - DA-Bot::Skip\n",[34,618,619,630,637,644,654,664,674,684,696,703,716,722,729],{"__ignoreMap":148},[152,620,621,623,625,627],{"class":154,"line":155},[152,622,230],{"class":229},[152,624,234],{"class":233},[152,626,237],{"class":229},[152,628,629],{"class":161},"Issues where DA team member is an assignee outside DA-Meta project i.e. DevRel-Influenced\n",[152,631,632,635],{"class":154,"line":168},[152,633,634],{"class":233},"  conditions",[152,636,249],{"class":229},[152,638,639,642],{"class":154,"line":196},[152,640,641],{"class":233},"    assignee_member",[152,643,249],{"class":229},[152,645,646,649,651],{"class":154,"line":243},[152,647,648],{"class":233},"      source",[152,650,237],{"class":229},[152,652,653],{"class":161},"group\n",[152,655,656,659,661],{"class":154,"line":252},[152,657,658],{"class":233},"      condition",[152,660,237],{"class":229},[152,662,663],{"class":161},"member_of\n",[152,665,666,669,671],{"class":154,"line":264},[152,667,668],{"class":233},"      source_id",[152,670,237],{"class":229},[152,672,673],{"class":260},"1008\n",[152,675,676,679,681],{"class":154,"line":272},[152,677,678],{"class":233},"    state",[152,680,237],{"class":229},[152,682,683],{"class":161},"opened\n",[152,685,686,689,691,694],{"class":154,"line":280},[152,687,688],{"class":233},"    ruby",[152,690,237],{"class":229},[152,692,693],{"class":233},"get_project_id != 18     forbidden_labels",[152,695,249],{"class":229},[152,697,698,700],{"class":154,"line":289},[152,699,283],{"class":229},[152,701,702],{"class":161},"developer-advocacy\n",[152,704,705,708,711,714],{"class":154,"line":294},[152,706,707],{"class":233},"  actions",[152,709,710],{"class":229},":       ",[152,712,713],{"class":233},"labels",[152,715,249],{"class":229},[152,717,718,720],{"class":154,"line":306},[152,719,283],{"class":229},[152,721,702],{"class":161},[152,723,724,726],{"class":154,"line":313},[152,725,283],{"class":229},[152,727,728],{"class":161},"DevRel-Influenced\n",[152,730,731,733],{"class":154,"line":321},[152,732,283],{"class":229},[152,734,735],{"class":161},"DA-Bot::Skip\n",[12,737,738,739,742],{},"Cet exemple concerne les tickets d'un groupe, à l'exclusion de ceux appartenant au projet portant l'ID 18. Il montre des tickets assignés à des membres du groupe portant l'ID 1008 et qui n'incluent pas le label ",[34,740,741],{},"developer-advocacy",". Cette stratégie permet à l'équipe Developer Advocacy de GitLab d'identifier les tickets attribués à ses membres, sur lesquels ils ont contribué mais pour un autre projet, et de suivre facilement ces contributions en y ajoutant automatiquement le label de l'équipe pour une vision claire de l'impact transversal de ses membres.",[143,744,749],{"className":745,"code":747,"language":748,"meta":148},[746],"language-text","- name: Missing Due Dates\n  conditions:\n    ruby: missing_due_date\n    state: opened\n    labels:\n      - developer-advocacy\n    forbidden_labels:\n      - DA-Due::N/A\n      - DA-Bot::Skip\n      - DA-Status::FYI\n      - DA-Status::OnHold\n      - CFP\n      - DA-Bot::Triage\n  actions:\n    labels:\n      - DA-Bot-Auto-Due-Date\n    comment: |\n      /due #{get_current_quarter_last_date}\n","text",[34,750,747],{"__ignoreMap":148},[12,752,753,754,756],{},"Ce deuxième exemple permet de trier tous les tickets portant le label ",[34,755,741],{},", qui n'incluent aucun label figurant dans la liste des labels interdits, et dont la date d'échéance est dépassée. Cette stratégie de classement met automatiquement à jour la date d'échéance en ajoutant un commentaire au ticket avec une commande slash et d'une nouvelle date générée dynamiquement à l'aide de Ruby.",[12,758,759],{},"Les scripts Ruby utilisés dans ces stratégies sont définis dans un fichier séparé, comme illustré ci-dessous. Cette approche offre une grande souplesse dans la création de filtres et d’actions personnalisés. Vous pouvez notamment voir des fonctions dédiées aux différentes commandes Ruby que nous avons utilisées dans nos stratégies de classement.",[143,761,764],{"className":762,"code":763,"language":748,"meta":148},[746],"require 'json'\nrequire 'date'\nrequire \"faraday\"\nrequire 'dotenv/load'\n\nmodule DATriagePlugin\n  def last_comment_at\n    conn = Faraday.new(\n      url: notes_url+\"?sort=desc&order_by=created_at&pagination=keyset&per_page=1\",\n      headers: {'PRIVATE-TOKEN' => ENV.fetch(\"PRIV_KEY\"), 'Content-Type' => 'application/json' }\n    )\n\n    response = conn.get()\n    if response.status == 200\n      jsonData = JSON.parse(response.body)\n      if jsonData.length > 0\n        Date.parse(jsonData[0]['created_at'])\n      else\n        Date.parse(resource[:created_at])\n      end\n    else\n      Date.parse(resource[:created_at])\n    end\n  end\n\n  def notes_url\n    resource[:_links][:notes]\n  end\n\n  def get_project_id\n    resource[:project_id]\n  end\n\n  def get_current_quarter_last_date()\n    yr = Time.now.year\n    case Time.now.month\n    when 2..4\n      lm = 4\n    when 5..7\n      lm = 7\n    when 8..10\n      lm = 10\n    when 11..12\n      lm = 1\n      yr = yr + 1\n    else\n      lm = 1        end\n\n    return Date.new(yr, lm, -1)   end\n\n  def one_week_to_due_date\n    if(resource[:due_date] == nil)\n      false\n    else\n      days_to_due = (Date.parse(resource[:due_date]) - Date.today).to_i\n      if(days_to_due > 0 && days_to_due \u003C 7)\n        true\n      else\n        false\n      end\n    end\n  end\n\n  def due_date_past\n    if(resource[:due_date] == nil)\n      false\n    else\n      Date.today > Date.parse(resource[:due_date])\n    end\n  end\n\n  def missing_due_date\n    if(resource[:due_date] == nil)\n      true\n    else\n      false\n    end\n  end\n\nend\n\nGitlab::Triage::Resource::Context.include DATriagePlugin\n\n",[34,765,763],{"__ignoreMap":148},[12,767,768],{},"Le bot de classement par ordre de priorité est exécuté à l'aide de la commande suivante :",[143,770,773],{"className":771,"code":772,"language":748,"meta":148},[746],"`gitlab-triage -r ./triage_bot/issue_triage_plugin.rb --debug --token $PRIV_KEY --source-id gitlab-com --source groups`  ```\n\n- `-r` : transmet un fichier de prérequis pour le classement par ordre de priorité en cours. Dans le cas présent, il s’agit d’un fichier contenant des fonctions Ruby personnalisées.  - `--debug` : affiche les informations de débogage en sortie.  - `--token` : permet de transmettre un token d'API GitLab valide.  - `--source` : spécifie si les tickets à analyser se trouvent dans un groupe ou un projet.  - `--source-id` : reçoit l'ID du type de source sélectionné. Dans le cas présent, celui du groupe ciblé.\n\nDans le projet GitLab [triage-ops](https://gitlab.com/gitlab-org/quality/triage-ops), autre exemple concret plus complexe, vous apprendrez à créer votre propre bot de classement par ordre de priorité à grande échelle.\n\n## Bonnes pratiques\n\n* **Commencez par les bases :** utilisez des stratégies simples et augmentez progressivement leur complexité. * **Testez minutieusement :** testez vos stratégies dans un environnement de préproduction avant de les déployer en production.  * **Surveillez régulièrement :** surveillez l'activité de votre bot pour vous assurer qu'il se comporte comme prévu. * **Nommez clairement vos stratégies :** attribuez à vos stratégies des noms clairs et descriptifs pour faciliter leur maintenance. * **Définissez attentivement la portée de vos filtres :** évitez de filtrer les tickets dans des groupes incluant des milliers de tickets, car cela pourrait ralentir le processus de classement par ordre de priorité, voire le faire échouer en raison des limites de débit de l'API GitLab.  * **Priorisez l'utilisation de labels pour le classement :** pour éviter de spammer les autres utilisateurs avec des commentaires et des tickets, les labels sont un moyen efficace d'effectuer un classement par ordre de priorité, clair, propre, non intrusif.\n\n## Prenez le contrôle de votre workflow\n\nAvec la gemme `gitlab-triage`, vous pouvez automatiser votre workflow GitLab et améliorer la productivité de vos équipes. Commencez par créer des bots de classement simples, puis explorez progressivement les fonctionnalités plus avancées. Vous serez surpris du temps et de l’énergie que vous pouvez économiser !\n\nDécouvrez les autres articles de cette série « Premiers pas avec GitLab » :\n\n- [Comment gérer les utilisateurs](https://about.gitlab.com/fr-fr/blog/getting-started-with-gitlab-how-to-manage-users/)\n\n- [Comment importer vos projets dans GitLab](https://about.gitlab.com/fr-fr/blog/getting-started-with-gitlab-how-to-import-your-projects-to-gitlab/)  - [Comment maîtriser la gestion de projet](https://about.gitlab.com/fr-fr/blog/getting-started-with-gitlab-mastering-project-management/)\n",[34,774,772],{"__ignoreMap":148},[776,777,778],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .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 .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":148,"searchDepth":168,"depth":168,"links":780},[781,782,784,785,786],{"id":41,"depth":168,"text":42},{"id":77,"depth":168,"text":783},"Qu'est-ce que la gemme gitlab-triage ?",{"id":127,"depth":168,"text":128},{"id":472,"depth":168,"text":473},{"id":580,"depth":168,"text":581},"product","2025-03-13","Découvrez comment automatiser les tâches répétitives pour permettre à vos équipes de se concentrer sur des missions à plus forte valeur ajoutée.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659525/Blog/Hero%20Images/blog-getting-started-with-gitlab-banner-0497-option4-fy25.png",{},"/fr-fr/blog/automating-agile-workflows-with-the-gitlab-triage-gem",{"title":5,"description":789,"ogTitle":5,"ogDescription":789,"noIndex":792,"ogImage":793,"ogUrl":797,"ogSiteName":798,"ogType":799,"canonicalUrls":797},"https://about.gitlab.com/blog/automating-agile-workflows-with-the-gitlab-triage-gem","https://about.gitlab.com","article","automating-agile-workflows-with-the-gitlab-triage-gem","fr-fr/blog/automating-agile-workflows-with-the-gitlab-triage-gem",[803,804,787,805,481],"DevSecOps platform","tutorial","agile","BlogPost","2025-04-15","e6hxgqpDKtB34G3keWn1CTHPR_YACQq-uxrdfj0d8n4",{"logo":810,"freeTrial":815,"sales":820,"login":825,"items":830,"search":1157,"minimal":1193,"duo":1212,"switchNav":1221,"pricingDeployment":1232},{"config":811},{"href":812,"dataGaName":813,"dataGaLocation":814},"/fr-fr/","gitlab logo","header",{"text":816,"config":817},"Commencer un essai gratuit",{"href":818,"dataGaName":819,"dataGaLocation":814},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":821,"config":822},"Demander une démo",{"href":823,"dataGaName":824,"dataGaLocation":814},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":826,"config":827},"Connexion",{"href":828,"dataGaName":829,"dataGaLocation":814},"https://gitlab.com/users/sign_in/","sign in",[831,860,960,965,1079,1135],{"text":832,"config":833,"menu":835},"Plateforme",{"dataNavLevelOne":834},"platform",{"type":836,"columns":837},"cards",[838,844,852],{"title":832,"description":839,"link":840},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":841,"config":842},"Explorer notre plateforme",{"href":843,"dataGaName":834,"dataGaLocation":814},"/fr-fr/platform/",{"title":845,"description":846,"link":847},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":848,"config":849},"Découvrir GitLab Duo",{"href":850,"dataGaName":851,"dataGaLocation":814},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":853,"description":854,"link":855},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":856,"config":857},"En savoir plus",{"href":858,"dataGaName":859,"dataGaLocation":814},"/fr-fr/why-gitlab/","why gitlab",{"text":861,"left":218,"config":862,"menu":864},"Produit",{"dataNavLevelOne":863},"solutions",{"type":865,"link":866,"columns":870,"feature":940},"lists",{"text":867,"config":868},"Voir toutes les solutions",{"href":869,"dataGaName":863,"dataGaLocation":814},"/fr-fr/solutions/",[871,895,918],{"title":872,"description":873,"link":874,"items":879},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":875},{"icon":876,"href":877,"dataGaName":878,"dataGaLocation":814},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[880,883,886,891],{"text":481,"config":881},{"href":882,"dataGaLocation":814,"dataGaName":481},"/fr-fr/solutions/continuous-integration/",{"text":845,"config":884},{"href":850,"dataGaLocation":814,"dataGaName":885},"gitlab duo agent platform - product menu",{"text":887,"config":888},"Gestion du code source",{"href":889,"dataGaLocation":814,"dataGaName":890},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":892,"config":893},"Livraison de logiciels automatisée",{"href":877,"dataGaLocation":814,"dataGaName":894},"Automated software delivery",{"title":896,"description":897,"link":898,"items":903},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":899},{"href":900,"dataGaName":901,"dataGaLocation":814,"icon":902},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[904,908,913],{"text":905,"config":906},"Tests de sécurité des applications",{"href":900,"dataGaName":907,"dataGaLocation":814},"Application security testing",{"text":909,"config":910},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":911,"dataGaLocation":814,"dataGaName":912},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":914,"config":915},"Conformité logicielle",{"href":916,"dataGaName":917,"dataGaLocation":814},"/fr-fr/solutions/software-compliance/","software compliance",{"title":919,"link":920,"items":925},"Mesures",{"config":921},{"icon":922,"href":923,"dataGaName":924,"dataGaLocation":814},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[926,930,935],{"text":927,"config":928},"Visibilité et mesures",{"href":923,"dataGaLocation":814,"dataGaName":929},"Visibility and Measurement",{"text":931,"config":932},"Gestion de la chaîne de valeur",{"href":933,"dataGaLocation":814,"dataGaName":934},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":936,"config":937},"Analyses et informations",{"href":938,"dataGaLocation":814,"dataGaName":939},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":7,"type":865,"items":941},[942,948,954],{"text":943,"config":944},"Entreprises",{"icon":945,"href":946,"dataGaLocation":814,"dataGaName":947},"Building","/fr-fr/enterprise/","enterprise",{"text":949,"config":950},"Pour les PME",{"icon":951,"href":952,"dataGaLocation":814,"dataGaName":953},"Work","/fr-fr/small-business/","small business",{"text":955,"config":956},"Pour le secteur public",{"icon":957,"href":958,"dataGaLocation":814,"dataGaName":959},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":961,"config":962},"Tarifs",{"href":963,"dataGaName":964,"dataGaLocation":814,"dataNavLevelOne":964},"/fr-fr/pricing/","pricing",{"text":966,"config":967,"menu":969},"Ressources",{"dataNavLevelOne":968},"resources",{"type":865,"link":970,"columns":974,"feature":1068},{"text":971,"config":972},"Afficher toutes les ressources",{"href":973,"dataGaName":968,"dataGaLocation":814},"/fr-fr/resources/",[975,1008,1035],{"title":976,"items":977},"Premiers pas",[978,983,988,993,998,1003],{"text":979,"config":980},"Installation",{"href":981,"dataGaName":982,"dataGaLocation":814},"/fr-fr/install/","install",{"text":984,"config":985},"Guides de démarrage",{"href":986,"dataGaName":987,"dataGaLocation":814},"/fr-fr/get-started/","quick setup checklists",{"text":989,"config":990},"Apprentissage",{"href":991,"dataGaLocation":814,"dataGaName":992},"https://university.gitlab.com/","learn",{"text":994,"config":995},"Documentation",{"href":996,"dataGaName":997,"dataGaLocation":814},"https://docs.gitlab.com/","product documentation",{"text":999,"config":1000},"Vidéos sur les bonnes pratiques",{"href":1001,"dataGaName":1002,"dataGaLocation":814},"/fr-fr/getting-started-videos/","best practice videos",{"text":1004,"config":1005},"Intégrations",{"href":1006,"dataGaName":1007,"dataGaLocation":814},"/fr-fr/integrations/","integrations",{"title":1009,"items":1010},"Découvrir",[1011,1016,1021,1026,1030],{"text":1012,"config":1013},"Témoignages clients",{"href":1014,"dataGaName":1015,"dataGaLocation":814},"/fr-fr/customers/","customer success stories",{"text":1017,"config":1018},"Blog",{"href":1019,"dataGaName":1020,"dataGaLocation":814},"/fr-fr/blog/","blog",{"text":1022,"config":1023},"Demo Hub",{"href":1024,"dataGaName":1025,"dataGaLocation":814},"/fr-fr/demo-hub/","demo hub",{"text":1027,"config":1028},"The Source",{"href":1029,"dataGaName":1020,"dataGaLocation":814},"/fr-fr/the-source/",{"text":1031,"config":1032},"Travail à distance",{"href":1033,"dataGaName":1034,"dataGaLocation":814},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1036,"items":1037},"Connecter",[1038,1043,1048,1053,1058,1063],{"text":1039,"config":1040},"Services GitLab",{"href":1041,"dataGaName":1042,"dataGaLocation":814},"/fr-fr/services/","services",{"text":1044,"config":1045},"Contribuer",{"href":1046,"dataGaName":1047,"dataGaLocation":814},"https://contributors.gitlab.com","contribute",{"text":1049,"config":1050},"Communauté",{"href":1051,"dataGaName":1052,"dataGaLocation":814},"/community/","community",{"text":1054,"config":1055},"Forum",{"href":1056,"dataGaName":1057,"dataGaLocation":814},"https://forum.gitlab.com/","forum",{"text":1059,"config":1060},"Événements",{"href":1061,"dataGaName":1062,"dataGaLocation":814},"/events/","events",{"text":1064,"config":1065},"Partenaires",{"href":1066,"dataGaName":1067,"dataGaLocation":814},"/fr-fr/partners/","partners",{"config":1069,"title":1072,"text":1073,"link":1074},{"background":1070,"textColor":1071},"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":1075,"config":1076},"Lire les articles les plus récents",{"href":1077,"dataGaName":1078,"dataGaLocation":814},"/fr-fr/whats-new/","whats new",{"text":1080,"config":1081,"menu":1083},"Société",{"dataNavLevelOne":1082},"company",{"type":865,"columns":1084},[1085],{"items":1086},[1087,1092,1098,1100,1105,1110,1115,1120,1125,1130],{"text":1088,"config":1089},"À propos",{"href":1090,"dataGaName":1091,"dataGaLocation":814},"/fr-fr/company/","about",{"text":1093,"config":1094,"footerGa":1097},"Carrières",{"href":1095,"dataGaName":1096,"dataGaLocation":814},"/jobs/","jobs",{"dataGaName":1096},{"text":1059,"config":1099},{"href":1061,"dataGaName":1062,"dataGaLocation":814},{"text":1101,"config":1102},"Leadership",{"href":1103,"dataGaName":1104,"dataGaLocation":814},"/company/team/e-group/","leadership",{"text":1106,"config":1107},"Manuel",{"href":1108,"dataGaName":1109,"dataGaLocation":814},"https://handbook.gitlab.com/","handbook",{"text":1111,"config":1112},"Relations avec les investisseurs",{"href":1113,"dataGaName":1114,"dataGaLocation":814},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1116,"config":1117},"Trust Center",{"href":1118,"dataGaName":1119,"dataGaLocation":814},"/fr-fr/security/","trust center",{"text":1121,"config":1122},"Centre pour la transparence de l'IA",{"href":1123,"dataGaName":1124,"dataGaLocation":814},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":1126,"config":1127},"Newsletter",{"href":1128,"dataGaName":1129,"dataGaLocation":814},"/company/contact/#contact-forms","newsletter",{"text":1131,"config":1132},"Presse",{"href":1133,"dataGaName":1134,"dataGaLocation":814},"/press/","press",{"text":1136,"config":1137,"menu":1138},"Nous contacter",{"dataNavLevelOne":1082},{"type":865,"columns":1139},[1140],{"items":1141},[1142,1147,1152],{"text":1143,"config":1144},"Contacter l'équipe commerciale",{"href":1145,"dataGaName":1146,"dataGaLocation":814},"/fr-fr/sales/","talk to sales",{"text":1148,"config":1149},"Assistance GitLab",{"href":1150,"dataGaName":1151,"dataGaLocation":814},"https://support.gitlab.com/hc/en-us","support portal",{"text":1153,"config":1154},"Portail clients GitLab",{"href":1155,"dataGaName":1156,"dataGaLocation":814},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1158,"login":1159,"suggestions":1166},"Fermer",{"text":1160,"link":1161},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1162,"config":1163},"GitLab.com",{"href":828,"dataGaName":1164,"dataGaLocation":1165},"search login","search",{"text":1167,"default":1168},"Suggestions",[1169,1172,1177,1179,1184,1189],{"text":845,"config":1170},{"href":850,"dataGaName":1171,"dataGaLocation":1165},"GitLab Duo Agent Platform",{"text":1173,"config":1174},"Suggestions de code (IA)",{"href":1175,"dataGaName":1176,"dataGaLocation":1165},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":481,"config":1178},{"href":882,"dataGaName":481,"dataGaLocation":1165},{"text":1180,"config":1181},"GitLab sur AWS",{"href":1182,"dataGaName":1183,"dataGaLocation":1165},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1185,"config":1186},"GitLab sur Google Cloud",{"href":1187,"dataGaName":1188,"dataGaLocation":1165},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1190,"config":1191},"Pourquoi utiliser GitLab ?",{"href":858,"dataGaName":1192,"dataGaLocation":1165},"Why GitLab?",{"freeTrial":1194,"mobileIcon":1199,"desktopIcon":1204,"secondaryButton":1207},{"text":1195,"config":1196},"Commencer votre essai gratuit",{"href":1197,"dataGaName":819,"dataGaLocation":1198},"https://gitlab.com/-/trials/new/","nav",{"altText":1200,"config":1201},"Icône GitLab",{"src":1202,"dataGaName":1203,"dataGaLocation":1198},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1200,"config":1205},{"src":1206,"dataGaName":1203,"dataGaLocation":1198},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1208,"config":1209},"Commencer",{"href":1210,"dataGaName":1211,"dataGaLocation":1198},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1213,"mobileIcon":1217,"desktopIcon":1219},{"text":1214,"config":1215},"En savoir plus sur GitLab Duo",{"href":850,"dataGaName":1216,"dataGaLocation":1198},"gitlab duo",{"altText":1200,"config":1218},{"src":1202,"dataGaName":1203,"dataGaLocation":1198},{"altText":1200,"config":1220},{"src":1206,"dataGaName":1203,"dataGaLocation":1198},{"button":1222,"mobileIcon":1227,"desktopIcon":1229},{"text":1223,"config":1224},"/switch",{"href":1225,"dataGaName":1226,"dataGaLocation":1198},"#contact","switch",{"altText":1200,"config":1228},{"src":1202,"dataGaName":1203,"dataGaLocation":1198},{"altText":1200,"config":1230},{"src":1231,"dataGaName":1203,"dataGaLocation":1198},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1233,"mobileIcon":1238,"desktopIcon":1240},{"text":1234,"config":1235},"Retour aux tarifs",{"href":963,"dataGaName":1236,"dataGaLocation":1198,"icon":1237},"back to pricing","GoBack",{"altText":1200,"config":1239},{"src":1202,"dataGaName":1203,"dataGaLocation":1198},{"altText":1200,"config":1241},{"src":1206,"dataGaName":1203,"dataGaLocation":1198},{"title":1243,"button":1244,"config":1248},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":856,"config":1245},{"href":1246,"dataGaName":1247,"dataGaLocation":814},"/fr-fr/gitlab-orbit/","orbit",{"layout":1249,"disabled":792},"release",{"data":1251},{"text":1252,"source":1253,"edit":1259,"contribute":1264,"config":1268,"items":1273,"minimal":1480},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1254,"config":1255},"Afficher le code source de la page",{"href":1256,"dataGaName":1257,"dataGaLocation":1258},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1260,"config":1261},"Modifier cette page",{"href":1262,"dataGaName":1263,"dataGaLocation":1258},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1044,"config":1265},{"href":1266,"dataGaName":1267,"dataGaLocation":1258},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1269,"facebook":1270,"youtube":1271,"linkedin":1272},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1274,1320,1372,1415,1447],{"title":961,"links":1275,"subMenu":1290},[1276,1280,1285],{"text":1277,"config":1278},"Voir les forfaits",{"href":963,"dataGaName":1279,"dataGaLocation":1258},"view plans",{"text":1281,"config":1282},"GitLab Premium",{"href":1283,"dataGaName":1284,"dataGaLocation":1258},"/fr-fr/pricing/premium/","why premium",{"text":1286,"config":1287},"GitLab Ultimate",{"href":1288,"dataGaName":1289,"dataGaLocation":1258},"/fr-fr/pricing/ultimate/","why ultimate",[1291],{"title":1136,"links":1292},[1293,1295,1297,1300,1305,1310,1315],{"text":1143,"config":1294},{"href":1145,"dataGaName":824,"dataGaLocation":1258},{"text":1148,"config":1296},{"href":1150,"dataGaName":1151,"dataGaLocation":1258},{"text":1298,"config":1299},"Portail clients",{"href":1155,"dataGaName":1156,"dataGaLocation":1258},{"text":1301,"config":1302},"Statut",{"href":1303,"dataGaName":1304,"dataGaLocation":1258},"https://status.gitlab.com/","status",{"text":1306,"config":1307},"Conditions d'utilisation",{"href":1308,"dataGaName":1309,"dataGaLocation":1258},"/terms/","terms of use",{"text":1311,"config":1312},"Politique de confidentialité",{"href":1313,"dataGaName":1314,"dataGaLocation":1258},"/fr-fr/privacy/","privacy statement",{"text":1316,"config":1317},"Gestion des cookies",{"dataGaName":1318,"dataGaLocation":1258,"id":1319,"isOneTrustButton":218},"cookie preferences","ot-sdk-btn",{"title":861,"links":1321,"subMenu":1330},[1322,1326],{"text":1323,"config":1324},"Plateforme DevSecOps",{"href":843,"dataGaName":1325,"dataGaLocation":1258},"devsecops platform",{"text":1327,"config":1328},"Développement assisté par l'IA",{"href":850,"dataGaName":1329,"dataGaLocation":1258},"ai-assisted development",[1331],{"title":1332,"links":1333},"Thèmes",[1334,1338,1343,1348,1353,1357,1362,1367],{"text":481,"config":1335},{"href":1336,"dataGaName":1337,"dataGaLocation":1258},"/fr-fr/topics/ci-cd/","cicd",{"text":1339,"config":1340},"GitOps",{"href":1341,"dataGaName":1342,"dataGaLocation":1258},"/fr-fr/topics/gitops/","gitops",{"text":1344,"config":1345},"DevOps",{"href":1346,"dataGaName":1347,"dataGaLocation":1258},"/fr-fr/topics/devops/","devops",{"text":1349,"config":1350},"Contrôle de version",{"href":1351,"dataGaName":1352,"dataGaLocation":1258},"/fr-fr/topics/version-control/","version control",{"text":24,"config":1354},{"href":1355,"dataGaName":1356,"dataGaLocation":1258},"/fr-fr/topics/devsecops/","devsecops",{"text":1358,"config":1359},"Cloud-native",{"href":1360,"dataGaName":1361,"dataGaLocation":1258},"/fr-fr/topics/cloud-native/","cloud native",{"text":1363,"config":1364},"IA pour la programmation",{"href":1365,"dataGaName":1366,"dataGaLocation":1258},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1368,"config":1369},"IA agentique",{"href":1370,"dataGaName":1371,"dataGaLocation":1258},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1373,"links":1374},"Solutions",[1375,1378,1380,1385,1388,1391,1394,1397,1399,1402,1405,1410],{"text":905,"config":1376},{"href":900,"dataGaName":1377,"dataGaLocation":1258},"Application Security Testing",{"text":892,"config":1379},{"href":877,"dataGaName":878,"dataGaLocation":1258},{"text":1381,"config":1382},"Développement Agile",{"href":1383,"dataGaName":1384,"dataGaLocation":1258},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":887,"config":1386},{"href":889,"dataGaName":1387,"dataGaLocation":1258},"source code management",{"text":481,"config":1389},{"href":882,"dataGaName":1390,"dataGaLocation":1258},"continuous integration & delivery",{"text":931,"config":1392},{"href":933,"dataGaName":1393,"dataGaLocation":1258},"value stream management",{"text":1339,"config":1395},{"href":1396,"dataGaName":1342,"dataGaLocation":1258},"/fr-fr/solutions/gitops/",{"text":943,"config":1398},{"href":946,"dataGaName":947,"dataGaLocation":1258},{"text":1400,"config":1401},"PME",{"href":952,"dataGaName":953,"dataGaLocation":1258},{"text":1403,"config":1404},"Secteur public",{"href":958,"dataGaName":959,"dataGaLocation":1258},{"text":1406,"config":1407},"Éducation",{"href":1408,"dataGaName":1409,"dataGaLocation":1258},"/fr-fr/solutions/education/","education",{"text":1411,"config":1412},"Services financiers",{"href":1413,"dataGaName":1414,"dataGaLocation":1258},"/fr-fr/solutions/finance/","financial services",{"title":966,"links":1416},[1417,1419,1421,1423,1426,1428,1431,1433,1435,1437,1439,1441,1443,1445],{"text":979,"config":1418},{"href":981,"dataGaName":982,"dataGaLocation":1258},{"text":984,"config":1420},{"href":986,"dataGaName":987,"dataGaLocation":1258},{"text":989,"config":1422},{"href":991,"dataGaName":992,"dataGaLocation":1258},{"text":994,"config":1424},{"href":996,"dataGaName":1425,"dataGaLocation":1258},"docs",{"text":1017,"config":1427},{"href":1019,"dataGaName":1020,"dataGaLocation":1258},{"text":1429,"config":1430},"Nouveautés",{"href":1077,"dataGaName":1078,"dataGaLocation":1258},{"text":1012,"config":1432},{"href":1014,"dataGaName":1015,"dataGaLocation":1258},{"text":1031,"config":1434},{"href":1033,"dataGaName":1034,"dataGaLocation":1258},{"text":1039,"config":1436},{"href":1041,"dataGaName":1042,"dataGaLocation":1258},{"text":1044,"config":1438},{"href":1046,"dataGaName":1047,"dataGaLocation":1258},{"text":1049,"config":1440},{"href":1051,"dataGaName":1052,"dataGaLocation":1258},{"text":1054,"config":1442},{"href":1056,"dataGaName":1057,"dataGaLocation":1258},{"text":1059,"config":1444},{"href":1061,"dataGaName":1062,"dataGaLocation":1258},{"text":1064,"config":1446},{"href":1066,"dataGaName":1067,"dataGaLocation":1258},{"title":1080,"links":1448},[1449,1451,1453,1455,1457,1459,1464,1469,1471,1473,1475],{"text":1088,"config":1450},{"href":1090,"dataGaName":1082,"dataGaLocation":1258},{"text":1093,"config":1452},{"href":1095,"dataGaName":1096,"dataGaLocation":1258},{"text":1101,"config":1454},{"href":1103,"dataGaName":1104,"dataGaLocation":1258},{"text":1106,"config":1456},{"href":1108,"dataGaName":1109,"dataGaLocation":1258},{"text":1111,"config":1458},{"href":1113,"dataGaName":1114,"dataGaLocation":1258},{"text":1460,"config":1461},"Développement durable",{"href":1462,"dataGaName":1463,"dataGaLocation":1258},"/sustainability/","Sustainability",{"text":1465,"config":1466},"Diversité, inclusion et appartenance (DIB)",{"href":1467,"dataGaName":1468,"dataGaLocation":1258},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1116,"config":1470},{"href":1118,"dataGaName":1119,"dataGaLocation":1258},{"text":1126,"config":1472},{"href":1128,"dataGaName":1129,"dataGaLocation":1258},{"text":1131,"config":1474},{"href":1133,"dataGaName":1134,"dataGaLocation":1258},{"text":1476,"config":1477},"Déclaration de transparence sur l'esclavage moderne",{"href":1478,"dataGaName":1479,"dataGaLocation":1258},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1481},[1482,1484,1486],{"text":1306,"config":1483},{"href":1308,"dataGaName":1309,"dataGaLocation":1258},{"text":1316,"config":1485},{"dataGaName":1318,"dataGaLocation":1258,"id":1319,"isOneTrustButton":218},{"text":1311,"config":1487},{"href":1313,"dataGaName":1314,"dataGaLocation":1258},[1489],{"id":1490,"title":1491,"body":791,"config":1492,"content":1494,"description":791,"extension":1497,"meta":1498,"navigation":218,"path":1499,"seo":1500,"stem":1501,"__hash__":1502},"blogAuthors/en-us/blog/authors/gitlab.yml","Gitlab",{"template":1493},"BlogAuthor",{"name":7,"config":1495},{"headshot":1496,"ctfId":7},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","yml",{},"/en-us/blog/authors/gitlab",{},"en-us/blog/authors/gitlab","XCBKIcPoCs6zi2oHG7o-bAp52Jhaw8_zGhIJ2jNrEjU",[1504,1513,1521],{"title":1505,"description":1506,"heroImage":1507,"category":787,"date":1508,"authors":1509,"slug":1512,"externalUrl":791},"Maîtrisez vos sièges GitLab avec l'accès restreint","Découvrez comment la fonctionnalité d'accès restreint de GitLab permet d'éviter les dépassements de sièges, s'intègre à votre fournisseur d'identité et garantit des coûts de licence prévisibles.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774375772/kpaaaiqhokevxxeoxvu0.png","2026-07-15",[1510,1511],"Magdalena Frankiewicz","Priyanka Palanikumar","gitlab-restricted-access-improvements",{"title":1514,"description":1515,"heroImage":1516,"category":787,"date":1517,"authors":1518,"slug":1520,"externalUrl":791},"Feature flags de GitLab en Python : guide de démarrage","Découvrez comment intégrer les feature flags de GitLab dans une application Flask en Python avec le SDK Unleash pour contrôler le déploiement progressif de fonctionnalités sans redéployer votre application.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-06-01",[1519],"Omid Khan","getting-started-with-gitlab-feature-flags-in-python",{"title":1522,"description":1523,"heroImage":1524,"category":787,"date":1525,"authors":1526,"slug":1528,"externalUrl":791},"Suivez l'utilisation des composants CI dans votre organisation","Avec GitLab 19.0, visualisez comment vos composants CI partagés sont utilisés dans votre organisation, afin de pouvoir prendre les mesures qui s'imposent en fonction de vos observations.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779189265/iqzyhhiwagxzwywvjzow.png","2026-05-22",[1527],"Corinne Dent","track-ci-component-usage",{"promotions":1530},[1531,1545,1556,1568],{"id":1532,"categories":1533,"header":1535,"text":1536,"button":1537,"image":1542},"ai-modernization",[1534],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":1538,"config":1539},"Obtenez votre score de maturité IA",{"href":1540,"dataGaName":1541,"dataGaLocation":1020},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":1543},{"src":1544},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1546,"categories":1547,"header":1548,"text":1536,"button":1549,"image":1553},"devops-modernization",[787,1356],"Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":1550,"config":1551},"Obtenez votre score de maturité DevOps",{"href":1552,"dataGaName":1541,"dataGaLocation":1020},"/fr-fr/assessments/devops-modernization-assessment/",{"config":1554},{"src":1555},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1557,"categories":1558,"header":1560,"text":1536,"button":1561,"image":1565},"security-modernization",[1559],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":1562,"config":1563},"Obtenez votre score de maturité en matière de sécurité",{"href":1564,"dataGaName":1541,"dataGaLocation":1020},"/fr-fr/assessments/security-modernization-assessment/",{"config":1566},{"src":1567},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1569,"paths":1570,"header":1573,"text":1574,"button":1575,"image":1580},"github-azure-migration",[1571,1572],"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":1576,"config":1577},"Découvrez les différences entre GitLab et GitHub",{"href":1578,"dataGaName":1579,"dataGaLocation":1020},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1581},{"src":1555},{"header":1583,"blurb":1584,"button":1585,"secondaryButton":1589},"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":816,"config":1586},{"href":1587,"dataGaName":819,"dataGaLocation":1588},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":1143,"config":1590},{"href":1145,"dataGaName":824,"dataGaLocation":1588},1786803764487]