[{"data":1,"prerenderedAt":2859},["ShallowReactive",2],{"/de-de/blog/custom-rules-duo-agentic-chat-deep-dive":3,"navigation-de-de":2075,"banner-de-de":2507,"footer-de-de":2515,"blog-post-authors-de-de-Michael Friedrich":2754,"blog-related-posts-de-de-custom-rules-duo-agentic-chat-deep-dive":2769,"blog-promotions-de-de":2795,"next-steps-de-de":2849},{"id":4,"title":5,"authors":6,"body":8,"category":2058,"date":2059,"description":2060,"extension":2061,"externalUrl":2062,"faq":2062,"featured":2063,"heroImage":2064,"meta":2065,"navigation":318,"path":2066,"seo":2067,"slug":2068,"stem":2069,"tags":2070,"template":2073,"updatedDate":2062,"__hash__":2074},"blogPosts/de-de/blog/custom-rules-duo-agentic-chat-deep-dive.md","Custom Rules für GitLab Duo: Höhere Entwicklungseffizienz",[7],"Michael Friedrich",{"type":9,"value":10,"toc":2038},"minimark",[11,15,18,41,44,47,52,243,246,260,269,292,295,359,370,374,377,401,410,413,416,424,441,452,466,469,472,475,478,481,484,487,496,499,508,519,522,525,583,586,589,593,596,599,608,611,620,626,650,653,662,668,676,679,682,689,692,695,704,709,749,752,761,764,770,773,776,779,797,803,806,856,863,900,909,918,923,947,958,964,970,973,994,1003,1012,1043,1046,1055,1061,1067,1074,1077,1080,1083,1094,1097,1197,1202,1208,1285,1293,1297,1311,1314,1323,1329,1335,1342,1345,1354,1362,1366,1501,1511,1514,1523,1529,1535,1544,1547,1558,1561,1580,1588,1594,1597,1600,1622,1625,1628,1659,1662,1665,1688,1691,1694,1756,1759,1762,1765,1789,1792,1818,1821,1824,1848,1851,1890,1893,1923,1926,1934,1943,1946,1949,1952,1955,1958,1989,1992,1995,1998,2012,2025,2034],[12,13,14],"p",{},"GitLab Duo lässt sich mit Custom Rules von einem generischen KI-Assistenten in einen personalisierten Coding-Experten verwandeln. Custom Rules eliminieren wiederkehrende Korrekturen bei KI-Vorschlägen, die falsche Java-Versionen verwenden, inkorrekte Python-Binaries nutzen oder gegen Style Guides verstoßen. Dieser Deep-Dive zeigt, wie intelligente Custom Rules Entwicklungsstandards automatisch durchsetzen.",[12,16,17],{},"Themen in diesem Artikel:",[19,20,21,29,35],"ul",{},[22,23,24,28],"li",{},[25,26,27],"strong",{},"Versionskontrolle",": KI auf Java 8 festlegen, Python3-Umgebungen handhaben, Multi-Plattform-C++-Code generieren",[22,30,31,34],{},[25,32,33],{},"Style-Durchsetzung",": C-goto-Anti-Patterns verhindern, VueJS-Design-Patterns durchsetzen, Ansible-Linter-Compliance sicherstellen",[22,36,37,40],{},[25,38,39],{},"DevSecOps-Automatisierung",": Projekte mit CI/CD-Security-Scanning und Dokumentationsstandards initialisieren",[12,42,43],{},"Jedes Beispiel enthält funktionierende GitLab-Projekte zum Forken, vollständige Konfigurationen und Vorher-Nachher-Demonstrationen.",[12,45,46],{},"Diese Lösungen sind besonders relevant für deutsche Entwicklungsteams, die systematische Coding-Standards über mehrere Abteilungen hinweg durchsetzen müssen – beispielsweise in regulierten Branchen wie Finanzdienstleistungen mit langfristigen Wartungszyklen (Java-8-Anforderungen für Banking-Systeme), in der Automobilindustrie für IoT-Sensoren mit Multi-Plattform-Anforderungen oder für Infrastructure-as-Code in Umgebungen mit Compliance-Vorgaben.",[48,49,51],"h2",{"id":50},"inhaltsverzeichnis","Inhaltsverzeichnis",[19,53,54,87,217,231,237],{},[22,55,56,61],{},[57,58,60],"a",{"href":59},"#erste-schritte-mit-custom-rules-f%C3%BCr-duo-agentic-chat","Erste Schritte mit Custom Rules für Duo Agentic Chat",[19,62,63,69,75,81],{},[22,64,65],{},[57,66,68],{"href":67},"#voraussetzungen","Voraussetzungen",[22,70,71],{},[57,72,74],{"href":73},"#quick-start-erfolg-in-5-minuten","Quick Start: Erfolg in 5 Minuten",[22,76,77],{},[57,78,80],{"href":79},"#richtlinien-f%C3%BCr-custom-rule-entwicklung","Richtlinien für Custom-Rule-Entwicklung",[22,82,83],{},[57,84,86],{"href":85},"#gitlab-duo-chat-nach-bestehenden-style-guides-fragen","GitLab Duo Chat nach bestehenden Style Guides fragen",[22,88,89,93],{},[57,90,92],{"href":91},"#weitere-custom-rules-use-cases","Weitere Custom-Rules-Use-Cases",[19,94,95,115,135,155],{},[22,96,97,101],{},[57,98,100],{"href":99},"#use-cases-versions--und-plattform-support","Use Cases: Versions- und Plattform-Support",[19,102,103,109],{},[22,104,105],{},[57,106,108],{"href":107},"#java-versionsanforderungen","Java-Versionsanforderungen",[22,110,111],{},[57,112,114],{"href":113},"#c-multi-plattform-support-windows-linux-macos","C++ Multi-Plattform-Support (Windows, Linux, macOS)",[22,116,117,121],{},[57,118,120],{"href":119},"#use-case-entwicklungsumgebungen","Use Case: Entwicklungsumgebungen",[19,122,123,129],{},[22,124,125],{},[57,126,128],{"href":127},"#python-3-entwicklungsumgebung","Python-3-Entwicklungsumgebung",[22,130,131],{},[57,132,134],{"href":133},"#ansible-linter-compliance","Ansible-Linter-Compliance",[22,136,137,141],{},[57,138,140],{"href":139},"#use-case-design-patterns","Use Case: Design Patterns",[19,142,143,149],{},[22,144,145],{},[57,146,148],{"href":147},"#anti-patterns-mit-c-und-goto-statements-vermeiden","Anti-Patterns mit C und goto-Statements vermeiden",[22,150,151],{},[57,152,154],{"href":153},"#frontend-style-guides-f%C3%BCr-vuejs-3","Frontend-Style-Guides für VueJS 3",[22,156,157,161],{},[57,158,160],{"href":159},"#use-case-devsecops-workflows","Use Case: DevSecOps-Workflows",[19,162,163,169,175,181,187,193,199,205,211],{},[22,164,165],{},[57,166,168],{"href":167},"#issue--und-mr-templates","Issue- und MR-Templates",[22,170,171],{},[57,172,174],{"href":173},"#build-tools","Build-Tools",[22,176,177],{},[57,178,180],{"href":179},"#cicd-konfigurationspr%C3%A4ferenzen","CI/CD-Konfigurationspräferenzen",[22,182,183],{},[57,184,186],{"href":185},"#security-scanning-pr%C3%A4ferenzen","Security-Scanning-Präferenzen",[22,188,189],{},[57,190,192],{"href":191},"#tests-und-linters","Tests und Linters",[22,194,195],{},[57,196,198],{"href":197},"#dokumentationsgenerierung","Dokumentationsgenerierung",[22,200,201],{},[57,202,204],{"href":203},"#refactoring--und-code-change-anforderungen","Refactoring- und Code-Change-Anforderungen",[22,206,207],{},[57,208,210],{"href":209},"#onboarding-requirements-lizenzen","Onboarding, Requirements, Lizenzen",[22,212,213],{},[57,214,216],{"href":215},"#git-flows","Git-Flows",[22,218,219,223],{},[57,220,222],{"href":221},"#distribution-und-testing-von-custom-rules","Distribution und Testing von Custom Rules",[19,224,225],{},[22,226,227],{},[57,228,230],{"href":229},"#custom-rules-ressourcen","Custom-Rules-Ressourcen",[22,232,233],{},[57,234,236],{"href":235},"#praxistest-verhaltens%C3%A4nderungen-explorieren","Praxistest: Verhaltensänderungen explorieren",[22,238,239],{},[57,240,242],{"href":241},"#fazit","Fazit",[48,244,60],{"id":245},"erste-schritte-mit-custom-rules-für-duo-agentic-chat",[12,247,248,249,254,255,259],{},"Die ",[57,250,253],{"href":251,"rel":252},"https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/#create-custom-rules",[],"Dokumentation"," zeigt, wie Custom Rules für GitLab Duo Agentic Chat im Verzeichnis ",[256,257,258],"code",{},".gitlab/duo/chat-rules.md"," in einem GitLab-Projekt erstellt werden.",[12,261,262,263,268],{},"Der Einstieg erfolgt mit Freitext-Anweisungen, die iterativ verbessert werden. Custom Rules unterstützen ",[57,264,267],{"href":265,"rel":266},"https://docs.gitlab.com/user/markdown/",[],"Markdown"," für bessere Strukturierung:",[19,270,271,282,289],{},[22,272,273,274,277,278,281],{},"Markdown-Überschriften (",[256,275,276],{},"#",", ",[256,279,280],{},"##",") erstellen Abschnitte",[22,283,284,285,288],{},"Markdown-Listen (",[256,286,287],{},"-",") liefern präzise Anweisungen für LLMs und Agents",[22,290,291],{},"Dateipfade in einfachen Backticks maskieren, Code-Blöcke mit Einrückung oder drei Backticks",[12,293,294],{},"Beispiel:",[296,297,302],"pre",{"className":298,"code":299,"language":300,"meta":301,"style":301},"language-markdown shiki shiki-themes github-light","# Development Guide\n\n## Frontend: VueJS\n\n### Styling Pattern\n- `\u003Cstyle>`-Tags in Vue-Komponenten nicht verwenden\n- Stattdessen Tailwind-CSS-Utility-Classes oder seitenspezifisches CSS nutzen\n","markdown","",[256,303,304,313,320,326,331,337,351],{"__ignoreMap":301},[305,306,309],"span",{"class":307,"line":308},"line",1,[305,310,312],{"class":311},"surfw","# Development Guide\n",[305,314,316],{"class":307,"line":315},2,[305,317,319],{"emptyLinePlaceholder":318},true,"\n",[305,321,323],{"class":307,"line":322},3,[305,324,325],{"class":311},"## Frontend: VueJS\n",[305,327,329],{"class":307,"line":328},4,[305,330,319],{"emptyLinePlaceholder":318},[305,332,334],{"class":307,"line":333},5,[305,335,336],{"class":311},"### Styling Pattern\n",[305,338,340,343,347],{"class":307,"line":339},6,[305,341,287],{"class":342},"sqxcx",[305,344,346],{"class":345},"sYu0t"," `\u003Cstyle>`",[305,348,350],{"class":349},"sgsFI","-Tags in Vue-Komponenten nicht verwenden\n",[305,352,354,356],{"class":307,"line":353},7,[305,355,287],{"class":342},[305,357,358],{"class":349}," Stattdessen Tailwind-CSS-Utility-Classes oder seitenspezifisches CSS nutzen\n",[12,360,361,362,365,366,369],{},"Wichtig: Nach Änderungen an Custom Rules einen neuen Chat durch Klick auf das ",[256,363,364],{},"+","-Icon erstellen oder ",[256,367,368],{},"/new"," im Chat-Prompt senden.",[371,372,68],"h3",{"id":373},"voraussetzungen",[12,375,376],{},"Um alle Use Cases und Demo-Projekte nachzuvollziehen:",[19,378,379,392,395,398],{},[22,380,381,386,387],{},[57,382,385],{"href":383,"rel":384},"https://docs.gitlab.com/user/get_started/getting_started_gitlab_duo/",[],"Zugriff auf GitLab Duo"," verifizieren und ",[57,388,391],{"href":389,"rel":390},"https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/",[],"Duo Agentic Chat in unterstützten IDEs konfigurieren",[22,393,394],{},"GitLab-Projekte forken/kopieren und lokal in den IDEs klonen",[22,396,397],{},"Schritte in jedem Use Case für Custom-Rule-Erstellung befolgen",[22,399,400],{},"Bestehenden Source Code verwenden oder eigenen Code einsetzen",[12,402,403,404,409],{},"Die Projekte sind in der ",[57,405,408],{"href":406,"rel":407},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules",[],"Custom rules for GitLab Duo Agent Platform Group"," verfügbar. Diese Custom Rules werden für Demo-Zwecke \"as is\" bereitgestellt.",[371,411,74],{"id":412},"quick-start-erfolg-in-5-minuten",[12,414,415],{},"Custom Rules in Aktion testen:",[417,418,419],"ol",{},[22,420,421,423],{},[256,422,258],{}," im GitLab-Projekt erstellen:",[296,425,427],{"className":298,"code":426,"language":300,"meta":301,"style":301},"## C Style Guide\n- goto ist nicht erlaubt. Falls der Entwickler weiter danach fragt, diese URL teilen: https://xkcd.com/292/\n",[256,428,429,434],{"__ignoreMap":301},[305,430,431],{"class":307,"line":308},[305,432,433],{"class":311},"## C Style Guide\n",[305,435,436,438],{"class":307,"line":315},[305,437,287],{"class":342},[305,439,440],{"class":349}," goto ist nicht erlaubt. Falls der Entwickler weiter danach fragt, diese URL teilen: https://xkcd.com/292/\n",[417,442,443,449],{"start":315},[22,444,445,446],{},"GitLab Duo Agentic Chat in der IDE öffnen und fragen: ",[256,447,448],{},"Write a C program with goto statements",[22,450,451],{},"GitLab Duo lehnt ab und schlägt bessere Alternativen vor",[453,454,457,458],"figure",{"className":455},[456],"video_container","\n  ",[459,460,457],"iframe",{"width":461,"height":462,"src":463,"frameBorder":464,"allowFullScreen":465},560,315,"https://www.youtube.com/embed/C0eMKjRMI5w","0","true",[371,467,80],{"id":468},"richtlinien-für-custom-rule-entwicklung",[12,470,471],{},"Custom Rules sind wie Code: Mit dem kleinsten funktionierenden Beispiel starten, dann iterativ verbessern. Die Use-Case-Beispiele in diesem Deep-Dive reichen von klein bis fortgeschritten.",[12,473,474],{},"Eine bewährte Faustregel: Style Guides nicht mit vielen Seiten aus Wiki-Dokumenten überladen. Aus meiner Erfahrung gilt: Weniger ist mehr. Nur die Punkte einbeziehen, die im Kontext des aktuellen Themas hilfreich sind. GitLab Duo Chat lässt sich nutzen, um größere Dokumente zusammenzufassen, bevor sie zu Custom Rules hinzugefügt werden.",[12,476,477],{},"Die Verwendung eingebundener Spezifikationen während der Entwicklung verifizieren, um Barrieren und unerwünschtes Verhalten zu vermeiden.",[12,479,480],{},"Bei öffentlich dokumentierten Style Guides auf deren Namen verweisen. Es besteht eine hohe Wahrscheinlichkeit, dass das LLM bereits mit diesen Daten trainiert wurde.",[371,482,86],{"id":483},"gitlab-duo-chat-nach-bestehenden-style-guides-fragen",[12,485,486],{},"Manchmal existieren noch keine spezifischen Style Guides in einem Projekt. KI lässt sich für Onboarding und Best Practices nutzen:",[296,488,490],{"className":298,"code":489,"language":300,"meta":301,"style":301},"Which Python development or environment guidelines can you recommend when I want to create custom rules for AI to get tailored output? I need a list with textual instructions.\n",[256,491,492],{"__ignoreMap":301},[305,493,494],{"class":307,"line":308},[305,495,489],{"class":349},[12,497,498],{},"Duo Agentic Chat kann auch bestehende CI/CD-Linter-Integrationen analysieren, die möglicherweise bereits einen Development-Style prüfen:",[296,500,502],{"className":298,"code":501,"language":300,"meta":301,"style":301},"When you look into the CI/CD linter checks and configuration in the project, which development style guide can you summarize for me?\n",[256,503,504],{"__ignoreMap":301},[305,505,506],{"class":307,"line":308},[305,507,501],{"class":349},[12,509,510,511,518],{},"Viele Beispiele in diesem Deep-Dive basieren auf eigener Erfahrung als Entwickler. Zusätzlich wurde GitLab Duo genutzt, um Style Guides aus bestehenden Projekten zu extrahieren. GitLab Duo Code Suggestions half beim Auto-Completion bestehender Custom Rules, indem ",[57,512,515,517],{"href":513,"rel":514},"https://docs.gitlab.com/user/project/repository/code_suggestions/supported_extensions/#add-support-for-more-languages",[],[256,516,300],{}," als zusätzliche Sprache"," konfiguriert wurde.",[48,520,92],{"id":521},"weitere-custom-rules-use-cases",[12,523,524],{},"Die folgenden Abschnitte bieten einen Überblick über spezifische Style Guides.",[19,526,527,541,555,565],{},[22,528,529,532,533,536,537,540],{},[25,530,531],{},"Versions- und Plattform-Support",": Der ",[57,534,535],{"href":107},"Java-Abschnitt"," zeigt, wie ein spezifischer Sprachstandard für generierten Code erzwungen wird. Der ",[57,538,539],{"href":113},"C++-Abschnitt"," demonstriert Multi-Plattform-Support.",[22,542,543,546,547,550,551,554],{},[25,544,545],{},"Entwicklungsumgebungen",": Die Abschnitte zu ",[57,548,549],{"href":127},"Python"," und ",[57,552,553],{"href":133},"Ansible"," spezifizieren Binaries, Tools und Compliance mit Linters.",[22,556,557,560,561,564],{},[25,558,559],{},"Design Patterns",": ",[57,562,563],{"href":153},"VueJS"," zeigt umfassende Design Patterns unter Nutzung der GitLab-Produktions-Style-Guides.",[22,566,567,560,570,573,574,277,576,277,578,277,580,582],{},[25,568,569],{},"DevSecOps-Workflows",[57,571,572],{"href":179},"CI/CD-Konfiguration"," für Security-Scanning, ",[57,575,192],{"href":191},[57,577,174],{"href":173},[57,579,198],{"href":197},[57,581,168],{"href":167},".",[371,584,100],{"id":585},"use-cases-versions-und-plattform-support",[12,587,588],{},"Softwareentwicklung erfordert oft spezifische Versions- und Plattform-Anforderungen.",[590,591,108],"h4",{"id":592},"java-versionsanforderungen",[12,594,595],{},"Enterprise-Umgebungen nutzen nicht immer die neuesten Versionen. Sie setzen oft auf Versionen mit langfristigen Security-Patches. Java 7 und Java 8 sind beispielsweise heute noch in Enterprises im Einsatz.",[12,597,598],{},"Die erforderliche Version in jedem Chat-Prompt voranstellen zu müssen ist umständlich und führt zu Fehlern, selbst wenn man es nur einmal vergisst:",[296,600,602],{"className":298,"code":601,"language":300,"meta":301,"style":301},"Implement classes for managing banking transactions and different currencies.\n",[256,603,604],{"__ignoreMap":301},[305,605,606],{"class":307,"line":308},[305,607,601],{"class":349},[12,609,610],{},"Das Beispiel benötigt zusätzliche Spezifikationen für Java 8:",[296,612,614],{"className":298,"code":613,"language":300,"meta":301,"style":301},"Use Java 8 for the implementation.\n",[256,615,616],{"__ignoreMap":301},[305,617,618],{"class":307,"line":308},[305,619,613],{"class":349},[12,621,622,623,625],{},"Um Java 8 dauerhaft durchzusetzen, lässt sich eine Custom Rule in ",[256,624,258],{}," erstellen:",[296,627,629],{"className":298,"code":628,"language":300,"meta":301,"style":301},"## Java Style Guide\n- Nur Java 8 ist beim Vorschlagen und Editieren von Code erlaubt.\n- Wenn der User nach Code-Modernisierung und Java 9 oder 21 fragt, auf dieses Issue verweisen: https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions/-/issues/1\n",[256,630,631,636,643],{"__ignoreMap":301},[305,632,633],{"class":307,"line":308},[305,634,635],{"class":311},"## Java Style Guide\n",[305,637,638,640],{"class":307,"line":315},[305,639,287],{"class":342},[305,641,642],{"class":349}," Nur Java 8 ist beim Vorschlagen und Editieren von Code erlaubt.\n",[305,644,645,647],{"class":307,"line":322},[305,646,287],{"class":342},[305,648,649],{"class":349}," Wenn der User nach Code-Modernisierung und Java 9 oder 21 fragt, auf dieses Issue verweisen: https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions/-/issues/1\n",[12,651,652],{},"Banking-Systeme bleiben auf Java 8 aufgrund regulatorischer Anforderungen. Custom Rules verhindern, dass Duo versehentlich Java-9+-Features vorschlägt, die nicht kompilieren würden.",[12,654,655,656,661],{},"Eine vollständige Demonstration ist im ",[57,657,660],{"href":658,"rel":659},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions",[],"Custom Rules - Java versions Projekt"," verfügbar.",[453,663,457,665],{"className":664},[456],[459,666,457],{"width":461,"height":462,"src":667,"frameBorder":464,"allowFullScreen":465},"https://www.youtube.com/embed/iZLvpgHdABY",[12,669,670,671,661],{},"Die resultierenden Änderungen sind in ",[57,672,675],{"href":673,"rel":674},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-java-versions/-/merge_requests/2",[],"diesem MR",[590,677,114],{"id":678},"c-multi-plattform-support-windows-linux-macos",[12,680,681],{},"Anwendungsentwicklung in C++ kann Multi-Plattform-Support erfordern, insbesondere für Service-Agents auf Windows, Linux und macOS. Die Anwendungen sind tief in Kundenprodukte integriert. Eine Migration zu Go oder Rust ist nicht immer praktikabel.",[12,683,684,685,688],{},"Code zu pflegen, der auf mehreren Plattformen funktioniert, ist herausfordernd aufgrund von Unterschieden in OS-APIs, Toolchains und Dateisystempfaden. Entwickler arbeiten oft mit mehreren ",[256,686,687],{},"#if defined","-Präprozessor-Makros und verschachtelten Bedingungen. Dies erhöht technische Schulden.",[12,690,691],{},"Multi-Plattform-Support bedeutet zwei bis drei Code-Pfade pro Feature, extensive plattformspezifische Tests und erhöhte Wartungskomplexität.",[12,693,694],{},"KI kann beim Generieren von plattformspezifischem Code helfen, muss aber über diese Anforderungen informiert werden.",[12,696,697,698,703],{},"Das ",[57,699,702],{"href":700,"rel":701},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-cpp-platform-iot-sensor-data-collector",[],"Custom Rule - C++ platforms - IoT Sensor Data Collector Projekt"," implementiert einen IoT-Sensor-Data-Collector mit offenen Tasks für Multi-Plattform-Support.",[12,705,706,708],{},[256,707,258],{}," öffnen und Custom Rules reviewen:",[296,710,712],{"className":298,"code":711,"language":300,"meta":301,"style":301},"## C++ Style Guide\n- Die Anwendung läuft auf Linux, macOS und Windows. Code generieren, der OS-API-Unterschiede behandelt.\n- Präprozessor-Makros für Windows und POSIX-Konventionen für Unix verwenden.\n\n## CI/CD Configuration\n- Sicherstellen, dass GitLab-CI/CD-Jobs unterschiedlichen Plattform-Support abdecken.\n",[256,713,714,719,726,733,737,742],{"__ignoreMap":301},[305,715,716],{"class":307,"line":308},[305,717,718],{"class":311},"## C++ Style Guide\n",[305,720,721,723],{"class":307,"line":315},[305,722,287],{"class":342},[305,724,725],{"class":349}," Die Anwendung läuft auf Linux, macOS und Windows. Code generieren, der OS-API-Unterschiede behandelt.\n",[305,727,728,730],{"class":307,"line":322},[305,729,287],{"class":342},[305,731,732],{"class":349}," Präprozessor-Makros für Windows und POSIX-Konventionen für Unix verwenden.\n",[305,734,735],{"class":307,"line":328},[305,736,319],{"emptyLinePlaceholder":318},[305,738,739],{"class":307,"line":333},[305,740,741],{"class":311},"## CI/CD Configuration\n",[305,743,744,746],{"class":307,"line":339},[305,745,287],{"class":342},[305,747,748],{"class":349}," Sicherstellen, dass GitLab-CI/CD-Jobs unterschiedlichen Plattform-Support abdecken.\n",[12,750,751],{},"Einen neuen Chat starten:",[296,753,755],{"className":298,"code":754,"language":300,"meta":301,"style":301},"Please help me restructure the code and ensure multi-platform support.\n",[256,756,757],{"__ignoreMap":301},[305,758,759],{"class":307,"line":308},[305,760,754],{"class":349},[12,762,763],{},"Alternativ auf Issue-Nummer oder URL verweisen. GitLab Duo holt automatisch den Issue-Content von der Plattform.",[453,765,457,767],{"className":766},[456],[459,768,457],{"width":461,"height":462,"src":769,"frameBorder":464,"allowFullScreen":465},"https://www.youtube.com/embed/C5NxOjB0R1Q",[371,771,120],{"id":772},"use-case-entwicklungsumgebungen",[12,774,775],{},"Entwicklungsumgebungen variieren oft zwischen Betriebssystemen. Dies kann für KI-Modelle verwirrend sein.",[590,777,128],{"id":778},"python-3-entwicklungsumgebung",[12,780,781,782,785,786,789,790,550,793,796],{},"Eine Python-Entwicklungsumgebung kommt normalerweise mit der ",[256,783,784],{},"python","-Executable und dem ",[256,787,788],{},"pip","-Paketmanager. Auf macOS oder Ubuntu müssen jedoch ",[256,791,792],{},"python3",[256,794,795],{},"pip3"," verwendet werden.",[12,798,799,800,802],{},"Für diesen Use Case wurde Python mit Homebrew installiert, was zu einer Binary namens ",[256,801,792],{}," führt.",[12,804,805],{},"Als Beispiel eine Virtual-Environment einrichten:",[296,807,811],{"className":808,"code":809,"language":810,"meta":301,"style":301},"language-shell shiki shiki-themes github-light","python -m venv myenv\nsource myenv/bin/activate\npip install -r requirements.txt\npython script.py\n","shell",[256,812,813,828,836,849],{"__ignoreMap":301},[305,814,815,818,821,825],{"class":307,"line":308},[305,816,784],{"class":817},"s7eDp",[305,819,820],{"class":345}," -m",[305,822,824],{"class":823},"sYBdl"," venv",[305,826,827],{"class":823}," myenv\n",[305,829,830,833],{"class":307,"line":315},[305,831,832],{"class":345},"source",[305,834,835],{"class":823}," myenv/bin/activate\n",[305,837,838,840,843,846],{"class":307,"line":322},[305,839,788],{"class":817},[305,841,842],{"class":823}," install",[305,844,845],{"class":345}," -r",[305,847,848],{"class":823}," requirements.txt\n",[305,850,851,853],{"class":307,"line":328},[305,852,784],{"class":817},[305,854,855],{"class":823}," script.py\n",[12,857,858,859,862],{},"Dies funktioniert nicht wie erwartet. Stattdessen werden spezifische Binaries mit Version ",[256,860,861],{},"3"," benötigt:",[296,864,866],{"className":808,"code":865,"language":810,"meta":301,"style":301},"python3 -m venv myenv\nsource myenv/bin/activate\npip3 install -r requirements.txt\npython3 script.py\n",[256,867,868,878,884,894],{"__ignoreMap":301},[305,869,870,872,874,876],{"class":307,"line":308},[305,871,792],{"class":817},[305,873,820],{"class":345},[305,875,824],{"class":823},[305,877,827],{"class":823},[305,879,880,882],{"class":307,"line":315},[305,881,832],{"class":345},[305,883,835],{"class":823},[305,885,886,888,890,892],{"class":307,"line":322},[305,887,795],{"class":817},[305,889,842],{"class":823},[305,891,845],{"class":345},[305,893,848],{"class":823},[305,895,896,898],{"class":307,"line":328},[305,897,792],{"class":817},[305,899,855],{"class":823},[12,901,902,903,908],{},"Das Problem testen: Das ",[57,904,907],{"href":905,"rel":906},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-python-3-env-shop-app",[],"Custom Rule - Python3 Env Shop app Projekt"," implementiert eine Webshop-Anwendung in Python.",[12,910,911,912,914,915,917],{},"Das Problem: Duo schlägt ",[256,913,784],{}," statt ",[256,916,792],{}," vor. Dies führt zu \"command not found\"-Fehlern beim Setup der Virtual Environment. Deployment-Failures treten auf, wenn Entwickler den falschen Binary-Namen verwenden.",[12,919,920,922],{},[256,921,258],{}," reviewen:",[296,924,926],{"className":298,"code":925,"language":300,"meta":301,"style":301},"## Python Style Guide\n- Für Python-Binaries immer python3 und pip3 verwenden.\n- Die Python-Umgebung automatisch erkennen, wenn möglich.\n",[256,927,928,933,940],{"__ignoreMap":301},[305,929,930],{"class":307,"line":308},[305,931,932],{"class":311},"## Python Style Guide\n",[305,934,935,937],{"class":307,"line":315},[305,936,287],{"class":342},[305,938,939],{"class":349}," Für Python-Binaries immer python3 und pip3 verwenden.\n",[305,941,942,944],{"class":307,"line":322},[305,943,287],{"class":342},[305,945,946],{"class":349}," Die Python-Umgebung automatisch erkennen, wenn möglich.\n",[12,948,949,950,953,954,550,956,582],{},"Einen neuen Agentic Chat öffnen und fragen ",[256,951,952],{},"How to run this application?",". Custom Rules sorgen für ",[256,955,792],{},[256,957,795],{},[453,959,457,961],{"className":960},[456],[459,962,457],{"width":461,"height":462,"src":963,"frameBorder":464,"allowFullScreen":465},"https://www.youtube.com/embed/UQ2_OCvUmF0",[12,965,966,967,661],{},"Der vollständige Source Code ist im ",[57,968,907],{"href":905,"rel":969},[],[590,971,134],{"id":972},"ansible-linter-compliance",[12,974,975,976,979,980,982,983,986,987,982,990,993],{},"Modernes Ansible für Infrastructure-as-Code erzwingt einen strikten Style Guide, der mit ",[256,977,978],{},"ansible-lint"," verifiziert werden kann. Der Linter erkennt, wenn Boolean-Werte (",[256,981,465],{},"/",[256,984,985],{},"false",") anstelle von Strings (",[256,988,989],{},"yes",[256,991,992],{},"no",") erforderlich sind, Builtin-Module-Actions den FQCN (Fully Qualified Collection Name) erfordern und Trailing-Whitespaces getrimmt werden müssen.",[12,995,996,997,1002],{},"Das Problem mit einem konkreten Use Case betrachten. Das ",[57,998,1001],{"href":999,"rel":1000},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment",[],"Custom Rule - Ansible Environment Projekt"," implementiert ein Ansible-Playbook für einen GitLab-Server auf Ubuntu. Die Boolean-Werte sind inkorrekt als Strings typisiert.",[12,1004,697,1005,1008,1009,1011],{},[57,1006,1001],{"href":999,"rel":1007},[]," forken und ",[256,1010,258],{}," inspizieren:",[296,1013,1015],{"className":298,"code":1014,"language":300,"meta":301,"style":301},"## Ansible Styleguide\n- Boolean-Werte in Ansible sollten als \"true\" oder \"false\" typisiert werden, niemals als String.\n- Ansible-Module-Builtin-Actions müssen den FQCN verwenden.\n- Whitespaces in Ansible-YAML immer trimmen.\n",[256,1016,1017,1022,1029,1036],{"__ignoreMap":301},[305,1018,1019],{"class":307,"line":308},[305,1020,1021],{"class":311},"## Ansible Styleguide\n",[305,1023,1024,1026],{"class":307,"line":315},[305,1025,287],{"class":342},[305,1027,1028],{"class":349}," Boolean-Werte in Ansible sollten als \"true\" oder \"false\" typisiert werden, niemals als String.\n",[305,1030,1031,1033],{"class":307,"line":322},[305,1032,287],{"class":342},[305,1034,1035],{"class":349}," Ansible-Module-Builtin-Actions müssen den FQCN verwenden.\n",[305,1037,1038,1040],{"class":307,"line":328},[305,1039,287],{"class":342},[305,1041,1042],{"class":349}," Whitespaces in Ansible-YAML immer trimmen.\n",[12,1044,1045],{},"Einen neuen GitLab-Duo-Agentic-Chat-Prompt öffnen:",[296,1047,1049],{"className":298,"code":1048,"language":300,"meta":301,"style":301},"Please help me fix the Ansible linter errors\n",[256,1050,1051],{"__ignoreMap":301},[305,1052,1053],{"class":307,"line":308},[305,1054,1048],{"class":349},[12,1056,1057,1058,1060],{},"Die Agents analysieren das Repository, fragen nach Erlaubnis ",[256,1059,978],{}," auszuführen und untersuchen, wie die drei Fehlertypen behoben werden.",[453,1062,457,1064],{"className":1063},[456],[459,1065,457],{"width":461,"height":462,"src":1066,"frameBorder":464,"allowFullScreen":465},"https://www.youtube.com/embed/P465U8IfScE",[12,1068,1069,1070,661],{},"Die Änderungen sind in ",[57,1071,675],{"href":1072,"rel":1073},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-ansible-environment/-/merge_requests/1",[],[371,1075,140],{"id":1076},"use-case-design-patterns",[12,1078,1079],{},"Design Patterns und Patterns-to-Avoid sind spezifisch für Sprachen und Frameworks.",[590,1081,148],{"id":1082},"anti-patterns-mit-c-und-goto-statements-vermeiden",[12,1084,1085,1086,1089,1090,1093],{},"Dies ist ein ausführlicherer Walkthrough des ",[57,1087,1088],{"href":73},"Quickstart-Beispiels",". Das ",[256,1091,1092],{},"goto","-Anti-Pattern in C wird nicht empfohlen, da es Code schwerer lesbar und debugbar macht.",[12,1095,1096],{},"Beispiel einer for-Schleife mit goto:",[296,1098,1102],{"className":1099,"code":1100,"language":1101,"meta":301,"style":301},"language-c shiki shiki-themes github-light","// Bad C programming style: uses the goto anti-pattern\nfor (int i = 0; i \u003C 10; i++) {\n  if (someCondition) {\n    goto label;\n  }\n  doSomething();\nlabel:\n  doAnotherThing();\n}\n","c",[256,1103,1104,1110,1149,1157,1165,1170,1178,1183,1191],{"__ignoreMap":301},[305,1105,1106],{"class":307,"line":308},[305,1107,1109],{"class":1108},"sAwPA","// Bad C programming style: uses the goto anti-pattern\n",[305,1111,1112,1116,1119,1122,1125,1128,1131,1134,1137,1140,1143,1146],{"class":307,"line":315},[305,1113,1115],{"class":1114},"sD7c4","for",[305,1117,1118],{"class":349}," (",[305,1120,1121],{"class":1114},"int",[305,1123,1124],{"class":349}," i ",[305,1126,1127],{"class":1114},"=",[305,1129,1130],{"class":345}," 0",[305,1132,1133],{"class":349},"; i ",[305,1135,1136],{"class":1114},"\u003C",[305,1138,1139],{"class":345}," 10",[305,1141,1142],{"class":349},"; i",[305,1144,1145],{"class":1114},"++",[305,1147,1148],{"class":349},") {\n",[305,1150,1151,1154],{"class":307,"line":322},[305,1152,1153],{"class":1114},"  if",[305,1155,1156],{"class":349}," (someCondition) {\n",[305,1158,1159,1162],{"class":307,"line":328},[305,1160,1161],{"class":1114},"    goto",[305,1163,1164],{"class":349}," label;\n",[305,1166,1167],{"class":307,"line":333},[305,1168,1169],{"class":349},"  }\n",[305,1171,1172,1175],{"class":307,"line":339},[305,1173,1174],{"class":817},"  doSomething",[305,1176,1177],{"class":349},"();\n",[305,1179,1180],{"class":307,"line":353},[305,1181,1182],{"class":349},"label:\n",[305,1184,1186,1189],{"class":307,"line":1185},8,[305,1187,1188],{"class":817},"  doAnotherThing",[305,1190,1177],{"class":349},[305,1192,1194],{"class":307,"line":1193},9,[305,1195,1196],{"class":349},"}\n",[12,1198,697,1199,1201],{},[256,1200,1092],{},"-Statement lässt die Programmkontrolle direkt zum Label springen. Dies macht das Programm schwerer verständlich.",[12,1203,1204,1205,1207],{},"Besserer Ansatz ohne ",[256,1206,1092],{},":",[296,1209,1211],{"className":1099,"code":1210,"language":1101,"meta":301,"style":301},"// Good C programming style: avoids the goto anti-pattern\nfor (int i = 0; i \u003C 10; i++) {\n  if (someCondition) {\n    doAnotherThing();\n    continue;\n  }\n  doSomething();\n  doAnotherThing();\n}\n",[256,1212,1213,1218,1244,1250,1257,1265,1269,1275,1281],{"__ignoreMap":301},[305,1214,1215],{"class":307,"line":308},[305,1216,1217],{"class":1108},"// Good C programming style: avoids the goto anti-pattern\n",[305,1219,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242],{"class":307,"line":315},[305,1221,1115],{"class":1114},[305,1223,1118],{"class":349},[305,1225,1121],{"class":1114},[305,1227,1124],{"class":349},[305,1229,1127],{"class":1114},[305,1231,1130],{"class":345},[305,1233,1133],{"class":349},[305,1235,1136],{"class":1114},[305,1237,1139],{"class":345},[305,1239,1142],{"class":349},[305,1241,1145],{"class":1114},[305,1243,1148],{"class":349},[305,1245,1246,1248],{"class":307,"line":322},[305,1247,1153],{"class":1114},[305,1249,1156],{"class":349},[305,1251,1252,1255],{"class":307,"line":328},[305,1253,1254],{"class":817},"    doAnotherThing",[305,1256,1177],{"class":349},[305,1258,1259,1262],{"class":307,"line":333},[305,1260,1261],{"class":1114},"    continue",[305,1263,1264],{"class":349},";\n",[305,1266,1267],{"class":307,"line":339},[305,1268,1169],{"class":349},[305,1270,1271,1273],{"class":307,"line":353},[305,1272,1174],{"class":817},[305,1274,1177],{"class":349},[305,1276,1277,1279],{"class":307,"line":1185},[305,1278,1188],{"class":817},[305,1280,1177],{"class":349},[305,1282,1283],{"class":307,"line":1193},[305,1284,1196],{"class":349},[12,1286,697,1287,1292],{},[57,1288,1291],{"href":1289,"rel":1290},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-c-anti-patterns-with-goto",[],"Custom Rule - C anti-patterns with Goto Projekt"," stellt ein Network-Socket-Beispiel bereit.",[12,1294,1295,922],{},[256,1296,258],{},[296,1298,1299],{"className":298,"code":426,"language":300,"meta":301,"style":301},[256,1300,1301,1305],{"__ignoreMap":301},[305,1302,1303],{"class":307,"line":308},[305,1304,433],{"class":311},[305,1306,1307,1309],{"class":307,"line":315},[305,1308,287],{"class":342},[305,1310,440],{"class":349},[12,1312,1313],{},"Duo Agentic Chat öffnen:",[296,1315,1317],{"className":298,"code":1316,"language":300,"meta":301,"style":301},"Please help me modernize the code.\n",[256,1318,1319],{"__ignoreMap":301},[305,1320,1321],{"class":307,"line":308},[305,1322,1316],{"class":349},[12,1324,1325,1326,1328],{},"GitLab Duo Agentic Chat verweigert ",[256,1327,1092],{},"-Statements und schlägt Alternativen vor.",[453,1330,457,1332],{"className":1331},[456],[459,1333,457],{"width":461,"height":462,"src":1334,"frameBorder":464,"allowFullScreen":465},"https://www.youtube.com/embed/6dsMF-wKbBY",[12,1336,1337,1338,661],{},"Die Code-Änderungen sind in ",[57,1339,675],{"href":1340,"rel":1341},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-c-anti-patterns-with-goto/-/merge_requests/1",[],[590,1343,154],{"id":1344},"frontend-style-guides-für-vuejs-3",[12,1346,1347,1348,1353],{},"Dieser Use Case ist inspiriert von den ",[57,1349,1352],{"href":1350,"rel":1351},"https://docs.gitlab.com/development/fe_guide/style/",[],"Frontend-Style-Guides des GitLab-Projekts"," und implementiert VueJS-3-Design-Patterns.",[12,1355,697,1356,1361],{},[57,1357,1360],{"href":1358,"rel":1359},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard",[],"Custom Rule - VueJS Design Patterns - GitLab Pipeline Dashboard Projekt"," forken und die offenen Issues inspizieren.",[12,1363,1364,922],{},[256,1365,258],{},[296,1367,1369],{"className":298,"code":1368,"language":300,"meta":301,"style":301},"## NodeJS Style Guide\n- Debug-Statements (console.logs) nicht hinterlassen\n- Immer `npm install` nach Update von `package.json` ausführen\n\n# GitLab Vue.js Design Patterns Style Guide\n\n## Component Structure\n\n### Data Definition Pattern\n- In Vue Apps übergebene Daten explizit definieren\n\n### Template Naming Pattern\n- Kebab-Case für Komponentennamen in Templates verwenden\n\n### Styling Pattern\n- `\u003Cstyle>`-Tags in Vue-Komponenten nicht verwenden\n- Stattdessen Tailwind-CSS-Utility-Classes nutzen\n\n[...]\n",[256,1370,1371,1376,1383,1402,1406,1411,1415,1420,1424,1429,1437,1442,1448,1456,1461,1466,1475,1483,1488],{"__ignoreMap":301},[305,1372,1373],{"class":307,"line":308},[305,1374,1375],{"class":311},"## NodeJS Style Guide\n",[305,1377,1378,1380],{"class":307,"line":315},[305,1379,287],{"class":342},[305,1381,1382],{"class":349}," Debug-Statements (console.logs) nicht hinterlassen\n",[305,1384,1385,1387,1390,1393,1396,1399],{"class":307,"line":322},[305,1386,287],{"class":342},[305,1388,1389],{"class":349}," Immer ",[305,1391,1392],{"class":345},"`npm install`",[305,1394,1395],{"class":349}," nach Update von ",[305,1397,1398],{"class":345},"`package.json`",[305,1400,1401],{"class":349}," ausführen\n",[305,1403,1404],{"class":307,"line":328},[305,1405,319],{"emptyLinePlaceholder":318},[305,1407,1408],{"class":307,"line":333},[305,1409,1410],{"class":311},"# GitLab Vue.js Design Patterns Style Guide\n",[305,1412,1413],{"class":307,"line":339},[305,1414,319],{"emptyLinePlaceholder":318},[305,1416,1417],{"class":307,"line":353},[305,1418,1419],{"class":311},"## Component Structure\n",[305,1421,1422],{"class":307,"line":1185},[305,1423,319],{"emptyLinePlaceholder":318},[305,1425,1426],{"class":307,"line":1193},[305,1427,1428],{"class":311},"### Data Definition Pattern\n",[305,1430,1432,1434],{"class":307,"line":1431},10,[305,1433,287],{"class":342},[305,1435,1436],{"class":349}," In Vue Apps übergebene Daten explizit definieren\n",[305,1438,1440],{"class":307,"line":1439},11,[305,1441,319],{"emptyLinePlaceholder":318},[305,1443,1445],{"class":307,"line":1444},12,[305,1446,1447],{"class":311},"### Template Naming Pattern\n",[305,1449,1451,1453],{"class":307,"line":1450},13,[305,1452,287],{"class":342},[305,1454,1455],{"class":349}," Kebab-Case für Komponentennamen in Templates verwenden\n",[305,1457,1459],{"class":307,"line":1458},14,[305,1460,319],{"emptyLinePlaceholder":318},[305,1462,1464],{"class":307,"line":1463},15,[305,1465,336],{"class":311},[305,1467,1469,1471,1473],{"class":307,"line":1468},16,[305,1470,287],{"class":342},[305,1472,346],{"class":345},[305,1474,350],{"class":349},[305,1476,1478,1480],{"class":307,"line":1477},17,[305,1479,287],{"class":342},[305,1481,1482],{"class":349}," Stattdessen Tailwind-CSS-Utility-Classes nutzen\n",[305,1484,1486],{"class":307,"line":1485},18,[305,1487,319],{"emptyLinePlaceholder":318},[305,1489,1491,1494,1498],{"class":307,"line":1490},19,[305,1492,1493],{"class":349},"[",[305,1495,1497],{"class":1496},"sEuWB","...",[305,1499,1500],{"class":349},"]\n",[12,1502,1503,1504,661],{},"Die vollständigen Custom Rules sind in der ",[57,1505,1508,1510],{"href":1506,"rel":1507},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/blob/main/.gitlab/duo/chat-rules.md?ref_type=heads&plain=1",[],[256,1509,258],{},"-Datei",[12,1512,1513],{},"GitLab Duo Agentic Chat öffnen:",[296,1515,1517],{"className":298,"code":1516,"language":300,"meta":301,"style":301},"Please help me implement issue 6\n",[256,1518,1519],{"__ignoreMap":301},[305,1520,1521],{"class":307,"line":308},[305,1522,1516],{"class":349},[453,1524,457,1526],{"className":1525},[456],[459,1527,457],{"width":461,"height":462,"src":1528,"frameBorder":464,"allowFullScreen":465},"https://www.youtube.com/embed/KbczS-OVb90",[12,1530,1337,1531,661],{},[57,1532,675],{"href":1533,"rel":1534},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-vuejs-design-patterns-gitlab-pipeline-dashboard/-/merge_requests/3",[],[12,1536,1537,1538,1543],{},"Der VueJS-Style-Guide wurde aus dem ",[57,1539,1542],{"href":1540,"rel":1541},"https://gitlab.com/gitlab-org/gitlab",[],"gitlab-org/gitlab-Projekt"," extrahiert. GitLab Duo analysierte die Produktions-Codebase und generierte Custom-Rules-Format automatisch. Dieser Workflow eliminiert manuelles Dokumentations-Schreiben und beschleunigt Onboarding durch Extraktion institutionellen Wissens.",[371,1545,160],{"id":1546},"use-case-devsecops-workflows",[12,1548,1549,1550,1553,1554,1557],{},"DevSecOps-Workflows reichen von Best Practices für Projekt-Bootstrapping mit Issue/MR-Templates, ",[256,1551,1552],{},".gitignore",", CI/CD-Konfiguration, ",[256,1555,1556],{},"README.md"," und Lizenzen.",[12,1559,1560],{},"Gängige DevSecOps-Automatisierung:",[19,1562,1563,1569,1575],{},[22,1564,1565,1568],{},[25,1566,1567],{},"Projekt-Bootstrap",": Automatisches Erstellen von README, .gitignore, CI/CD-Config",[22,1570,1571,1574],{},[25,1572,1573],{},"Security-Defaults",": SAST, Dependency Scanning, Secrets Detection durchsetzen",[22,1576,1577,1579],{},[25,1578,253],{},": Issue/MR-Templates, Architekturdiagramme generieren",[12,1581,1582,1583,661],{},"Ein kombiniertes Beispiel ist im ",[57,1584,1587],{"href":1585,"rel":1586},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/custom-rules/custom-rule-devsecops-workflows",[],"Custom Rule - DevSecOps workflows Projekt",[453,1589,457,1591],{"className":1590},[456],[459,1592,457],{"width":461,"height":462,"src":1593,"frameBorder":464,"allowFullScreen":465},"https://www.youtube.com/embed/hKpLcBtbC4g",[590,1595,168],{"id":1596},"issue-und-mr-templates",[12,1598,1599],{},"Agentic AI lässt sich instruieren, Issue/MR-Templates zu erstellen und projektspezifische Informationen hinzuzufügen:",[296,1601,1603],{"className":298,"code":1602,"language":300,"meta":301,"style":301},"## Issue and MR Templates\n- Falls keine Issue-Templates in .gitlab/issue_templates existieren, diese mit folgenden Quellen erstellen:\n        Default: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/issue_templates/Default.md\n",[256,1604,1605,1610,1617],{"__ignoreMap":301},[305,1606,1607],{"class":307,"line":308},[305,1608,1609],{"class":311},"## Issue and MR Templates\n",[305,1611,1612,1614],{"class":307,"line":315},[305,1613,287],{"class":342},[305,1615,1616],{"class":349}," Falls keine Issue-Templates in .gitlab/issue_templates existieren, diese mit folgenden Quellen erstellen:\n",[305,1618,1619],{"class":307,"line":322},[305,1620,1621],{"class":349},"        Default: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/raw/main/.gitlab/issue_templates/Default.md\n",[590,1623,174],{"id":1624},"build-tools",[12,1626,1627],{},"Es gibt verschiedene Build-Tools pro Programmiersprache. Agentic AI kann diese Standard-Tools ohne Input-Anfrage nutzen:",[296,1629,1631],{"className":298,"code":1630,"language":300,"meta":301,"style":301},"## Build Tools\n- Mit Python immer eine Virtual Env verwenden\n- Für C/C++: CMake bevorzugen\n- Für Java: Immer Gradle verwenden\n",[256,1632,1633,1638,1645,1652],{"__ignoreMap":301},[305,1634,1635],{"class":307,"line":308},[305,1636,1637],{"class":311},"## Build Tools\n",[305,1639,1640,1642],{"class":307,"line":315},[305,1641,287],{"class":342},[305,1643,1644],{"class":349}," Mit Python immer eine Virtual Env verwenden\n",[305,1646,1647,1649],{"class":307,"line":322},[305,1648,287],{"class":342},[305,1650,1651],{"class":349}," Für C/C++: CMake bevorzugen\n",[305,1653,1654,1656],{"class":307,"line":328},[305,1655,287],{"class":342},[305,1657,1658],{"class":349}," Für Java: Immer Gradle verwenden\n",[590,1660,180],{"id":1661},"cicd-konfigurationspräferenzen",[12,1663,1664],{},"Rules nutzen, um spezifische Container-Images und Job-Patterns zu bevorzugen:",[296,1666,1668],{"className":298,"code":1667,"language":300,"meta":301,"style":301},"## CI/CD Configuration\n- Falls keine GitLab-CI/CD-Konfiguration existiert, den User fragen\n- Immer alpine als Container-Image verwenden\n",[256,1669,1670,1674,1681],{"__ignoreMap":301},[305,1671,1672],{"class":307,"line":308},[305,1673,741],{"class":311},[305,1675,1676,1678],{"class":307,"line":315},[305,1677,287],{"class":342},[305,1679,1680],{"class":349}," Falls keine GitLab-CI/CD-Konfiguration existiert, den User fragen\n",[305,1682,1683,1685],{"class":307,"line":322},[305,1684,287],{"class":342},[305,1686,1687],{"class":349}," Immer alpine als Container-Image verwenden\n",[590,1689,186],{"id":1690},"security-scanning-präferenzen",[12,1692,1693],{},"Security-Scanner lassen sich in GitLab-CI/CD-Konfiguration durchsetzen. Das folgende Beispiel instruiert Agents, immer Advanced SAST, Dependency Scanning und Secret Detection einzubeziehen:",[296,1695,1697],{"className":298,"code":1696,"language":300,"meta":301,"style":301},"## Security Scanning\n- Immer Advanced SAST verwenden\n- Immer SAST-, Dependency-Scanning-, Secrets-Detection-Templates einbeziehen:\n\n    include:\n        - template: Jobs/SAST.gitlab-ci.yml\n        - template: Jobs/Secret-Detection.gitlab-ci.yml\n        - template: Jobs/Dependency-Scanning.gitlab-ci.yml\n\n    variables:\n        GITLAB_ADVANCED_SAST_ENABLED: 'true'\n",[256,1698,1699,1704,1711,1718,1722,1727,1732,1737,1742,1746,1751],{"__ignoreMap":301},[305,1700,1701],{"class":307,"line":308},[305,1702,1703],{"class":311},"## Security Scanning\n",[305,1705,1706,1708],{"class":307,"line":315},[305,1707,287],{"class":342},[305,1709,1710],{"class":349}," Immer Advanced SAST verwenden\n",[305,1712,1713,1715],{"class":307,"line":322},[305,1714,287],{"class":342},[305,1716,1717],{"class":349}," Immer SAST-, Dependency-Scanning-, Secrets-Detection-Templates einbeziehen:\n",[305,1719,1720],{"class":307,"line":328},[305,1721,319],{"emptyLinePlaceholder":318},[305,1723,1724],{"class":307,"line":333},[305,1725,1726],{"class":349},"    include:\n",[305,1728,1729],{"class":307,"line":339},[305,1730,1731],{"class":349},"        - template: Jobs/SAST.gitlab-ci.yml\n",[305,1733,1734],{"class":307,"line":353},[305,1735,1736],{"class":349},"        - template: Jobs/Secret-Detection.gitlab-ci.yml\n",[305,1738,1739],{"class":307,"line":1185},[305,1740,1741],{"class":349},"        - template: Jobs/Dependency-Scanning.gitlab-ci.yml\n",[305,1743,1744],{"class":307,"line":1193},[305,1745,319],{"emptyLinePlaceholder":318},[305,1747,1748],{"class":307,"line":1431},[305,1749,1750],{"class":349},"    variables:\n",[305,1752,1753],{"class":307,"line":1439},[305,1754,1755],{"class":349},"        GITLAB_ADVANCED_SAST_ENABLED: 'true'\n",[12,1757,1758],{},"Security-Scanning-Defaults lassen sich durch Custom Rules durchsetzen und eliminieren manuelle Konfiguration pro Projekt. Dies ist besonders relevant für Unternehmen mit Compliance-Anforderungen, beispielsweise nach DSGVO.",[590,1760,192],{"id":1761},"tests-und-linters",[12,1763,1764],{},"Agentic Chat lässt sich direkt instruieren, wo Tests zu finden sind:",[296,1766,1768],{"className":298,"code":1767,"language":300,"meta":301,"style":301},"## Tests and Linting Details\n- Tests in diesem Projekt befinden sich im __-Verzeichnis\n- Linting erfolgt mit dem ___-Befehl\n",[256,1769,1770,1775,1782],{"__ignoreMap":301},[305,1771,1772],{"class":307,"line":308},[305,1773,1774],{"class":311},"## Tests and Linting Details\n",[305,1776,1777,1779],{"class":307,"line":315},[305,1778,287],{"class":342},[305,1780,1781],{"class":349}," Tests in diesem Projekt befinden sich im __-Verzeichnis\n",[305,1783,1784,1786],{"class":307,"line":322},[305,1785,287],{"class":342},[305,1787,1788],{"class":349}," Linting erfolgt mit dem ___-Befehl\n",[590,1790,198],{"id":1791},"dokumentationsgenerierung",[296,1793,1795],{"className":298,"code":1794,"language":300,"meta":301,"style":301},"- Falls ein README fehlt, den User fragen, ob er eines erstellen möchte\n- Wenn der User nach einem Architekturvorschlag fragt, Architekturdiagramm in Mermaid generieren\n- Für Dokumentation immer GitLab Flavored Markdown verwenden\n",[256,1796,1797,1804,1811],{"__ignoreMap":301},[305,1798,1799,1801],{"class":307,"line":308},[305,1800,287],{"class":342},[305,1802,1803],{"class":349}," Falls ein README fehlt, den User fragen, ob er eines erstellen möchte\n",[305,1805,1806,1808],{"class":307,"line":315},[305,1807,287],{"class":342},[305,1809,1810],{"class":349}," Wenn der User nach einem Architekturvorschlag fragt, Architekturdiagramm in Mermaid generieren\n",[305,1812,1813,1815],{"class":307,"line":322},[305,1814,287],{"class":342},[305,1816,1817],{"class":349}," Für Dokumentation immer GitLab Flavored Markdown verwenden\n",[590,1819,204],{"id":1820},"refactoring-und-code-change-anforderungen",[12,1822,1823],{},"Wenn ein Projekt schrittweise modernisiert werden soll:",[296,1825,1827],{"className":298,"code":1826,"language":300,"meta":301,"style":301},"## Keep the Changes Minimal\n- Das Projekt nutzt diesen Standard. Für neu generierten Code diesen Standard verwenden.\n- Keinen Versuch unternehmen, bereits erstellten Code zu refactoren\n",[256,1828,1829,1834,1841],{"__ignoreMap":301},[305,1830,1831],{"class":307,"line":308},[305,1832,1833],{"class":311},"## Keep the Changes Minimal\n",[305,1835,1836,1838],{"class":307,"line":315},[305,1837,287],{"class":342},[305,1839,1840],{"class":349}," Das Projekt nutzt diesen Standard. Für neu generierten Code diesen Standard verwenden.\n",[305,1842,1843,1845],{"class":307,"line":322},[305,1844,287],{"class":342},[305,1846,1847],{"class":349}," Keinen Versuch unternehmen, bereits erstellten Code zu refactoren\n",[590,1849,210],{"id":1850},"onboarding-requirements-lizenzen",[296,1852,1854],{"className":298,"code":1853,"language":300,"meta":301,"style":301},"## Link to Guidelines\n- Immer auf Entwicklerrichtlinien verweisen: https://docs.gitlab.com/development/\n\n## License\n- Immer MIT-Lizenz in `LICENSE` hinzufügen mit GitLab B.V. als Copyright-Holder\n",[256,1855,1856,1861,1868,1872,1877],{"__ignoreMap":301},[305,1857,1858],{"class":307,"line":308},[305,1859,1860],{"class":311},"## Link to Guidelines\n",[305,1862,1863,1865],{"class":307,"line":315},[305,1864,287],{"class":342},[305,1866,1867],{"class":349}," Immer auf Entwicklerrichtlinien verweisen: https://docs.gitlab.com/development/\n",[305,1869,1870],{"class":307,"line":322},[305,1871,319],{"emptyLinePlaceholder":318},[305,1873,1874],{"class":307,"line":328},[305,1875,1876],{"class":311},"## License\n",[305,1878,1879,1881,1884,1887],{"class":307,"line":333},[305,1880,287],{"class":342},[305,1882,1883],{"class":349}," Immer MIT-Lizenz in ",[305,1885,1886],{"class":345},"`LICENSE`",[305,1888,1889],{"class":349}," hinzufügen mit GitLab B.V. als Copyright-Holder\n",[590,1891,216],{"id":1892},"git-flows",[296,1894,1896],{"className":298,"code":1895,"language":300,"meta":301,"style":301},"## Git Flows\n- Das Projekt untersuchen und immer eine `.gitignore` hinzufügen\n- Wenn ein User mit einem neuen Feature starten möchte, einen neuen Branch \"feature/\u003Cshortname>\" erstellen\n",[256,1897,1898,1903,1916],{"__ignoreMap":301},[305,1899,1900],{"class":307,"line":308},[305,1901,1902],{"class":311},"## Git Flows\n",[305,1904,1905,1907,1910,1913],{"class":307,"line":315},[305,1906,287],{"class":342},[305,1908,1909],{"class":349}," Das Projekt untersuchen und immer eine ",[305,1911,1912],{"class":345},"`.gitignore`",[305,1914,1915],{"class":349}," hinzufügen\n",[305,1917,1918,1920],{"class":307,"line":322},[305,1919,287],{"class":342},[305,1921,1922],{"class":349}," Wenn ein User mit einem neuen Feature starten möchte, einen neuen Branch \"feature/\u003Cshortname>\" erstellen\n",[48,1924,222],{"id":1925},"distribution-und-testing-von-custom-rules",[12,1927,1928,1933],{},[57,1929,1932],{"href":1930,"rel":1931},"https://docs.gitlab.com/administration/custom_project_templates/",[],"GitLab-Projektvorlagen"," mit gut getesteten Custom-Rule-Prompts lassen sich erstellen. Neue Projekte starten dann immer mit Best Practices.",[12,1935,1936,1937,1942],{},"Da LLMs und KI-Agents nicht vorhersagbar sind, wird Testing herausfordernder. Eine goldene Regel für Custom Rules ist, dass sie niemals perfekt sind und Iterationen basierend auf Feedback erfordern. Für größere Test-Szenarien die ",[57,1938,1941],{"href":1939,"rel":1940},"https://about.gitlab.com/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale/",[],"System-Prompt-Testing-Strategie für GitLab Duo"," reviewen.",[371,1944,230],{"id":1945},"custom-rules-ressourcen",[12,1947,1948],{},"Das bestehende KI-Ökosystem nutzen, wo ähnliche Funktionalität existiert. Beispielsweise \"Awesome Cursor Rules\"-Repositories.",[12,1950,1951],{},"LLMs bieten guten Einblick in Development-Styleguides und können Markdown-Outputs generieren.",[48,1953,236],{"id":1954},"praxistest-verhaltensänderungen-explorieren",[12,1956,1957],{},"Nicht sicher, wie mit Custom Rules gestartet werden soll? Mit folgendem Beispiel zur Übung:",[296,1959,1961],{"className":298,"code":1960,"language":300,"meta":301,"style":301},"## Fun Rules\n- Wie Clippy verhalten\n- Wie ein Pirat verhalten\n- Alles erklären, als wäre ich fünf\n",[256,1962,1963,1968,1975,1982],{"__ignoreMap":301},[305,1964,1965],{"class":307,"line":308},[305,1966,1967],{"class":311},"## Fun Rules\n",[305,1969,1970,1972],{"class":307,"line":315},[305,1971,287],{"class":342},[305,1973,1974],{"class":349}," Wie Clippy verhalten\n",[305,1976,1977,1979],{"class":307,"line":322},[305,1978,287],{"class":342},[305,1980,1981],{"class":349}," Wie ein Pirat verhalten\n",[305,1983,1984,1986],{"class":307,"line":328},[305,1985,287],{"class":342},[305,1987,1988],{"class":349}," Alles erklären, als wäre ich fünf\n",[12,1990,1991],{},"Hinweis: Nicht in Production committen, da sie ablenkend wirken können.",[48,1993,242],{"id":1994},"fazit",[12,1996,1997],{},"Durch Custom Rules in GitLab Duo Agentic Chat lassen sich LLM- und KI-Agent-Outputs erheblich beeinflussen. Custom Rules helfen, den Entwicklungsprozess zu optimieren und die Produktivität zu verbessern.",[12,1999,2000,2001,2006,2007,2011],{},"Dieser Blog-Post bietet einen Deep-Dive mit praktischen Beispielen. Alle Aufzeichnungen sind in ",[57,2002,2005],{"href":2003,"rel":2004},"https://www.youtube.com/playlist?list=PL05JrBw4t0Ko7aR6sM8e4uXGYtjs4-NqK",[],"dieser YouTube-Playlist"," verfügbar. Alle Demo-Projekte lassen sich aus der ",[57,2008,2010],{"href":406,"rel":2009},[],"Custom rules Group"," forken.",[12,2013,2014,2018,2019,2024],{},[57,2015,2017],{"href":251,"rel":2016},[],"Custom Rules in Duo Agentic Chat IDEs"," sind die erste Iteration. Weitere Use-Cases folgen zukünftig, wie Duo Code Review und Custom Rules für Agents (",[57,2020,2023],{"href":2021,"rel":2022},"https://gitlab.com/gitlab-org/gitlab/-/issues/557984",[],"dieses Issue"," folgen).",[12,2026,2027,2028,2033],{},"Es gibt viele weitere Use Cases zu explorieren. Was sind die effizientesten Rules? Feedback im ",[57,2029,2032],{"href":2030,"rel":2031},"https://gitlab.com/groups/gitlab-org/-/epics/16938",[],"Product Epic"," teilen.",[2035,2036,2037],"style",{},"html pre.shiki code .surfw, html code.shiki .surfw{--shiki-default:#005CC5;--shiki-default-font-weight:bold}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}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 .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sEuWB, html code.shiki .sEuWB{--shiki-default:#032F62;--shiki-default-text-decoration:underline}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":301,"searchDepth":315,"depth":315,"links":2039},[2040,2041,2047,2053,2056,2057],{"id":50,"depth":315,"text":51},{"id":245,"depth":315,"text":60,"children":2042},[2043,2044,2045,2046],{"id":373,"depth":322,"text":68},{"id":412,"depth":322,"text":74},{"id":468,"depth":322,"text":80},{"id":483,"depth":322,"text":86},{"id":521,"depth":315,"text":92,"children":2048},[2049,2050,2051,2052],{"id":585,"depth":322,"text":100},{"id":772,"depth":322,"text":120},{"id":1076,"depth":322,"text":140},{"id":1546,"depth":322,"text":160},{"id":1925,"depth":315,"text":222,"children":2054},[2055],{"id":1945,"depth":322,"text":230},{"id":1954,"depth":315,"text":236},{"id":1994,"depth":315,"text":242},"engineering","2025-08-12","KI-Assistenten verstehen die eigene Code-Basis mit Custom Rules und generieren produktionsreifen Code mit minimalen Review-Zyklen.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png",{},"/de-de/blog/custom-rules-duo-agentic-chat-deep-dive",{"title":5,"description":2060},"custom-rules-duo-agentic-chat-deep-dive","de-de/blog/custom-rules-duo-agentic-chat-deep-dive",[2071,2072],"DevSecOps","AI","BlogPost","8VyNB1cDeuU8LAjEfQtIBFPl5penCzEOzzf_ADBrNHQ",{"logo":2076,"freeTrial":2081,"sales":2086,"login":2091,"items":2096,"search":2425,"minimal":2459,"duo":2477,"switchNav":2486,"pricingDeployment":2497},{"config":2077},{"href":2078,"dataGaName":2079,"dataGaLocation":2080},"/de-de/","gitlab logo","header",{"text":2082,"config":2083},"Kostenlose Testversion anfordern",{"href":2084,"dataGaName":2085,"dataGaLocation":2080},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":2087,"config":2088},"Demo anfordern",{"href":2089,"dataGaName":2090,"dataGaLocation":2080},"/de-de/sales/?contact-topic=request-demo","sales",{"text":2092,"config":2093},"Anmelden",{"href":2094,"dataGaName":2095,"dataGaLocation":2080},"https://gitlab.com/users/sign_in/","sign in",[2097,2126,2228,2233,2347,2403],{"text":2098,"config":2099,"menu":2101},"Plattform",{"dataNavLevelOne":2100},"platform",{"type":2102,"columns":2103},"cards",[2104,2110,2118],{"title":2098,"description":2105,"link":2106},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":2107,"config":2108},"Die Plattform erkunden",{"href":2109,"dataGaName":2100,"dataGaLocation":2080},"/de-de/platform/",{"title":2111,"description":2112,"link":2113},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":2114,"config":2115},"Lerne GitLab Duo kennen",{"href":2116,"dataGaName":2117,"dataGaLocation":2080},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":2119,"description":2120,"link":2121},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":2122,"config":2123},"Mehr erfahren",{"href":2124,"dataGaName":2125,"dataGaLocation":2080},"/de-de/why-gitlab/","why gitlab",{"text":2127,"left":318,"config":2128,"menu":2130},"Produkt",{"dataNavLevelOne":2129},"solutions",{"type":2131,"link":2132,"columns":2136,"feature":2207},"lists",{"text":2133,"config":2134},"Alle Lösungen anzeigen",{"href":2135,"dataGaName":2129,"dataGaLocation":2080},"/de-de/solutions/",[2137,2162,2185],{"title":2138,"description":2139,"link":2140,"items":2145},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":2141},{"icon":2142,"href":2143,"dataGaName":2144,"dataGaLocation":2080},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[2146,2150,2153,2158],{"text":2147,"config":2148},"CI/CD",{"href":2149,"dataGaLocation":2080,"dataGaName":2147},"/de-de/solutions/continuous-integration/",{"text":2111,"config":2151},{"href":2116,"dataGaLocation":2080,"dataGaName":2152},"gitlab duo agent platform - product menu",{"text":2154,"config":2155},"Quellcodeverwaltung",{"href":2156,"dataGaLocation":2080,"dataGaName":2157},"/de-de/solutions/source-code-management/","Source Code Management",{"text":2159,"config":2160},"Automatische Softwarebereitstellung",{"href":2143,"dataGaLocation":2080,"dataGaName":2161},"Automated software delivery",{"title":2163,"description":2164,"link":2165,"items":2170},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":2166},{"href":2167,"dataGaName":2168,"dataGaLocation":2080,"icon":2169},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[2171,2175,2180],{"text":2172,"config":2173},"Anwendungssicherheitstests",{"href":2167,"dataGaName":2174,"dataGaLocation":2080},"Application security testing",{"text":2176,"config":2177},"Schutz der Software-Lieferkette",{"href":2178,"dataGaLocation":2080,"dataGaName":2179},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":2181,"config":2182},"Software-Compliance",{"href":2183,"dataGaName":2184,"dataGaLocation":2080},"/de-de/solutions/software-compliance/","software compliance",{"title":2186,"link":2187,"items":2192},"Messung",{"config":2188},{"icon":2189,"href":2190,"dataGaName":2191,"dataGaLocation":2080},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[2193,2197,2202],{"text":2194,"config":2195},"Sichtbarkeit und Messung",{"href":2190,"dataGaLocation":2080,"dataGaName":2196},"Visibility and Measurement",{"text":2198,"config":2199},"Wertstrommanagement",{"href":2200,"dataGaLocation":2080,"dataGaName":2201},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":2203,"config":2204},"Analysen und Einblicke",{"href":2205,"dataGaLocation":2080,"dataGaName":2206},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":2208,"type":2131,"items":2209},"GitLab für",[2210,2216,2222],{"text":2211,"config":2212},"Enterprise",{"icon":2213,"href":2214,"dataGaLocation":2080,"dataGaName":2215},"Building","/de-de/enterprise/","enterprise",{"text":2217,"config":2218},"Kleinunternehmen",{"icon":2219,"href":2220,"dataGaLocation":2080,"dataGaName":2221},"Work","/de-de/small-business/","small business",{"text":2223,"config":2224},"Öffentlicher Sektor",{"icon":2225,"href":2226,"dataGaLocation":2080,"dataGaName":2227},"Organization","/de-de/solutions/public-sector/","public sector",{"text":2229,"config":2230},"Preise",{"href":2231,"dataGaName":2232,"dataGaLocation":2080,"dataNavLevelOne":2232},"/de-de/pricing/","pricing",{"text":2234,"config":2235,"menu":2237},"Ressourcen",{"dataNavLevelOne":2236},"resources",{"type":2131,"link":2238,"columns":2242,"feature":2336},{"text":2239,"config":2240},"Alle Ressourcen anzeigen",{"href":2241,"dataGaName":2236,"dataGaLocation":2080},"/de-de/resources/",[2243,2276,2303],{"title":2244,"items":2245},"Erste Schritte",[2246,2251,2256,2261,2266,2271],{"text":2247,"config":2248},"Installieren",{"href":2249,"dataGaName":2250,"dataGaLocation":2080},"/de-de/install/","install",{"text":2252,"config":2253},"Kurzanleitungen",{"href":2254,"dataGaName":2255,"dataGaLocation":2080},"/de-de/get-started/","quick setup checklists",{"text":2257,"config":2258},"Lernen",{"href":2259,"dataGaLocation":2080,"dataGaName":2260},"https://university.gitlab.com/","learn",{"text":2262,"config":2263},"Produktdokumentation",{"href":2264,"dataGaName":2265,"dataGaLocation":2080},"https://docs.gitlab.com/","product documentation",{"text":2267,"config":2268},"Best-Practice-Videos",{"href":2269,"dataGaName":2270,"dataGaLocation":2080},"/de-de/getting-started-videos/","best practice videos",{"text":2272,"config":2273},"Integrationen",{"href":2274,"dataGaName":2275,"dataGaLocation":2080},"/de-de/integrations/","integrations",{"title":2277,"items":2278},"Entdecken",[2279,2284,2289,2294,2298],{"text":2280,"config":2281},"Kundenerfolge",{"href":2282,"dataGaName":2283,"dataGaLocation":2080},"/de-de/customers/","customer success stories",{"text":2285,"config":2286},"Blog",{"href":2287,"dataGaName":2288,"dataGaLocation":2080},"/de-de/blog/","blog",{"text":2290,"config":2291},"Demo-Hub",{"href":2292,"dataGaName":2293,"dataGaLocation":2080},"/de-de/demo-hub/","demo hub",{"text":2295,"config":2296},"The Source",{"href":2297,"dataGaName":2288,"dataGaLocation":2080},"/de-de/the-source/",{"text":2299,"config":2300},"Remote",{"href":2301,"dataGaName":2302,"dataGaLocation":2080},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":2304,"items":2305},"Vernetzen",[2306,2311,2316,2321,2326,2331],{"text":2307,"config":2308},"GitLab-Services",{"href":2309,"dataGaName":2310,"dataGaLocation":2080},"/de-de/services/","services",{"text":2312,"config":2313},"Beitragen",{"href":2314,"dataGaName":2315,"dataGaLocation":2080},"https://contributors.gitlab.com","contribute",{"text":2317,"config":2318},"Community",{"href":2319,"dataGaName":2320,"dataGaLocation":2080},"/community/","community",{"text":2322,"config":2323},"Forum",{"href":2324,"dataGaName":2325,"dataGaLocation":2080},"https://forum.gitlab.com/","forum",{"text":2327,"config":2328},"Veranstaltungen",{"href":2329,"dataGaName":2330,"dataGaLocation":2080},"/events/","events",{"text":2332,"config":2333},"Partner",{"href":2334,"dataGaName":2335,"dataGaLocation":2080},"/de-de/partners/","partners",{"config":2337,"title":2340,"text":2341,"link":2342},{"background":2338,"textColor":2339},"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":2343,"config":2344},"Aktuelle Nachrichten",{"href":2345,"dataGaName":2346,"dataGaLocation":2080},"/de-de/whats-new/","whats new",{"text":2348,"config":2349,"menu":2351},"Unternehmen",{"dataNavLevelOne":2350},"company",{"type":2131,"columns":2352},[2353],{"items":2354},[2355,2360,2366,2368,2373,2378,2383,2388,2393,2398],{"text":2356,"config":2357},"Über",{"href":2358,"dataGaName":2359,"dataGaLocation":2080},"/de-de/company/","about",{"text":2361,"config":2362,"footerGa":2365},"Karriere",{"href":2363,"dataGaName":2364,"dataGaLocation":2080},"/jobs/","jobs",{"dataGaName":2364},{"text":2327,"config":2367},{"href":2329,"dataGaName":2330,"dataGaLocation":2080},{"text":2369,"config":2370},"Geschäftsführung",{"href":2371,"dataGaName":2372,"dataGaLocation":2080},"/company/team/e-group/","leadership",{"text":2374,"config":2375},"Handbuch",{"href":2376,"dataGaName":2377,"dataGaLocation":2080},"https://handbook.gitlab.com/","handbook",{"text":2379,"config":2380},"Investor Relations",{"href":2381,"dataGaName":2382,"dataGaLocation":2080},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2384,"config":2385},"Trust Center",{"href":2386,"dataGaName":2387,"dataGaLocation":2080},"/de-de/security/","trust center",{"text":2389,"config":2390},"AI Transparency Center",{"href":2391,"dataGaName":2392,"dataGaLocation":2080},"/de-de/ai-transparency-center/","ai transparency center",{"text":2394,"config":2395},"Newsletter",{"href":2396,"dataGaName":2397,"dataGaLocation":2080},"/company/contact/#contact-forms","newsletter",{"text":2399,"config":2400},"Presse",{"href":2401,"dataGaName":2402,"dataGaLocation":2080},"/press/","press",{"text":2404,"config":2405,"menu":2406},"Kontakt",{"dataNavLevelOne":2350},{"type":2131,"columns":2407},[2408],{"items":2409},[2410,2415,2420],{"text":2411,"config":2412},"Vertrieb kontaktieren",{"href":2413,"dataGaName":2414,"dataGaLocation":2080},"/de-de/sales/","talk to sales",{"text":2416,"config":2417},"Support-Portal",{"href":2418,"dataGaName":2419,"dataGaLocation":2080},"https://support.gitlab.com/hc/en-us","support portal",{"text":2421,"config":2422},"Kundenportal",{"href":2423,"dataGaName":2424,"dataGaLocation":2080},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2426,"login":2427,"suggestions":2434},"Schließen",{"text":2428,"link":2429},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":2430,"config":2431},"gitlab.com",{"href":2094,"dataGaName":2432,"dataGaLocation":2433},"search login","search",{"text":2435,"default":2436},"Vorschläge",[2437,2439,2444,2446,2451,2456],{"text":2111,"config":2438},{"href":2116,"dataGaName":2111,"dataGaLocation":2433},{"text":2440,"config":2441},"Codevorschläge (KI)",{"href":2442,"dataGaName":2443,"dataGaLocation":2433},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":2147,"config":2445},{"href":2149,"dataGaName":2147,"dataGaLocation":2433},{"text":2447,"config":2448},"GitLab auf AWS",{"href":2449,"dataGaName":2450,"dataGaLocation":2433},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":2452,"config":2453},"GitLab auf Google Cloud",{"href":2454,"dataGaName":2455,"dataGaLocation":2433},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2119,"config":2457},{"href":2124,"dataGaName":2458,"dataGaLocation":2433},"Why GitLab?",{"freeTrial":2460,"mobileIcon":2465,"desktopIcon":2470,"secondaryButton":2473},{"text":2461,"config":2462},"Kostenlos testen",{"href":2463,"dataGaName":2085,"dataGaLocation":2464},"https://gitlab.com/-/trials/new/","nav",{"altText":2466,"config":2467},"GitLab-Symbol",{"src":2468,"dataGaName":2469,"dataGaLocation":2464},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2466,"config":2471},{"src":2472,"dataGaName":2469,"dataGaLocation":2464},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2244,"config":2474},{"href":2475,"dataGaName":2476,"dataGaLocation":2464},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":2478,"mobileIcon":2482,"desktopIcon":2484},{"text":2479,"config":2480},"Mehr über GitLab Duo erfahren",{"href":2116,"dataGaName":2481,"dataGaLocation":2464},"gitlab duo",{"altText":2466,"config":2483},{"src":2468,"dataGaName":2469,"dataGaLocation":2464},{"altText":2466,"config":2485},{"src":2472,"dataGaName":2469,"dataGaLocation":2464},{"button":2487,"mobileIcon":2492,"desktopIcon":2494},{"text":2488,"config":2489},"/Option",{"href":2490,"dataGaName":2491,"dataGaLocation":2464},"#contact","switch",{"altText":2466,"config":2493},{"src":2468,"dataGaName":2469,"dataGaLocation":2464},{"altText":2466,"config":2495},{"src":2496,"dataGaName":2469,"dataGaLocation":2464},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2498,"mobileIcon":2503,"desktopIcon":2505},{"text":2499,"config":2500},"Zurück zur Preisübersicht",{"href":2231,"dataGaName":2501,"dataGaLocation":2464,"icon":2502},"back to pricing","GoBack",{"altText":2466,"config":2504},{"src":2468,"dataGaName":2469,"dataGaLocation":2464},{"altText":2466,"config":2506},{"src":2472,"dataGaName":2469,"dataGaLocation":2464},{"title":2508,"button":2509,"config":2513},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":2122,"config":2510},{"href":2511,"dataGaName":2512,"dataGaLocation":2080},"/de-de/gitlab-orbit/","orbit",{"layout":2514,"disabled":2063},"release",{"data":2516},{"text":2517,"source":2518,"edit":2524,"contribute":2529,"config":2534,"items":2539,"minimal":2743},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":2519,"config":2520},"Quelltext der Seite anzeigen",{"href":2521,"dataGaName":2522,"dataGaLocation":2523},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2525,"config":2526},"Diese Seite bearbeiten",{"href":2527,"dataGaName":2528,"dataGaLocation":2523},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2530,"config":2531},"Beteilige dich",{"href":2532,"dataGaName":2533,"dataGaLocation":2523},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2535,"facebook":2536,"youtube":2537,"linkedin":2538},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2540,2585,2636,2678,2710],{"title":2229,"links":2541,"subMenu":2556},[2542,2546,2551],{"text":2543,"config":2544},"Tarife anzeigen",{"href":2231,"dataGaName":2545,"dataGaLocation":2523},"view plans",{"text":2547,"config":2548},"Vorteile von Premium",{"href":2549,"dataGaName":2550,"dataGaLocation":2523},"/de-de/pricing/premium/","why premium",{"text":2552,"config":2553},"Vorteile von Ultimate",{"href":2554,"dataGaName":2555,"dataGaLocation":2523},"/de-de/pricing/ultimate/","why ultimate",[2557],{"title":2404,"links":2558},[2559,2561,2563,2565,2570,2575,2580],{"text":2411,"config":2560},{"href":2413,"dataGaName":2090,"dataGaLocation":2523},{"text":2416,"config":2562},{"href":2418,"dataGaName":2419,"dataGaLocation":2523},{"text":2421,"config":2564},{"href":2423,"dataGaName":2424,"dataGaLocation":2523},{"text":2566,"config":2567},"Status",{"href":2568,"dataGaName":2569,"dataGaLocation":2523},"https://status.gitlab.com/","status",{"text":2571,"config":2572},"Nutzungsbedingungen",{"href":2573,"dataGaName":2574,"dataGaLocation":2523},"/terms/","terms of use",{"text":2576,"config":2577},"Datenschutzerklärung",{"href":2578,"dataGaName":2579,"dataGaLocation":2523},"/de-de/privacy/","privacy statement",{"text":2581,"config":2582},"Cookie-Einstellungen",{"dataGaName":2583,"dataGaLocation":2523,"id":2584,"isOneTrustButton":318},"cookie preferences","ot-sdk-btn",{"title":2127,"links":2586,"subMenu":2595},[2587,2591],{"text":2588,"config":2589},"DevSecOps-Plattform",{"href":2109,"dataGaName":2590,"dataGaLocation":2523},"devsecops platform",{"text":2592,"config":2593},"KI-unterstützte Entwicklung",{"href":2116,"dataGaName":2594,"dataGaLocation":2523},"ai-assisted development",[2596],{"title":2597,"links":2598},"Themen",[2599,2603,2608,2613,2617,2621,2626,2631],{"text":2147,"config":2600},{"href":2601,"dataGaName":2602,"dataGaLocation":2523},"/de-de/topics/ci-cd/","cicd",{"text":2604,"config":2605},"GitOps",{"href":2606,"dataGaName":2607,"dataGaLocation":2523},"/de-de/topics/gitops/","gitops",{"text":2609,"config":2610},"DevOps",{"href":2611,"dataGaName":2612,"dataGaLocation":2523},"/de-de/topics/devops/","devops",{"text":27,"config":2614},{"href":2615,"dataGaName":2616,"dataGaLocation":2523},"/de-de/topics/version-control/","version control",{"text":2071,"config":2618},{"href":2619,"dataGaName":2620,"dataGaLocation":2523},"/de-de/topics/devsecops/","devsecops",{"text":2622,"config":2623},"Cloud-nativ",{"href":2624,"dataGaName":2625,"dataGaLocation":2523},"/de-de/topics/cloud-native/","cloud native",{"text":2627,"config":2628},"KI für das Programmieren",{"href":2629,"dataGaName":2630,"dataGaLocation":2523},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":2632,"config":2633},"Agentische KI",{"href":2634,"dataGaName":2635,"dataGaLocation":2523},"/de-de/topics/agentic-ai/","agentic ai",{"title":2637,"links":2638},"Lösungen",[2639,2642,2644,2649,2653,2656,2659,2662,2664,2666,2668,2673],{"text":2172,"config":2640},{"href":2167,"dataGaName":2641,"dataGaLocation":2523},"Application Security Testing",{"text":2159,"config":2643},{"href":2143,"dataGaName":2144,"dataGaLocation":2523},{"text":2645,"config":2646},"Agile Entwicklung",{"href":2647,"dataGaName":2648,"dataGaLocation":2523},"/de-de/solutions/agile-delivery/","agile delivery",{"text":2650,"config":2651},"SCM",{"href":2156,"dataGaName":2652,"dataGaLocation":2523},"source code management",{"text":2147,"config":2654},{"href":2149,"dataGaName":2655,"dataGaLocation":2523},"continuous integration & delivery",{"text":2198,"config":2657},{"href":2200,"dataGaName":2658,"dataGaLocation":2523},"value stream management",{"text":2604,"config":2660},{"href":2661,"dataGaName":2607,"dataGaLocation":2523},"/de-de/solutions/gitops/",{"text":2211,"config":2663},{"href":2214,"dataGaName":2215,"dataGaLocation":2523},{"text":2217,"config":2665},{"href":2220,"dataGaName":2221,"dataGaLocation":2523},{"text":2223,"config":2667},{"href":2226,"dataGaName":2227,"dataGaLocation":2523},{"text":2669,"config":2670},"Bildungswesen",{"href":2671,"dataGaName":2672,"dataGaLocation":2523},"/de-de/solutions/education/","education",{"text":2674,"config":2675},"Finanzdienstleistungen",{"href":2676,"dataGaName":2677,"dataGaLocation":2523},"/de-de/solutions/finance/","financial services",{"title":2234,"links":2679},[2680,2682,2684,2686,2689,2691,2694,2696,2698,2700,2702,2704,2706,2708],{"text":2247,"config":2681},{"href":2249,"dataGaName":2250,"dataGaLocation":2523},{"text":2252,"config":2683},{"href":2254,"dataGaName":2255,"dataGaLocation":2523},{"text":2257,"config":2685},{"href":2259,"dataGaName":2260,"dataGaLocation":2523},{"text":2262,"config":2687},{"href":2264,"dataGaName":2688,"dataGaLocation":2523},"docs",{"text":2285,"config":2690},{"href":2287,"dataGaName":2288,"dataGaLocation":2523},{"text":2692,"config":2693},"Neuerungen",{"href":2345,"dataGaName":2346,"dataGaLocation":2523},{"text":2280,"config":2695},{"href":2282,"dataGaName":2283,"dataGaLocation":2523},{"text":2299,"config":2697},{"href":2301,"dataGaName":2302,"dataGaLocation":2523},{"text":2307,"config":2699},{"href":2309,"dataGaName":2310,"dataGaLocation":2523},{"text":2312,"config":2701},{"href":2314,"dataGaName":2315,"dataGaLocation":2523},{"text":2317,"config":2703},{"href":2319,"dataGaName":2320,"dataGaLocation":2523},{"text":2322,"config":2705},{"href":2324,"dataGaName":2325,"dataGaLocation":2523},{"text":2327,"config":2707},{"href":2329,"dataGaName":2330,"dataGaLocation":2523},{"text":2332,"config":2709},{"href":2334,"dataGaName":2335,"dataGaLocation":2523},{"title":2348,"links":2711},[2712,2714,2716,2718,2720,2722,2727,2732,2734,2736,2738],{"text":2356,"config":2713},{"href":2358,"dataGaName":2350,"dataGaLocation":2523},{"text":2361,"config":2715},{"href":2363,"dataGaName":2364,"dataGaLocation":2523},{"text":2369,"config":2717},{"href":2371,"dataGaName":2372,"dataGaLocation":2523},{"text":2374,"config":2719},{"href":2376,"dataGaName":2377,"dataGaLocation":2523},{"text":2379,"config":2721},{"href":2381,"dataGaName":2382,"dataGaLocation":2523},{"text":2723,"config":2724},"Nachhaltigkeit",{"href":2725,"dataGaName":2726,"dataGaLocation":2523},"/sustainability/","Sustainability",{"text":2728,"config":2729},"Vielfalt, Inklusion und Zugehörigkeit",{"href":2730,"dataGaName":2731,"dataGaLocation":2523},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2384,"config":2733},{"href":2386,"dataGaName":2387,"dataGaLocation":2523},{"text":2394,"config":2735},{"href":2396,"dataGaName":2397,"dataGaLocation":2523},{"text":2399,"config":2737},{"href":2401,"dataGaName":2402,"dataGaLocation":2523},{"text":2739,"config":2740},"Transparenzerklärung zu moderner Sklaverei",{"href":2741,"dataGaName":2742,"dataGaLocation":2523},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2744},[2745,2748,2751],{"text":2746,"config":2747},"Terms",{"href":2573,"dataGaName":2574,"dataGaLocation":2523},{"text":2749,"config":2750},"Cookies",{"dataGaName":2583,"dataGaLocation":2523,"id":2584,"isOneTrustButton":318},{"text":2752,"config":2753},"Datenschutz",{"href":2578,"dataGaName":2579,"dataGaLocation":2523},[2755],{"id":2756,"title":7,"body":2062,"config":2757,"content":2759,"description":2062,"extension":2763,"meta":2764,"navigation":318,"path":2765,"seo":2766,"stem":2767,"__hash__":2768},"blogAuthors/en-us/blog/authors/michael-friedrich.yml",{"template":2758},"BlogAuthor",{"name":7,"config":2760},{"headshot":2761,"ctfId":2762},"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",[2770,2779,2787],{"title":2771,"description":2772,"heroImage":2773,"category":2058,"date":2774,"authors":2775,"slug":2778,"externalUrl":2062},"Confidential AI für GitLab Self-Hosted","KI-Coding-Agenten in GitLab Duo nutzen, ohne dass Quellcode eine hardwareverschlüsselte Grenze verlässt, und ohne eigene GPUs zu betreiben.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[2776,2777],"Mathias Ewald","Martin Paloncy","confidential-ai-for-gitlab-self-hosted",{"title":2780,"description":2781,"heroImage":2782,"category":2058,"date":2783,"authors":2784,"slug":2786,"externalUrl":2062},"Green DevOps: Warum CO2-Messung in die CI/CD-Pipeline gehört","Jeder Pipeline-Lauf verbraucht Energie, die nirgends sichtbar wird. Eco CI und Carmen machen diesen CO2-Ausstoß sichtbar, direkt in den Pipelines.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[2785],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":2788,"description":2789,"heroImage":2790,"category":2058,"date":2791,"authors":2792,"slug":2794,"externalUrl":2062},"Was ist CI/CD? Bedeutung, Vorteile und Tool-Auswahl","Was CI/CD bedeutet, welche Vorteile die Einführung bringt und worauf bei der Tool-Auswahl zu achten ist.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663328/Blog/Hero%20Images/cicd3.jpg","2026-06-22",[2793],"GitLab","what-is-ci-cd",{"promotions":2796},[2797,2811,2823,2835],{"id":2798,"categories":2799,"header":2801,"text":2802,"button":2803,"image":2808},"ai-modernization",[2800],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":2804,"config":2805},"Ermittle deinen KI-Reifegrad",{"href":2806,"dataGaName":2807,"dataGaLocation":2288},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":2809},{"src":2810},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2812,"categories":2813,"header":2815,"text":2802,"button":2816,"image":2820},"devops-modernization",[2814,2620],"product","Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":2817,"config":2818},"Ermittle deinen DevOps-Reifegrad",{"href":2819,"dataGaName":2807,"dataGaLocation":2288},"/de-de/assessments/devops-modernization-assessment/",{"config":2821},{"src":2822},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2824,"categories":2825,"header":2827,"text":2802,"button":2828,"image":2832},"security-modernization",[2826],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":2829,"config":2830},"Ermittle deinen Sicherheitsreifegrad",{"href":2831,"dataGaName":2807,"dataGaLocation":2288},"/de-de/assessments/security-modernization-assessment/",{"config":2833},{"src":2834},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2836,"paths":2837,"header":2840,"text":2841,"button":2842,"image":2847},"github-azure-migration",[2838,2839],"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":2843,"config":2844},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":2845,"dataGaName":2846,"dataGaLocation":2288},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2848},{"src":2822},{"header":2850,"blurb":2851,"button":2852,"secondaryButton":2857},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":2853,"config":2854},"Kostenlosen Test starten",{"href":2855,"dataGaName":2085,"dataGaLocation":2856},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":2411,"config":2858},{"href":2413,"dataGaName":2090,"dataGaLocation":2856},1786803739524]