[{"data":1,"prerenderedAt":2040},["ShallowReactive",2],{"/de-de/blog/fix-bugs-with-codex-and-gitlab":3,"navigation-de-de":1292,"banner-de-de":1712,"footer-de-de":1722,"blog-post-authors-de-de-Michael Friedrich":1961,"blog-related-posts-de-de-fix-bugs-with-codex-and-gitlab":1976,"blog-promotions-de-de":1977,"next-steps-de-de":2030},{"id":4,"title":5,"authors":6,"body":8,"category":1271,"date":1272,"description":1273,"extension":1274,"externalUrl":1275,"featured":185,"heroImage":1276,"meta":1277,"navigation":185,"path":1278,"seo":1279,"slug":1283,"stem":1284,"tags":1285,"template":1290,"updatedDate":1275,"__hash__":1291},"blogPosts/de-de/blog/fix-bugs-with-codex-and-gitlab.md","Vom Code-Fix bis zum Merge – mit Codex und GitLab",[7],"Michael Friedrich",{"type":9,"value":10,"toc":1255},"minimark",[11,22,25,28,50,53,58,61,64,67,70,72,76,117,122,125,145,193,196,208,215,219,228,231,260,266,279,286,365,376,384,387,396,405,412,427,430,436,450,456,459,465,468,471,484,488,491,498,506,512,516,525,537,543,567,586,599,651,660,678,681,700,704,711,720,727,734,740,748,755,767,774,777,780,786,789,795,799,802,823,826,846,852,891,900,906,913,921,927,945,951,954,957,966,972,981,987,993,1006,1013,1028,1031,1037,1041,1045,1051,1188,1202,1211,1214,1218,1227,1236,1251],[12,13,14,15,21],"p",{},"Codex macht als Coding-Agent im Terminal viel Spaß. Auf ein Repository gerichtet,\nbekommt es eine fokussierte Aufgabe und legt sofort los: Code lesen, einen Fix\nvorschlagen, Befehle ausführen – vom Problem zur Implementierung, ohne den Flow\nzu verlassen. Das ist ein wesentlicher Teil des Reizes agentischer Coding-Werkzeuge,\nund genau das hat auch unser ",[16,17,20],"a",{"href":18,"rel":19},"https://about.gitlab.com/de-de/blog/claude-code-and-gitlab/",[],"Claude-Code-Tutorial","\nso gut funktionieren lassen.",[12,23,24],{},"Code schreiben ist aber nur der erste Schritt. Issue, Merge Request, CI/CD-Pipeline,\nReview und die finale menschliche Entscheidung zum Ausliefern kommen danach.\nCode schreiben und Software ausliefern sind nicht dasselbe – und diese Lücke\nwird deutlicher, je schneller Coding-Agenten werden.",[12,26,27],{},"Genau hier kommt GitLab ins Spiel. Dieses Tutorial zeigt drei Anwendungsfälle\nmit Codex und GitLab Duo Agent Platform:",[29,30,31,38,44],"ol",{},[32,33,34],"li",{},[16,35,37],{"href":36},"#get-started-with-codex-and-gitlab-and-fix-a-rust-backend-bug","Rust-WebSocket-Bug lokal beheben, um mit Codex zu starten",[32,39,40],{},[16,41,43],{"href":42},"#fix-websocket-metric-filter-with-gitlab-mcp-and-development-lifecycle-context","Kontext mit GitLab MCP anreichern, um den Rust-Bug gemäß Issue-Anforderungen zu lösen",[32,45,46],{},[16,47,49],{"href":48},"#verify-review-feedback-and-requirements-with-codex-as-external-agent","Codex in GitLab Duo Agent Platform als externen Agenten nutzen, um Review-Feedback im Merge Request zu adressieren",[51,52],"hr",{},[54,55,57],"h2",{"id":56},"was-dieses-tutorial-zeigt","Was dieses Tutorial zeigt",[12,59,60],{},"Die drei Anwendungsfälle bauen aufeinander auf – und verdeutlichen dabei einen\ngrößeren Zusammenhang.",[12,62,63],{},"Codex ist ausgezeichnet darin, schnell von einer Problemstellung zu Code zu\ngelangen. GitLab fügt den Software-Delivery-Kontext hinzu, der aus diesem Code\neine Änderung macht, die verstanden, geprüft, reviewed und mit Zuversicht\nausgeliefert werden kann.",[12,65,66],{},"Im ersten Anwendungsfall bleibt der Fokus nah am Code – Codex arbeitet mit dem\nRepository und lokalen Agenten-Anweisungen. Im zweiten bringt GitLab MCP das\nIssue, die Anforderungen und den Merge-Request-Workflow direkt in die\nTerminal-Session. Im dritten wechselt Codex in den Merge Request selbst und\nhilft dabei, die Lücke zwischen Review-Feedback und der nächsten Revision zu\nschließen.",[12,68,69],{},"Genau diese Abfolge macht die Kombination überzeugend: nicht die Wahl zwischen\neinem Coding-Werkzeug und einer DevSecOps-Plattform – sondern agentisches\nCoding-Tempo auf den gesamten Software-Lifecycle ausgedehnt.",[51,71],{},[54,73,75],{"id":74},"voraussetzungen","Voraussetzungen",[29,77,78,86,95,109],{},[32,79,80,85],{},[16,81,84],{"href":82,"rel":83},"https://developers.openai.com/codex",[],"Codex"," im Terminal, konfiguriert und\ngestartet.",[32,87,88,89,94],{},"Ein GitLab-Projekt mit Bug-Reports und Feature-Proposal-Issues, zum Beispiel\ndas ",[16,90,93],{"href":91,"rel":92},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform",[],"Tanuki-IoT-Platform-Projekt",".",[32,96,97,98,103,104,94],{},"Für bestimmte Anwendungsfälle: ",[16,99,102],{"href":100,"rel":101},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/",[],"GitLab-MCP-Server","\nund GitLab Duo Agent Platform mit ",[16,105,108],{"href":106,"rel":107},"https://docs.gitlab.com/user/duo_agent_platform/agents/external/",[],"externen Agenten",[32,110,111,112,94],{},"Zum Bauen von Code: Cargo und Rust-Compiler, zum Beispiel ",[16,113,116],{"href":114,"rel":115},"https://rustup.rs/",[],"rustup",[118,119,121],"h3",{"id":120},"gitlab-projekt-vorbereiten","GitLab-Projekt vorbereiten",[12,123,124],{},"Um den Workflow in der eigenen Umgebung nachzuvollziehen: Projekt importieren,\nklonen und Codex im Repository-Root öffnen:",[29,126,127,134,137],{},[32,128,129,130,133],{},"Das ",[16,131,93],{"href":91,"rel":132},[],"\nin die eigene GitLab-Umgebung importieren, einschließlich aller offenen Issues.",[32,135,136],{},"Das Projekt in die lokale Umgebung klonen und in das Verzeichnis navigieren.",[32,138,139,140,144],{},"Ein Terminal öffnen und Codex mit ",[141,142,143],"code",{},"codex"," starten.",[146,147,152],"pre",{"className":148,"code":149,"language":150,"meta":151,"style":151},"language-bash shiki shiki-themes github-light","git clone https://gitlab.example.com/examplegroup/tanuki-iot-platform.git\ncd tanuki-iot-platform\n\ncodex\n","bash","",[141,153,154,170,180,187],{"__ignoreMap":151},[155,156,159,163,167],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"s7eDp","git",[155,164,166],{"class":165},"sYBdl"," clone",[155,168,169],{"class":165}," https://gitlab.example.com/examplegroup/tanuki-iot-platform.git\n",[155,171,173,177],{"class":157,"line":172},2,[155,174,176],{"class":175},"sYu0t","cd",[155,178,179],{"class":165}," tanuki-iot-platform\n",[155,181,183],{"class":157,"line":182},3,[155,184,186],{"emptyLinePlaceholder":185},true,"\n",[155,188,190],{"class":157,"line":189},4,[155,191,192],{"class":161},"codex\n",[12,194,195],{},"Im Prompt nach dem Zweck des Projekts fragen:",[146,197,201],{"className":198,"code":199,"language":200,"meta":151,"style":151},"language-markdown shiki shiki-themes github-light","What is this project about?\n","markdown",[141,202,203],{"__ignoreMap":151},[155,204,205],{"class":157,"line":158},[155,206,199],{"class":207},"sgsFI",[12,209,210,211,214],{},"Der relevante Teil für dieses Tutorial ist der Rust-Metrics-Store im\n",[141,212,213],{},"backend/","-Verzeichnis. Sensoren senden Messwerte über eine REST-API, und\nDashboards konsumieren Live-Daten über WebSocket-Streams. Problem und Fix sind\ndamit gut nachvollziehbar.",[54,216,218],{"id":217},"einstieg-mit-codex-und-gitlab-rust-backend-bug-beheben","Einstieg mit Codex und GitLab: Rust-Backend-Bug beheben",[12,220,221,222,227],{},"In diesem Szenario liegt ein ",[16,223,226],{"href":224,"rel":225},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/32",[],"Bug","\nim Live-WebSocket-Stream vor. Das Backend unterstützt bereits Metric-Filtering\nauf der REST-API-Seite, aber der WebSocket-Stream filtert nicht korrekt nach\nMetric. Als Test: Bei einem Abonnement für einen Sensor und eine Metric kommen\ntrotzdem andere Metrics zurück. Ein schneller Test im Terminal bestätigt das\nProblem.",[12,229,230],{},"Backend in einem Terminal starten, Port 9090:",[146,232,234],{"className":148,"code":233,"language":150,"meta":151,"style":151},"PORT=9090 cargo run --manifest-path backend/rust-metrics-store/Cargo.toml\n",[141,235,236],{"__ignoreMap":151},[155,237,238,241,245,248,251,254,257],{"class":157,"line":158},[155,239,240],{"class":207},"PORT",[155,242,244],{"class":243},"sD7c4","=",[155,246,247],{"class":165},"9090",[155,249,250],{"class":161}," cargo",[155,252,253],{"class":165}," run",[155,255,256],{"class":175}," --manifest-path",[155,258,259],{"class":165}," backend/rust-metrics-store/Cargo.toml\n",[12,261,262,263,94],{},"WebSocket-Client in einem zweiten Terminal öffnen. Auf macOS ist websocat über\nHomebrew verfügbar: ",[141,264,265],{},"brew install websocat",[146,267,269],{"className":148,"code":268,"language":150,"meta":151,"style":151},"websocat 'ws://localhost:9090/ws?sensor=arduino-iot-collector&metric=temperature_celsius'\n",[141,270,271],{"__ignoreMap":151},[155,272,273,276],{"class":157,"line":158},[155,274,275],{"class":161},"websocat",[155,277,278],{"class":165}," 'ws://localhost:9090/ws?sensor=arduino-iot-collector&metric=temperature_celsius'\n",[12,280,281,282,285],{},"Zwei verschiedene Metrics für den ",[141,283,284],{},"arduino-iot-collector","-Sensor senden:",[146,287,289],{"className":148,"code":288,"language":150,"meta":151,"style":151},"curl -s -X POST http://localhost:9090/api/metrics \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"sensor\":\"arduino-iot-collector\",\"metric\":\"temperature_celsius\",\"value\":23.5}'\n\ncurl -s -X POST http://localhost:9090/api/metrics \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"sensor\":\"arduino-iot-collector\",\"metric\":\"humidity_percent\",\"value\":61.2}'\n",[141,290,291,311,321,329,333,348,357],{"__ignoreMap":151},[155,292,293,296,299,302,305,308],{"class":157,"line":158},[155,294,295],{"class":161},"curl",[155,297,298],{"class":175}," -s",[155,300,301],{"class":175}," -X",[155,303,304],{"class":165}," POST",[155,306,307],{"class":165}," http://localhost:9090/api/metrics",[155,309,310],{"class":175}," \\\n",[155,312,313,316,319],{"class":157,"line":172},[155,314,315],{"class":175},"  -H",[155,317,318],{"class":165}," 'Content-Type: application/json'",[155,320,310],{"class":175},[155,322,323,326],{"class":157,"line":182},[155,324,325],{"class":175},"  -d",[155,327,328],{"class":165}," '{\"sensor\":\"arduino-iot-collector\",\"metric\":\"temperature_celsius\",\"value\":23.5}'\n",[155,330,331],{"class":157,"line":189},[155,332,186],{"emptyLinePlaceholder":185},[155,334,336,338,340,342,344,346],{"class":157,"line":335},5,[155,337,295],{"class":161},[155,339,298],{"class":175},[155,341,301],{"class":175},[155,343,304],{"class":165},[155,345,307],{"class":165},[155,347,310],{"class":175},[155,349,351,353,355],{"class":157,"line":350},6,[155,352,315],{"class":175},[155,354,318],{"class":165},[155,356,310],{"class":175},[155,358,360,362],{"class":157,"line":359},7,[155,361,325],{"class":175},[155,363,364],{"class":165}," '{\"sensor\":\"arduino-iot-collector\",\"metric\":\"humidity_percent\",\"value\":61.2}'\n",[12,366,367,368,371,372,375],{},"Erwartet wird nur ",[141,369,370],{},"temperature_celsius"," – aber der Stream zeigt auch\n",[141,373,374],{},"humidity_percent",", was den Bug bestätigt.",[12,377,378],{},[379,380],"img",{"alt":381,"src":382,"title":383},"Terminal mit drei Sessions: Metrics-Backend starten, WebSocket-Stream mit websocat lesen und Test-Metrics mit curl senden.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101134/codexgitlabimage1.png","Terminal mit drei Sessions: Metrics-Backend starten, WebSocket-Stream mit `websocat` lesen und Test-Metrics mit curl senden.",[12,385,386],{},"Das Problem wird nun in einem neuen Prompt an Codex übergeben:",[146,388,390],{"className":198,"code":389,"language":200,"meta":151,"style":151},"I need help with a backend change to add metric filtering to /ws so live streams can be narrowed to one metric.\n",[141,391,392],{"__ignoreMap":151},[155,393,394],{"class":157,"line":158},[155,395,389],{"class":207},[12,397,398,399,404],{},"Dank der ",[16,400,403],{"href":401,"rel":402},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/backend/rust-metrics-store/AGENTS.md?ref_type=heads#build-commands",[],"AGENTS.md","-Datei\nim GitLab-Projekt weiß Codex, wie das Rust-Backend strukturiert ist, welche\nBefehle ausgeführt werden sollen und wie die Code-Qualitätsanforderungen aussehen.",[12,406,407],{},[379,408],{"alt":409,"src":410,"title":411},"AGENTS.md mit Rust-Toolchain-Setup und Build-Befehlen für Agenten.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101171/codexgitlabimage2.png","`AGENTS.md` mit Rust-Toolchain-Setup und Build-Befehlen für Agenten.",[12,413,414,415,418,419,422,423,426],{},"Codex analysiert den Rust-Quellcode und findet das fehlende Element: Der\n",[141,416,417],{},"/ws","-Endpunkt versteht bereits einen ",[141,420,421],{},"sensor","-Query-Parameter, braucht aber\nauch einen optionalen ",[141,424,425],{},"metric","-Parameter. Codex aktualisiert die Handler-Logik,\nfügt Tests hinzu und hält die Dokumentation mit der Code-Änderung synchron.",[12,428,429],{},"Nach den Code-Änderungen führt Codex Formatierung, Tests und Build aus und macht\neinen abschließenden Check vor dem Git-Commit. Von dort aus kann ein Branch,\nCommit und Push angefordert werden.",[12,431,432],{},[379,433],{"alt":434,"src":435,"title":434},"Codex beim Beheben des Bugs mit dem Diff-Edit.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101152/codexgitlabimage3.png",[12,437,438,439,444,445,94],{},"Sobald der ",[16,440,443],{"href":441,"rel":442},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/merge_requests/88",[],"Merge Request","\nexistiert, übernimmt GitLab die nächsten Phasen des Software-Lifecycles.\nCI/CD-Pipelines starten, Security Scanning läuft, und GitLab Duo Code Review\nüberprüft die Änderungen gegen die\n",[16,446,449],{"href":447,"rel":448},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/.gitlab/duo/mr-review-instructions.yaml?ref_type=heads#L202",[],"Rust-Code-Style-Anforderungen",[12,451,452],{},[379,453],{"alt":454,"src":455,"title":454},"GitLab Duo Code Review-Anweisungen für Rust.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101180/codexgitlabimage4.png",[12,457,458],{},"Nach dem Deployment wird der lokale Test erneut ausgeführt und bestätigt, dass\nder WebSocket-Stream jetzt nur noch die angeforderte Metric ausgibt, wenn Sensor\nund Metric angegeben werden. Das Ergebnis wird in den Merge Request gepostet.",[12,460,461],{},[379,462],{"alt":463,"src":464,"title":463},"MR-Kommentare mit GitLab Duo Code Review-Feedback und Entwickler, der lokale Testergebnisse teilt.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101160/codexgitlabimage5.png",[12,466,467],{},"Dieser erste Anwendungsfall ist die Ausgangsbasis: Codex ist nah am Code,\nGitLab übernimmt die Arbeit, sobald der Patch in den Merge-Request-Lifecycle\neintritt.",[12,469,470],{},"Eine Aufzeichnung von Codex, GitLab CI/CD und GitLab Duo Agent Platform in Aktion:",[472,473,476,477],"figure",{"className":474},[475],"video_container","\n  ",[478,479,483],"iframe",{"src":480,"frameBorder":481,"allowFullScreen":482},"https://www.youtube.com/embed/IQxrwvzLai4","0","true"," ",[54,485,487],{"id":486},"websocket-metric-filter-mit-gitlab-mcp-und-development-lifecycle-kontext-beheben","WebSocket-Metric-Filter mit GitLab MCP und Development-Lifecycle-Kontext beheben",[12,489,490],{},"Im ersten Anwendungsfall konnte Codex das lokale Code-Repository sehen, hatte\naber keinen Zugriff auf das GitLab-Issue, die vereinbarten Anforderungen, die\nImplementierungsnotizen oder den Merge-Request- und Pipeline-Status. Dieser\nKontext lebt in GitLab, nicht in den lokalen Dateien.",[12,492,493,494,497],{},"Hier kommt der ",[16,495,102],{"href":100,"rel":496},[],"\nins Spiel.",[12,499,500,501,505],{},"In diesem Anwendungsfall existiert das ",[16,502,504],{"href":224,"rel":503},[],"Issue","\nbereits und ist bewusst detailliert: Es beschreibt das Problem, enthält\nfunktionale und nicht-funktionale Anforderungen und nennt explizit Tests sowie\nUpdates für README.md und AGENTS.md. Codex muss diese Informationen nicht in\nden Prompt eingefügt bekommen – es kann das Issue direkt abrufen und von\nderselben Informationsquelle ausgehen wie ein Entwickler.",[12,507,508],{},[379,509],{"alt":510,"src":511,"title":510},"GitLab-Issue mit Proposal, funktionalen Anforderungen, Verhalten, nicht-funktionalen Anforderungen und Implementierungsnotizen.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101184/codexgitlabimage6.png",[118,513,515],{"id":514},"gitlab-mcp-server-konfigurieren","GitLab MCP Server konfigurieren",[12,517,518,519,524],{},"Den GitLab-MCP-Server zu Codex hinzufügen. Sicherstellen, dass er auf der\nInstanz oder Top-Level-Group\n",[16,520,523],{"href":521,"rel":522},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#prerequisites",[],"aktiviert","\nist.",[12,526,527,528,532,533,536],{},"Ein neues Terminal öffnen und den\n",[16,529,102],{"href":530,"rel":531},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#connect-openai-codex-to-the-gitlab-mcp-server",[],"\nmit dem ",[141,534,535],{},"http","-Transport-Typ zu Codex hinzufügen.",[12,538,539,542],{},[141,540,541],{},"gitlab.example.com"," durch die eigene GitLab-Instanz ersetzen:",[146,544,546],{"className":148,"code":545,"language":150,"meta":151,"style":151},"codex mcp add --url \"https://\u003Cgitlab.example.com>/api/v4/mcp\" GitLab\n",[141,547,548],{"__ignoreMap":151},[155,549,550,552,555,558,561,564],{"class":157,"line":158},[155,551,143],{"class":161},[155,553,554],{"class":165}," mcp",[155,556,557],{"class":165}," add",[155,559,560],{"class":175}," --url",[155,562,563],{"class":165}," \"https://\u003Cgitlab.example.com>/api/v4/mcp\"",[155,565,566],{"class":165}," GitLab\n",[12,568,569,570,573,574,577,578,581,582,585],{},"Der Codex-MCP-Client benötigt möglicherweise ein Feature-Flag für den Rust\n",[141,571,572],{},"rmcp_client",". ",[141,575,576],{},"~/.codex/config.toml"," öffnen und den ",[141,579,580],{},"[features]","-Abschnitt\nhinzufügen. Dort lässt sich auch der hinzugefügte GitLab-MCP-Server im Abschnitt\n",[141,583,584],{},"mcp_servers."," überprüfen.",[146,587,589],{"className":148,"code":588,"language":150,"meta":151,"style":151},"vim ~/.codex/config.toml\n",[141,590,591],{"__ignoreMap":151},[155,592,593,596],{"class":157,"line":158},[155,594,595],{"class":161},"vim",[155,597,598],{"class":165}," ~/.codex/config.toml\n",[146,600,604],{"className":601,"code":602,"language":603,"meta":151,"style":151},"language-toml shiki shiki-themes github-light","[features]\n\"rmcp_client\" = true\n\n[mcp_servers.GitLab]\nurl = \"https://\u003Cgitlab.example.com>/api/v4/mcp\"\n","toml",[141,605,606,617,625,629,643],{"__ignoreMap":151},[155,607,608,611,614],{"class":157,"line":158},[155,609,610],{"class":207},"[",[155,612,613],{"class":161},"features",[155,615,616],{"class":207},"]\n",[155,618,619,622],{"class":157,"line":172},[155,620,621],{"class":207},"\"rmcp_client\" = ",[155,623,624],{"class":175},"true\n",[155,626,627],{"class":157,"line":182},[155,628,186],{"emptyLinePlaceholder":185},[155,630,631,633,636,638,641],{"class":157,"line":189},[155,632,610],{"class":207},[155,634,635],{"class":161},"mcp_servers",[155,637,94],{"class":207},[155,639,640],{"class":161},"GitLab",[155,642,616],{"class":207},[155,644,645,648],{"class":157,"line":335},[155,646,647],{"class":207},"url = ",[155,649,650],{"class":165},"\"https://\u003Cgitlab.example.com>/api/v4/mcp\"\n",[12,652,653,655,656,659],{},[141,654,143],{}," in einer neuen Terminal-Session starten und ",[141,657,658],{},"/mcp"," eingeben, um sich\nmit dem GitLab-MCP-Server zu authentifizieren, falls das nicht automatisch\nbeim Hinzufügen passiert ist.",[146,661,663],{"className":148,"code":662,"language":150,"meta":151,"style":151},"codex\n\n/mcp\n",[141,664,665,669,673],{"__ignoreMap":151},[155,666,667],{"class":157,"line":158},[155,668,192],{"class":161},[155,670,671],{"class":157,"line":172},[155,672,186],{"emptyLinePlaceholder":185},[155,674,675],{"class":157,"line":182},[155,676,677],{"class":161},"/mcp\n",[12,679,680],{},"Zur Überprüfung der Verbindung Codex fragen:",[146,682,684],{"className":198,"code":683,"language":200,"meta":151,"style":151},"Which GitLab MCP tools are available to you?\n\nShow the GitLab MCP Server version.\n",[141,685,686,691,695],{"__ignoreMap":151},[155,687,688],{"class":157,"line":158},[155,689,690],{"class":207},"Which GitLab MCP tools are available to you?\n",[155,692,693],{"class":157,"line":172},[155,694,186],{"emptyLinePlaceholder":185},[155,696,697],{"class":157,"line":182},[155,698,699],{"class":207},"Show the GitLab MCP Server version.\n",[118,701,703],{"id":702},"codex-zur-implementierung-des-websocket-filter-issues-auffordern","Codex zur Implementierung des WebSocket-Filter-Issues auffordern",[12,705,706,707,710],{},"Codex öffnen und im Prompt um Hilfe mit dem\n",[16,708,504],{"href":224,"rel":709},[],"\nbitten:",[146,712,714],{"className":198,"code":713,"language":200,"meta":151,"style":151},"Can you help me implement issue 32?\n",[141,715,716],{"__ignoreMap":151},[155,717,718],{"class":157,"line":158},[155,719,713],{"class":207},[12,721,722,723,726],{},"Hier ändert sich der Workflow. Codex verwendet das MCP-Werkzeug ",[141,724,725],{},"get_issue","\nund lädt die Issue-Details in die Session, bevor es den Code ändert. Es sieht\njetzt die Anforderungen, Labels, Notizen und den größeren Arbeitsumfang, bevor\nes die Implementierung angeht.",[12,728,729],{},[379,730],{"alt":731,"src":732,"title":733},"Codex ruft das GitLab-MCP-Server-Werkzeug get_issue auf und zeigt die Issue-Details im Terminal.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101166/codexgitlabimage7.png","Codex ruft das GitLab-MCP-Server-Werkzeug `get_issue` auf und zeigt die Issue-Details im Terminal.",[12,735,736,737,739],{},"Der Fix selbst ist vertraut: optionalen ",[141,738,425],{},"-Parameter hinzufügen,\nMatching-Logik aktualisieren, Tests ergänzen und Dokumentation aktualisieren.\nDer Unterschied liegt in der Informationsquelle: Im ersten Anwendungsfall waren\ndas Repository und der Prompt die Quelle. Hier sind es Issue und Repository\ngemeinsam.",[12,741,742,743,747],{},"Nach lokaler Validierung erstellt Codex einen Branch, committed die Arbeit und\nerstellt den ",[16,744,443],{"href":745,"rel":746},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/merge_requests/89",[],"\nüber MCP-Werkzeugaufrufe – ohne Browser-Wechsel.",[12,749,750],{},[379,751],{"alt":752,"src":753,"title":754},"Codex erstellt einen MR über das GitLab-MCP-Server-Werkzeug create_merge_request.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101144/codexgitlabimage8.png","Codex erstellt einen MR über das GitLab-MCP-Server-Werkzeug `create_merge_request`.",[12,756,757,758,761,762,94],{},"Da Codex den Issue-Kontext kennt, fügt es ",[141,759,760],{},"closes 32"," in die\nMerge-Request-Beschreibung ein, sodass das\n",[16,763,766],{"href":764,"rel":765},"https://docs.gitlab.com/user/project/issues/managing_issues/#closing-issues-automatically",[],"Issue beim Merge automatisch geschlossen wird",[12,768,769],{},[379,770],{"alt":771,"src":772,"title":773},"Codex hat Closes #32 in die Beschreibung eingefügt und zeigt damit an, dass es beim Merge geschlossen wird.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101188/codexgitlabimage9.png","Codex hat `Closes #32` in die Beschreibung eingefügt und zeigt damit an, dass es beim Merge geschlossen wird.",[12,775,776],{},"Das ist bedeutsamer als es klingt: Der Agent schreibt nicht nur Code, er\nbeteiligt sich an der Software-Delivery mit Issue-, Merge-Request- und\nPipeline-Kontext in der Schleife. Das ist der Mehrwert, den GitLab MCP dem\nEnd-to-End-Entwicklungsworkflow hinzufügt.",[12,778,779],{},"Sobald GitLab Duo Code Review und Tests grünes Licht geben, ist der finale\nReview und Merge bereit.",[12,781,782],{},[379,783],{"alt":784,"src":785,"title":784},"Merge-Request-Kommentare mit GitLab Duo Code Review und Screenshot lokaler Tests.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101130/codexgitlabimage10.png",[12,787,788],{},"Eine Aufzeichnung zeigt, wie Codex das Problem mit dem GitLab-MCP-Server löst:",[472,790,476,792],{"className":791},[475],[478,793,483],{"src":794,"frameBorder":481,"allowFullScreen":482},"https://www.youtube.com/embed/okx4cw2p-3I",[54,796,798],{"id":797},"review-feedback-und-anforderungen-mit-codex-als-externem-agenten-verifizieren","Review-Feedback und Anforderungen mit Codex als externem Agenten verifizieren",[12,800,801],{},"Der dritte Anwendungsfall ist besonders interessant. Statt zu fragen, ob Codex\neinen Merge Request öffnen kann, stellt sich die praktischere Frage: Kann es\nnach der MR-Erstellung helfen und Review-Feedback direkt im Merge Request\nbearbeiten?",[12,803,804,805,810,811,814,815,818,819,822],{},"Für diesen Anwendungsfall wird ein anderer\n",[16,806,809],{"href":807,"rel":808},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/33",[],"REST-API-Validierungs-Bug","\nverwendet. Das simulierte Problem: ",[141,812,813],{},"POST /api/metrics"," akzeptiert ungültige\nEingaben und gibt trotzdem ",[141,816,817],{},"201 Created"," zurück, statt ",[141,820,821],{},"400 Bad Request"," für\nungültige Payload-Werte wie leere Metrics.",[12,824,825],{},"Test in zwei Terminals: In Terminal 1 den Metrics-Store-Server auf Port 9090\nstarten:",[146,827,828],{"className":148,"code":233,"language":150,"meta":151,"style":151},[141,829,830],{"__ignoreMap":151},[155,831,832,834,836,838,840,842,844],{"class":157,"line":158},[155,833,240],{"class":207},[155,835,244],{"class":243},[155,837,247],{"class":165},[155,839,250],{"class":161},[155,841,253],{"class":165},[155,843,256],{"class":175},[155,845,259],{"class":165},[12,847,848,849,851],{},"In Terminal 2 mit ",[141,850,295],{}," eine REST-API-Anfrage mit einem leeren Metric-Wert\nsenden:",[146,853,855],{"className":148,"code":854,"language":150,"meta":151,"style":151},"curl -w \"\\nHTTP %{http_code}\\n\" -X POST http://localhost:9090/api/metrics \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"sensor\": \"sensor-a\", \"metric\": \"  \", \"value\": 23.5, \"labels\": {}}'\n",[141,856,857,875,884],{"__ignoreMap":151},[155,858,859,861,864,867,869,871,873],{"class":157,"line":158},[155,860,295],{"class":161},[155,862,863],{"class":175}," -w",[155,865,866],{"class":165}," \"\\nHTTP %{http_code}\\n\"",[155,868,301],{"class":175},[155,870,304],{"class":165},[155,872,307],{"class":165},[155,874,310],{"class":175},[155,876,877,879,882],{"class":157,"line":172},[155,878,315],{"class":175},[155,880,881],{"class":165}," \"Content-Type: application/json\"",[155,883,310],{"class":175},[155,885,886,888],{"class":157,"line":182},[155,887,325],{"class":175},[155,889,890],{"class":165}," '{\"sensor\": \"sensor-a\", \"metric\": \"  \", \"value\": 23.5, \"labels\": {}}'\n",[12,892,893,894,899],{},"Codex hat bereits einen ersten\n",[16,895,898],{"href":896,"rel":897},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/merge_requests/92",[],"Draft-Merge-Request","\nmit dem Haupt-Fix erstellt. Ein schneller lokaler Retest zeigt: Das\nKernverhalten hat sich verbessert, ungültige Eingaben geben jetzt 400 zurück.",[12,901,902],{},[379,903],{"alt":904,"src":905,"title":904},"Zwei curl-Aufrufe – einer mit dem Bug-Verhalten, der andere mit dem laufenden Fix.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101190/codexgitlabimage11.png",[12,907,908,909,912],{},"Gut, aber noch nicht fertig. GitLab Duo Code Review weist auf zwei fehlende\nPunkte hin, basierend auf den\n",[16,910,449],{"href":447,"rel":911},[],":",[29,914,915,918],{},[32,916,917],{},"Öffentliche Elemente brauchen Dokumentationskommentare.",[32,919,920],{},"API-Änderungen brauchen Handler-Tests für Erfolgs- und Fehlerpfade, ein\nValidierungstest fehlt noch.",[12,922,923],{},[379,924],{"alt":925,"src":926,"title":925},"GitLab Duo Code Review-Feedback zu den Rust-Code-Änderungen.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101149/Blog/Imported/sandy-s-test/image12.png",[12,928,929,930,935,936,940,941,944],{},"Jetzt wechseln wir vom lokalen Terminal in die GitLab-UI, wo der Codex-Agent\naus dem ",[16,931,934],{"href":932,"rel":933},"https://docs.gitlab.com/user/duo_agent_platform/ai_catalog/",[],"GitLab AI Catalog","\nim Menü ",[937,938,939],"strong",{},"AI > Agents"," aktiviert werden kann. Das Service-Account-Handle\nbeginnt mit ",[141,942,943],{},"@ai-codex-agent"," – den Agenten direkt in der\nMerge-Request-Diskussion erwähnen, damit er das Review-Feedback adressieren kann.",[12,946,947],{},[379,948],{"alt":949,"src":950,"title":949},"Codex Agent by GitLab im Projekt aktiviert.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101175/codexgitlabimage13.png",[12,952,953],{},"Der Merge Request wird damit zur Arbeitsfläche für den Codex-Agenten: mit Code-Diff,\nReview-Kommentaren, CI/CD-Pipelines, Security-Scanner-Ergebnissen und\nFreigabe-Regeln. Codex kann die Folgearbeit genau dort erledigen, wo die\nZusammenarbeit bereits stattfindet.",[12,955,956],{},"Einen neuen Kommentar mit Anweisungen hinzufügen, die Fixes direkt in den\nMerge Request zu pushen:",[146,958,960],{"className":198,"code":959,"language":200,"meta":151,"style":151},"Please help address the review feedback, and push a fix.\n",[141,961,962],{"__ignoreMap":151},[155,963,964],{"class":157,"line":158},[155,965,959],{"class":207},[12,967,968],{},[379,969],{"alt":970,"src":971,"title":970},"Codex-Agenten in einem Merge-Request-Feedback-Kommentar erwähnen.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101156/codexgitlabimage14.png",[12,973,974,975,980],{},"Codex adressiert das Feedback, fügt den fehlenden Validierungstest hinzu,\ncommitted ihn, führt Checks in seinem eigenen Ausführungskontext in der\n",[16,976,979],{"href":977,"rel":978},"https://docs.gitlab.com/user/duo_agent_platform/sessions/",[],"Agent Session","\nerneut aus und postet einen Zusammenfassungskommentar zurück in den Merge Request.",[12,982,983],{},[379,984],{"alt":985,"src":986,"title":985},"Die CI/CD-Pipelines werden automatisch durch den neuen Git-Commit ausgelöst.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101192/codexgitlabimage15.png",[12,988,989],{},[379,990],{"alt":991,"src":992,"title":991},"Codex Agent by GitLab hat eine neue CI/CD-Pipeline ausgelöst.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101140/codexgitlabimage16.png",[12,994,995,996,999,1000,1005],{},"Die neu hinzugefügte ",[141,997,998],{},"ingest_rejects_blank_metric","-Testfunktion lässt sich im\n",[16,1001,1004],{"href":1002,"rel":1003},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/jobs/14375432932",[],"Job-Log","\nüberprüfen.",[12,1007,1008],{},[379,1009],{"alt":1010,"src":1011,"title":1012},"CI/CD-Job-Log-Suche nach ingest_rejects_blank_metric.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101126/codexgitlabmage17.png","CI/CD-Job-Log-Suche nach `ingest_rejects_blank_metric`.",[12,1014,1015,1016,1021,1022,1027],{},"Das ist der Teil, der das External-Agent-Modell in der Praxis nützlich macht.\nExterne Agenten sind nicht interessant, weil sie Reviews ersetzen. Sie sind\nnützlich, weil sie die Lücke zwischen Review-Feedback und der nächsten Revision\nschließen helfen – während Merge Request, Freigaben und die finale menschliche\nEntscheidung genau dort bleiben, wo sie hingehören. Und sie lassen sich über\n",[16,1017,1020],{"href":1018,"rel":1019},"https://docs.gitlab.com/user/duo_agent_platform/triggers/",[],"Event-Trigger"," und\n",[16,1023,1026],{"href":1024,"rel":1025},"https://docs.gitlab.com/user/duo_agent_platform/flows/custom/",[],"Custom Flows","\nweiter in GitLab Duo Agent Platform integrieren.",[12,1029,1030],{},"Eine Aufzeichnung zeigt, wie Codex als externer Agent in GitLab Duo Agent\nPlatform bei Reviews helfen kann:",[472,1032,476,1034],{"className":1033},[475],[478,1035,483],{"src":1036,"frameBorder":481,"allowFullScreen":482},"https://www.youtube.com/embed/BapLAKxeomI",[54,1038,1040],{"id":1039},"tipps-für-codex-und-gitlab","Tipps für Codex und GitLab",[118,1042,1044],{"id":1043},"benutzerdefinierte-anweisungen-mit-agentsmd","Benutzerdefinierte Anweisungen mit AGENTS.md",[12,1046,1047,1048,1050],{},"Agenten lassen sich anweisen, Code vor Commits zu bauen und zu testen, Änderungen\nminimal zu halten oder die Projektarchitektur besser zu verstehen – über einen\nEintrag in ",[141,1049,403],{},". Die Tanuki-IoT-Platform verwendet eine Datei auf\nRoot-Ebene sowie spezifische Dateien und Anweisungen für Sensoren und das Backend.",[146,1052,1054],{"className":148,"code":1053,"language":150,"meta":151,"style":151},"tree -P AGENTS.md --prune\n.\n├── AGENTS.md\n├── backend\n│   └── rust-metrics-store\n│       └── AGENTS.md\n└── sensors\n    ├── arduino-iot-collector\n    │   └── AGENTS.md\n    ├── c-file-monitor\n    │   └── AGENTS.md\n    ├── cobol-mainframe-bridge\n    │   └── AGENTS.md\n    └── java-http-metrics-collector\n        └── AGENTS.md\n",[141,1055,1056,1070,1075,1083,1090,1101,1110,1118,1127,1137,1145,1154,1162,1171,1180],{"__ignoreMap":151},[155,1057,1058,1061,1064,1067],{"class":157,"line":158},[155,1059,1060],{"class":161},"tree",[155,1062,1063],{"class":175}," -P",[155,1065,1066],{"class":165}," AGENTS.md",[155,1068,1069],{"class":175}," --prune\n",[155,1071,1072],{"class":157,"line":172},[155,1073,1074],{"class":175},".\n",[155,1076,1077,1080],{"class":157,"line":182},[155,1078,1079],{"class":161},"├──",[155,1081,1082],{"class":165}," AGENTS.md\n",[155,1084,1085,1087],{"class":157,"line":189},[155,1086,1079],{"class":161},[155,1088,1089],{"class":165}," backend\n",[155,1091,1092,1095,1098],{"class":157,"line":335},[155,1093,1094],{"class":161},"│",[155,1096,1097],{"class":165},"   └──",[155,1099,1100],{"class":165}," rust-metrics-store\n",[155,1102,1103,1105,1108],{"class":157,"line":350},[155,1104,1094],{"class":161},[155,1106,1107],{"class":165},"       └──",[155,1109,1082],{"class":165},[155,1111,1112,1115],{"class":157,"line":359},[155,1113,1114],{"class":161},"└──",[155,1116,1117],{"class":165}," sensors\n",[155,1119,1121,1124],{"class":157,"line":1120},8,[155,1122,1123],{"class":161},"    ├──",[155,1125,1126],{"class":165}," arduino-iot-collector\n",[155,1128,1130,1133,1135],{"class":157,"line":1129},9,[155,1131,1132],{"class":161},"    │",[155,1134,1097],{"class":165},[155,1136,1082],{"class":165},[155,1138,1140,1142],{"class":157,"line":1139},10,[155,1141,1123],{"class":161},[155,1143,1144],{"class":165}," c-file-monitor\n",[155,1146,1148,1150,1152],{"class":157,"line":1147},11,[155,1149,1132],{"class":161},[155,1151,1097],{"class":165},[155,1153,1082],{"class":165},[155,1155,1157,1159],{"class":157,"line":1156},12,[155,1158,1123],{"class":161},[155,1160,1161],{"class":165}," cobol-mainframe-bridge\n",[155,1163,1165,1167,1169],{"class":157,"line":1164},13,[155,1166,1132],{"class":161},[155,1168,1097],{"class":165},[155,1170,1082],{"class":165},[155,1172,1174,1177],{"class":157,"line":1173},14,[155,1175,1176],{"class":161},"    └──",[155,1178,1179],{"class":165}," java-http-metrics-collector\n",[155,1181,1183,1186],{"class":157,"line":1182},15,[155,1184,1185],{"class":161},"        └──",[155,1187,1082],{"class":165},[12,1189,1190,1191,1193,1194,1201],{},"Für das Rust-Backend wird eine verzeichnisspezifische ",[141,1192,403],{}," in\n",[16,1195,1198],{"href":1196,"rel":1197},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/backend/rust-metrics-store/AGENTS.md?ref_type=heads",[],[141,1199,1200],{},"backend/rust-metric-store/AGENTS.md","\ngepflegt. Sie definiert Code-Style und -Standards für Rust, Dokumentation,\nDateiorganisation, Fehlerbehandlung, asynchrone Programmierung,\nContainerisierung und CI/CD sowie die Build- und Run-Befehle mit dem verfügbaren\nToolchain (Cargo). Die verlinkte Datei im GitLab-Projekt enthält alle Details.",[12,1203,1204,1205,1210],{},"Diese ",[16,1206,1209],{"href":1207,"rel":1208},"https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/",[],"benutzerdefinierten Anweisungen","\nwerden auch von Agents und Flows auf GitLab Duo Agent Platform verarbeitet.",[12,1212,1213],{},"Für bessere Ausgaben von Coding-Agenten: dort anfangen. Aufschreiben, wie das\nRepository funktioniert, welche Befehle wichtig sind, was nicht angefasst werden\nsoll und wie eine gute Änderung aussieht. Diese eine Investition zahlt sich für\nlokale Coding-Werkzeuge, GitLab MCP und externe Agenten gleichermaßen aus.",[54,1215,1217],{"id":1216},"jetzt-loslegen","Jetzt loslegen",[12,1219,1220,1221,1226],{},"GitLab Duo Agent Platform noch nicht im Einsatz? Mit einer\n",[16,1222,1225],{"href":1223,"rel":1224},"https://about.gitlab.com/de-de/gitlab-duo-agent-platform/",[],"kostenlosen Testversion","\nstarten.",[12,1228,1229,1230,1235],{},"Wer GitLab bereits im Free Tier nutzt, kann GitLab Duo Agent Platform in\n",[16,1231,1234],{"href":1232,"rel":1233},"https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom",[],"wenigen einfachen Schritten","\neinrichten.",[12,1237,1238,1239,1244,1245,1250],{},"Für bestehende GitLab Premium- oder Ultimate-Abonnenten genügt es,\n",[16,1240,1243],{"href":1241,"rel":1242},"https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/",[],"Duo Agent Platform zu aktivieren","\nund die ",[16,1246,1249],{"href":1247,"rel":1248},"https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits",[],"enthaltenen GitLab Credits","\nzu nutzen.",[1252,1253,1254],"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 pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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 .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":151,"searchDepth":172,"depth":172,"links":1256},[1257,1258,1261,1262,1266,1267,1270],{"id":56,"depth":172,"text":57},{"id":74,"depth":172,"text":75,"children":1259},[1260],{"id":120,"depth":182,"text":121},{"id":217,"depth":172,"text":218},{"id":486,"depth":172,"text":487,"children":1263},[1264,1265],{"id":514,"depth":182,"text":515},{"id":702,"depth":182,"text":703},{"id":797,"depth":172,"text":798},{"id":1039,"depth":172,"text":1040,"children":1268},[1269],{"id":1043,"depth":182,"text":1044},{"id":1216,"depth":172,"text":1217},"AI","2026-05-18","Wie Codex im Terminal, GitLab MCP und externe Agenten in Duo Agent Platform vom Bug-Report zur geprüften Änderung führen.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png",{},"/de-de/blog/fix-bugs-with-codex-and-gitlab",{"title":1280,"description":1273,"ogTitle":1280,"ogDescription":1273,"ogImage":1276,"ogUrl":1281,"ogSiteName":640,"ogType":1282,"canonicalUrls":1281},"Bugs beheben mit Codex und GitLab","https://about.gitlab.com/blog/fix-bugs-with-codex-and-gitlab","article","fix-bugs-with-codex-and-gitlab","de-de/blog/fix-bugs-with-codex-and-gitlab",[1271,1286,1287,1288,1289],"product","DevSecOps platform","tutorial","workflow","BlogPost","ok5cl3tl70L2TCn3WA_DkjJa_wvE9HQxZosVq1x2kNg",{"logo":1293,"freeTrial":1298,"sales":1303,"login":1308,"items":1313,"search":1630,"minimal":1664,"duo":1682,"switchNav":1691,"pricingDeployment":1702},{"config":1294},{"href":1295,"dataGaName":1296,"dataGaLocation":1297},"/de-de/","gitlab logo","header",{"text":1299,"config":1300},"Kostenlose Testversion anfordern",{"href":1301,"dataGaName":1302,"dataGaLocation":1297},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":1304,"config":1305},"Vertrieb kontaktieren",{"href":1306,"dataGaName":1307,"dataGaLocation":1297},"/de-de/sales/","sales",{"text":1309,"config":1310},"Anmelden",{"href":1311,"dataGaName":1312,"dataGaLocation":1297},"https://gitlab.com/users/sign_in/","sign in",[1314,1343,1445,1450,1554,1610],{"text":1315,"config":1316,"menu":1318},"Plattform",{"dataNavLevelOne":1317},"platform",{"type":1319,"columns":1320},"cards",[1321,1327,1335],{"title":1315,"description":1322,"link":1323},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":1324,"config":1325},"Die Plattform erkunden",{"href":1326,"dataGaName":1317,"dataGaLocation":1297},"/de-de/platform/",{"title":1328,"description":1329,"link":1330},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":1331,"config":1332},"Lerne GitLab Duo kennen",{"href":1333,"dataGaName":1334,"dataGaLocation":1297},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1336,"description":1337,"link":1338},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":1339,"config":1340},"Mehr erfahren",{"href":1341,"dataGaName":1342,"dataGaLocation":1297},"/de-de/why-gitlab/","why gitlab",{"text":1344,"left":185,"config":1345,"menu":1347},"Produkt",{"dataNavLevelOne":1346},"solutions",{"type":1348,"link":1349,"columns":1353,"feature":1424},"lists",{"text":1350,"config":1351},"Alle Lösungen anzeigen",{"href":1352,"dataGaName":1346,"dataGaLocation":1297},"/de-de/solutions/",[1354,1379,1402],{"title":1355,"description":1356,"link":1357,"items":1362},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":1358},{"icon":1359,"href":1360,"dataGaName":1361,"dataGaLocation":1297},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[1363,1367,1370,1375],{"text":1364,"config":1365},"CI/CD",{"href":1366,"dataGaLocation":1297,"dataGaName":1364},"/de-de/solutions/continuous-integration/",{"text":1328,"config":1368},{"href":1333,"dataGaLocation":1297,"dataGaName":1369},"gitlab duo agent platform - product menu",{"text":1371,"config":1372},"Quellcodeverwaltung",{"href":1373,"dataGaLocation":1297,"dataGaName":1374},"/de-de/solutions/source-code-management/","Source Code Management",{"text":1376,"config":1377},"Automatische Softwarebereitstellung",{"href":1360,"dataGaLocation":1297,"dataGaName":1378},"Automated software delivery",{"title":1380,"description":1381,"link":1382,"items":1387},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":1383},{"href":1384,"dataGaName":1385,"dataGaLocation":1297,"icon":1386},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1388,1392,1397],{"text":1389,"config":1390},"Anwendungssicherheitstests",{"href":1384,"dataGaName":1391,"dataGaLocation":1297},"Application security testing",{"text":1393,"config":1394},"Sicherheit der Software-Lieferkette",{"href":1395,"dataGaLocation":1297,"dataGaName":1396},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":1398,"config":1399},"Software-Compliance",{"href":1400,"dataGaName":1401,"dataGaLocation":1297},"/de-de/solutions/software-compliance/","software compliance",{"title":1403,"link":1404,"items":1409},"Messung",{"config":1405},{"icon":1406,"href":1407,"dataGaName":1408,"dataGaLocation":1297},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[1410,1414,1419],{"text":1411,"config":1412},"Sichtbarkeit und Messung",{"href":1407,"dataGaLocation":1297,"dataGaName":1413},"Visibility and Measurement",{"text":1415,"config":1416},"Wertstrommanagement",{"href":1417,"dataGaLocation":1297,"dataGaName":1418},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":1420,"config":1421},"Analysen und Einblicke",{"href":1422,"dataGaLocation":1297,"dataGaName":1423},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":1425,"type":1348,"items":1426},"GitLab für",[1427,1433,1439],{"text":1428,"config":1429},"Enterprise",{"icon":1430,"href":1431,"dataGaLocation":1297,"dataGaName":1432},"Building","/de-de/enterprise/","enterprise",{"text":1434,"config":1435},"Kleinunternehmen",{"icon":1436,"href":1437,"dataGaLocation":1297,"dataGaName":1438},"Work","/de-de/small-business/","small business",{"text":1440,"config":1441},"Öffentlicher Sektor",{"icon":1442,"href":1443,"dataGaLocation":1297,"dataGaName":1444},"Organization","/de-de/solutions/public-sector/","public sector",{"text":1446,"config":1447},"Preise",{"href":1448,"dataGaName":1449,"dataGaLocation":1297,"dataNavLevelOne":1449},"/de-de/pricing/","pricing",{"text":1451,"config":1452,"menu":1454},"Ressourcen",{"dataNavLevelOne":1453},"resources",{"type":1348,"link":1455,"columns":1459,"feature":1543},{"text":1456,"config":1457},"Alle Ressourcen anzeigen",{"href":1458,"dataGaName":1453,"dataGaLocation":1297},"/de-de/resources/",[1460,1493,1515],{"title":1461,"items":1462},"Erste Schritte",[1463,1468,1473,1478,1483,1488],{"text":1464,"config":1465},"Installieren",{"href":1466,"dataGaName":1467,"dataGaLocation":1297},"/de-de/install/","install",{"text":1469,"config":1470},"Kurzanleitungen",{"href":1471,"dataGaName":1472,"dataGaLocation":1297},"/de-de/get-started/","quick setup checklists",{"text":1474,"config":1475},"Lernen",{"href":1476,"dataGaLocation":1297,"dataGaName":1477},"https://university.gitlab.com/","learn",{"text":1479,"config":1480},"Produktdokumentation",{"href":1481,"dataGaName":1482,"dataGaLocation":1297},"https://docs.gitlab.com/","product documentation",{"text":1484,"config":1485},"Best-Practice-Videos",{"href":1486,"dataGaName":1487,"dataGaLocation":1297},"/de-de/getting-started-videos/","best practice videos",{"text":1489,"config":1490},"Integrationen",{"href":1491,"dataGaName":1492,"dataGaLocation":1297},"/de-de/integrations/","integrations",{"title":1494,"items":1495},"Entdecken",[1496,1501,1506,1510],{"text":1497,"config":1498},"Kundenerfolge",{"href":1499,"dataGaName":1500,"dataGaLocation":1297},"/de-de/customers/","customer success stories",{"text":1502,"config":1503},"Blog",{"href":1504,"dataGaName":1505,"dataGaLocation":1297},"/de-de/blog/","blog",{"text":1507,"config":1508},"The Source",{"href":1509,"dataGaName":1505,"dataGaLocation":1297},"/de-de/the-source/",{"text":1511,"config":1512},"Remote",{"href":1513,"dataGaName":1514,"dataGaLocation":1297},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1516,"items":1517},"Vernetzen",[1518,1523,1528,1533,1538],{"text":1519,"config":1520},"GitLab-Services",{"href":1521,"dataGaName":1522,"dataGaLocation":1297},"/de-de/services/","services",{"text":1524,"config":1525},"Community",{"href":1526,"dataGaName":1527,"dataGaLocation":1297},"/community/","community",{"text":1529,"config":1530},"Forum",{"href":1531,"dataGaName":1532,"dataGaLocation":1297},"https://forum.gitlab.com/","forum",{"text":1534,"config":1535},"Veranstaltungen",{"href":1536,"dataGaName":1537,"dataGaLocation":1297},"/events/","events",{"text":1539,"config":1540},"Partner",{"href":1541,"dataGaName":1542,"dataGaLocation":1297},"/de-de/partners/","partners",{"config":1544,"title":1547,"text":1548,"link":1549},{"background":1545,"textColor":1546},"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":1550,"config":1551},"Aktuelle Nachrichten",{"href":1552,"dataGaName":1553,"dataGaLocation":1297},"/de-de/whats-new/","whats new",{"text":1555,"config":1556,"menu":1558},"Company",{"dataNavLevelOne":1557},"company",{"type":1348,"columns":1559},[1560],{"items":1561},[1562,1567,1573,1575,1580,1585,1590,1595,1600,1605],{"text":1563,"config":1564},"Über",{"href":1565,"dataGaName":1566,"dataGaLocation":1297},"/de-de/company/","about",{"text":1568,"config":1569,"footerGa":1572},"Karriere",{"href":1570,"dataGaName":1571,"dataGaLocation":1297},"/jobs/","jobs",{"dataGaName":1571},{"text":1534,"config":1574},{"href":1536,"dataGaName":1537,"dataGaLocation":1297},{"text":1576,"config":1577},"Geschäftsführung",{"href":1578,"dataGaName":1579,"dataGaLocation":1297},"/company/team/e-group/","leadership",{"text":1581,"config":1582},"Handbuch",{"href":1583,"dataGaName":1584,"dataGaLocation":1297},"https://handbook.gitlab.com/","handbook",{"text":1586,"config":1587},"Investor Relations",{"href":1588,"dataGaName":1589,"dataGaLocation":1297},"https://ir.gitlab.com/","investor relations",{"text":1591,"config":1592},"Trust Center",{"href":1593,"dataGaName":1594,"dataGaLocation":1297},"/de-de/security/","trust center",{"text":1596,"config":1597},"AI Transparency Center",{"href":1598,"dataGaName":1599,"dataGaLocation":1297},"/de-de/ai-transparency-center/","ai transparency center",{"text":1601,"config":1602},"Newsletter",{"href":1603,"dataGaName":1604,"dataGaLocation":1297},"/company/contact/#contact-forms","newsletter",{"text":1606,"config":1607},"Presse",{"href":1608,"dataGaName":1609,"dataGaLocation":1297},"/press/","press",{"text":1611,"config":1612,"menu":1613},"Kontakt",{"dataNavLevelOne":1557},{"type":1348,"columns":1614},[1615],{"items":1616},[1617,1620,1625],{"text":1304,"config":1618},{"href":1306,"dataGaName":1619,"dataGaLocation":1297},"talk to sales",{"text":1621,"config":1622},"Support-Portal",{"href":1623,"dataGaName":1624,"dataGaLocation":1297},"https://support.gitlab.com","support portal",{"text":1626,"config":1627},"Kundenportal",{"href":1628,"dataGaName":1629,"dataGaLocation":1297},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1631,"login":1632,"suggestions":1639},"Schließen",{"text":1633,"link":1634},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1635,"config":1636},"gitlab.com",{"href":1311,"dataGaName":1637,"dataGaLocation":1638},"search login","search",{"text":1640,"default":1641},"Vorschläge",[1642,1644,1649,1651,1656,1661],{"text":1328,"config":1643},{"href":1333,"dataGaName":1328,"dataGaLocation":1638},{"text":1645,"config":1646},"Codevorschläge (KI)",{"href":1647,"dataGaName":1648,"dataGaLocation":1638},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1364,"config":1650},{"href":1366,"dataGaName":1364,"dataGaLocation":1638},{"text":1652,"config":1653},"GitLab auf AWS",{"href":1654,"dataGaName":1655,"dataGaLocation":1638},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1657,"config":1658},"GitLab auf Google Cloud",{"href":1659,"dataGaName":1660,"dataGaLocation":1638},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1336,"config":1662},{"href":1341,"dataGaName":1663,"dataGaLocation":1638},"Why GitLab?",{"freeTrial":1665,"mobileIcon":1670,"desktopIcon":1675,"secondaryButton":1678},{"text":1666,"config":1667},"Kostenlos testen",{"href":1668,"dataGaName":1302,"dataGaLocation":1669},"https://gitlab.com/-/trials/new/","nav",{"altText":1671,"config":1672},"GitLab-Symbol",{"src":1673,"dataGaName":1674,"dataGaLocation":1669},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1671,"config":1676},{"src":1677,"dataGaName":1674,"dataGaLocation":1669},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1461,"config":1679},{"href":1680,"dataGaName":1681,"dataGaLocation":1669},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1683,"mobileIcon":1687,"desktopIcon":1689},{"text":1684,"config":1685},"Mehr über GitLab Duo erfahren",{"href":1333,"dataGaName":1686,"dataGaLocation":1669},"gitlab duo",{"altText":1671,"config":1688},{"src":1673,"dataGaName":1674,"dataGaLocation":1669},{"altText":1671,"config":1690},{"src":1677,"dataGaName":1674,"dataGaLocation":1669},{"button":1692,"mobileIcon":1697,"desktopIcon":1699},{"text":1693,"config":1694},"/Option",{"href":1695,"dataGaName":1696,"dataGaLocation":1669},"#contact","switch",{"altText":1671,"config":1698},{"src":1673,"dataGaName":1674,"dataGaLocation":1669},{"altText":1671,"config":1700},{"src":1701,"dataGaName":1674,"dataGaLocation":1669},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1703,"mobileIcon":1708,"desktopIcon":1710},{"text":1704,"config":1705},"Zurück zur Preisübersicht",{"href":1448,"dataGaName":1706,"dataGaLocation":1669,"icon":1707},"back to pricing","GoBack",{"altText":1671,"config":1709},{"src":1673,"dataGaName":1674,"dataGaLocation":1669},{"altText":1671,"config":1711},{"src":1677,"dataGaName":1674,"dataGaLocation":1669},{"title":1713,"button":1714,"config":1719},"Sieh dir an, wie agentische KI die Softwarebereitstellung transformiert",{"text":1715,"config":1716},"Jetzt live bei GitLab Transcend am 10. Juni dabei sein",{"href":1717,"dataGaName":1718,"dataGaLocation":1297},"/de-de/events/transcend/virtual/","transcend event",{"layout":1720,"disabled":1721},"release",false,{"data":1723},{"text":1724,"source":1725,"edit":1731,"contribute":1736,"config":1741,"items":1746,"minimal":1952},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1726,"config":1727},"Quelltext der Seite anzeigen",{"href":1728,"dataGaName":1729,"dataGaLocation":1730},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1732,"config":1733},"Diese Seite bearbeiten",{"href":1734,"dataGaName":1735,"dataGaLocation":1730},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1737,"config":1738},"Beteilige dich",{"href":1739,"dataGaName":1740,"dataGaLocation":1730},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1742,"facebook":1743,"youtube":1744,"linkedin":1745},"https://x.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1747,1792,1845,1887,1918],{"title":1446,"links":1748,"subMenu":1763},[1749,1753,1758],{"text":1750,"config":1751},"Tarife anzeigen",{"href":1448,"dataGaName":1752,"dataGaLocation":1730},"view plans",{"text":1754,"config":1755},"Vorteile von Premium",{"href":1756,"dataGaName":1757,"dataGaLocation":1730},"/de-de/pricing/premium/","why premium",{"text":1759,"config":1760},"Vorteile von Ultimate",{"href":1761,"dataGaName":1762,"dataGaLocation":1730},"/de-de/pricing/ultimate/","why ultimate",[1764],{"title":1611,"links":1765},[1766,1768,1770,1772,1777,1782,1787],{"text":1304,"config":1767},{"href":1306,"dataGaName":1307,"dataGaLocation":1730},{"text":1621,"config":1769},{"href":1623,"dataGaName":1624,"dataGaLocation":1730},{"text":1626,"config":1771},{"href":1628,"dataGaName":1629,"dataGaLocation":1730},{"text":1773,"config":1774},"Status",{"href":1775,"dataGaName":1776,"dataGaLocation":1730},"https://status.gitlab.com/","status",{"text":1778,"config":1779},"Nutzungsbedingungen",{"href":1780,"dataGaName":1781,"dataGaLocation":1730},"/terms/","terms of use",{"text":1783,"config":1784},"Datenschutzerklärung",{"href":1785,"dataGaName":1786,"dataGaLocation":1730},"/de-de/privacy/","privacy statement",{"text":1788,"config":1789},"Cookie-Einstellungen",{"dataGaName":1790,"dataGaLocation":1730,"id":1791,"isOneTrustButton":185},"cookie preferences","ot-sdk-btn",{"title":1344,"links":1793,"subMenu":1802},[1794,1798],{"text":1795,"config":1796},"DevSecOps-Plattform",{"href":1326,"dataGaName":1797,"dataGaLocation":1730},"devsecops platform",{"text":1799,"config":1800},"KI-unterstützte Entwicklung",{"href":1333,"dataGaName":1801,"dataGaLocation":1730},"ai-assisted development",[1803],{"title":1804,"links":1805},"Themen",[1806,1810,1815,1820,1825,1830,1835,1840],{"text":1364,"config":1807},{"href":1808,"dataGaName":1809,"dataGaLocation":1730},"/de-de/topics/ci-cd/","cicd",{"text":1811,"config":1812},"GitOps",{"href":1813,"dataGaName":1814,"dataGaLocation":1730},"/de-de/topics/gitops/","gitops",{"text":1816,"config":1817},"DevOps",{"href":1818,"dataGaName":1819,"dataGaLocation":1730},"/de-de/topics/devops/","devops",{"text":1821,"config":1822},"Versionskontrolle",{"href":1823,"dataGaName":1824,"dataGaLocation":1730},"/de-de/topics/version-control/","version control",{"text":1826,"config":1827},"DevSecOps",{"href":1828,"dataGaName":1829,"dataGaLocation":1730},"/de-de/topics/devsecops/","devsecops",{"text":1831,"config":1832},"Cloud-nativ",{"href":1833,"dataGaName":1834,"dataGaLocation":1730},"/de-de/topics/cloud-native/","cloud native",{"text":1836,"config":1837},"KI für das Programmieren",{"href":1838,"dataGaName":1839,"dataGaLocation":1730},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1841,"config":1842},"Agentische KI",{"href":1843,"dataGaName":1844,"dataGaLocation":1730},"/de-de/topics/agentic-ai/","agentic ai",{"title":1846,"links":1847},"Lösungen",[1848,1851,1853,1858,1862,1865,1868,1871,1873,1875,1877,1882],{"text":1389,"config":1849},{"href":1384,"dataGaName":1850,"dataGaLocation":1730},"Application Security Testing",{"text":1376,"config":1852},{"href":1360,"dataGaName":1361,"dataGaLocation":1730},{"text":1854,"config":1855},"Agile Entwicklung",{"href":1856,"dataGaName":1857,"dataGaLocation":1730},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1859,"config":1860},"SCM",{"href":1373,"dataGaName":1861,"dataGaLocation":1730},"source code management",{"text":1364,"config":1863},{"href":1366,"dataGaName":1864,"dataGaLocation":1730},"continuous integration & delivery",{"text":1415,"config":1866},{"href":1417,"dataGaName":1867,"dataGaLocation":1730},"value stream management",{"text":1811,"config":1869},{"href":1870,"dataGaName":1814,"dataGaLocation":1730},"/de-de/solutions/gitops/",{"text":1428,"config":1872},{"href":1431,"dataGaName":1432,"dataGaLocation":1730},{"text":1434,"config":1874},{"href":1437,"dataGaName":1438,"dataGaLocation":1730},{"text":1440,"config":1876},{"href":1443,"dataGaName":1444,"dataGaLocation":1730},{"text":1878,"config":1879},"Bildungswesen",{"href":1880,"dataGaName":1881,"dataGaLocation":1730},"/de-de/solutions/education/","education",{"text":1883,"config":1884},"Finanzdienstleistungen",{"href":1885,"dataGaName":1886,"dataGaLocation":1730},"/de-de/solutions/finance/","financial services",{"title":1451,"links":1888},[1889,1891,1893,1895,1898,1900,1903,1905,1907,1910,1912,1914,1916],{"text":1464,"config":1890},{"href":1466,"dataGaName":1467,"dataGaLocation":1730},{"text":1469,"config":1892},{"href":1471,"dataGaName":1472,"dataGaLocation":1730},{"text":1474,"config":1894},{"href":1476,"dataGaName":1477,"dataGaLocation":1730},{"text":1479,"config":1896},{"href":1481,"dataGaName":1897,"dataGaLocation":1730},"docs",{"text":1502,"config":1899},{"href":1504,"dataGaName":1505,"dataGaLocation":1730},{"text":1901,"config":1902},"Neuigkeiten",{"href":1552,"dataGaName":1553,"dataGaLocation":1730},{"text":1497,"config":1904},{"href":1499,"dataGaName":1500,"dataGaLocation":1730},{"text":1511,"config":1906},{"href":1513,"dataGaName":1514,"dataGaLocation":1730},{"text":1908,"config":1909},"GitLab Services",{"href":1521,"dataGaName":1522,"dataGaLocation":1730},{"text":1524,"config":1911},{"href":1526,"dataGaName":1527,"dataGaLocation":1730},{"text":1529,"config":1913},{"href":1531,"dataGaName":1532,"dataGaLocation":1730},{"text":1534,"config":1915},{"href":1536,"dataGaName":1537,"dataGaLocation":1730},{"text":1539,"config":1917},{"href":1541,"dataGaName":1542,"dataGaLocation":1730},{"title":1919,"links":1920},"Unternehmen",[1921,1923,1925,1927,1929,1931,1936,1941,1943,1945,1947],{"text":1563,"config":1922},{"href":1565,"dataGaName":1557,"dataGaLocation":1730},{"text":1568,"config":1924},{"href":1570,"dataGaName":1571,"dataGaLocation":1730},{"text":1576,"config":1926},{"href":1578,"dataGaName":1579,"dataGaLocation":1730},{"text":1581,"config":1928},{"href":1583,"dataGaName":1584,"dataGaLocation":1730},{"text":1586,"config":1930},{"href":1588,"dataGaName":1589,"dataGaLocation":1730},{"text":1932,"config":1933},"Nachhaltigkeit",{"href":1934,"dataGaName":1935,"dataGaLocation":1730},"/sustainability/","Sustainability",{"text":1937,"config":1938},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1939,"dataGaName":1940,"dataGaLocation":1730},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1591,"config":1942},{"href":1593,"dataGaName":1594,"dataGaLocation":1730},{"text":1601,"config":1944},{"href":1603,"dataGaName":1604,"dataGaLocation":1730},{"text":1606,"config":1946},{"href":1608,"dataGaName":1609,"dataGaLocation":1730},{"text":1948,"config":1949},"Transparenzerklärung zu moderner Sklaverei",{"href":1950,"dataGaName":1951,"dataGaLocation":1730},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1953},[1954,1956,1959],{"text":1778,"config":1955},{"href":1780,"dataGaName":1781,"dataGaLocation":1730},{"text":1957,"config":1958},"Cookies",{"dataGaName":1790,"dataGaLocation":1730,"id":1791,"isOneTrustButton":185},{"text":1783,"config":1960},{"href":1785,"dataGaName":1786,"dataGaLocation":1730},[1962],{"id":1963,"title":7,"body":1275,"config":1964,"content":1966,"description":1275,"extension":1970,"meta":1971,"navigation":185,"path":1972,"seo":1973,"stem":1974,"__hash__":1975},"blogAuthors/en-us/blog/authors/michael-friedrich.yml",{"template":1965},"BlogAuthor",{"name":7,"config":1967},{"headshot":1968,"ctfId":1969},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659879/Blog/Author%20Headshots/dnsmichi-headshot.jpg","dnsmichi","yml",{},"/en-us/blog/authors/michael-friedrich",{},"en-us/blog/authors/michael-friedrich","lJ-nfRIhdG49Arfrxdn1Vv4UppwD51BB13S3HwIswt4",[],{"promotions":1978},[1979,1993,2004,2016],{"id":1980,"categories":1981,"header":1983,"text":1984,"button":1985,"image":1990},"ai-modernization",[1982],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":1986,"config":1987},"Ermittle deinen KI-Reifegrad",{"href":1988,"dataGaName":1989,"dataGaLocation":1505},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":1991},{"src":1992},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1994,"categories":1995,"header":1996,"text":1984,"button":1997,"image":2001},"devops-modernization",[1286,1829],"Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":1998,"config":1999},"Ermittle deinen DevOps-Reifegrad",{"href":2000,"dataGaName":1989,"dataGaLocation":1505},"/de-de/assessments/devops-modernization-assessment/",{"config":2002},{"src":2003},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2005,"categories":2006,"header":2008,"text":1984,"button":2009,"image":2013},"security-modernization",[2007],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":2010,"config":2011},"Ermittle deinen Sicherheitsreifegrad",{"href":2012,"dataGaName":1989,"dataGaLocation":1505},"/de-de/assessments/security-modernization-assessment/",{"config":2014},{"src":2015},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2017,"paths":2018,"header":2021,"text":2022,"button":2023,"image":2028},"github-azure-migration",[2019,2020],"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":2024,"config":2025},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":2026,"dataGaName":2027,"dataGaLocation":1505},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2029},{"src":2003},{"header":2031,"blurb":2032,"button":2033,"secondaryButton":2038},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":2034,"config":2035},"Kostenlosen Test starten",{"href":2036,"dataGaName":1302,"dataGaLocation":2037},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1304,"config":2039},{"href":1306,"dataGaName":1307,"dataGaLocation":2037},1781392740885]