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