[{"data":1,"prerenderedAt":1612},["ShallowReactive",2],{"/de-de/blog/automating-agile-workflows-with-the-gitlab-triage-gem":3,"navigation-de-de":831,"banner-de-de":1262,"footer-de-de":1270,"blog-post-authors-de-de-GitLab":1511,"blog-related-posts-de-de-automating-agile-workflows-with-the-gitlab-triage-gem":1526,"blog-promotions-de-de":1549,"next-steps-de-de":1602},{"id":4,"title":5,"authors":6,"body":8,"category":808,"date":809,"description":810,"extension":811,"externalUrl":812,"faq":812,"featured":813,"heroImage":814,"meta":815,"navigation":227,"path":816,"seo":817,"slug":821,"stem":822,"tags":823,"template":828,"updatedDate":829,"__hash__":830},"blogPosts/de-de/blog/automating-agile-workflows-with-the-gitlab-triage-gem.md","Automatisiere Agile-Workflows mit dem gem gitlab-triage",[7],"GitLab",{"type":9,"value":10,"toc":800},"minimark",[11,18,31,36,39,45,74,80,86,123,133,137,140,146,171,177,203,209,216,397,400,412,417,420,458,483,487,500,551,575,592,596,601,627,635,757,764,772,778,781,787,790,796],[12,13,14],"p",{},[15,16,17],"em",{},"Willkommen zu unserer Serie „Erste Schritte mit GitLab“, in der wir Einsteiger(inne)n helfen, die GitLabs DevSecOps-Plattform kennenzulernen.",[12,19,20,21,30],{},"In diesem Beitrag geht es um das gem ",[22,23,26],"a",{"href":24,"rel":25},"https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage",[],[27,28,29],"code",{},"gitlab-triage",", ein leistungsstarkes Tool, mit dem du Bots erstellen kannst, um deinen Agile-Workflow zu automatisieren.",[32,33,35],"h2",{"id":34},"warum-solltest-du-deinen-workflow-automatisieren","Warum solltest du deinen Workflow automatisieren?",[12,37,38],{},"Effizienz ist in der Softwareentwicklung ausschlaggebend. Indem du wiederkehrende Aufgaben wie die Triage von Tickets und Merge Requests automatisierst, schaffst du wertvolle Zeit für dein Team, in der es sich auf das Wichtigste konzentrieren kann: tolle Software zu entwickeln.",[12,40,41,42,44],{},"Mit ",[27,43,29],{}," kannst du Folgendes tun:",[46,47,48,56,62,68],"ul",{},[49,50,51,55],"li",{},[52,53,54],"strong",{},"Konsistenz sicherstellen:"," Wende Labels an und weise Tickets automatisch anhand vordefinierter Regeln zu.",[49,57,58,61],{},[52,59,60],{},"Reaktionszeit verbessern:"," Erhalte sofortiges Feedback zu neuen Tickets und Merge Requests.",[49,63,64,67],{},[52,65,66],{},"Manuellen Aufwand reduzieren:"," Mache manuelle Triage und Updates überflüssig.",[49,69,70,73],{},[52,71,72],{},"Produktivität steigern:"," Entlaste dein Team, damit es sich auf das Programmieren und auf Innovationen konzentrieren kann.",[32,75,77,78],{"id":76},"wir-stellen-vor-das-gem-gitlab-triage","Wir stellen vor: das gem ",[27,79,29],{},[12,81,82,83,85],{},"Das gem ",[27,84,29],{}," ist eine Ruby-Bibliothek, mit der du Bots erstellen kannst, die mit deinen GitLab-Projekten interagieren. Diese Bots können automatisch verschiedenste Aktionen durchführen, darunter:",[46,87,88,94,100,106,112,118],{},[49,89,90,93],{},[52,91,92],{},"Labels zuweisen:"," Kategorisiere Tickets und Merge Requests automatisch.",[49,95,96,99],{},[52,97,98],{},"Kommentare verfassen:"," Gib Neuheiten bekannt, fordere Informationen an oder hinterlasse Feedback.",[49,101,102,105],{},[52,103,104],{},"Aufgaben zuweisen:"," Weise Tickets und Merge Request dem passenden Teammitglied zu.",[49,107,108,111],{},[52,109,110],{},"Abschließen:"," Schließe veraltete oder gelöste Tickets und Merge Requests.",[49,113,114,117],{},[52,115,116],{},"Tickets erstellen:"," Erstelle neue Tickets basierend auf bestimmten Ereignissen oder Bedingungen.",[49,119,120],{},[52,121,122],{},"Und vieles mehr!",[12,124,125,126,132],{},"Sieh dir das ",[22,127,129,130],{"href":24,"rel":128},[],"gem-Repository ",[27,131,29],{}," an.",[32,134,136],{"id":135},"einrichtung-deines-triage-bots","Einrichtung deines Triage-Bots",[12,138,139],{},"Richten wir jetzt deinen ersten Triage-Bot ein und bringen ihn zum Laufen.",[141,142,143],"ol",{},[49,144,145],{},"Installiere das gem. (Hinweis: Der Befehl gem ist verfügbar, wenn die Programmiersprache Ruby installiert ist.)",[147,148,153],"pre",{"className":149,"code":150,"language":151,"meta":152,"style":152},"language-bash shiki shiki-themes github-light","gem install gitlab-triage\n","bash","",[27,154,155],{"__ignoreMap":152},[156,157,160,164,168],"span",{"class":158,"line":159},"line",1,[156,161,163],{"class":162},"s7eDp","gem",[156,165,167],{"class":166},"sYBdl"," install",[156,169,170],{"class":166}," gitlab-triage\n",[141,172,174],{"start":173},2,[49,175,176],{},"Rufe dein GitLab-API-Token ab.",[46,178,179,192,198],{},[49,180,181,182,187,188,191],{},"Gehe zu deinen GitLab-",[22,183,186],{"href":184,"rel":185},"https://gitlab.com/-/profile/preferences",[],"Profileinstellungen",".  * Gehe zu ",[52,189,190],{},"Zugriffstoken",".",[49,193,194,195,191],{},"Erstelle ein neues Token mit dem Geltungsbereich ",[27,196,197],{},"api",[49,199,200],{},[52,201,202],{},"Bewahre dein Token sicher auf und lege ein Ablaufdatum dafür fest, sodass es abläuft, wenn du diese Anleitung abgeschlossen hast.",[141,204,206],{"start":205},3,[49,207,208],{},"Definiere deine Triage-Richtlinien.",[12,210,211,212,215],{},"Erstelle im Root-Verzeichnis deines Projekts eine Datei mit dem Namen ",[27,213,214],{},".triage-policies.yml",". Diese Datei enthält die Regeln, die das Verhalten deines Bots steuern. Hier ist ein einfaches Beispiel:",[147,217,221],{"className":218,"code":219,"language":220,"meta":152,"style":152},"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",[27,222,223,229,234,250,259,271,279,287,296,301,313,320,328,339,350,361,372,379,391],{"__ignoreMap":152},[156,224,225],{"class":158,"line":159},[156,226,228],{"emptyLinePlaceholder":227},true,"\n",[156,230,231],{"class":158,"line":173},[156,232,233],{"class":162},"---\n",[156,235,236,240,244,247],{"class":158,"line":205},[156,237,239],{"class":238},"sgsFI","- ",[156,241,243],{"class":242},"shJU0","name",[156,245,246],{"class":238},": ",[156,248,249],{"class":166},"\"Apply 'WIP' label\"\n",[156,251,253,256],{"class":158,"line":252},4,[156,254,255],{"class":242},"  condition",[156,257,258],{"class":238},":\n",[156,260,262,265,267],{"class":158,"line":261},5,[156,263,264],{"class":242},"    draft",[156,266,246],{"class":238},[156,268,270],{"class":269},"sYu0t","true\n",[156,272,274,277],{"class":158,"line":273},6,[156,275,276],{"class":242},"  action",[156,278,258],{"class":238},[156,280,282,285],{"class":158,"line":281},7,[156,283,284],{"class":242},"    labels",[156,286,258],{"class":238},[156,288,290,293],{"class":158,"line":289},8,[156,291,292],{"class":238},"      - ",[156,294,295],{"class":166},"status::wip\n",[156,297,299],{"class":158,"line":298},9,[156,300,228],{"emptyLinePlaceholder":227},[156,302,304,306,308,310],{"class":158,"line":303},10,[156,305,239],{"class":238},[156,307,243],{"class":242},[156,309,246],{"class":238},[156,311,312],{"class":166},"\"Request more information on old issue\"\n",[156,314,316,318],{"class":158,"line":315},11,[156,317,255],{"class":242},[156,319,258],{"class":238},[156,321,323,326],{"class":158,"line":322},12,[156,324,325],{"class":242},"   date",[156,327,258],{"class":238},[156,329,331,334,336],{"class":158,"line":330},13,[156,332,333],{"class":242},"    attribute",[156,335,246],{"class":238},[156,337,338],{"class":166},"updated_at\n",[156,340,342,345,347],{"class":158,"line":341},14,[156,343,344],{"class":242},"    condition",[156,346,246],{"class":238},[156,348,349],{"class":166},"older_than\n",[156,351,353,356,358],{"class":158,"line":352},15,[156,354,355],{"class":242},"    interval_type",[156,357,246],{"class":238},[156,359,360],{"class":166},"months\n",[156,362,364,367,369],{"class":158,"line":363},16,[156,365,366],{"class":242},"    interval",[156,368,246],{"class":238},[156,370,371],{"class":269},"12\n",[156,373,375,377],{"class":158,"line":374},17,[156,376,276],{"class":242},[156,378,258],{"class":238},[156,380,382,385,387],{"class":158,"line":381},18,[156,383,384],{"class":242},"    comment",[156,386,246],{"class":238},[156,388,390],{"class":389},"sD7c4","|\n",[156,392,394],{"class":158,"line":393},19,[156,395,396],{"class":166},"      {{author}} This issue has been open for more than 12 months, is this still an issue?\n",[12,398,399],{},"Diese Konfiguration definiert zwei Richtlinien:",[46,401,402,409],{},[49,403,404,405,408],{},"Mit der ersten Richtlinie wird das Label ",[27,406,407],{},"status::wip"," allen Tickets zugewiesen, die im Entwurfsstatus sind.",[49,410,411],{},"Mit der zweiten Richtlinie wird ein Kommentar zu einem Ticket hinzugefügt, in dem angemerkt wird, dass das Ticket in den letzten 12 Monaten nicht aktualisiert wurde.",[141,413,414],{"start":252},[49,415,416],{},"Führe deinen Bot aus.",[12,418,419],{},"Du kannst deinen Bot manuell mit dem folgenden Befehl ausführen:",[147,421,423],{"className":149,"code":422,"language":151,"meta":152,"style":152},"gitlab-triage -t \u003Cyour_api_token> -p \u003Cyour_project_id>\n",[27,424,425],{"__ignoreMap":152},[156,426,427,429,432,435,438,441,444,447,449,452,455],{"class":158,"line":159},[156,428,29],{"class":162},[156,430,431],{"class":269}," -t",[156,433,434],{"class":389}," \u003C",[156,436,437],{"class":166},"your_api_toke",[156,439,440],{"class":238},"n",[156,442,443],{"class":389},">",[156,445,446],{"class":269}," -p",[156,448,434],{"class":389},[156,450,451],{"class":166},"your_project_i",[156,453,454],{"class":238},"d",[156,456,457],{"class":389},">\n",[12,459,460,461,464,465,468,469,474,475,478,479,482],{},"Ersetze ",[27,462,463],{},"\u003Cyour_api_token>"," mit deinem GitLab-API-Token und ",[27,466,467],{},"\u003Cyour_project_id>"," mit der ",[22,470,473],{"href":471,"rel":472},"https://docs.gitlab.com/user/project/working_with_projects/#access-a-project-by-using-the-project-id",[],"ID deines GitLab-Projekts",". Wenn du sehen möchtest, welche Auswirkungen die Aktionen haben, bevor sie tatsächlich ausgeführt hast, kannst du ",[27,476,477],{},"-n"," oder ",[27,480,481],{},"--dry-run"," hinzufügen, um die Richtlinien erst einmal zu testen.",[32,484,486],{"id":485},"automatisierung-mit-gitlabcicd","Automatisierung mit GitLab CI/CD",[12,488,489,490,495,496,499],{},"Um die Ausführung deines Triage-Bots zu automatisieren, integrierst du ihn in ",[22,491,494],{"href":492,"rel":493},"https://about.gitlab.com/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation/",[],"GitLab CI/CD (nur in englischer Sprache verfügbar)",". Hier ist ein Beispiel für eine ",[27,497,498],{},".gitlab-ci.yml","-Konfiguration:",[147,501,503],{"className":218,"code":502,"language":220,"meta":152,"style":152},"\ntriage:\n  script:\n    - gem install gitlab-triage\n    - gitlab-triage -t $GITLAB_TOKEN -p $CI_PROJECT_ID\n  only:\n    - schedules\n",[27,504,505,509,516,523,530,537,544],{"__ignoreMap":152},[156,506,507],{"class":158,"line":159},[156,508,228],{"emptyLinePlaceholder":227},[156,510,511,514],{"class":158,"line":173},[156,512,513],{"class":242},"triage",[156,515,258],{"class":238},[156,517,518,521],{"class":158,"line":205},[156,519,520],{"class":242},"  script",[156,522,258],{"class":238},[156,524,525,528],{"class":158,"line":252},[156,526,527],{"class":238},"    - ",[156,529,150],{"class":166},[156,531,532,534],{"class":158,"line":261},[156,533,527],{"class":238},[156,535,536],{"class":166},"gitlab-triage -t $GITLAB_TOKEN -p $CI_PROJECT_ID\n",[156,538,539,542],{"class":158,"line":273},[156,540,541],{"class":242},"  only",[156,543,258],{"class":238},[156,545,546,548],{"class":158,"line":281},[156,547,527],{"class":238},[156,549,550],{"class":166},"schedules\n",[12,552,553,554,556,557,560,561,566,567,570,571,574],{},"Diese Konfiguration definiert einen Job mit dem Namen „Triage“, der das gem ",[27,555,29],{}," installiert und den Bot mit dem ",[27,558,559],{},"$GITLAB_TOKEN"," (eine vordefinierte ",[22,562,565],{"href":563,"rel":564},"https://docs.gitlab.com/ci/variables/",[],"CI/CD-Variable","; Dokumentation nur in englischer Sprache verfügbar) und der Variable ",[27,568,569],{},"$CI_PROJECT_ID"," ausführt. Die Klausel ",[27,572,573],{},"only: schedules"," stellt sicher, dass der Auftrag nur nach einem Zeitplan ausgeführt wird.",[12,576,577,578,583,584,587,588,591],{},"Um einen ",[22,579,582],{"href":580,"rel":581},"https://docs.gitlab.com/ci/pipelines/schedules/",[],"Zeitplan (nur in englischer Sprache verfügbar)"," zu erstellen, gehe zu den ",[52,585,586],{},"CI/CD-Einstellungen"," des Projekts und dann zu ",[52,589,590],{},"Zeitpläne",". Erstelle einen neuen Zeitplan und lege fest, wie häufig dein Bot ausgeführt werden soll (z. B. täglich, stündlich, usw.).",[32,593,595],{"id":594},"erweiterte-triage-richtlinien","Erweiterte Triage-Richtlinien",[12,597,598,600],{},[27,599,29],{}," bietet eine Reihe von erweiterten Funktionen, mit denen du ausgefeiltere Triage-Richtlinien erstellen kannst:",[46,602,603,609,615],{},[49,604,605,608],{},[52,606,607],{},"Reguläre Ausdrücke:"," Verwende reguläre Ausdrücke für einen leistungsstarken Musterabgleich.",[49,610,611,614],{},[52,612,613],{},"Zusammenfassungsrichtlinien:"," Konsolidiere ähnliche Tickets in ein Übersichtsticket.",[49,616,617,620,621,626],{},[52,618,619],{},"Benutzerdefinierte Aktionen:"," Definiere mit ",[22,622,625],{"href":623,"rel":624},"https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage#can-i-customize",[],"Ruby-Codeblöcken"," benutzerdefinierte Aktionen, um komplexere Abläufe über die GitLab-API auszuführen.",[12,628,629,630,191],{},"Hier sind zwei umfassendere Praxisbeispiele aus dem Triage-Bot, der vom Developer Advocacy Team bei GitLab verwendet wird. Die vollständigen Richtlinien findest du in ",[22,631,634],{"href":632,"rel":633},"https://gitlab.com/gitlab-da/projects/devrel-bot/-/blob/master/.triage-policies.yml?ref_type=heads",[],"dieser Datei",[147,636,638],{"className":218,"code":637,"language":220,"meta":152,"style":152},"- 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",[27,639,640,651,658,665,675,685,695,705,717,724,737,743,750],{"__ignoreMap":152},[156,641,642,644,646,648],{"class":158,"line":159},[156,643,239],{"class":238},[156,645,243],{"class":242},[156,647,246],{"class":238},[156,649,650],{"class":166},"Issues where DA team member is an assignee outside DA-Meta project i.e. DevRel-Influenced\n",[156,652,653,656],{"class":158,"line":173},[156,654,655],{"class":242},"  conditions",[156,657,258],{"class":238},[156,659,660,663],{"class":158,"line":205},[156,661,662],{"class":242},"    assignee_member",[156,664,258],{"class":238},[156,666,667,670,672],{"class":158,"line":252},[156,668,669],{"class":242},"      source",[156,671,246],{"class":238},[156,673,674],{"class":166},"group\n",[156,676,677,680,682],{"class":158,"line":261},[156,678,679],{"class":242},"      condition",[156,681,246],{"class":238},[156,683,684],{"class":166},"member_of\n",[156,686,687,690,692],{"class":158,"line":273},[156,688,689],{"class":242},"      source_id",[156,691,246],{"class":238},[156,693,694],{"class":269},"1008\n",[156,696,697,700,702],{"class":158,"line":281},[156,698,699],{"class":242},"    state",[156,701,246],{"class":238},[156,703,704],{"class":166},"opened\n",[156,706,707,710,712,715],{"class":158,"line":289},[156,708,709],{"class":242},"    ruby",[156,711,246],{"class":238},[156,713,714],{"class":242},"get_project_id != 18     forbidden_labels",[156,716,258],{"class":238},[156,718,719,721],{"class":158,"line":298},[156,720,292],{"class":238},[156,722,723],{"class":166},"developer-advocacy\n",[156,725,726,729,732,735],{"class":158,"line":303},[156,727,728],{"class":242},"  actions",[156,730,731],{"class":238},":       ",[156,733,734],{"class":242},"labels",[156,736,258],{"class":238},[156,738,739,741],{"class":158,"line":315},[156,740,292],{"class":238},[156,742,723],{"class":166},[156,744,745,747],{"class":158,"line":322},[156,746,292],{"class":238},[156,748,749],{"class":166},"DevRel-Influenced\n",[156,751,752,754],{"class":158,"line":330},[156,753,292],{"class":238},[156,755,756],{"class":166},"DA-Bot::Skip\n",[12,758,759,760,763],{},"Dieses Beispiel zeigt Tickets in einer Gruppe. Dabei werden diejenigen ausgeschlossen, die sich im Projekt mit der ID 18 befinden und die Beauftragte haben, die Mitglieder der Gruppe mit der ID 1008 sind und nicht das Label ",[27,761,762],{},"developer-advocacy"," aufweisen. Mit dieser Richtlinie kann das Developer Advocacy Team bei GitLab Tickets finden, die Mitgliedern des Teams zugewiesen sind, aber nicht im Projekt des Teams enthalten sind. Indem die Labels der Teams hinzugefügt werden, kann das Team Beiträge identifizieren und nachverfolgen, die von Personen außerhalb des Teams gemacht wurden.",[147,765,770],{"className":766,"code":768,"language":769,"meta":152},[767],"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",[27,771,768],{"__ignoreMap":152},[12,773,774,775,777],{},"Der Bot in diesem zweiten Beispiel sucht nach allen Tickets mit dem Label ",[27,776,762],{},", die keine Labels aus der Liste der verbotenen Labes enthalten und deren Fälligkeitsdatum überschritten wurde. Er aktualisiert die Fälligkeitstermine automatisch, indem er dem Ticket mit einem Slash-Befehl und einem Datum, das über Ruby generiert wird, einen Kommentar hinzufügt.",[12,779,780],{},"Die in den Richtlinien verwendeten Ruby-Skripte werden in einer separaten Datei definiert, wie unten gezeigt. Mit dieser Funktion kannst du flexibel mit Filtern und Aktionen arbeiten. Du siehst, dass Funktionen für verschiedene Ruby-Befehle erstellt werden, die wir in unseren Richtlinien verwendet haben.",[147,782,785],{"className":783,"code":784,"language":769,"meta":152},[767],"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",[27,786,784],{"__ignoreMap":152},[12,788,789],{},"Der Triage-Bot wird mit folgendem Befehl ausgeführt:",[147,791,794],{"className":792,"code":793,"language":769,"meta":152},[767],"`gitlab-triage -r ./triage_bot/issue_triage_plugin.rb --debug --token $PRIV_KEY --source-id gitlab-com --source groups`  ```\n\n- `-r`: Übergibt eine Datei mit Anforderungen für die Ausführung der Triage. In diesem Fall übergeben wir unsere Ruby-Funktionen.  - `--debug`: Fügt der Ausgabe Debugging-Informationen hinzu.  - `--token`: Wird verwendet, um ein gültiges GitLab-API-Token zu übergeben.  - `--source`: Gibt an, ob die Quellen des Tickets, die durchsucht werden, in einer Gruppe oder einem Projekt liegen.\n- `--source-id`: Übernimmt die ID des ausgewählten Quelltyps – in diesem Fall eine Gruppe.\n\nDas GitLab-Projekt [triage-ops](https://gitlab.com/gitlab-org/quality/triage-ops) ist ein weiteres Praxisbeispiel, das etwas komplexer ist und bei dem du lernen kannst, deinen eigenen Triage-Bot zu erstellen.\n\n## Best Practices\n\n* **Beginne einfach:** Beginne mit grundlegenden Richtlinien und erhöhe die Komplexität schrittweise nach Bedarf. * **Teste gründlich:** Teste deine Richtlinien in einer Staging-Umgebung, bevor du sie in der Produktion bereitstellst.  * **Überwache regelmäßig:** Überwache die Aktivität deines Bots, um sicherzustellen, dass er sich wie erwartet verhält.\n* **Verwende beschreibende Namen:** Gib deinen Richtlinien klare und beschreibende Namen, damit sie einfach gepflegt werden können. * **Achte auf den Umfang deiner Filter:** Vielleicht kommst du in Versuchung, Tickets über Gruppen hinweg zu filtern, die Tausende von Tickets enthalten. Dies kann jedoch die Triage verlangsamen und der Prozess kann aufgrund von Ratenbeschränkungen für die GitLab-API auch fehlschlagen.  * **Priorisiere die Verwendung von Labels für die Triage:** Um unnötige Benachrichtigungen an andere Benuzter(innen) zu vermeiden, sind Labels eine tolle Möglichkeit, eine Triage durchzuführen, ohne Kommentare und Tickets zu überladen.\n\n## Übernimm die Kontrolle über deinen Workflow\n\nMit dem gem `gitlab-triage` kannst du deinen GitLab-Workflow automatisieren und eine ganz neue Effizienz ermöglichen. Erstelle zunächst einen einfachen Traige-Bot und lerne dann nach und nach die fortschrittlicheren Funktionen kennen. Du wirst erstaunt sein, wie viel Zeit und Aufwand du einsparen kannst\\!\n\n## Serie: Erste Schritte mit GitLab\n\nWeitere Artikel in unserer Serie „Erste Schritte mit GitLab“:\n\n- [Benutzerverwaltung](https://about.gitlab.com/de-de/blog/getting-started-with-gitlab-how-to-manage-users/)\n\n- [Projekte in GitLab importieren (nur in englischer Sprache verfügbar)](https://about.gitlab.com/blog/getting-started-with-gitlab-how-to-import-your-projects-to-gitlab/)  - [Projektmanagement](https://about.gitlab.com/de-de/blog/getting-started-with-gitlab-mastering-project-management/)\n",[27,795,793],{"__ignoreMap":152},[797,798,799],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}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 .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":152,"searchDepth":173,"depth":173,"links":801},[802,803,805,806,807],{"id":34,"depth":173,"text":35},{"id":76,"depth":173,"text":804},"Wir stellen vor: das gem gitlab-triage",{"id":135,"depth":173,"text":136},{"id":485,"depth":173,"text":486},{"id":594,"depth":173,"text":595},"product","2025-03-13","In unserer Serie „Erste Schritte mit GitLab“ erfährst du, wie du wiederkehrende Aufgaben – zum Beispiel die Triage von Tickets und Merge Requests – automatisierst und deinen Entwickler(inne)n dadurch wertvolle Zeit sparst.","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",{},"/de-de/blog/automating-agile-workflows-with-the-gitlab-triage-gem",{"title":5,"description":810,"ogTitle":5,"ogDescription":810,"noIndex":813,"ogImage":814,"ogUrl":818,"ogSiteName":819,"ogType":820,"canonicalUrls":818},"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","de-de/blog/automating-agile-workflows-with-the-gitlab-triage-gem",[824,825,808,826,827],"DevSecOps platform","tutorial","agile","CI/CD","BlogPost","2025-04-21","BLhe82ZloBRNUyxgA5MgeZ6TU9A7t6BrIuCVyw1UDT0",{"logo":832,"freeTrial":837,"sales":842,"login":847,"items":852,"search":1180,"minimal":1214,"duo":1232,"switchNav":1241,"pricingDeployment":1252},{"config":833},{"href":834,"dataGaName":835,"dataGaLocation":836},"/de-de/","gitlab logo","header",{"text":838,"config":839},"Kostenlose Testversion anfordern",{"href":840,"dataGaName":841,"dataGaLocation":836},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":843,"config":844},"Demo anfordern",{"href":845,"dataGaName":846,"dataGaLocation":836},"/de-de/sales/?contact-topic=request-demo","sales",{"text":848,"config":849},"Anmelden",{"href":850,"dataGaName":851,"dataGaLocation":836},"https://gitlab.com/users/sign_in/","sign in",[853,882,983,988,1102,1158],{"text":854,"config":855,"menu":857},"Plattform",{"dataNavLevelOne":856},"platform",{"type":858,"columns":859},"cards",[860,866,874],{"title":854,"description":861,"link":862},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":863,"config":864},"Die Plattform erkunden",{"href":865,"dataGaName":856,"dataGaLocation":836},"/de-de/platform/",{"title":867,"description":868,"link":869},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":870,"config":871},"Lerne GitLab Duo kennen",{"href":872,"dataGaName":873,"dataGaLocation":836},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":875,"description":876,"link":877},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":878,"config":879},"Mehr erfahren",{"href":880,"dataGaName":881,"dataGaLocation":836},"/de-de/why-gitlab/","why gitlab",{"text":883,"left":227,"config":884,"menu":886},"Produkt",{"dataNavLevelOne":885},"solutions",{"type":887,"link":888,"columns":892,"feature":962},"lists",{"text":889,"config":890},"Alle Lösungen anzeigen",{"href":891,"dataGaName":885,"dataGaLocation":836},"/de-de/solutions/",[893,917,940],{"title":894,"description":895,"link":896,"items":901},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":897},{"icon":898,"href":899,"dataGaName":900,"dataGaLocation":836},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[902,905,908,913],{"text":827,"config":903},{"href":904,"dataGaLocation":836,"dataGaName":827},"/de-de/solutions/continuous-integration/",{"text":867,"config":906},{"href":872,"dataGaLocation":836,"dataGaName":907},"gitlab duo agent platform - product menu",{"text":909,"config":910},"Quellcodeverwaltung",{"href":911,"dataGaLocation":836,"dataGaName":912},"/de-de/solutions/source-code-management/","Source Code Management",{"text":914,"config":915},"Automatische Softwarebereitstellung",{"href":899,"dataGaLocation":836,"dataGaName":916},"Automated software delivery",{"title":918,"description":919,"link":920,"items":925},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":921},{"href":922,"dataGaName":923,"dataGaLocation":836,"icon":924},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[926,930,935],{"text":927,"config":928},"Anwendungssicherheitstests",{"href":922,"dataGaName":929,"dataGaLocation":836},"Application security testing",{"text":931,"config":932},"Schutz der Software-Lieferkette",{"href":933,"dataGaLocation":836,"dataGaName":934},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":936,"config":937},"Software-Compliance",{"href":938,"dataGaName":939,"dataGaLocation":836},"/de-de/solutions/software-compliance/","software compliance",{"title":941,"link":942,"items":947},"Messung",{"config":943},{"icon":944,"href":945,"dataGaName":946,"dataGaLocation":836},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[948,952,957],{"text":949,"config":950},"Sichtbarkeit und Messung",{"href":945,"dataGaLocation":836,"dataGaName":951},"Visibility and Measurement",{"text":953,"config":954},"Wertstrommanagement",{"href":955,"dataGaLocation":836,"dataGaName":956},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":958,"config":959},"Analysen und Einblicke",{"href":960,"dataGaLocation":836,"dataGaName":961},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":963,"type":887,"items":964},"GitLab für",[965,971,977],{"text":966,"config":967},"Enterprise",{"icon":968,"href":969,"dataGaLocation":836,"dataGaName":970},"Building","/de-de/enterprise/","enterprise",{"text":972,"config":973},"Kleinunternehmen",{"icon":974,"href":975,"dataGaLocation":836,"dataGaName":976},"Work","/de-de/small-business/","small business",{"text":978,"config":979},"Öffentlicher Sektor",{"icon":980,"href":981,"dataGaLocation":836,"dataGaName":982},"Organization","/de-de/solutions/public-sector/","public sector",{"text":984,"config":985},"Preise",{"href":986,"dataGaName":987,"dataGaLocation":836,"dataNavLevelOne":987},"/de-de/pricing/","pricing",{"text":989,"config":990,"menu":992},"Ressourcen",{"dataNavLevelOne":991},"resources",{"type":887,"link":993,"columns":997,"feature":1091},{"text":994,"config":995},"Alle Ressourcen anzeigen",{"href":996,"dataGaName":991,"dataGaLocation":836},"/de-de/resources/",[998,1031,1058],{"title":999,"items":1000},"Erste Schritte",[1001,1006,1011,1016,1021,1026],{"text":1002,"config":1003},"Installieren",{"href":1004,"dataGaName":1005,"dataGaLocation":836},"/de-de/install/","install",{"text":1007,"config":1008},"Kurzanleitungen",{"href":1009,"dataGaName":1010,"dataGaLocation":836},"/de-de/get-started/","quick setup checklists",{"text":1012,"config":1013},"Lernen",{"href":1014,"dataGaLocation":836,"dataGaName":1015},"https://university.gitlab.com/","learn",{"text":1017,"config":1018},"Produktdokumentation",{"href":1019,"dataGaName":1020,"dataGaLocation":836},"https://docs.gitlab.com/","product documentation",{"text":1022,"config":1023},"Best-Practice-Videos",{"href":1024,"dataGaName":1025,"dataGaLocation":836},"/de-de/getting-started-videos/","best practice videos",{"text":1027,"config":1028},"Integrationen",{"href":1029,"dataGaName":1030,"dataGaLocation":836},"/de-de/integrations/","integrations",{"title":1032,"items":1033},"Entdecken",[1034,1039,1044,1049,1053],{"text":1035,"config":1036},"Kundenerfolge",{"href":1037,"dataGaName":1038,"dataGaLocation":836},"/de-de/customers/","customer success stories",{"text":1040,"config":1041},"Blog",{"href":1042,"dataGaName":1043,"dataGaLocation":836},"/de-de/blog/","blog",{"text":1045,"config":1046},"Demo-Hub",{"href":1047,"dataGaName":1048,"dataGaLocation":836},"/de-de/demo-hub/","demo hub",{"text":1050,"config":1051},"The Source",{"href":1052,"dataGaName":1043,"dataGaLocation":836},"/de-de/the-source/",{"text":1054,"config":1055},"Remote",{"href":1056,"dataGaName":1057,"dataGaLocation":836},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1059,"items":1060},"Vernetzen",[1061,1066,1071,1076,1081,1086],{"text":1062,"config":1063},"GitLab-Services",{"href":1064,"dataGaName":1065,"dataGaLocation":836},"/de-de/services/","services",{"text":1067,"config":1068},"Beitragen",{"href":1069,"dataGaName":1070,"dataGaLocation":836},"https://contributors.gitlab.com","contribute",{"text":1072,"config":1073},"Community",{"href":1074,"dataGaName":1075,"dataGaLocation":836},"/community/","community",{"text":1077,"config":1078},"Forum",{"href":1079,"dataGaName":1080,"dataGaLocation":836},"https://forum.gitlab.com/","forum",{"text":1082,"config":1083},"Veranstaltungen",{"href":1084,"dataGaName":1085,"dataGaLocation":836},"/events/","events",{"text":1087,"config":1088},"Partner",{"href":1089,"dataGaName":1090,"dataGaLocation":836},"/de-de/partners/","partners",{"config":1092,"title":1095,"text":1096,"link":1097},{"background":1093,"textColor":1094},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Neues bei GitLab","Über die neuesten Funktionen und Verbesserungen auf dem Laufenden bleiben.",{"text":1098,"config":1099},"Aktuelle Nachrichten",{"href":1100,"dataGaName":1101,"dataGaLocation":836},"/de-de/whats-new/","whats new",{"text":1103,"config":1104,"menu":1106},"Unternehmen",{"dataNavLevelOne":1105},"company",{"type":887,"columns":1107},[1108],{"items":1109},[1110,1115,1121,1123,1128,1133,1138,1143,1148,1153],{"text":1111,"config":1112},"Über",{"href":1113,"dataGaName":1114,"dataGaLocation":836},"/de-de/company/","about",{"text":1116,"config":1117,"footerGa":1120},"Karriere",{"href":1118,"dataGaName":1119,"dataGaLocation":836},"/jobs/","jobs",{"dataGaName":1119},{"text":1082,"config":1122},{"href":1084,"dataGaName":1085,"dataGaLocation":836},{"text":1124,"config":1125},"Geschäftsführung",{"href":1126,"dataGaName":1127,"dataGaLocation":836},"/company/team/e-group/","leadership",{"text":1129,"config":1130},"Handbuch",{"href":1131,"dataGaName":1132,"dataGaLocation":836},"https://handbook.gitlab.com/","handbook",{"text":1134,"config":1135},"Investor Relations",{"href":1136,"dataGaName":1137,"dataGaLocation":836},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1139,"config":1140},"Trust Center",{"href":1141,"dataGaName":1142,"dataGaLocation":836},"/de-de/security/","trust center",{"text":1144,"config":1145},"AI Transparency Center",{"href":1146,"dataGaName":1147,"dataGaLocation":836},"/de-de/ai-transparency-center/","ai transparency center",{"text":1149,"config":1150},"Newsletter",{"href":1151,"dataGaName":1152,"dataGaLocation":836},"/company/contact/#contact-forms","newsletter",{"text":1154,"config":1155},"Presse",{"href":1156,"dataGaName":1157,"dataGaLocation":836},"/press/","press",{"text":1159,"config":1160,"menu":1161},"Kontakt",{"dataNavLevelOne":1105},{"type":887,"columns":1162},[1163],{"items":1164},[1165,1170,1175],{"text":1166,"config":1167},"Vertrieb kontaktieren",{"href":1168,"dataGaName":1169,"dataGaLocation":836},"/de-de/sales/","talk to sales",{"text":1171,"config":1172},"Support-Portal",{"href":1173,"dataGaName":1174,"dataGaLocation":836},"https://support.gitlab.com/hc/en-us","support portal",{"text":1176,"config":1177},"Kundenportal",{"href":1178,"dataGaName":1179,"dataGaLocation":836},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1181,"login":1182,"suggestions":1189},"Schließen",{"text":1183,"link":1184},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1185,"config":1186},"gitlab.com",{"href":850,"dataGaName":1187,"dataGaLocation":1188},"search login","search",{"text":1190,"default":1191},"Vorschläge",[1192,1194,1199,1201,1206,1211],{"text":867,"config":1193},{"href":872,"dataGaName":867,"dataGaLocation":1188},{"text":1195,"config":1196},"Codevorschläge (KI)",{"href":1197,"dataGaName":1198,"dataGaLocation":1188},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":827,"config":1200},{"href":904,"dataGaName":827,"dataGaLocation":1188},{"text":1202,"config":1203},"GitLab auf AWS",{"href":1204,"dataGaName":1205,"dataGaLocation":1188},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1207,"config":1208},"GitLab auf Google Cloud",{"href":1209,"dataGaName":1210,"dataGaLocation":1188},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":875,"config":1212},{"href":880,"dataGaName":1213,"dataGaLocation":1188},"Why GitLab?",{"freeTrial":1215,"mobileIcon":1220,"desktopIcon":1225,"secondaryButton":1228},{"text":1216,"config":1217},"Kostenlos testen",{"href":1218,"dataGaName":841,"dataGaLocation":1219},"https://gitlab.com/-/trials/new/","nav",{"altText":1221,"config":1222},"GitLab-Symbol",{"src":1223,"dataGaName":1224,"dataGaLocation":1219},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1221,"config":1226},{"src":1227,"dataGaName":1224,"dataGaLocation":1219},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":999,"config":1229},{"href":1230,"dataGaName":1231,"dataGaLocation":1219},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1233,"mobileIcon":1237,"desktopIcon":1239},{"text":1234,"config":1235},"Mehr über GitLab Duo erfahren",{"href":872,"dataGaName":1236,"dataGaLocation":1219},"gitlab duo",{"altText":1221,"config":1238},{"src":1223,"dataGaName":1224,"dataGaLocation":1219},{"altText":1221,"config":1240},{"src":1227,"dataGaName":1224,"dataGaLocation":1219},{"button":1242,"mobileIcon":1247,"desktopIcon":1249},{"text":1243,"config":1244},"/Option",{"href":1245,"dataGaName":1246,"dataGaLocation":1219},"#contact","switch",{"altText":1221,"config":1248},{"src":1223,"dataGaName":1224,"dataGaLocation":1219},{"altText":1221,"config":1250},{"src":1251,"dataGaName":1224,"dataGaLocation":1219},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1253,"mobileIcon":1258,"desktopIcon":1260},{"text":1254,"config":1255},"Zurück zur Preisübersicht",{"href":986,"dataGaName":1256,"dataGaLocation":1219,"icon":1257},"back to pricing","GoBack",{"altText":1221,"config":1259},{"src":1223,"dataGaName":1224,"dataGaLocation":1219},{"altText":1221,"config":1261},{"src":1227,"dataGaName":1224,"dataGaLocation":1219},{"title":1263,"button":1264,"config":1268},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":878,"config":1265},{"href":1266,"dataGaName":1267,"dataGaLocation":836},"/de-de/gitlab-orbit/","orbit",{"layout":1269,"disabled":813},"release",{"data":1271},{"text":1272,"source":1273,"edit":1279,"contribute":1284,"config":1289,"items":1294,"minimal":1500},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1274,"config":1275},"Quelltext der Seite anzeigen",{"href":1276,"dataGaName":1277,"dataGaLocation":1278},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1280,"config":1281},"Diese Seite bearbeiten",{"href":1282,"dataGaName":1283,"dataGaLocation":1278},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1285,"config":1286},"Beteilige dich",{"href":1287,"dataGaName":1288,"dataGaLocation":1278},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1290,"facebook":1291,"youtube":1292,"linkedin":1293},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1295,1340,1393,1435,1467],{"title":984,"links":1296,"subMenu":1311},[1297,1301,1306],{"text":1298,"config":1299},"Tarife anzeigen",{"href":986,"dataGaName":1300,"dataGaLocation":1278},"view plans",{"text":1302,"config":1303},"Vorteile von Premium",{"href":1304,"dataGaName":1305,"dataGaLocation":1278},"/de-de/pricing/premium/","why premium",{"text":1307,"config":1308},"Vorteile von Ultimate",{"href":1309,"dataGaName":1310,"dataGaLocation":1278},"/de-de/pricing/ultimate/","why ultimate",[1312],{"title":1159,"links":1313},[1314,1316,1318,1320,1325,1330,1335],{"text":1166,"config":1315},{"href":1168,"dataGaName":846,"dataGaLocation":1278},{"text":1171,"config":1317},{"href":1173,"dataGaName":1174,"dataGaLocation":1278},{"text":1176,"config":1319},{"href":1178,"dataGaName":1179,"dataGaLocation":1278},{"text":1321,"config":1322},"Status",{"href":1323,"dataGaName":1324,"dataGaLocation":1278},"https://status.gitlab.com/","status",{"text":1326,"config":1327},"Nutzungsbedingungen",{"href":1328,"dataGaName":1329,"dataGaLocation":1278},"/terms/","terms of use",{"text":1331,"config":1332},"Datenschutzerklärung",{"href":1333,"dataGaName":1334,"dataGaLocation":1278},"/de-de/privacy/","privacy statement",{"text":1336,"config":1337},"Cookie-Einstellungen",{"dataGaName":1338,"dataGaLocation":1278,"id":1339,"isOneTrustButton":227},"cookie preferences","ot-sdk-btn",{"title":883,"links":1341,"subMenu":1350},[1342,1346],{"text":1343,"config":1344},"DevSecOps-Plattform",{"href":865,"dataGaName":1345,"dataGaLocation":1278},"devsecops platform",{"text":1347,"config":1348},"KI-unterstützte Entwicklung",{"href":872,"dataGaName":1349,"dataGaLocation":1278},"ai-assisted development",[1351],{"title":1352,"links":1353},"Themen",[1354,1358,1363,1368,1373,1378,1383,1388],{"text":827,"config":1355},{"href":1356,"dataGaName":1357,"dataGaLocation":1278},"/de-de/topics/ci-cd/","cicd",{"text":1359,"config":1360},"GitOps",{"href":1361,"dataGaName":1362,"dataGaLocation":1278},"/de-de/topics/gitops/","gitops",{"text":1364,"config":1365},"DevOps",{"href":1366,"dataGaName":1367,"dataGaLocation":1278},"/de-de/topics/devops/","devops",{"text":1369,"config":1370},"Versionskontrolle",{"href":1371,"dataGaName":1372,"dataGaLocation":1278},"/de-de/topics/version-control/","version control",{"text":1374,"config":1375},"DevSecOps",{"href":1376,"dataGaName":1377,"dataGaLocation":1278},"/de-de/topics/devsecops/","devsecops",{"text":1379,"config":1380},"Cloud-nativ",{"href":1381,"dataGaName":1382,"dataGaLocation":1278},"/de-de/topics/cloud-native/","cloud native",{"text":1384,"config":1385},"KI für das Programmieren",{"href":1386,"dataGaName":1387,"dataGaLocation":1278},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1389,"config":1390},"Agentische KI",{"href":1391,"dataGaName":1392,"dataGaLocation":1278},"/de-de/topics/agentic-ai/","agentic ai",{"title":1394,"links":1395},"Lösungen",[1396,1399,1401,1406,1410,1413,1416,1419,1421,1423,1425,1430],{"text":927,"config":1397},{"href":922,"dataGaName":1398,"dataGaLocation":1278},"Application Security Testing",{"text":914,"config":1400},{"href":899,"dataGaName":900,"dataGaLocation":1278},{"text":1402,"config":1403},"Agile Entwicklung",{"href":1404,"dataGaName":1405,"dataGaLocation":1278},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1407,"config":1408},"SCM",{"href":911,"dataGaName":1409,"dataGaLocation":1278},"source code management",{"text":827,"config":1411},{"href":904,"dataGaName":1412,"dataGaLocation":1278},"continuous integration & delivery",{"text":953,"config":1414},{"href":955,"dataGaName":1415,"dataGaLocation":1278},"value stream management",{"text":1359,"config":1417},{"href":1418,"dataGaName":1362,"dataGaLocation":1278},"/de-de/solutions/gitops/",{"text":966,"config":1420},{"href":969,"dataGaName":970,"dataGaLocation":1278},{"text":972,"config":1422},{"href":975,"dataGaName":976,"dataGaLocation":1278},{"text":978,"config":1424},{"href":981,"dataGaName":982,"dataGaLocation":1278},{"text":1426,"config":1427},"Bildungswesen",{"href":1428,"dataGaName":1429,"dataGaLocation":1278},"/de-de/solutions/education/","education",{"text":1431,"config":1432},"Finanzdienstleistungen",{"href":1433,"dataGaName":1434,"dataGaLocation":1278},"/de-de/solutions/finance/","financial services",{"title":989,"links":1436},[1437,1439,1441,1443,1446,1448,1451,1453,1455,1457,1459,1461,1463,1465],{"text":1002,"config":1438},{"href":1004,"dataGaName":1005,"dataGaLocation":1278},{"text":1007,"config":1440},{"href":1009,"dataGaName":1010,"dataGaLocation":1278},{"text":1012,"config":1442},{"href":1014,"dataGaName":1015,"dataGaLocation":1278},{"text":1017,"config":1444},{"href":1019,"dataGaName":1445,"dataGaLocation":1278},"docs",{"text":1040,"config":1447},{"href":1042,"dataGaName":1043,"dataGaLocation":1278},{"text":1449,"config":1450},"Neuerungen",{"href":1100,"dataGaName":1101,"dataGaLocation":1278},{"text":1035,"config":1452},{"href":1037,"dataGaName":1038,"dataGaLocation":1278},{"text":1054,"config":1454},{"href":1056,"dataGaName":1057,"dataGaLocation":1278},{"text":1062,"config":1456},{"href":1064,"dataGaName":1065,"dataGaLocation":1278},{"text":1067,"config":1458},{"href":1069,"dataGaName":1070,"dataGaLocation":1278},{"text":1072,"config":1460},{"href":1074,"dataGaName":1075,"dataGaLocation":1278},{"text":1077,"config":1462},{"href":1079,"dataGaName":1080,"dataGaLocation":1278},{"text":1082,"config":1464},{"href":1084,"dataGaName":1085,"dataGaLocation":1278},{"text":1087,"config":1466},{"href":1089,"dataGaName":1090,"dataGaLocation":1278},{"title":1103,"links":1468},[1469,1471,1473,1475,1477,1479,1484,1489,1491,1493,1495],{"text":1111,"config":1470},{"href":1113,"dataGaName":1105,"dataGaLocation":1278},{"text":1116,"config":1472},{"href":1118,"dataGaName":1119,"dataGaLocation":1278},{"text":1124,"config":1474},{"href":1126,"dataGaName":1127,"dataGaLocation":1278},{"text":1129,"config":1476},{"href":1131,"dataGaName":1132,"dataGaLocation":1278},{"text":1134,"config":1478},{"href":1136,"dataGaName":1137,"dataGaLocation":1278},{"text":1480,"config":1481},"Nachhaltigkeit",{"href":1482,"dataGaName":1483,"dataGaLocation":1278},"/sustainability/","Sustainability",{"text":1485,"config":1486},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1487,"dataGaName":1488,"dataGaLocation":1278},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1139,"config":1490},{"href":1141,"dataGaName":1142,"dataGaLocation":1278},{"text":1149,"config":1492},{"href":1151,"dataGaName":1152,"dataGaLocation":1278},{"text":1154,"config":1494},{"href":1156,"dataGaName":1157,"dataGaLocation":1278},{"text":1496,"config":1497},"Transparenzerklärung zu moderner Sklaverei",{"href":1498,"dataGaName":1499,"dataGaLocation":1278},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1501},[1502,1505,1508],{"text":1503,"config":1504},"Terms",{"href":1328,"dataGaName":1329,"dataGaLocation":1278},{"text":1506,"config":1507},"Cookies",{"dataGaName":1338,"dataGaLocation":1278,"id":1339,"isOneTrustButton":227},{"text":1509,"config":1510},"Datenschutz",{"href":1333,"dataGaName":1334,"dataGaLocation":1278},[1512],{"id":1513,"title":1514,"body":812,"config":1515,"content":1517,"description":812,"extension":1520,"meta":1521,"navigation":227,"path":1522,"seo":1523,"stem":1524,"__hash__":1525},"blogAuthors/en-us/blog/authors/gitlab.yml","Gitlab",{"template":1516},"BlogAuthor",{"name":7,"config":1518},{"headshot":1519,"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",[1527,1535,1542],{"title":1528,"description":1529,"heroImage":1530,"category":808,"date":1531,"authors":1532,"slug":1534,"externalUrl":812},"DevOps Stack aufbauen: Häufige Fehler und Best Practices für moderne Toolchains","Ein DevOps Stack sollte mehr sein als eine Tool-Sammlung. Lerne, wie Teams häufige Fehler vermeiden und mit GitLab Toolchain-Komplexität reduzieren.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1775561395/bhe1as7ttjvzltxwgo5m.png","2026-08-07",[1533],"GitLab Germany Team","devops-stack",{"title":1536,"description":1537,"heroImage":1538,"category":808,"date":1539,"authors":1540,"slug":1541,"externalUrl":812},"Sechs Möglichkeiten, die DevOps Kosten zu senken, zu sparen und zu optimieren","Wir zeigen dir sechs Möglichkeiten, wie du deine DevOps Kosten senken kannst.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1775486753/cswmwtygkgkbdsibo09v.png","2026-07-20",[1533],"reduce-devops-costs",{"title":1543,"description":1544,"heroImage":1545,"category":808,"date":1539,"authors":1546,"slug":1548,"externalUrl":812},"Work Items automatisch zuweisen mit dem Trigger \"Work item created\"","Eine Schritt-für-Schritt-Anleitung zum neuen Trigger, der Work Items automatisch zuweist – skalierbare Triage ohne manuelles Eingreifen.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png",[1547],"Cesar Saavedra","how-to-use-a-work-item-created-trigger",{"promotions":1550},[1551,1565,1576,1588],{"id":1552,"categories":1553,"header":1555,"text":1556,"button":1557,"image":1562},"ai-modernization",[1554],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":1558,"config":1559},"Ermittle deinen KI-Reifegrad",{"href":1560,"dataGaName":1561,"dataGaLocation":1043},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":1563},{"src":1564},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1566,"categories":1567,"header":1568,"text":1556,"button":1569,"image":1573},"devops-modernization",[808,1377],"Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":1570,"config":1571},"Ermittle deinen DevOps-Reifegrad",{"href":1572,"dataGaName":1561,"dataGaLocation":1043},"/de-de/assessments/devops-modernization-assessment/",{"config":1574},{"src":1575},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1577,"categories":1578,"header":1580,"text":1556,"button":1581,"image":1585},"security-modernization",[1579],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":1582,"config":1583},"Ermittle deinen Sicherheitsreifegrad",{"href":1584,"dataGaName":1561,"dataGaLocation":1043},"/de-de/assessments/security-modernization-assessment/",{"config":1586},{"src":1587},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1589,"paths":1590,"header":1593,"text":1594,"button":1595,"image":1600},"github-azure-migration",[1591,1592],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Ist dein Team bereit für den Umzug von GitHub nach Azure?","GitHub stellt bereits auf Azure um. Finde heraus, was das für dich bedeutet.",{"text":1596,"config":1597},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":1598,"dataGaName":1599,"dataGaLocation":1043},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1601},{"src":1575},{"header":1603,"blurb":1604,"button":1605,"secondaryButton":1610},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":1606,"config":1607},"Kostenlosen Test starten",{"href":1608,"dataGaName":841,"dataGaLocation":1609},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1166,"config":1611},{"href":1168,"dataGaName":846,"dataGaLocation":1609},1786803755502]