[{"data":1,"prerenderedAt":2048},["ShallowReactive",2],{"/de-de/blog/fix-bugs-with-codex-and-gitlab":3,"navigation-de-de":1292,"banner-de-de":1717,"footer-de-de":1727,"blog-post-authors-de-de-Michael Friedrich":1969,"blog-related-posts-de-de-fix-bugs-with-codex-and-gitlab":1984,"blog-promotions-de-de":1985,"next-steps-de-de":2038},{"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":1635,"minimal":1669,"duo":1687,"switchNav":1696,"pricingDeployment":1707},{"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,1615],{"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/releases/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,1610],{"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},"Team",{"href":1583,"dataGaName":1584,"dataGaLocation":1297},"/company/team/","team",{"text":1586,"config":1587},"Handbuch",{"href":1588,"dataGaName":1589,"dataGaLocation":1297},"https://handbook.gitlab.com/","handbook",{"text":1591,"config":1592},"Investor Relations",{"href":1593,"dataGaName":1594,"dataGaLocation":1297},"https://ir.gitlab.com/","investor relations",{"text":1596,"config":1597},"Trust Center",{"href":1598,"dataGaName":1599,"dataGaLocation":1297},"/de-de/security/","trust center",{"text":1601,"config":1602},"AI Transparency Center",{"href":1603,"dataGaName":1604,"dataGaLocation":1297},"/de-de/ai-transparency-center/","ai transparency center",{"text":1606,"config":1607},"Newsletter",{"href":1608,"dataGaName":1609,"dataGaLocation":1297},"/company/contact/#contact-forms","newsletter",{"text":1611,"config":1612},"Presse",{"href":1613,"dataGaName":1614,"dataGaLocation":1297},"/press/","press",{"text":1616,"config":1617,"menu":1618},"Kontakt",{"dataNavLevelOne":1557},{"type":1348,"columns":1619},[1620],{"items":1621},[1622,1625,1630],{"text":1304,"config":1623},{"href":1306,"dataGaName":1624,"dataGaLocation":1297},"talk to sales",{"text":1626,"config":1627},"Support-Portal",{"href":1628,"dataGaName":1629,"dataGaLocation":1297},"https://support.gitlab.com","support portal",{"text":1631,"config":1632},"Kundenportal",{"href":1633,"dataGaName":1634,"dataGaLocation":1297},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1636,"login":1637,"suggestions":1644},"Schließen",{"text":1638,"link":1639},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1640,"config":1641},"gitlab.com",{"href":1311,"dataGaName":1642,"dataGaLocation":1643},"search login","search",{"text":1645,"default":1646},"Vorschläge",[1647,1649,1654,1656,1661,1666],{"text":1328,"config":1648},{"href":1333,"dataGaName":1328,"dataGaLocation":1643},{"text":1650,"config":1651},"Codevorschläge (KI)",{"href":1652,"dataGaName":1653,"dataGaLocation":1643},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1364,"config":1655},{"href":1366,"dataGaName":1364,"dataGaLocation":1643},{"text":1657,"config":1658},"GitLab auf AWS",{"href":1659,"dataGaName":1660,"dataGaLocation":1643},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1662,"config":1663},"GitLab auf Google Cloud",{"href":1664,"dataGaName":1665,"dataGaLocation":1643},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1336,"config":1667},{"href":1341,"dataGaName":1668,"dataGaLocation":1643},"Why GitLab?",{"freeTrial":1670,"mobileIcon":1675,"desktopIcon":1680,"secondaryButton":1683},{"text":1671,"config":1672},"Kostenlos testen",{"href":1673,"dataGaName":1302,"dataGaLocation":1674},"https://gitlab.com/-/trials/new/","nav",{"altText":1676,"config":1677},"GitLab-Symbol",{"src":1678,"dataGaName":1679,"dataGaLocation":1674},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1676,"config":1681},{"src":1682,"dataGaName":1679,"dataGaLocation":1674},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1461,"config":1684},{"href":1685,"dataGaName":1686,"dataGaLocation":1674},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1688,"mobileIcon":1692,"desktopIcon":1694},{"text":1689,"config":1690},"Mehr über GitLab Duo erfahren",{"href":1333,"dataGaName":1691,"dataGaLocation":1674},"gitlab duo",{"altText":1676,"config":1693},{"src":1678,"dataGaName":1679,"dataGaLocation":1674},{"altText":1676,"config":1695},{"src":1682,"dataGaName":1679,"dataGaLocation":1674},{"button":1697,"mobileIcon":1702,"desktopIcon":1704},{"text":1698,"config":1699},"/Option",{"href":1700,"dataGaName":1701,"dataGaLocation":1674},"#contact","switch",{"altText":1676,"config":1703},{"src":1678,"dataGaName":1679,"dataGaLocation":1674},{"altText":1676,"config":1705},{"src":1706,"dataGaName":1679,"dataGaLocation":1674},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1708,"mobileIcon":1713,"desktopIcon":1715},{"text":1709,"config":1710},"Zurück zur Preisübersicht",{"href":1448,"dataGaName":1711,"dataGaLocation":1674,"icon":1712},"back to pricing","GoBack",{"altText":1676,"config":1714},{"src":1678,"dataGaName":1679,"dataGaLocation":1674},{"altText":1676,"config":1716},{"src":1682,"dataGaName":1679,"dataGaLocation":1674},{"title":1718,"button":1719,"config":1724},"Sieh dir an, wie agentische KI die Softwarebereitstellung transformiert",{"text":1720,"config":1721},"Für GitLab Transcend am 10. Juni anmelden",{"href":1722,"dataGaName":1723,"dataGaLocation":1297},"/de-de/events/transcend/virtual/","transcend event",{"layout":1725,"disabled":1726},"release",false,{"data":1728},{"text":1729,"source":1730,"edit":1736,"contribute":1741,"config":1746,"items":1751,"minimal":1960},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1731,"config":1732},"Quelltext der Seite anzeigen",{"href":1733,"dataGaName":1734,"dataGaLocation":1735},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1737,"config":1738},"Diese Seite bearbeiten",{"href":1739,"dataGaName":1740,"dataGaLocation":1735},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1742,"config":1743},"Beteilige dich",{"href":1744,"dataGaName":1745,"dataGaLocation":1735},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1747,"facebook":1748,"youtube":1749,"linkedin":1750},"https://x.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1752,1797,1850,1892,1924],{"title":1446,"links":1753,"subMenu":1768},[1754,1758,1763],{"text":1755,"config":1756},"Tarife anzeigen",{"href":1448,"dataGaName":1757,"dataGaLocation":1735},"view plans",{"text":1759,"config":1760},"Vorteile von Premium",{"href":1761,"dataGaName":1762,"dataGaLocation":1735},"/de-de/pricing/premium/","why premium",{"text":1764,"config":1765},"Vorteile von Ultimate",{"href":1766,"dataGaName":1767,"dataGaLocation":1735},"/de-de/pricing/ultimate/","why ultimate",[1769],{"title":1616,"links":1770},[1771,1773,1775,1777,1782,1787,1792],{"text":1304,"config":1772},{"href":1306,"dataGaName":1307,"dataGaLocation":1735},{"text":1626,"config":1774},{"href":1628,"dataGaName":1629,"dataGaLocation":1735},{"text":1631,"config":1776},{"href":1633,"dataGaName":1634,"dataGaLocation":1735},{"text":1778,"config":1779},"Status",{"href":1780,"dataGaName":1781,"dataGaLocation":1735},"https://status.gitlab.com/","status",{"text":1783,"config":1784},"Nutzungsbedingungen",{"href":1785,"dataGaName":1786,"dataGaLocation":1735},"/terms/","terms of use",{"text":1788,"config":1789},"Datenschutzerklärung",{"href":1790,"dataGaName":1791,"dataGaLocation":1735},"/de-de/privacy/","privacy statement",{"text":1793,"config":1794},"Cookie-Einstellungen",{"dataGaName":1795,"dataGaLocation":1735,"id":1796,"isOneTrustButton":185},"cookie preferences","ot-sdk-btn",{"title":1344,"links":1798,"subMenu":1807},[1799,1803],{"text":1800,"config":1801},"DevSecOps-Plattform",{"href":1326,"dataGaName":1802,"dataGaLocation":1735},"devsecops platform",{"text":1804,"config":1805},"KI-unterstützte Entwicklung",{"href":1333,"dataGaName":1806,"dataGaLocation":1735},"ai-assisted development",[1808],{"title":1809,"links":1810},"Themen",[1811,1815,1820,1825,1830,1835,1840,1845],{"text":1364,"config":1812},{"href":1813,"dataGaName":1814,"dataGaLocation":1735},"/de-de/topics/ci-cd/","cicd",{"text":1816,"config":1817},"GitOps",{"href":1818,"dataGaName":1819,"dataGaLocation":1735},"/de-de/topics/gitops/","gitops",{"text":1821,"config":1822},"DevOps",{"href":1823,"dataGaName":1824,"dataGaLocation":1735},"/de-de/topics/devops/","devops",{"text":1826,"config":1827},"Versionskontrolle",{"href":1828,"dataGaName":1829,"dataGaLocation":1735},"/de-de/topics/version-control/","version control",{"text":1831,"config":1832},"DevSecOps",{"href":1833,"dataGaName":1834,"dataGaLocation":1735},"/de-de/topics/devsecops/","devsecops",{"text":1836,"config":1837},"Cloud-nativ",{"href":1838,"dataGaName":1839,"dataGaLocation":1735},"/de-de/topics/cloud-native/","cloud native",{"text":1841,"config":1842},"KI für das Programmieren",{"href":1843,"dataGaName":1844,"dataGaLocation":1735},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1846,"config":1847},"Agentische KI",{"href":1848,"dataGaName":1849,"dataGaLocation":1735},"/de-de/topics/agentic-ai/","agentic ai",{"title":1851,"links":1852},"Lösungen",[1853,1856,1858,1863,1867,1870,1873,1876,1878,1880,1882,1887],{"text":1389,"config":1854},{"href":1384,"dataGaName":1855,"dataGaLocation":1735},"Application Security Testing",{"text":1376,"config":1857},{"href":1360,"dataGaName":1361,"dataGaLocation":1735},{"text":1859,"config":1860},"Agile Entwicklung",{"href":1861,"dataGaName":1862,"dataGaLocation":1735},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1864,"config":1865},"SCM",{"href":1373,"dataGaName":1866,"dataGaLocation":1735},"source code management",{"text":1364,"config":1868},{"href":1366,"dataGaName":1869,"dataGaLocation":1735},"continuous integration & delivery",{"text":1415,"config":1871},{"href":1417,"dataGaName":1872,"dataGaLocation":1735},"value stream management",{"text":1816,"config":1874},{"href":1875,"dataGaName":1819,"dataGaLocation":1735},"/de-de/solutions/gitops/",{"text":1428,"config":1877},{"href":1431,"dataGaName":1432,"dataGaLocation":1735},{"text":1434,"config":1879},{"href":1437,"dataGaName":1438,"dataGaLocation":1735},{"text":1440,"config":1881},{"href":1443,"dataGaName":1444,"dataGaLocation":1735},{"text":1883,"config":1884},"Bildungswesen",{"href":1885,"dataGaName":1886,"dataGaLocation":1735},"/de-de/solutions/education/","education",{"text":1888,"config":1889},"Finanzdienstleistungen",{"href":1890,"dataGaName":1891,"dataGaLocation":1735},"/de-de/solutions/finance/","financial services",{"title":1451,"links":1893},[1894,1896,1898,1900,1903,1905,1909,1911,1913,1916,1918,1920,1922],{"text":1464,"config":1895},{"href":1466,"dataGaName":1467,"dataGaLocation":1735},{"text":1469,"config":1897},{"href":1471,"dataGaName":1472,"dataGaLocation":1735},{"text":1474,"config":1899},{"href":1476,"dataGaName":1477,"dataGaLocation":1735},{"text":1479,"config":1901},{"href":1481,"dataGaName":1902,"dataGaLocation":1735},"docs",{"text":1502,"config":1904},{"href":1504,"dataGaName":1505,"dataGaLocation":1735},{"text":1906,"config":1907},"Neuigkeiten",{"href":1908,"dataGaName":1553,"dataGaLocation":1735},"/de-de/whats-new/",{"text":1497,"config":1910},{"href":1499,"dataGaName":1500,"dataGaLocation":1735},{"text":1511,"config":1912},{"href":1513,"dataGaName":1514,"dataGaLocation":1735},{"text":1914,"config":1915},"GitLab Services",{"href":1521,"dataGaName":1522,"dataGaLocation":1735},{"text":1524,"config":1917},{"href":1526,"dataGaName":1527,"dataGaLocation":1735},{"text":1529,"config":1919},{"href":1531,"dataGaName":1532,"dataGaLocation":1735},{"text":1534,"config":1921},{"href":1536,"dataGaName":1537,"dataGaLocation":1735},{"text":1539,"config":1923},{"href":1541,"dataGaName":1542,"dataGaLocation":1735},{"title":1925,"links":1926},"Unternehmen",[1927,1929,1931,1933,1935,1937,1939,1944,1949,1951,1953,1955],{"text":1563,"config":1928},{"href":1565,"dataGaName":1557,"dataGaLocation":1735},{"text":1568,"config":1930},{"href":1570,"dataGaName":1571,"dataGaLocation":1735},{"text":1576,"config":1932},{"href":1578,"dataGaName":1579,"dataGaLocation":1735},{"text":1581,"config":1934},{"href":1583,"dataGaName":1584,"dataGaLocation":1735},{"text":1586,"config":1936},{"href":1588,"dataGaName":1589,"dataGaLocation":1735},{"text":1591,"config":1938},{"href":1593,"dataGaName":1594,"dataGaLocation":1735},{"text":1940,"config":1941},"Nachhaltigkeit",{"href":1942,"dataGaName":1943,"dataGaLocation":1735},"/sustainability/","Sustainability",{"text":1945,"config":1946},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1947,"dataGaName":1948,"dataGaLocation":1735},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1596,"config":1950},{"href":1598,"dataGaName":1599,"dataGaLocation":1735},{"text":1606,"config":1952},{"href":1608,"dataGaName":1609,"dataGaLocation":1735},{"text":1611,"config":1954},{"href":1613,"dataGaName":1614,"dataGaLocation":1735},{"text":1956,"config":1957},"Transparenzerklärung zu moderner Sklaverei",{"href":1958,"dataGaName":1959,"dataGaLocation":1735},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1961},[1962,1964,1967],{"text":1783,"config":1963},{"href":1785,"dataGaName":1786,"dataGaLocation":1735},{"text":1965,"config":1966},"Cookies",{"dataGaName":1795,"dataGaLocation":1735,"id":1796,"isOneTrustButton":185},{"text":1788,"config":1968},{"href":1790,"dataGaName":1791,"dataGaLocation":1735},[1970],{"id":1971,"title":7,"body":1275,"config":1972,"content":1974,"description":1275,"extension":1978,"meta":1979,"navigation":185,"path":1980,"seo":1981,"stem":1982,"__hash__":1983},"blogAuthors/en-us/blog/authors/michael-friedrich.yml",{"template":1973},"BlogAuthor",{"name":7,"config":1975},{"headshot":1976,"ctfId":1977},"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":1986},[1987,2001,2012,2024],{"id":1988,"categories":1989,"header":1991,"text":1992,"button":1993,"image":1998},"ai-modernization",[1990],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":1994,"config":1995},"Ermittle deinen KI-Reifegrad",{"href":1996,"dataGaName":1997,"dataGaLocation":1505},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":1999},{"src":2000},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2002,"categories":2003,"header":2004,"text":1992,"button":2005,"image":2009},"devops-modernization",[1286,1834],"Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":2006,"config":2007},"Ermittle deinen DevOps-Reifegrad",{"href":2008,"dataGaName":1997,"dataGaLocation":1505},"/de-de/assessments/devops-modernization-assessment/",{"config":2010},{"src":2011},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2013,"categories":2014,"header":2016,"text":1992,"button":2017,"image":2021},"security-modernization",[2015],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":2018,"config":2019},"Ermittle deinen Sicherheitsreifegrad",{"href":2020,"dataGaName":1997,"dataGaLocation":1505},"/de-de/assessments/security-modernization-assessment/",{"config":2022},{"src":2023},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2025,"paths":2026,"header":2029,"text":2030,"button":2031,"image":2036},"github-azure-migration",[2027,2028],"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":2032,"config":2033},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":2034,"dataGaName":2035,"dataGaLocation":1505},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2037},{"src":2011},{"header":2039,"blurb":2040,"button":2041,"secondaryButton":2046},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":2042,"config":2043},"Kostenlosen Test starten",{"href":2044,"dataGaName":1302,"dataGaLocation":2045},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1304,"config":2047},{"href":1306,"dataGaName":1307,"dataGaLocation":2045},1779733682596]