[{"data":1,"prerenderedAt":2076},["ShallowReactive",2],{"/de-de/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code":3,"navigation-de-de":1293,"banner-de-de":1725,"footer-de-de":1733,"blog-post-authors-de-de-David O'Regan":1973,"blog-related-posts-de-de-how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code":1989,"blog-promotions-de-de":2014,"next-steps-de-de":2066},{"id":4,"title":5,"authors":6,"body":8,"category":1269,"date":1270,"description":1271,"extension":1272,"externalUrl":1273,"faq":1273,"featured":1274,"heroImage":1275,"meta":1276,"navigation":552,"path":1277,"seo":1278,"slug":1283,"stem":1284,"tags":1285,"template":1290,"updatedDate":1291,"__hash__":1292},"blogPosts/de-de/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code.md","Entwicklung von GitLab Duo: Sicheres und gründliches Testen von KI-generiertem Code",[7],"David O'Regan",{"type":9,"value":10,"toc":1252},"minimark",[11,21,26,111,126,129,132,143,152,155,158,167,171,197,201,221,224,227,234,238,246,251,262,268,272,275,285,291,294,297,300,306,312,315,346,350,361,489,508,511,520,756,759,762,765,921,930,934,940,1192,1203,1206,1209,1221,1225,1248],[12,13,14],"p",{},[15,16,17],"em",{},[18,19,20],"strong",{},"Generative KI bedeutet einen monumentalen Wandel in der Softwareentwicklungsbranche, da sie die Entwicklung, die Sicherheit und den Betrieb von Software vereinfacht. Die neue Blog-Reihe unserer Produkt- und Entwicklungsteams zeigt, wie wir die KI-Funktionen erstellen, testen und bereitstellen, die in Unternehmen benötigt werden. Lerne neue Funktionen innerhalb von GitLab Duo kennen und erfahre, wie diese DevSecOps-Teams dabei helfen, bessere Ergebnisse für ihre Kund(inn)en zu erzielen.",[22,23,25],"h2",{"id":24},"inhaltsverzeichnis","Inhaltsverzeichnis",[27,28,29,37,93,99,105],"ul",{},[30,31,32],"li",{},[33,34,36],"a",{"href":35},"#herausforderungen-bei-der-verwendung-von-ki-generiertem-code","Herausforderungen bei der Verwendung von KI-generiertem Code",[30,38,39,43],{},[33,40,42],{"href":41},"#der-ansatz-von-gitlab-f%C3%BCr-die-sicherheit-und-das-testen-von-ki","Der Ansatz von GitLab für die Sicherheit und das Testen von KI",[27,44,45,51,57,63,69,75,81,87],{},[30,46,47],{},[33,48,50],{"href":49},"#1.-ein-neues-projekt-auf-gitlab.com-erstellen","1. Ein neues Projekt auf GitLab.com erstellen",[30,52,53],{},[33,54,56],{"href":55},"#2.-gitlab-duo-codevorschl%C3%A4ge-aktivieren","2. GitLab Duo-Codevorschläge aktivieren",[30,58,59],{},[33,60,62],{"href":61},"#3.-einen-flask-webserver-erstellen","3. Einen Flask Webserver erstellen",[30,64,65],{},[33,66,68],{"href":67},"#4.-tests-mit-gitlab-duo-generieren","4. Tests mit GitLab Duo generieren",[30,70,71],{},[33,72,74],{"href":73},"#5.-probleme-mit-ki-generiertem-code-mithilfe-von-gitlab-duo-chat-identifizieren","5. Probleme mit KI-generiertem Code mithilfe von GitLab Duo Chat identifizieren",[30,76,77],{},[33,78,80],{"href":79},"#6.-testberichte-erstellen","6. Testberichte erstellen",[30,82,83],{},[33,84,86],{"href":85},"#7.-den-testbericht-mit-gitlab-pages-bereitstellen","7. Den Testbericht mit GitLab Pages bereitstellen",[30,88,89],{},[33,90,92],{"href":91},"#8.-testberichte-in-mr-widgets-einbetten","8. Testberichte in MR-Widgets einbetten",[30,94,95],{},[33,96,98],{"href":97},"#fallstudie-zuverl%C3%A4ssigkeit-von-ki-mit-sicherheitsrichtlinien-und-scannern","Fallstudie: Zuverlässigkeit von KI mit Sicherheitsrichtlinien und Scannern",[30,100,101],{},[33,102,104],{"href":103},"#lege-noch-heute-los","Lege noch heute los",[30,106,107],{},[33,108,110],{"href":109},"#lies-mehr-%C3%BCber-die-reihe-%E2%80%9Eentwicklung-von-gitlab-duo%E2%80%9C","Lies mehr über die Reihe „Entwicklung von GitLab Duo\"",[12,112,113,114,119,120,125],{},"Da KI zunehmend Bestandteil der Softwareentwicklung wird, ist die Gewährleistung der Sicherheit und das gründliche Testen von KI-generiertem Code von größter Bedeutung. Dieser Artikel ist eine Schritt-für-Schritt-Anleitung zur Kombination von ",[33,115,118],{"href":116,"rel":117},"https://about.gitlab.com/de-de/gitlab-duo-agent-platform/",[],"GitLab Duo",", unserer Suite von KI-Funktionen zur Unterstützung des DevSecOps-Workflows, und ",[33,121,124],{"href":122,"rel":123},"https://docs.gitlab.com/user/project/pages/",[],"GitLab Pages",", um KI-generierten Code zu sichern und gründlich zu testen. Du erfährst, wie du typische Risiken minimieren kannst und wie du automatisch Tests generierst, Code testest und Testberichte erstellst, um die Zuverlässigkeit deines KI-generierten Codes zu verbessern.",[22,127,36],{"id":128},"herausforderungen-bei-der-verwendung-von-ki-generiertem-code",[12,130,131],{},"KI-generierter Code steht häufig vor folgenden Problemen:",[27,133,134,137,140],{},[30,135,136],{},"Nicht übereinstimmende Algorithmen: Es können falsche oder suboptimale Algorithmen generiert werden.",[30,138,139],{},"Probleme mit Abhängigkeiten: KI-generierter Code kann Abhängigkeiten enthalten, die veraltet oder inkompatibel sind.",[30,141,142],{},"Sicherheitslücken: KI kann Code mit potenziellen Sicherheitsschwachstellen generieren.",[12,144,145,146,151],{},"KI-generierter Code hat oft mit Problemen wie nicht übereinstimmenden Algorithmen, Abhängigkeitsproblemen und Sicherheitslücken zu kämpfen. Eine ",[33,147,150],{"href":148,"rel":149},"https://dl.acm.org/doi/pdf/10.1145/3613904.3642596",[],"kürzlich von der Association of Computing Machinery veröffentlichte Studie"," zu den Antworten von ChatGPT auf Programmierfragen ergab, dass 52 % der Antworten falsche Informationen enthielten und 77 % zu ausführlich waren. Trotz dieser Mängel bevorzugten die Benutzer(innen) in 35 % der Fälle die umfassenden und gut formulierten Antworten von ChatGPT, wobei sie in 39 % der Fälle sogar Fehlinformationen übersahen. Die Bewältigung dieser Herausforderungen erfordert den Einsatz fortschrittlicher Tools und Frameworks.",[22,153,42],{"id":154},"der-ansatz-von-gitlab-für-die-sicherheit-und-das-testen-von-ki",[12,156,157],{},"GitLab hat eine umfassende Inhaltsstrategie, die sich auf die Integration von Sicherheitsmaßnahmen in den Entwicklungsworkflow konzentriert. Durch die Nutzung von GitLab Duo für die KI-gestützte Codegenerierung und GitLab Pages für die Einbettung von Testberichten können Entwickler(innen) sicherstellen, dass ihr KI-generierter Code sowohl sicher als auch zuverlässig ist.",[12,159,160,161,166],{},"Hier ist eine Schritt-für-Schritt-Anleitung für die Kombination von GitLab Duo und GitLab Pages, um durch die Implementierung eines ",[33,162,165],{"href":163,"rel":164},"https://flask.palletsprojects.com/en/3.0.x/",[],"Flask-Webservers"," sicheren und gründlich getesteten KI-generierten Code zu gewährleisten.",[168,169,50],"h3",{"id":170},"_1-ein-neues-projekt-auf-gitlabcom-erstellen",[27,172,173,182,185,188,191,194],{},[30,174,175,176,181],{},"Gehe zu ",[33,177,180],{"href":178,"rel":179},"http://GitLab.com",[],"GitLab.com",".",[30,183,184],{},"Klicke auf die Schaltfläche „Neues Projekt“.",[30,186,187],{},"Wähle „Leeres Projekt erstellen“ aus.",[30,189,190],{},"Gib einen Projektnamen ein (z. B. AI_Code_Security).",[30,192,193],{},"Lege die Sichtbarkeitsebene fest (öffentlich, intern oder privat).",[30,195,196],{},"Klicke auf „Projekt erstellen“.",[168,198,200],{"id":199},"_2-gitlabduo-codevorschläge-aktivieren","2. GitLab Duo-Codevorschläge aktivieren",[27,202,203,206,209,212],{},[30,204,205],{},"Navigiere zu deinem Projekt.",[30,207,208],{},"Klicke auf die Schaltfläche „Web IDE“, um die Web IDE zu öffnen.",[30,210,211],{},"Stelle sicher, dass GitLab Duo-Funktionen wie Codevorschläge und Duo-Chat aktiviert sind.",[30,213,214,215,220],{},"Beginne mit der Programmierung in der ",[33,216,219],{"href":217,"rel":218},"https://docs.gitlab.com/user/project/web_ide/",[],"Web IDE",". Während du tippst, liefert GitLab Duo Codevorschläge, die dir helfen, effizienter zu programmieren.",[168,222,62],{"id":223},"_3-einen-flask-webserver-erstellen",[12,225,226],{},"Du kannst mithilfe des Kommentars im Screenshot unten (grün hervorgehoben) einen Flask Webserver erstellen.",[12,228,229],{},[230,231],"img",{"alt":232,"src":233},"DGD-Testing – Bild 1","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750097192520.png",[168,235,237],{"id":236},"_4-tests-mit-gitlabduo-generieren","4. Tests mit GitLab Duo generieren",[12,239,240,241,245],{},"Unit-Tests sind für die Validierung der Funktionalität des generierten Codes unerlässlich. Verwende den Befehl ",[242,243,244],"code",{},"/tests"," von GitLab Duo, um Testvorschläge direkt in der Web IDE zu generieren. Dieser Befehl kann mit zusätzlichen Anweisungen angepasst werden, um einen Fokus auf bestimmte Aspekte wie Leistung, Regression oder die Verwendung bestimmter Frameworks zu erreichen.",[247,248,250],"h4",{"id":249},"beispiel-für-die-verwendung-in-web-ide","Beispiel für die Verwendung in Web IDE:",[27,252,253,256],{},[30,254,255],{},"Wähle den Code aus, für den du Tests generieren möchtest.",[30,257,258,259,261],{},"Verwende den Befehl ",[242,260,244],{}," und füge bei Bedarf zusätzliche Anweisungen hinzu.",[12,263,264],{},[230,265],{"alt":266,"src":267},"DGD-Testing – Bild 2","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097192521.png",[168,269,271],{"id":270},"_5-probleme-mit-ki-generiertem-code-mithilfe-von-gitlabduochat-identifizieren","5. Probleme mit KI-generiertem Code mithilfe von GitLab Duo Chat identifizieren",[12,273,274],{},"Verwende GitLab Duo Chat, um KI-generierten Code zu überprüfen und zu optimieren. Wir können zum Beispiel den Code für unseren Flask Webserver auf Sicherheitslücken überprüfen:",[276,277,283],"pre",{"className":278,"code":280,"language":281,"meta":282},[279],"language-text","Prompt: Überprüfe diesen Code auf potenzielle Sicherheitslücken und Abhängigkeitsprobleme.\n","text","",[242,284,280],{"__ignoreMap":282},[12,286,287],{},[230,288],{"alt":289,"src":290},"DGD-Testing – Bild 3","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097192523.png",[12,292,293],{},"GitLab Duo Chat kann helfen, die Sicherheitslücken im oben gezeigten Code zu identifizieren.",[168,295,80],{"id":296},"_6-testberichte-erstellen",[12,298,299],{},"Nachdem du deine Tests durchgeführt hast, erstellst du einen Testbericht, der mit GitLab Pages bereitgestellt wird.",[276,301,304],{"className":302,"code":303,"language":281,"meta":282},[279],"Prompt: Schreibe mir ein Python-Skript, das einen Testbericht erstellt, der mit GitLab Pages bereitgestellt wird.\n",[242,305,303],{"__ignoreMap":282},[12,307,308],{},[230,309],{"alt":310,"src":311},"DGD-Testing – Bild 4","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097192525.png",[12,313,314],{},"Was passiert hier?",[27,316,317,320,331],{},[30,318,319],{},"Das Skript stellt sicher, dass das Verzeichnis test_reports existiert.",[30,321,322,323,326,327,330],{},"Es führt die Datei ",[242,324,325],{},"test_server.py"," mit ",[242,328,329],{},"subprocess.run()"," aus und erfasst die Ausgabe.",[30,332,333,334,337,338,341,342,345],{},"Die Rohausgabe wird in ",[242,335,336],{},"test_reports/test_output.txt"," gespeichert.\nEs wird ein HTML-Bericht erstellt, der die Testausgabe aus Gründen der Lesbarkeit in die ",[242,339,340],{},"\u003Cpre>","-Tags einbettet und als ",[242,343,344],{},"test_reports/index.html"," gespeichert wird.",[168,347,349],{"id":348},"_7-den-testbericht-mit-gitlabpages-bereitstellen","7. Den Testbericht mit GitLab Pages bereitstellen",[12,351,352,353,356,357,360],{},"Verwende ",[33,354,124],{"href":122,"rel":355},[],", um den Testbericht zu hosten und anzuzeigen. Hier ist die Konfiguration für unsere Datei ",[242,358,359],{},".gitlab-ci.yml",", um den Testbericht bereitzustellen.",[276,362,366],{"className":363,"code":364,"language":365,"meta":282,"style":282},"language-python shiki shiki-themes github-light","stages:\n  - test\n  - deploy\ntest_job:\n  stage: test\n  script:\n    - python generate_test_report.py\n  artifacts:\n    paths:\n      - test_reports/\npages:\n  stage: deploy\n  script:\n    - mv test_reports public\n  artifacts:\n    paths:\n      - public\n\n","python",[242,367,368,377,387,395,401,407,413,422,428,434,446,452,458,463,471,476,481],{"__ignoreMap":282},[369,370,373],"span",{"class":371,"line":372},"line",1,[369,374,376],{"class":375},"sgsFI","stages:\n",[369,378,380,384],{"class":371,"line":379},2,[369,381,383],{"class":382},"sD7c4","  -",[369,385,386],{"class":375}," test\n",[369,388,390,392],{"class":371,"line":389},3,[369,391,383],{"class":382},[369,393,394],{"class":375}," deploy\n",[369,396,398],{"class":371,"line":397},4,[369,399,400],{"class":375},"test_job:\n",[369,402,404],{"class":371,"line":403},5,[369,405,406],{"class":375},"  stage: test\n",[369,408,410],{"class":371,"line":409},6,[369,411,412],{"class":375},"  script:\n",[369,414,416,419],{"class":371,"line":415},7,[369,417,418],{"class":382},"    -",[369,420,421],{"class":375}," python generate_test_report.py\n",[369,423,425],{"class":371,"line":424},8,[369,426,427],{"class":375},"  artifacts:\n",[369,429,431],{"class":371,"line":430},9,[369,432,433],{"class":375},"    paths:\n",[369,435,437,440,443],{"class":371,"line":436},10,[369,438,439],{"class":382},"      -",[369,441,442],{"class":375}," test_reports",[369,444,445],{"class":382},"/\n",[369,447,449],{"class":371,"line":448},11,[369,450,451],{"class":375},"pages:\n",[369,453,455],{"class":371,"line":454},12,[369,456,457],{"class":375},"  stage: deploy\n",[369,459,461],{"class":371,"line":460},13,[369,462,412],{"class":375},[369,464,466,468],{"class":371,"line":465},14,[369,467,418],{"class":382},[369,469,470],{"class":375}," mv test_reports public\n",[369,472,474],{"class":371,"line":473},15,[369,475,427],{"class":375},[369,477,479],{"class":371,"line":478},16,[369,480,433],{"class":375},[369,482,484,486],{"class":371,"line":483},17,[369,485,439],{"class":382},[369,487,488],{"class":375}," public\n",[12,490,491,492,495,496,499,500,503,504,507],{},"Bei dieser Konfiguration führt die Phase ",[242,493,494],{},"test_job"," das Python-Skript aus, um den Testbericht zu erstellen. Die Phase ",[242,497,498],{},"pages"," verschiebt das Verzeichnis ",[242,501,502],{},"test_reports"," in den Pfad ",[242,505,506],{},"public",", wo GitLab Pages den Inhalt bereitstellt.",[168,509,92],{"id":510},"_8-testberichte-in-mr-widgets-einbetten",[12,512,513,514,519],{},"Die Einbettung der ",[33,515,518],{"href":516,"rel":517},"https://docs.gitlab.com/ci/testing/unit_test_reports/",[],"Testberichte in MR-Widgets"," bietet einen sofortigen Einblick in die Testergebnisse und gewährleistet Transparenz und Zuverlässigkeit. Dazu kannst du den Testbericht als Artefakt in die Konfiguration deiner CI/CD-Pipeline aufnehmen:",[276,521,523],{"className":363,"code":522,"language":365,"meta":282,"style":282},"stages:\n  - build\n  - test\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"Building the project...\"\n    - # Your build commands here\n\ntest_job:\n  stage: test\n  script:\n    - mkdir -p test-reports\n    - python test_server.py > test-reports/results.xml\n  artifacts:\n    when: always\n    reports:\n      junit: test-reports/results.xml\n    paths:\n      - test-reports/results.xml\n\npages:\n  stage: deploy\n  script:\n    - mkdir .public\n    - mv test-reports .public/\n  artifacts:\n    paths:\n      - .public\n\n",[242,524,525,529,536,542,548,554,559,564,568,579,587,591,595,599,603,621,645,649,655,661,675,680,695,700,705,710,715,723,738,743,748],{"__ignoreMap":282},[369,526,527],{"class":371,"line":372},[369,528,376],{"class":375},[369,530,531,533],{"class":371,"line":379},[369,532,383],{"class":382},[369,534,535],{"class":375}," build\n",[369,537,538,540],{"class":371,"line":389},[369,539,383],{"class":382},[369,541,386],{"class":375},[369,543,544,546],{"class":371,"line":397},[369,545,383],{"class":382},[369,547,394],{"class":375},[369,549,550],{"class":371,"line":403},[369,551,553],{"emptyLinePlaceholder":552},true,"\n",[369,555,556],{"class":371,"line":409},[369,557,558],{"class":375},"build_job:\n",[369,560,561],{"class":371,"line":415},[369,562,563],{"class":375},"  stage: build\n",[369,565,566],{"class":371,"line":424},[369,567,412],{"class":375},[369,569,570,572,575],{"class":371,"line":430},[369,571,418],{"class":382},[369,573,574],{"class":375}," echo ",[369,576,578],{"class":577},"sYBdl","\"Building the project...\"\n",[369,580,581,583],{"class":371,"line":436},[369,582,418],{"class":382},[369,584,586],{"class":585},"sAwPA"," # Your build commands here\n",[369,588,589],{"class":371,"line":448},[369,590,553],{"emptyLinePlaceholder":552},[369,592,593],{"class":371,"line":454},[369,594,400],{"class":375},[369,596,597],{"class":371,"line":460},[369,598,406],{"class":375},[369,600,601],{"class":371,"line":465},[369,602,412],{"class":375},[369,604,605,607,610,613,616,618],{"class":371,"line":473},[369,606,418],{"class":382},[369,608,609],{"class":375}," mkdir ",[369,611,612],{"class":382},"-",[369,614,615],{"class":375},"p test",[369,617,612],{"class":382},[369,619,620],{"class":375},"reports\n",[369,622,623,625,628,631,634,636,639,642],{"class":371,"line":478},[369,624,418],{"class":382},[369,626,627],{"class":375}," python test_server.py ",[369,629,630],{"class":382},">",[369,632,633],{"class":375}," test",[369,635,612],{"class":382},[369,637,638],{"class":375},"reports",[369,640,641],{"class":382},"/",[369,643,644],{"class":375},"results.xml\n",[369,646,647],{"class":371,"line":483},[369,648,427],{"class":375},[369,650,652],{"class":371,"line":651},18,[369,653,654],{"class":375},"    when: always\n",[369,656,658],{"class":371,"line":657},19,[369,659,660],{"class":375},"    reports:\n",[369,662,664,667,669,671,673],{"class":371,"line":663},20,[369,665,666],{"class":375},"      junit: test",[369,668,612],{"class":382},[369,670,638],{"class":375},[369,672,641],{"class":382},[369,674,644],{"class":375},[369,676,678],{"class":371,"line":677},21,[369,679,433],{"class":375},[369,681,683,685,687,689,691,693],{"class":371,"line":682},22,[369,684,439],{"class":382},[369,686,633],{"class":375},[369,688,612],{"class":382},[369,690,638],{"class":375},[369,692,641],{"class":382},[369,694,644],{"class":375},[369,696,698],{"class":371,"line":697},23,[369,699,553],{"emptyLinePlaceholder":552},[369,701,703],{"class":371,"line":702},24,[369,704,451],{"class":375},[369,706,708],{"class":371,"line":707},25,[369,709,457],{"class":375},[369,711,713],{"class":371,"line":712},26,[369,714,412],{"class":375},[369,716,718,720],{"class":371,"line":717},27,[369,719,418],{"class":382},[369,721,722],{"class":375}," mkdir .public\n",[369,724,726,728,731,733,736],{"class":371,"line":725},28,[369,727,418],{"class":382},[369,729,730],{"class":375}," mv test",[369,732,612],{"class":382},[369,734,735],{"class":375},"reports .public",[369,737,445],{"class":382},[369,739,741],{"class":371,"line":740},29,[369,742,427],{"class":375},[369,744,746],{"class":371,"line":745},30,[369,747,433],{"class":375},[369,749,751,753],{"class":371,"line":750},31,[369,752,439],{"class":382},[369,754,755],{"class":375}," .public\n",[12,757,758],{},"Indem du den Testbericht als Artefakt einfügst und ihn im Abschnitt „reports“ angibst, zeigt GitLab die Testergebnisse automatisch in den MR-Widgets an, was einen sofortigen Einblick in die Testergebnisse ermöglicht und die Transparenz und Zuverlässigkeit erhöht.",[22,760,98],{"id":761},"fallstudie-zuverlässigkeit-von-ki-mit-sicherheitsrichtlinien-und-scannern",[12,763,764],{},"Stell dir ein Szenario vor, in dem ein KI-generierter Codeschnipsel eine Abhängigkeit verwendet, die bekannte Sicherheitslücken aufweist. Durch die Verwendung von GitLab Duo und den integrierten Sicherheitsrichtlinien würde diese Abhängigkeit bei der Codeerstellung gekennzeichnet. Das folgende Beispiel wurde von der KI erstellt:",[276,766,768],{"className":363,"code":767,"language":365,"meta":282,"style":282},"import os\nfrom flask import Flask, request\n\napp = Flask(__name__)\n\n@app.route('/search')\ndef search():\n    query = request.args.get('query')\n    execute_os_command(query)\n    return 'You searched for: ' + query\n\ndef execute_os_command(command):\n    os.system(command)\n\nif __name__ == '__main__':\n    app.run()\n\n",[242,769,770,778,791,795,813,817,831,842,857,862,876,880,890,895,899,916],{"__ignoreMap":282},[369,771,772,775],{"class":371,"line":372},[369,773,774],{"class":382},"import",[369,776,777],{"class":375}," os\n",[369,779,780,783,786,788],{"class":371,"line":379},[369,781,782],{"class":382},"from",[369,784,785],{"class":375}," flask ",[369,787,774],{"class":382},[369,789,790],{"class":375}," Flask, request\n",[369,792,793],{"class":371,"line":389},[369,794,553],{"emptyLinePlaceholder":552},[369,796,797,800,803,806,810],{"class":371,"line":397},[369,798,799],{"class":375},"app ",[369,801,802],{"class":382},"=",[369,804,805],{"class":375}," Flask(",[369,807,809],{"class":808},"sYu0t","__name__",[369,811,812],{"class":375},")\n",[369,814,815],{"class":371,"line":403},[369,816,553],{"emptyLinePlaceholder":552},[369,818,819,823,826,829],{"class":371,"line":409},[369,820,822],{"class":821},"s7eDp","@app.route",[369,824,825],{"class":375},"(",[369,827,828],{"class":577},"'/search'",[369,830,812],{"class":375},[369,832,833,836,839],{"class":371,"line":415},[369,834,835],{"class":382},"def",[369,837,838],{"class":821}," search",[369,840,841],{"class":375},"():\n",[369,843,844,847,849,852,855],{"class":371,"line":424},[369,845,846],{"class":375},"    query ",[369,848,802],{"class":382},[369,850,851],{"class":375}," request.args.get(",[369,853,854],{"class":577},"'query'",[369,856,812],{"class":375},[369,858,859],{"class":371,"line":430},[369,860,861],{"class":375},"    execute_os_command(query)\n",[369,863,864,867,870,873],{"class":371,"line":436},[369,865,866],{"class":382},"    return",[369,868,869],{"class":577}," 'You searched for: '",[369,871,872],{"class":382}," +",[369,874,875],{"class":375}," query\n",[369,877,878],{"class":371,"line":448},[369,879,553],{"emptyLinePlaceholder":552},[369,881,882,884,887],{"class":371,"line":454},[369,883,835],{"class":382},[369,885,886],{"class":821}," execute_os_command",[369,888,889],{"class":375},"(command):\n",[369,891,892],{"class":371,"line":460},[369,893,894],{"class":375},"    os.system(command)\n",[369,896,897],{"class":371,"line":465},[369,898,553],{"emptyLinePlaceholder":552},[369,900,901,904,907,910,913],{"class":371,"line":473},[369,902,903],{"class":382},"if",[369,905,906],{"class":808}," __name__",[369,908,909],{"class":382}," ==",[369,911,912],{"class":577}," '__main__'",[369,914,915],{"class":375},":\n",[369,917,918],{"class":371,"line":478},[369,919,920],{"class":375},"    app.run()\n",[12,922,923,924,929],{},"Der Suchendpunkt in diesem Beispiel ist anfällig für OS Command Injection. Durch den Einsatz der GitLab-Komponente Statische Anwendungssicherheitstests (",[33,925,928],{"href":926,"rel":927},"https://docs.gitlab.com/user/application_security/sast/",[],"SAST",") würde diese Sicherheitslücke bereits in der CI/CD-Pipeline entdeckt werden.",[247,931,933],{"id":932},"sast-scans-integrieren-um-sicherheitslücken-zu-erkennen","SAST-Scans integrieren, um Sicherheitslücken zu erkennen",[12,935,936,937,939],{},"GitLab SAST analysiert deinen Code automatisch auf Sicherheitslücken. So kannst du es in deine ",[242,938,359],{},"-Datei integrieren, um nach Problemen zu suchen:",[276,941,943],{"className":363,"code":942,"language":365,"meta":282,"style":282},"stages:\n  - build\n  - test\n  - sast\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"Building the project...\"\n    - # Your build commands here\n\ntest_job:\n  stage: test\n  script:\n    - python test_server.py > test-reports/results.xml\n  artifacts:\n    when: always\n    reports:\n      junit: test-reports/results.xml\n    paths:\n      - test-reports/results.xml\n\nsast_job:\n  stage: sast\n  script:\n    - echo \"Running SAST...\"\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n  only:\n    - branches\n\npages:\n  stage: deploy\n  script:\n    - mv test-reports public\n  artifacts:\n    paths:\n      - public\n\n",[242,944,945,949,955,961,968,974,978,982,986,990,998,1004,1008,1012,1016,1020,1038,1042,1046,1050,1062,1066,1080,1084,1089,1094,1098,1107,1111,1115,1130,1135,1143,1148,1153,1158,1163,1175,1180,1185],{"__ignoreMap":282},[369,946,947],{"class":371,"line":372},[369,948,376],{"class":375},[369,950,951,953],{"class":371,"line":379},[369,952,383],{"class":382},[369,954,535],{"class":375},[369,956,957,959],{"class":371,"line":389},[369,958,383],{"class":382},[369,960,386],{"class":375},[369,962,963,965],{"class":371,"line":397},[369,964,383],{"class":382},[369,966,967],{"class":375}," sast\n",[369,969,970,972],{"class":371,"line":403},[369,971,383],{"class":382},[369,973,394],{"class":375},[369,975,976],{"class":371,"line":409},[369,977,553],{"emptyLinePlaceholder":552},[369,979,980],{"class":371,"line":415},[369,981,558],{"class":375},[369,983,984],{"class":371,"line":424},[369,985,563],{"class":375},[369,987,988],{"class":371,"line":430},[369,989,412],{"class":375},[369,991,992,994,996],{"class":371,"line":436},[369,993,418],{"class":382},[369,995,574],{"class":375},[369,997,578],{"class":577},[369,999,1000,1002],{"class":371,"line":448},[369,1001,418],{"class":382},[369,1003,586],{"class":585},[369,1005,1006],{"class":371,"line":454},[369,1007,553],{"emptyLinePlaceholder":552},[369,1009,1010],{"class":371,"line":460},[369,1011,400],{"class":375},[369,1013,1014],{"class":371,"line":465},[369,1015,406],{"class":375},[369,1017,1018],{"class":371,"line":473},[369,1019,412],{"class":375},[369,1021,1022,1024,1026,1028,1030,1032,1034,1036],{"class":371,"line":478},[369,1023,418],{"class":382},[369,1025,627],{"class":375},[369,1027,630],{"class":382},[369,1029,633],{"class":375},[369,1031,612],{"class":382},[369,1033,638],{"class":375},[369,1035,641],{"class":382},[369,1037,644],{"class":375},[369,1039,1040],{"class":371,"line":483},[369,1041,427],{"class":375},[369,1043,1044],{"class":371,"line":651},[369,1045,654],{"class":375},[369,1047,1048],{"class":371,"line":657},[369,1049,660],{"class":375},[369,1051,1052,1054,1056,1058,1060],{"class":371,"line":663},[369,1053,666],{"class":375},[369,1055,612],{"class":382},[369,1057,638],{"class":375},[369,1059,641],{"class":382},[369,1061,644],{"class":375},[369,1063,1064],{"class":371,"line":677},[369,1065,433],{"class":375},[369,1067,1068,1070,1072,1074,1076,1078],{"class":371,"line":682},[369,1069,439],{"class":382},[369,1071,633],{"class":375},[369,1073,612],{"class":382},[369,1075,638],{"class":375},[369,1077,641],{"class":382},[369,1079,644],{"class":375},[369,1081,1082],{"class":371,"line":697},[369,1083,553],{"emptyLinePlaceholder":552},[369,1085,1086],{"class":371,"line":702},[369,1087,1088],{"class":375},"sast_job:\n",[369,1090,1091],{"class":371,"line":707},[369,1092,1093],{"class":375},"  stage: sast\n",[369,1095,1096],{"class":371,"line":712},[369,1097,412],{"class":375},[369,1099,1100,1102,1104],{"class":371,"line":717},[369,1101,418],{"class":382},[369,1103,574],{"class":375},[369,1105,1106],{"class":577},"\"Running SAST...\"\n",[369,1108,1109],{"class":371,"line":725},[369,1110,427],{"class":375},[369,1112,1113],{"class":371,"line":740},[369,1114,660],{"class":375},[369,1116,1117,1120,1122,1125,1127],{"class":371,"line":745},[369,1118,1119],{"class":375},"      sast: gl",[369,1121,612],{"class":382},[369,1123,1124],{"class":375},"sast",[369,1126,612],{"class":382},[369,1128,1129],{"class":375},"report.json\n",[369,1131,1132],{"class":371,"line":750},[369,1133,1134],{"class":375},"  only:\n",[369,1136,1138,1140],{"class":371,"line":1137},32,[369,1139,418],{"class":382},[369,1141,1142],{"class":375}," branches\n",[369,1144,1146],{"class":371,"line":1145},33,[369,1147,553],{"emptyLinePlaceholder":552},[369,1149,1151],{"class":371,"line":1150},34,[369,1152,451],{"class":375},[369,1154,1156],{"class":371,"line":1155},35,[369,1157,457],{"class":375},[369,1159,1161],{"class":371,"line":1160},36,[369,1162,412],{"class":375},[369,1164,1166,1168,1170,1172],{"class":371,"line":1165},37,[369,1167,418],{"class":382},[369,1169,730],{"class":375},[369,1171,612],{"class":382},[369,1173,1174],{"class":375},"reports public\n",[369,1176,1178],{"class":371,"line":1177},38,[369,1179,427],{"class":375},[369,1181,1183],{"class":371,"line":1182},39,[369,1184,433],{"class":375},[369,1186,1188,1190],{"class":371,"line":1187},40,[369,1189,439],{"class":382},[369,1191,488],{"class":375},[12,1193,1194,1195,1198,1199,1202],{},"In dieser Konfiguration wird SAST in der Phase ",[242,1196,1197],{},"sast_job"," ausgeführt, um Sicherheitslücken im Code zu erkennen, und einen Bericht (",[242,1200,1201],{},"gl-sast-report.json",") zu erstellen, der in die Pipeline-Artefakte aufgenommen wird. Durch die Integration von Sicherheitsrichtlinien und robusten Test-Frameworks hilft GitLab Duo Kund(inn)en dabei, sicherzustellen, dass ihr KI-generierter Code sowohl effizient als auch sicher ist.",[22,1204,104],{"id":1205},"lege-noch-heute-los",[12,1207,1208],{},"Die Integration von KI in die Softwareentwicklung bringt erhebliche Vorteile, aber auch neue Herausforderungen mit sich. Durch die Verwendung von Tools wie GitLab Duo und GitLab Pages können Entwickler(innen) sicherstellen, dass ihr KI-generierter Code sicher, gut getestet und zuverlässig ist. Erkunde diese Tools noch heute und beteilige dich an der Diskussion über die Verbesserung der Sicherheit und des Testens von KI.",[1210,1211,1212],"blockquote",{},[12,1213,1214,1215,1220],{}," ",[33,1216,1219],{"href":1217,"rel":1218},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/blog&glm_content=default-saas-trial",[],"Starte noch heute eine Testversion von GitLab Ultimate",", um GitLab Duo und GitLab Pages auszuprobieren.",[22,1222,1224],{"id":1223},"lies-mehr-über-die-reihe-entwicklung-von-gitlabduo","Lies mehr über die Reihe „Entwicklung von GitLab Duo“",[27,1226,1227,1234,1241],{},[30,1228,1229],{},[33,1230,1233],{"href":1231,"rel":1232},"https://about.gitlab.com/de-de/blog/developing-gitlab-duo-how-we-validate-and-test-ai-models-at-scale/",[],"Entwicklung von GitLab Duo: Wie wir KI-Modelle im großen Maßstab validieren und testen",[30,1235,1236],{},[33,1237,1240],{"href":1238,"rel":1239},"https://about.gitlab.com/de-de/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/",[],"Entwicklung von GitLab Duo: KI-Impact-Analyse-Dashboard misst den ROI von KI",[30,1242,1243],{},[33,1244,1247],{"href":1245,"rel":1246},"https://about.gitlab.com/de-de/blog/developing-gitlab-duo-how-we-are-dogfooding-our-ai-features/",[],"Entwicklung von GitLab Duo: Dogfooding unserer KI-Funktionen",[1249,1250,1251],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}",{"title":282,"searchDepth":379,"depth":379,"links":1253},[1254,1255,1256,1266,1267,1268],{"id":24,"depth":379,"text":25},{"id":128,"depth":379,"text":36},{"id":154,"depth":379,"text":42,"children":1257},[1258,1259,1260,1261,1262,1263,1264,1265],{"id":170,"depth":389,"text":50},{"id":199,"depth":389,"text":200},{"id":223,"depth":389,"text":62},{"id":236,"depth":389,"text":237},{"id":270,"depth":389,"text":271},{"id":296,"depth":389,"text":80},{"id":348,"depth":389,"text":349},{"id":510,"depth":389,"text":92},{"id":761,"depth":379,"text":98},{"id":1205,"depth":379,"text":104},{"id":1223,"depth":379,"text":1224},"ai","2024-05-30","Erfahre Schritt für Schritt, wie du die Zuverlässigkeit und Sicherheit von KI-generiertem Code mithilfe von GitLab Duo und GitLab Pages (einschließlich Codebeispielen und Prompts) verbessern kannst.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097183/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750097183481.png",{},"/de-de/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code",{"ogTitle":1279,"ogImage":1275,"ogDescription":1271,"ogSiteName":1280,"noIndex":1274,"ogType":1281,"ogUrl":1282,"title":1279,"canonicalUrls":1282,"description":1271},"GitLab Duo: So testen wir KI-generierten Code","https://about.gitlab.com","article","https://about.gitlab.com/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code","how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code","de-de/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code",[1286,1287,1288,1289],"AI","DevSecOps","tutorial","security","BlogPost","2025-05-29","A8j_BhqTYda7fCTa1xDCwBr0tVeLBfrMmwsNHErmTjk",{"logo":1294,"freeTrial":1299,"sales":1304,"login":1309,"items":1314,"search":1643,"minimal":1677,"duo":1695,"switchNav":1704,"pricingDeployment":1715},{"config":1295},{"href":1296,"dataGaName":1297,"dataGaLocation":1298},"/de-de/","gitlab logo","header",{"text":1300,"config":1301},"Kostenlose Testversion anfordern",{"href":1302,"dataGaName":1303,"dataGaLocation":1298},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":1305,"config":1306},"Demo anfordern",{"href":1307,"dataGaName":1308,"dataGaLocation":1298},"/de-de/sales/?contact-topic=request-demo","sales",{"text":1310,"config":1311},"Anmelden",{"href":1312,"dataGaName":1313,"dataGaLocation":1298},"https://gitlab.com/users/sign_in/","sign in",[1315,1344,1446,1451,1565,1621],{"text":1316,"config":1317,"menu":1319},"Plattform",{"dataNavLevelOne":1318},"platform",{"type":1320,"columns":1321},"cards",[1322,1328,1336],{"title":1316,"description":1323,"link":1324},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":1325,"config":1326},"Die Plattform erkunden",{"href":1327,"dataGaName":1318,"dataGaLocation":1298},"/de-de/platform/",{"title":1329,"description":1330,"link":1331},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":1332,"config":1333},"Lerne GitLab Duo kennen",{"href":1334,"dataGaName":1335,"dataGaLocation":1298},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1337,"description":1338,"link":1339},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":1340,"config":1341},"Mehr erfahren",{"href":1342,"dataGaName":1343,"dataGaLocation":1298},"/de-de/why-gitlab/","why gitlab",{"text":1345,"left":552,"config":1346,"menu":1348},"Produkt",{"dataNavLevelOne":1347},"solutions",{"type":1349,"link":1350,"columns":1354,"feature":1425},"lists",{"text":1351,"config":1352},"Alle Lösungen anzeigen",{"href":1353,"dataGaName":1347,"dataGaLocation":1298},"/de-de/solutions/",[1355,1380,1403],{"title":1356,"description":1357,"link":1358,"items":1363},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":1359},{"icon":1360,"href":1361,"dataGaName":1362,"dataGaLocation":1298},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[1364,1368,1371,1376],{"text":1365,"config":1366},"CI/CD",{"href":1367,"dataGaLocation":1298,"dataGaName":1365},"/de-de/solutions/continuous-integration/",{"text":1329,"config":1369},{"href":1334,"dataGaLocation":1298,"dataGaName":1370},"gitlab duo agent platform - product menu",{"text":1372,"config":1373},"Quellcodeverwaltung",{"href":1374,"dataGaLocation":1298,"dataGaName":1375},"/de-de/solutions/source-code-management/","Source Code Management",{"text":1377,"config":1378},"Automatische Softwarebereitstellung",{"href":1361,"dataGaLocation":1298,"dataGaName":1379},"Automated software delivery",{"title":1381,"description":1382,"link":1383,"items":1388},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":1384},{"href":1385,"dataGaName":1386,"dataGaLocation":1298,"icon":1387},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1389,1393,1398],{"text":1390,"config":1391},"Anwendungssicherheitstests",{"href":1385,"dataGaName":1392,"dataGaLocation":1298},"Application security testing",{"text":1394,"config":1395},"Schutz der Software-Lieferkette",{"href":1396,"dataGaLocation":1298,"dataGaName":1397},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":1399,"config":1400},"Software-Compliance",{"href":1401,"dataGaName":1402,"dataGaLocation":1298},"/de-de/solutions/software-compliance/","software compliance",{"title":1404,"link":1405,"items":1410},"Messung",{"config":1406},{"icon":1407,"href":1408,"dataGaName":1409,"dataGaLocation":1298},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[1411,1415,1420],{"text":1412,"config":1413},"Sichtbarkeit und Messung",{"href":1408,"dataGaLocation":1298,"dataGaName":1414},"Visibility and Measurement",{"text":1416,"config":1417},"Wertstrommanagement",{"href":1418,"dataGaLocation":1298,"dataGaName":1419},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":1421,"config":1422},"Analysen und Einblicke",{"href":1423,"dataGaLocation":1298,"dataGaName":1424},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":1426,"type":1349,"items":1427},"GitLab für",[1428,1434,1440],{"text":1429,"config":1430},"Enterprise",{"icon":1431,"href":1432,"dataGaLocation":1298,"dataGaName":1433},"Building","/de-de/enterprise/","enterprise",{"text":1435,"config":1436},"Kleinunternehmen",{"icon":1437,"href":1438,"dataGaLocation":1298,"dataGaName":1439},"Work","/de-de/small-business/","small business",{"text":1441,"config":1442},"Öffentlicher Sektor",{"icon":1443,"href":1444,"dataGaLocation":1298,"dataGaName":1445},"Organization","/de-de/solutions/public-sector/","public sector",{"text":1447,"config":1448},"Preise",{"href":1449,"dataGaName":1450,"dataGaLocation":1298,"dataNavLevelOne":1450},"/de-de/pricing/","pricing",{"text":1452,"config":1453,"menu":1455},"Ressourcen",{"dataNavLevelOne":1454},"resources",{"type":1349,"link":1456,"columns":1460,"feature":1554},{"text":1457,"config":1458},"Alle Ressourcen anzeigen",{"href":1459,"dataGaName":1454,"dataGaLocation":1298},"/de-de/resources/",[1461,1494,1521],{"title":1462,"items":1463},"Erste Schritte",[1464,1469,1474,1479,1484,1489],{"text":1465,"config":1466},"Installieren",{"href":1467,"dataGaName":1468,"dataGaLocation":1298},"/de-de/install/","install",{"text":1470,"config":1471},"Kurzanleitungen",{"href":1472,"dataGaName":1473,"dataGaLocation":1298},"/de-de/get-started/","quick setup checklists",{"text":1475,"config":1476},"Lernen",{"href":1477,"dataGaLocation":1298,"dataGaName":1478},"https://university.gitlab.com/","learn",{"text":1480,"config":1481},"Produktdokumentation",{"href":1482,"dataGaName":1483,"dataGaLocation":1298},"https://docs.gitlab.com/","product documentation",{"text":1485,"config":1486},"Best-Practice-Videos",{"href":1487,"dataGaName":1488,"dataGaLocation":1298},"/de-de/getting-started-videos/","best practice videos",{"text":1490,"config":1491},"Integrationen",{"href":1492,"dataGaName":1493,"dataGaLocation":1298},"/de-de/integrations/","integrations",{"title":1495,"items":1496},"Entdecken",[1497,1502,1507,1512,1516],{"text":1498,"config":1499},"Kundenerfolge",{"href":1500,"dataGaName":1501,"dataGaLocation":1298},"/de-de/customers/","customer success stories",{"text":1503,"config":1504},"Blog",{"href":1505,"dataGaName":1506,"dataGaLocation":1298},"/de-de/blog/","blog",{"text":1508,"config":1509},"Demo-Hub",{"href":1510,"dataGaName":1511,"dataGaLocation":1298},"/de-de/demo-hub/","demo hub",{"text":1513,"config":1514},"The Source",{"href":1515,"dataGaName":1506,"dataGaLocation":1298},"/de-de/the-source/",{"text":1517,"config":1518},"Remote",{"href":1519,"dataGaName":1520,"dataGaLocation":1298},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1522,"items":1523},"Vernetzen",[1524,1529,1534,1539,1544,1549],{"text":1525,"config":1526},"GitLab-Services",{"href":1527,"dataGaName":1528,"dataGaLocation":1298},"/de-de/services/","services",{"text":1530,"config":1531},"Beitragen",{"href":1532,"dataGaName":1533,"dataGaLocation":1298},"https://contributors.gitlab.com","contribute",{"text":1535,"config":1536},"Community",{"href":1537,"dataGaName":1538,"dataGaLocation":1298},"/community/","community",{"text":1540,"config":1541},"Forum",{"href":1542,"dataGaName":1543,"dataGaLocation":1298},"https://forum.gitlab.com/","forum",{"text":1545,"config":1546},"Veranstaltungen",{"href":1547,"dataGaName":1548,"dataGaLocation":1298},"/events/","events",{"text":1550,"config":1551},"Partner",{"href":1552,"dataGaName":1553,"dataGaLocation":1298},"/de-de/partners/","partners",{"config":1555,"title":1558,"text":1559,"link":1560},{"background":1556,"textColor":1557},"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":1561,"config":1562},"Aktuelle Nachrichten",{"href":1563,"dataGaName":1564,"dataGaLocation":1298},"/de-de/whats-new/","whats new",{"text":1566,"config":1567,"menu":1569},"Unternehmen",{"dataNavLevelOne":1568},"company",{"type":1349,"columns":1570},[1571],{"items":1572},[1573,1578,1584,1586,1591,1596,1601,1606,1611,1616],{"text":1574,"config":1575},"Über",{"href":1576,"dataGaName":1577,"dataGaLocation":1298},"/de-de/company/","about",{"text":1579,"config":1580,"footerGa":1583},"Karriere",{"href":1581,"dataGaName":1582,"dataGaLocation":1298},"/jobs/","jobs",{"dataGaName":1582},{"text":1545,"config":1585},{"href":1547,"dataGaName":1548,"dataGaLocation":1298},{"text":1587,"config":1588},"Geschäftsführung",{"href":1589,"dataGaName":1590,"dataGaLocation":1298},"/company/team/e-group/","leadership",{"text":1592,"config":1593},"Handbuch",{"href":1594,"dataGaName":1595,"dataGaLocation":1298},"https://handbook.gitlab.com/","handbook",{"text":1597,"config":1598},"Investor Relations",{"href":1599,"dataGaName":1600,"dataGaLocation":1298},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1602,"config":1603},"Trust Center",{"href":1604,"dataGaName":1605,"dataGaLocation":1298},"/de-de/security/","trust center",{"text":1607,"config":1608},"AI Transparency Center",{"href":1609,"dataGaName":1610,"dataGaLocation":1298},"/de-de/ai-transparency-center/","ai transparency center",{"text":1612,"config":1613},"Newsletter",{"href":1614,"dataGaName":1615,"dataGaLocation":1298},"/company/contact/#contact-forms","newsletter",{"text":1617,"config":1618},"Presse",{"href":1619,"dataGaName":1620,"dataGaLocation":1298},"/press/","press",{"text":1622,"config":1623,"menu":1624},"Kontakt",{"dataNavLevelOne":1568},{"type":1349,"columns":1625},[1626],{"items":1627},[1628,1633,1638],{"text":1629,"config":1630},"Vertrieb kontaktieren",{"href":1631,"dataGaName":1632,"dataGaLocation":1298},"/de-de/sales/","talk to sales",{"text":1634,"config":1635},"Support-Portal",{"href":1636,"dataGaName":1637,"dataGaLocation":1298},"https://support.gitlab.com/hc/en-us","support portal",{"text":1639,"config":1640},"Kundenportal",{"href":1641,"dataGaName":1642,"dataGaLocation":1298},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1644,"login":1645,"suggestions":1652},"Schließen",{"text":1646,"link":1647},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1648,"config":1649},"gitlab.com",{"href":1312,"dataGaName":1650,"dataGaLocation":1651},"search login","search",{"text":1653,"default":1654},"Vorschläge",[1655,1657,1662,1664,1669,1674],{"text":1329,"config":1656},{"href":1334,"dataGaName":1329,"dataGaLocation":1651},{"text":1658,"config":1659},"Codevorschläge (KI)",{"href":1660,"dataGaName":1661,"dataGaLocation":1651},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1365,"config":1663},{"href":1367,"dataGaName":1365,"dataGaLocation":1651},{"text":1665,"config":1666},"GitLab auf AWS",{"href":1667,"dataGaName":1668,"dataGaLocation":1651},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1670,"config":1671},"GitLab auf Google Cloud",{"href":1672,"dataGaName":1673,"dataGaLocation":1651},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1337,"config":1675},{"href":1342,"dataGaName":1676,"dataGaLocation":1651},"Why GitLab?",{"freeTrial":1678,"mobileIcon":1683,"desktopIcon":1688,"secondaryButton":1691},{"text":1679,"config":1680},"Kostenlos testen",{"href":1681,"dataGaName":1303,"dataGaLocation":1682},"https://gitlab.com/-/trials/new/","nav",{"altText":1684,"config":1685},"GitLab-Symbol",{"src":1686,"dataGaName":1687,"dataGaLocation":1682},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1684,"config":1689},{"src":1690,"dataGaName":1687,"dataGaLocation":1682},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1462,"config":1692},{"href":1693,"dataGaName":1694,"dataGaLocation":1682},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1696,"mobileIcon":1700,"desktopIcon":1702},{"text":1697,"config":1698},"Mehr über GitLab Duo erfahren",{"href":1334,"dataGaName":1699,"dataGaLocation":1682},"gitlab duo",{"altText":1684,"config":1701},{"src":1686,"dataGaName":1687,"dataGaLocation":1682},{"altText":1684,"config":1703},{"src":1690,"dataGaName":1687,"dataGaLocation":1682},{"button":1705,"mobileIcon":1710,"desktopIcon":1712},{"text":1706,"config":1707},"/Option",{"href":1708,"dataGaName":1709,"dataGaLocation":1682},"#contact","switch",{"altText":1684,"config":1711},{"src":1686,"dataGaName":1687,"dataGaLocation":1682},{"altText":1684,"config":1713},{"src":1714,"dataGaName":1687,"dataGaLocation":1682},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1716,"mobileIcon":1721,"desktopIcon":1723},{"text":1717,"config":1718},"Zurück zur Preisübersicht",{"href":1449,"dataGaName":1719,"dataGaLocation":1682,"icon":1720},"back to pricing","GoBack",{"altText":1684,"config":1722},{"src":1686,"dataGaName":1687,"dataGaLocation":1682},{"altText":1684,"config":1724},{"src":1690,"dataGaName":1687,"dataGaLocation":1682},{"title":1726,"button":1727,"config":1731},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":1340,"config":1728},{"href":1729,"dataGaName":1730,"dataGaLocation":1298},"/de-de/gitlab-orbit/","orbit",{"layout":1732,"disabled":1274},"release",{"data":1734},{"text":1735,"source":1736,"edit":1742,"contribute":1747,"config":1752,"items":1757,"minimal":1962},"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,1855,1897,1929],{"title":1447,"links":1759,"subMenu":1774},[1760,1764,1769],{"text":1761,"config":1762},"Tarife anzeigen",{"href":1449,"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":1622,"links":1776},[1777,1779,1781,1783,1788,1793,1798],{"text":1629,"config":1778},{"href":1631,"dataGaName":1308,"dataGaLocation":1741},{"text":1634,"config":1780},{"href":1636,"dataGaName":1637,"dataGaLocation":1741},{"text":1639,"config":1782},{"href":1641,"dataGaName":1642,"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":552},"cookie preferences","ot-sdk-btn",{"title":1345,"links":1804,"subMenu":1813},[1805,1809],{"text":1806,"config":1807},"DevSecOps-Plattform",{"href":1327,"dataGaName":1808,"dataGaLocation":1741},"devsecops platform",{"text":1810,"config":1811},"KI-unterstützte Entwicklung",{"href":1334,"dataGaName":1812,"dataGaLocation":1741},"ai-assisted development",[1814],{"title":1815,"links":1816},"Themen",[1817,1821,1826,1831,1836,1840,1845,1850],{"text":1365,"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":1287,"config":1837},{"href":1838,"dataGaName":1839,"dataGaLocation":1741},"/de-de/topics/devsecops/","devsecops",{"text":1841,"config":1842},"Cloud-nativ",{"href":1843,"dataGaName":1844,"dataGaLocation":1741},"/de-de/topics/cloud-native/","cloud native",{"text":1846,"config":1847},"KI für das Programmieren",{"href":1848,"dataGaName":1849,"dataGaLocation":1741},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1851,"config":1852},"Agentische KI",{"href":1853,"dataGaName":1854,"dataGaLocation":1741},"/de-de/topics/agentic-ai/","agentic ai",{"title":1856,"links":1857},"Lösungen",[1858,1861,1863,1868,1872,1875,1878,1881,1883,1885,1887,1892],{"text":1390,"config":1859},{"href":1385,"dataGaName":1860,"dataGaLocation":1741},"Application Security Testing",{"text":1377,"config":1862},{"href":1361,"dataGaName":1362,"dataGaLocation":1741},{"text":1864,"config":1865},"Agile Entwicklung",{"href":1866,"dataGaName":1867,"dataGaLocation":1741},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1869,"config":1870},"SCM",{"href":1374,"dataGaName":1871,"dataGaLocation":1741},"source code management",{"text":1365,"config":1873},{"href":1367,"dataGaName":1874,"dataGaLocation":1741},"continuous integration & delivery",{"text":1416,"config":1876},{"href":1418,"dataGaName":1877,"dataGaLocation":1741},"value stream management",{"text":1822,"config":1879},{"href":1880,"dataGaName":1825,"dataGaLocation":1741},"/de-de/solutions/gitops/",{"text":1429,"config":1882},{"href":1432,"dataGaName":1433,"dataGaLocation":1741},{"text":1435,"config":1884},{"href":1438,"dataGaName":1439,"dataGaLocation":1741},{"text":1441,"config":1886},{"href":1444,"dataGaName":1445,"dataGaLocation":1741},{"text":1888,"config":1889},"Bildungswesen",{"href":1890,"dataGaName":1891,"dataGaLocation":1741},"/de-de/solutions/education/","education",{"text":1893,"config":1894},"Finanzdienstleistungen",{"href":1895,"dataGaName":1896,"dataGaLocation":1741},"/de-de/solutions/finance/","financial services",{"title":1452,"links":1898},[1899,1901,1903,1905,1908,1910,1913,1915,1917,1919,1921,1923,1925,1927],{"text":1465,"config":1900},{"href":1467,"dataGaName":1468,"dataGaLocation":1741},{"text":1470,"config":1902},{"href":1472,"dataGaName":1473,"dataGaLocation":1741},{"text":1475,"config":1904},{"href":1477,"dataGaName":1478,"dataGaLocation":1741},{"text":1480,"config":1906},{"href":1482,"dataGaName":1907,"dataGaLocation":1741},"docs",{"text":1503,"config":1909},{"href":1505,"dataGaName":1506,"dataGaLocation":1741},{"text":1911,"config":1912},"Neuerungen",{"href":1563,"dataGaName":1564,"dataGaLocation":1741},{"text":1498,"config":1914},{"href":1500,"dataGaName":1501,"dataGaLocation":1741},{"text":1517,"config":1916},{"href":1519,"dataGaName":1520,"dataGaLocation":1741},{"text":1525,"config":1918},{"href":1527,"dataGaName":1528,"dataGaLocation":1741},{"text":1530,"config":1920},{"href":1532,"dataGaName":1533,"dataGaLocation":1741},{"text":1535,"config":1922},{"href":1537,"dataGaName":1538,"dataGaLocation":1741},{"text":1540,"config":1924},{"href":1542,"dataGaName":1543,"dataGaLocation":1741},{"text":1545,"config":1926},{"href":1547,"dataGaName":1548,"dataGaLocation":1741},{"text":1550,"config":1928},{"href":1552,"dataGaName":1553,"dataGaLocation":1741},{"title":1566,"links":1930},[1931,1933,1935,1937,1939,1941,1946,1951,1953,1955,1957],{"text":1574,"config":1932},{"href":1576,"dataGaName":1568,"dataGaLocation":1741},{"text":1579,"config":1934},{"href":1581,"dataGaName":1582,"dataGaLocation":1741},{"text":1587,"config":1936},{"href":1589,"dataGaName":1590,"dataGaLocation":1741},{"text":1592,"config":1938},{"href":1594,"dataGaName":1595,"dataGaLocation":1741},{"text":1597,"config":1940},{"href":1599,"dataGaName":1600,"dataGaLocation":1741},{"text":1942,"config":1943},"Nachhaltigkeit",{"href":1944,"dataGaName":1945,"dataGaLocation":1741},"/sustainability/","Sustainability",{"text":1947,"config":1948},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1949,"dataGaName":1950,"dataGaLocation":1741},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1602,"config":1952},{"href":1604,"dataGaName":1605,"dataGaLocation":1741},{"text":1612,"config":1954},{"href":1614,"dataGaName":1615,"dataGaLocation":1741},{"text":1617,"config":1956},{"href":1619,"dataGaName":1620,"dataGaLocation":1741},{"text":1958,"config":1959},"Transparenzerklärung zu moderner Sklaverei",{"href":1960,"dataGaName":1961,"dataGaLocation":1741},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1963},[1964,1967,1970],{"text":1965,"config":1966},"Terms",{"href":1791,"dataGaName":1792,"dataGaLocation":1741},{"text":1968,"config":1969},"Cookies",{"dataGaName":1801,"dataGaLocation":1741,"id":1802,"isOneTrustButton":552},{"text":1971,"config":1972},"Datenschutz",{"href":1796,"dataGaName":1797,"dataGaLocation":1741},[1974],{"id":1975,"title":1976,"body":1273,"config":1977,"content":1979,"description":1273,"extension":1983,"meta":1984,"navigation":552,"path":1985,"seo":1986,"stem":1987,"__hash__":1988},"blogAuthors/en-us/blog/authors/david-oregan.yml","David Oregan",{"template":1978},"BlogAuthor",{"name":7,"config":1980},{"headshot":1981,"ctfId":1982},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659853/Blog/Author%20Headshots/oregand-headshot.png","oregand","yml",{},"/en-us/blog/authors/david-oregan",{},"en-us/blog/authors/david-oregan","CX5gLc3Gs5FrmvpMNVkBtC5zRi3vj8l3wJGnW0iSa6Y",[1990,1998,2006],{"title":1991,"description":1992,"heroImage":1993,"category":1269,"date":1994,"authors":1995,"slug":1997,"externalUrl":1273},"Wie ich einen Demo-Generator mit Duo Agent Platform baute","So sahen Demos nicht immer aus. Ein Rückblick auf ihre Entwicklung, plus ein Tutorial zum Bau einer eigenen Demo und eines eigenen Agenten.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-08-13",[1996],"Itzik Gan Baruch","agentic-click-through-demo",{"title":1999,"description":2000,"heroImage":2001,"category":1269,"date":2002,"authors":2003,"slug":2005,"externalUrl":1273},"Governance für agentische KI, MCPs und KI-Code-Assistenten","KI-Agenten schreiben, pushen und deployen, ohne dass jeder Schritt geprüft wird. Ein praktisches Framework für Zugriff, Berechtigungen und Audit-Trails.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785337625/ifzlc2hyzaxhzmjgyymh.png","2026-07-31",[2004],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":2007,"description":2008,"heroImage":2009,"category":1269,"date":2010,"authors":2011,"slug":2013,"externalUrl":1273},"Claude Opus 5 auf GitLab: Reasoning für die anspruchsvollsten Aufgaben","Anthropics Claude Opus 5 ist jetzt auf der GitLab Duo Agent Platform verfügbar und bringt tieferes Reasoning für die anspruchsvollsten Aufgaben.","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","2026-07-27",[2012],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":2015},[2016,2029,2041,2052],{"id":2017,"categories":2018,"header":2019,"text":2020,"button":2021,"image":2026},"ai-modernization",[1269],"Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":2022,"config":2023},"Ermittle deinen KI-Reifegrad",{"href":2024,"dataGaName":2025,"dataGaLocation":1506},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":2027},{"src":2028},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2030,"categories":2031,"header":2033,"text":2020,"button":2034,"image":2038},"devops-modernization",[2032,1839],"product","Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":2035,"config":2036},"Ermittle deinen DevOps-Reifegrad",{"href":2037,"dataGaName":2025,"dataGaLocation":1506},"/de-de/assessments/devops-modernization-assessment/",{"config":2039},{"src":2040},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2042,"categories":2043,"header":2044,"text":2020,"button":2045,"image":2049},"security-modernization",[1289],"Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":2046,"config":2047},"Ermittle deinen Sicherheitsreifegrad",{"href":2048,"dataGaName":2025,"dataGaLocation":1506},"/de-de/assessments/security-modernization-assessment/",{"config":2050},{"src":2051},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2053,"paths":2054,"header":2057,"text":2058,"button":2059,"image":2064},"github-azure-migration",[2055,2056],"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":2060,"config":2061},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":2062,"dataGaName":2063,"dataGaLocation":1506},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2065},{"src":2040},{"header":2067,"blurb":2068,"button":2069,"secondaryButton":2074},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":2070,"config":2071},"Kostenlosen Test starten",{"href":2072,"dataGaName":1303,"dataGaLocation":2073},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1629,"config":2075},{"href":1631,"dataGaName":1308,"dataGaLocation":2073},1786803737405]