<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://about.gitlab.com/blog</id>
    <title>GitLab</title>
    <updated>2026-08-14T19:14:05.959Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>The GitLab Team</name>
    </author>
    <link rel="alternate" href="https://about.gitlab.com/blog"/>
    <link rel="self" href="https://about.gitlab.com/de-de/atom.xml"/>
    <subtitle>GitLab Blog RSS feed</subtitle>
    <icon>https://about.gitlab.com/favicon.ico</icon>
    <rights>All rights reserved 2026</rights>
    <entry>
        <title type="html"><![CDATA[Wie ich einen Demo-Generator mit Duo Agent Platform baute]]></title>
        <id>https://about.gitlab.com/de-de/blog/agentic-click-through-demo/</id>
        <link href="https://about.gitlab.com/de-de/blog/agentic-click-through-demo/"/>
        <updated>2026-08-13T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Früher saß ich Tage an einer Demo: Screenshots, Erzähltext, vieles mehr in einem externen Werkzeug zusammenbauen, vortragen, später Feedback einsammeln. Und jedes Mal, wenn sich die Funktionen änderten, ging es von vorn los. Vor einigen Monaten habe ich den größten Teil davon an einen Agenten in der GitLab Duo Agent Platform übergeben.</p><p>Die <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> ist auf intelligente Orchestrierung ausgelegt und führt agentische Workflows über den gesamten Software-Lebenszyklus aus. Sie ist aber flexibel genug, um auch wiederkehrende Arbeit jenseits der Entwicklung zu übernehmen. Ich habe sie stattdessen auf die Demo-Erstellung angesetzt, und das lief so gut, dass sich derselbe Versuch mit jeder Aufgabe lohnt, die gerade auf dem eigenen Schreibtisch liegt. Für den Einstieg habe ich dieses <a href="https://about.gitlab.com/de-de/blog/gitlab-duo-agent-platform-complete-getting-started-guide/" rel="">praxisnahe Tutorial</a> geschrieben. Und noch etwas: Man muss dafür nicht programmieren können. Auch aus nicht-technischen Rollen kommt zunehmend Interesse daran, agentische Workflows wie diesen mit GitLab zu betreiben. Wer sich darin wiedererkennt, kann direkt mitmachen.</p><p><strong>In diesem Artikel:</strong></p><ul><li><a href="#warum-click-through-demos-so-wirksam-sind">Warum Click-Through-Demos so wirksam sind</a></li><li><a href="#die-entwicklung-von-vms-%C3%BCber-externe-demo-tools-zu-agenten">Die Entwicklung: von VMs über externe Demo-Tools zu Agenten</a></li><li><a href="#die-phasen-einer-demo-erstellung">Die Phasen einer Demo-Erstellung</a></li><li><a href="#so-funktioniert-der-demo-generator">So funktioniert der Demo-Generator</a></li><li><a href="#demos-liegen-jetzt-im-code">Demos liegen jetzt im Code</a></li><li><a href="#was-die-gitlab-duo-agent-platform-m%C3%B6glich-gemacht-hat">Was die GitLab Duo Agent Platform möglich gemacht hat</a></li><li><a href="#den-ersten-agenten-bauen">Den ersten Agenten bauen</a></li></ul><blockquote><p>🎯 Die <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel=""><strong>GitLab Duo Agent Platform</strong></a> heute ausprobieren!</p></blockquote><h2 id="warum-click-through-demos-so-wirksam-sind">Warum Click-Through-Demos so wirksam sind</h2><p>Wer eine Funktion in Aktion sieht, versteht sie besser als beim Lesen. Live-Demos sind allerdings heikel: Sie brauchen Produktzugang und genug Routine, um sich sicher durch die Oberfläche zu bewegen.</p><p>Eine Click-Through-Demo löst das. Man klickt die Schritte selbst durch, geführt von einem kurzen Erzähltext bei jedem Schritt. Anders als bei einem Video bestimmt man das Tempo selbst. Und anders als ein echter Zugang, für den eine reale Umgebung nötig ist, ist sie nur ein Link: frei teilbar, wiederverwendbar und jedes Mal gleich.</p><p>Beispiele finden sich im <a href="https://dap-demo-hub-dac14a.gitlab.io/" rel="">GitLab Demo Hub</a>.</p><p><img alt="Eine Click-Through-Demo führt Schritt für Schritt durch einen echten Produktablauf" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783421764/x0oyszct1nuhzg7sxv0z.png" title="Eine Click-Through-Demo führt Schritt für Schritt durch einen echten Produktablauf" /></p><h2 id="die-entwicklung-von-vms-über-externe-demo-tools-zu-agenten">Die Entwicklung: von VMs über externe Demo-Tools zu Agenten</h2><p>So sahen Demos nicht immer aus. Über meine Berufsjahre hinweg ist daraus diese Entwicklung geworden:</p><ul><li><strong>VMs (2000er)</strong>: virtuelle Maschinen mit vorinstalliertem Produkt und Demo-Inhalten, später zentral auf ESX-Servern.</li><li><strong>Externe Werkzeuge (SaaS-Ära)</strong>: Wechsel auf Anbieterplattformen mit eingebauter Analytik, die aber weiterhin von Hand gebaut werden mussten und an die Infrastruktur des Anbieters gebunden blieben.</li><li><strong>Agentisch (jetzt)</strong>: Agenten erzeugen Demos aus einem Prompt, ausgeliefert aus demselben Projekt, in dem sie entstehen, ohne Abhängigkeit von einem Anbieter.</li></ul><p>Jede Schicht machte Demos zugänglicher. Die agentische Schicht macht sie tragfähig.</p><h2 id="die-phasen-einer-demo-erstellung">Die Phasen einer Demo-Erstellung</h2><p>Zu einer Click-Through-Demo gehören diese Phasen:</p><ol><li><strong>Die Funktion verstehen</strong>: Dokumentation lesen, Issues und Slack durchgehen, sich mit Product Managern und Engineering abstimmen, um wirklich zu erfassen, was gezeigt wird, und vor allem das Problem, das es löst, samt Wirkung und Nutzen für die Kundschaft.</li><li><strong>Die Geschichte bauen</strong>: ein realistisches Szenario entwickeln, das die Wirkung auf die Kundschaft zeigt, also welches Problem es im Alltag löst und warum das zählt.</li><li><strong>Die Umgebung aufsetzen</strong>: ein Projekt anlegen und realistische Demo-Daten erzeugen, die die Geschichte tragen, etwa eingestreute Schwachstellen für ein Security-Dashboard oder Daten für aussagekräftige Diagramme.</li><li><strong>Die Inhalte aufnehmen</strong>: Screenshots machen oder Clips des tatsächlichen Ablaufs aufzeichnen.</li><li><strong>Den Erzähltext schreiben</strong>: Inhalte formulieren, die durch jeden Schritt führen, aufbauend auf der Geschichte und dem Kundenszenario aus Schritt 2.</li><li><strong>Die Demo bauen</strong>: in einem externen Werkzeug alles zu einem klickbaren Durchlauf zusammenfügen, Verweise auf verwandte Materialien ergänzen und für jeden Schritt den Call to Action festlegen.</li><li><strong>Mit Beteiligten prüfen</strong>: einen Entwurf teilen, Feedback sammeln, nachschärfen.</li><li><strong>Änderungen einarbeiten</strong>: Erzähltext aktualisieren, Schritte umsortieren, bei Bedarf neu erzeugen.</li><li><strong>Veröffentlichen</strong>: nach GitLab Docs, in den Demo Hub und an alle weiteren Zielorte ausliefern.</li><li><strong>Ankündigen</strong>: intern über Slack teilen, in Blogbeiträge einbetten, in sozialen Netzwerken posten.</li></ol><p>Zusammengenommen können diese Schritte Tage dauern, und sobald sich am Produkt etwas ändert, geht es ab Schritt 3 von vorn los.</p><p>Bei fast allen diesen Schritten kann ein Agent helfen: Dokumentation lesen, Issues durchsuchen, Kontext aus Slack ziehen, Demo-Daten im Projekt anlegen und das Wesentliche herausarbeiten. Den Menschen, der entscheidet, was entstehen soll, und die Ergebnisse vor dem Ausliefern prüft, ersetzt er damit nicht. Die Grundlagenarbeit nimmt er ihm aber zu einem bemerkenswerten Teil ab.</p><p>In <a href="https://gitlab.com/gitlab-da/projects/click-through-demo-generator-v-2" rel="">meinem Click-Through Demo Generator</a> habe ich mich auf die Schritte 1, 2, 5, 6 und 9 konzentriert: die mit klaren Eingaben, vorhersehbaren Ergebnissen und bislang vollständig manueller Ausführung. Die übrigen Schritte lassen sich ebenfalls von spezialisierten Agenten übernehmen.</p><h2 id="so-funktioniert-der-demo-generator">So funktioniert der Demo-Generator</h2><p>Der Ablauf sieht so aus: Screenshots in einen Ordner im Projekt legen, optional mit einer <code>context.md</code> als Hintergrund zur Funktion, dann den Workflow aus einem Issue-Kommentar heraus starten. Der Agent sortiert und benennt die Screenshots, schreibt den Erzähltext, baut die Demo mit einer eingebauten Markenvorlage und öffnet einen Merge Request. Ist der geprüft und gemergt, geht die Demo automatisch über GitLab Pages online. Soll sich etwas ändern, genügt eine Nachfrage beim Agenten.</p><p><img alt="Der Issue-Kommentar, der den Click-Through Demo Generator auslöst, und die Antwort des Agenten mit dem Link zum Merge Request" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783431076/etfiomoplfb4soaeevig.png" title="Der Issue-Kommentar, der den Click-Through Demo Generator auslöst, und die Antwort des Agenten mit dem Link zum Merge Request" /></p><p>Unter der Haube wird ein Custom Flow ausgelöst. Der Agent ruft ein selbst gebautes Tool auf, das die Demo in eine HTML-Vorlage einbaut, jeden Screenshot mit seinem Erzähltext-Kasten überlagert und den Link zum Merge Request zurück in das Issue kommentiert. Eine Skill gibt dem Schreiben die Richtung, damit der Erzähltext GitLabs Marketing-Botschaften folgt und auf den Nutzen für die Kundschaft zielt statt auf unsere eigenen Funktionen.</p><p>Hier der tatsächliche Anweisungstext aus der <code>SKILL.md</code> dieser Skill, den der Agent bei jedem Erzähltext liest und befolgt:</p><blockquote><p><em>&quot;Great narration sells an outcome, not a UI tour. Someone who clicks through should understand what problem the product solves, why this approach is better, and what they could now do, without reading any docs.</em></p><p><em>Structure every demo as three acts: Open on the customer&#39;s pain, show the product solving it step by step, and close by naming the value they walk away with.&quot;</em></p></blockquote><p>Für Demos in weiteren Sprachen genügt eine Lokalisierungs-Skill im Projekt, von da an wird jede Demo automatisch lokalisiert.</p><p><img alt="Die Demo-Galerie" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783431133/ljn4kvbwvdxpaafhzgvi.png" title="Die Demo-Galerie: hier werden Demos geprüft und bereitgestellt, bevor sie in Produktion gehen" /></p><h3 id="veröffentlichen-mit-einer-skill">Veröffentlichen mit einer Skill</h3><p>Auch die Veröffentlichung im <a href="https://dap-demo-hub-dac14a.gitlab.io/" rel="">Demo Hub</a>, unserem produktiven Demo-Portal, läuft ohne Handarbeit ab. Ist eine Demo fertig, wird sie in der Entwicklungsgalerie als <strong>production</strong> markiert. Das ist das Signal für den Agenten: Er führt in diesem Projekt eine Skill aus, die in das Demo-Hub-Projekt greift und den Rest übernimmt. Sie schreibt eine kurze Beschreibung, versieht sie mit dem heutigen Datum, markiert sie als neu und öffnet einen Merge Request, der die Demo als Karte ergänzt. Diesen MR zu mergen und die Demo live zu stellen, bleibt eine menschliche Entscheidung.</p><h2 id="demos-liegen-jetzt-im-code">Demos liegen jetzt im Code</h2><p>Eine Click-Through-Demo besteht im Kern aus ein paar Dateien: HTML, Screenshots und Konfiguration. Damit gehört sie in ein Repository. Sie steckt nicht länger in einem separaten Werkzeug, das nur wenige bedienen können. Sie liegt in einem GitLab-Projekt und lässt sich deshalb:</p><ul><li>in Merge Requests prüfen</li><li>von Kolleginnen und Kollegen verbessern</li><li>über die Zeit versionieren</li><li>von Agenten aktualisieren, nicht nur von Menschen</li></ul><p>Damit wird die Demo zur Sache des Teams und nicht mehr zur Aufgabe einer einzelnen Person. Das macht einen großen Unterschied. Deutlich mehr Kolleginnen und Kollegen können Demos erstellen, prüfen, verbessern und veröffentlichen, ohne besonderes Werkzeugwissen. Wer ein Issue öffnen und einen MR freigeben kann, kann diesen Workflow nutzen.</p><h3 id="selbst-ausprobieren">Selbst ausprobieren?</h3><p>Das Projekt <a href="https://gitlab.com/gitlab-da/projects/click-through-demo-generator-v-2" rel="">Click-Through Demo Generator</a> forken und die README für das vollständige Setup lesen. Custom Flows werden beim Forken nicht mitkopiert, deshalb muss der <a href="https://gitlab.com/gitlab-da/projects/click-through-demo-generator-v-2/-/automate/flows/1010005/" rel="">Flow &quot;Generate click-through demo&quot;</a> (dafür ist eine Anmeldung bei GitLab nötig) im geforkten Projekt zusätzlich aktiviert werden. Alles Weitere steht in der README.</p><h2 id="was-die-gitlab-duo-agent-platform-möglich-gemacht-hat">Was die GitLab Duo Agent Platform möglich gemacht hat</h2><p>Ohne die GitLab Duo Agent Platform wäre dieses Projekt deutlich schwieriger geworden.</p><p>Die GitLab Duo Agent Platform lieferte mir die fehlende Infrastruktur: einen <a href="https://about.gitlab.com/de-de/blog/multi-step-software-delivery-with-agentic-flows/" rel="">Custom Flow</a>, der aus einem Issue-Kommentar heraus startet, und ein Container-Image, das ich mit genau der Laufzeit und den Abhängigkeiten definiere, die es braucht. Dazu kommen eingebaute Tools für die direkte Arbeit mit GitLab, etwa das Öffnen von Merge Requests und das Kommentieren von Issues. Im Merge Request prüfe ich die Demo, bevor ich sie merge und der Agent sie im Demo Hub veröffentlicht.</p><p>Im Vokabular der Plattform heißt das agentische Automatisierung: Der <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">Custom Flow</a> orchestriert das Verhalten des Agenten, und GitLabs eingebaute Tools lassen ihn mit Issues, Projektdateien, Merge Requests und GitLab Pages arbeiten, ohne separate Integrationen.</p><p>Mit Custom Flows lässt sich ein eigener mehrstufiger Workflow festlegen und der Agent um eigene Tools erweitern. Eines davon habe ich selbst gebaut: Es baut Screenshots und Erzähltext in die HTML-Vorlage der Demo ein und läuft als Teil des Flows auf GitLabs Compute.</p><p>Alles bleibt in GitLab: die Anfrage, die Prüfung, das Ergebnis, die Auslieferung. Das macht den Ablauf klarer und leichter zu übergeben.</p><h2 id="den-ersten-agenten-bauen">Den ersten Agenten bauen</h2><p>Einmal weg von meinem eigenen Ablauf und hin zur Frage, was passiert, wenn wiederkehrende Arbeit an einen Agenten mit Zugriff auf die eigenen GitLab-Daten übergeht. Für eine Teamleitung heißt das: weniger Aufwand für die Erstellung von Material, mehr für Prüfen und Entscheiden. Dieselbe Verschiebung zeigt sich überall dort, wo eine wiederholbare, klar umrissene Aufgabe auf GitLab-Kontext aufsetzt.</p><p>Klein und einfach anfangen. Der Demo-Generator ist nur ein Beispiel für dieses Muster, für den Anfang braucht es aber weder eigenen Code noch einen Custom Flow. Also mit einem <a href="https://about.gitlab.com/de-de/blog/introduction-to-gitlab-duo-agent-platform/" rel="">einzelnen Agenten</a> beginnen, ihm eine klare Aufgabe geben und schauen, was er kann, bevor es komplizierter wird.</p><p>In diesem kurzen Tutorial entsteht der erste eigene Agent, einer, der bei der Planung der eigenen Arbeit hilft. Kein Zugang zur GitLab Duo Agent Platform? Zum Mitmachen genügt eine <a href="https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&amp;glm_content=default-saas-trial" rel="">kostenlose Testversion</a>. Zwei Aufgaben, mit überschaubarem Aufwand:</p><p><strong>Aufgabe 1: einen eigenen Agenten anlegen.</strong> In der GitLab-Oberfläche einen <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/custom/#create-an-agent" rel="">eigenen Agenten anlegen</a> und ihn &quot;Daily Planner&quot; nennen. Ihm mitteilen, was Priorität bedeutet, etwa Issues, die Kolleginnen und Kollegen blockieren, alles mit Fälligkeit in dieser Woche, oder &quot;alles mit dem Label customer gilt als höchste Priorität, unabhängig vom Fälligkeitsdatum&quot;. Er soll die zugewiesenen Issues und Merge Requests ansehen, diese Regeln anwenden und benennen, was zuerst anzugehen ist, was andere blockiert und was warten kann.</p><p><strong>Aufgabe 2: aktivieren und prüfen.</strong> Den <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/custom/#enable-an-agent" rel="">Agenten im Projekt aktivieren</a>, dann <a href="https://about.gitlab.com/de-de/blog/getting-started-with-gitlab-duo-agentic-chat/" rel="">GitLab Duo Agentic Chat</a> öffnen, ihn auswählen und um eine Tagesplanung bitten. Er hat eingebauten Zugriff auf GitLab und zieht die tatsächlich zugewiesenen Issues und MRs selbst. Seinen Plan mit dem vergleichen, was man selbst zusammengestellt hätte, und die Anweisungen des Agenten nachschärfen, bis der Plan wirklich brauchbar ist.</p><p>Damit steht der erste eigene Agent, und er macht den Tag schon ein wenig leichter. Ab hier wird es interessant: Was würde man ihm noch übergeben? Welche Entscheidung ist man leid, selbst zu treffen? So wächst aus dem Agenten für einen Zweck die Assistenz, die den ganzen Ablauf trägt.</p>]]></content>
        <author>
            <name>Itzik Gan Baruch</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/itzik-gan-baruch/</uri>
        </author>
        <published>2026-08-13T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Wie GitLab Schwachstellen über Refactorings hinweg verfolgt]]></title>
        <id>https://about.gitlab.com/de-de/blog/improved-scope-offset-fingerprinting/</id>
        <link href="https://about.gitlab.com/de-de/blog/improved-scope-offset-fingerprinting/"/>
        <updated>2026-08-12T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Security-Scans stehen täglich vor demselben Problem: Ein Agent oder ein(e) Entwickler(in) ergänzt einen Kommentar, formatiert eine Datei neu oder verschiebt eine Funktion, und ein naiv arbeitendes Vulnerability-Tracking meldet dasselbe Finding plötzlich zweimal. Security-Teams triagieren dann Findings erneut, die sie längst verworfen hatten. Das bedeutet vergebliche Prüfarbeit und untergräbt das Vertrauen in die Scan-Ergebnisse.</p><h2 id="die-lücke-im-bisherigen-fingerprinting">Die Lücke im bisherigen Fingerprinting</h2><p>2022 haben wir das <a href="https://about.gitlab.com/de-de/blog/introducing-gitlab-advanced-vulnerability-tracking/" rel="">erweiterte Vulnerability-Tracking eingeführt</a>, um genau dieses Problem der <em>Code-Volatilität</em> anzugehen. Grundlage ist unsere <em>Scope+Offset</em>-Methode zum Fingerprinting: Statt ein Finding über Datei und Zeilennummer zu identifizieren, identifizieren wir es über den engsten umschließenden <em>Scope</em> (Modul, Klasse, Funktion) und den Zeilen-<em>Offset</em> innerhalb dieses Scopes. Damit wurde das Tracking robust dagegen, dass Code innerhalb einer Datei verschoben wird, und die vergebliche Nachprüfung ging gegenüber zeilenbasiertem Tracking um etwa 30 % zurück.</p><p>Eine Klasse von Änderungen blieb allerdings weiterhin problematisch: <strong>nicht-funktionale Änderungen</strong>. Der Offset zählte jede Zeile zwischen Scope-Grenze und Finding, also auch Kommentare und Leerzeilen. Kommt über einer verwundbaren Anweisung ein Kommentar hinzu, verschiebt sich der Offset. Das Tracking sieht eine <em>neue</em> Schwachstelle, im Ergebnis steht ein Duplikat.</p><h2 id="der-normalisierte-offset">Der normalisierte Offset</h2><p>Unsere verbesserte Methode löst das, indem sie nicht-funktionalen Code, also Kommentare und Leerzeilen, bei der Berechnung des Fingerprints einfach überspringt. Da diese Zeilen das Verhalten des Programms nicht verändern, sollen sie auch die Identität einer Schwachstelle nicht verändern. Mit dieser Normalisierung ändert ein zusätzlicher Kommentar oder eine Neuformatierung den Fingerprint nicht mehr, während die Präzision des Trackings unverändert bleibt. Ausführlich beschrieben ist der Ansatz in unserem begleitenden Forschungsbeitrag.</p><p>Bewertet haben wir die normalisierte Methode auf einem gezielt zugeschnittenen Benchmark: 439 Quelldateien in C/C++, C#, Go, Java, JavaScript, Python und Ruby. Daraus haben wir 2.247 Commits erzeugt, von denen jeder genau einen Kommentar oder eine Leerzeile direkt vor einer bekannten Schwachstelle einfügt, und den Code beim Abspielen der Historie gescannt. Der Benchmark belastet bewusst den schlechtesten Fall: Jeder Commit ist eine nicht-funktionale Änderung unmittelbar neben einem Finding.</p><p>Auf diesem Benchmark sammelte die ursprüngliche <em>Scope+Offset</em>-Methode 1.361 doppelte Fingerprints an und stieg damit von 1.768 auf 3.129 eindeutige Fingerprints, ein Wachstum von 77 % gegenüber der Ausgangslage. Die normalisierte Methode blieb bei 1.768, erzeugte also kein einziges Duplikat, und senkte die Zahl der eindeutigen Fingerprints insgesamt um 43 %.</p><p>Der Benchmark ist bewusst zugunsten der normalisierten Methode gebaut, denn er provoziert genau die Schwäche, die sie beheben soll. Die 43 % markieren damit die Obergrenze des erreichbaren Effekts und nicht den Wert, der sich im Alltag einstellt.</p><h2 id="verfügbarkeit-und-forschungshintergrund">Verfügbarkeit und Forschungshintergrund</h2><p><em>Normalized Scope+Offset</em> steckt in GitLab im Tracking-Algorithmus <code>scope_offset_compressed</code> und unterstützt C#, C/C++, Go, Java, JavaScript, Python, Ruby und PHP. Der Algorithmus nutzt den Parse-Tree weiter, den der Scanner ohnehin aufbaut, sodass die Scan-Dauer unberührt bleibt. Das Format des Security-Reports ist unverändert, wodurch sich die Methode mit beliebigen Kombinationen von SAST-Werkzeugen in heterogenen Setups verträgt.</p><p>Der Preprint unserer Studie &quot;<a href="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786457681/jm8oieyjhwut8ed2cpaq.pdf" rel="">Vulnerability Tracking using Normalized Scope+Offset</a>&quot; von Julian Thome, Hua Yan, Lucas Charles, Craig Smith und Jason Leasure wird auf der 41. IEEE/ACM International Conference on Automated Software Engineering, dem <a href="https://conf.researchr.org/track/ase-2026/ase-2026-industry-showcase" rel="">ASE 2026 Industry Showcase</a>, vorgestellt.</p><p><em><a href="https://gitlab.com/hyan3" rel="">Hua Yan</a>, <a href="https://gitlab.com/theoretick" rel="">Lucas Charles</a>, <a href="https://gitlab.com/craigmsmith" rel="">Craig Smith</a> und Jason Leasure haben zu diesem Beitrag und zur Studie beigetragen.</em></p>]]></content>
        <author>
            <name>Julian Thome</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/julian-thome/</uri>
        </author>
        <published>2026-08-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Eine Sandbox ist so dicht wie das, was der Agent erreicht]]></title>
        <id>https://about.gitlab.com/de-de/blog/ai-agent-sandbox/</id>
        <link href="https://about.gitlab.com/de-de/blog/ai-agent-sandbox/"/>
        <updated>2026-08-12T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Im Juli haben OpenAI und Hugging Face im Rahmen einer verantwortungsvollen Offenlegung mitgeteilt, dass ein OpenAI-Modell während einer internen Evaluierung aus seiner Sandbox ausgebrochen ist, das offene Internet erreicht und auf die interne Produktionsinfrastruktur von Hugging Face zugegriffen hat. Bei diesem Eindringen entwendete der Agent Datensätze, Cluster-Details und Cloud-Schlüssel.</p><p>Der kritischste Teil der externen Phase dieses Vorfalls war die erste Stunde, in der der Agent seiner Sandbox entkam, indem er eine Schwachstelle in einem Package-Proxy auf der Allowlist seiner Sandbox nutzte, um ins Internet zu gelangen.</p><p>Während immer mehr Entwicklerinnen und Entwickler von Frontier-Modellen <a href="https://www.anthropic.com/news/investigating-incidents-cybersecurity-evals" rel="">ähnliche Vorfälle offenlegen</a>, muss die Sicherheitsbranche genau prüfen, wie Agenten die Erreichbarkeit innerhalb von Testumgebungen verändern. Und es braucht keine Evaluierungs-Harnesses, damit dieses Problem das eigene wird. Jeder Workload, der Code hinter einer Egress-Liste ausführt, hat dieselbe Struktur: CI-Runner, gehostete Sandboxes und über das Netzwerk erreichbare Tool-Server. Die meisten dieser Allowlists wurden gebaut, um zu verhindern, dass Daten hinausgelangen. Das ist jedoch nicht mehr das Einzige, was sie verhindern müssen.</p><h2 id="warum-allowlists-die-reichweite-erweitern">Warum Allowlists die Reichweite erweitern</h2><p>Beim Aufbau einer Allowlist überlegt man üblicherweise, was ein Workload kontaktieren muss, und gewichtet jeden Eintrag danach, welche Daten darüber abfließen könnten.</p><p>Der Agent von OpenAI legte einen blinden Fleck in genau diesem Vorgehen offen. Der Package-Proxy, auf den der Agent zugriff, ist ein Dienst: Er authentifiziert Aufrufende, führt Software mit Schwachstellen aus und spricht mit dem öffentlichen Internet. Die Sandbox erreichte das Internet nicht, wohl aber der Package-Proxy, zu dem der Agent Zugang erhielt.</p><p>Eine Allowlist übergibt dem eigenen KI-Workload die Reichweite jedes Ziels, das er übernehmen kann.</p><h2 id="wie-das-modell-von-openai-ausbrach">Wie das Modell von OpenAI ausbrach</h2><p>Um auszubrechen, fand der Agent von OpenAI im Package-Proxy auf seiner Allowlist zwei Zero-Day-Schwachstellen mit sehr großer Wirkung.</p><p>Die erste war eine Server-Side-Request-Forgery-Schwachstelle, mit der der Agent den Proxy bitten konnte, beliebige URLs in seinem Auftrag abzurufen. In <a href="https://www.youtube.com/watch?v=87DyyMV0kCY&amp;t=721s" rel="">OpenAIs Präsentation auf der Black Hat</a> liest sich die Überlegung des Modells in diesem Moment als &quot;<em>ausgezeichnet, wir haben beliebige SSRF</em>&quot;. Die Sandbox lieh sich die Internetverbindung des Proxys.</p><p>Die zweite war eine Rechteausweitung. <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-65616" rel="">CVE-2026-65616</a> (CVSS 8.8) führt dazu, dass der Refresh-Token-Endpunkt eines Package-Proxys neue Token ausstellt, ohne die Token-Signaturen zu prüfen. Diese Token führen ihren Geltungsbereich als Claim mit, statt dass der Server ihn nachschlägt. Sobald die Signatur ungeprüft bleibt, ist der Claim also das, was die aufrufende Seite behauptet.</p><p>In diesem Fall war die aufrufende Seite der Agent. Er erweiterte den Zugriff seines lesenden Tokens innerhalb der Sandbox, indem er dessen Claim auf administrativ änderte. Anschließend reichte er das Token beim Package-Proxy zur Erneuerung ein und erhielt ein Token mit Administratorrechten zurück. Damit konnte der Agent mit Administratorberechtigung handeln statt mit seiner ursprünglichen Leseberechtigung.</p><p>Die Agenten arbeiteten als Gruppe am Ausbruch. Gemeinsam erkundeten sie den einen Dienst, den sie erreichen konnten, bis sie einen Weg fanden, ihn in ihrem Auftrag abrufen zu lassen, und teilten die Methode anschließend, damit auch andere Agenten sie nutzen konnten. Ein Agent hielt fest, dass externes Ausnutzen außerhalb des Rahmens seiner Anweisungen lag, machte aber dennoch weiter.</p><p>Hugging Face und OpenAI verorten die Kompromittierung des Proxys zudem in etwa der ersten halben Stunde des Sandbox-Tests, und das trotz der schwer zu findenden Schwachstellen. Es handelte sich um Zero-Days, der Agent konnte sich also weder auf eine CVE noch auf ein Advisory stützen. Der Package-Proxy ist zudem Closed Source, und sein Code war nie Teil der Trainingsdaten des Agenten.</p><h2 id="warum-das-modell-ausbrach">Warum das Modell ausbrach</h2><p>Inzwischen wissen wir, warum der Agent sich den Proxy vornahm. Er steckte bei seiner Evaluierungsaufgabe fest, und die Präsentation von OpenAI zeigt, wie das Modell &quot;<em>Antwort vielleicht online</em>&quot; überlegt, bevor es nach einem Ausweg sucht. Frontier-Modelle werden dafür belohnt, Aufgaben zügig zu lösen, weshalb ein feststeckendes Modell nach Abkürzungen sucht. OpenAI schließt diese eine Abkürzung normalerweise, indem der Internetzugang deaktiviert wird.</p><p>Zum Verhalten des Agenten sind weiterhin Fragen offen, darunter alles, was er während seines viertägigen Eindringens tat, und was er unternahm, nachdem er Zugang zum Internet erlangt hatte. Bekannt ist: Dieser Agent hat ganz praktisch gezeigt, dass wir beim Bau von Testumgebungen für sicherheitsfähige, autonome KI einige neue Überlegungen anstellen müssen.</p><h2 id="wie-sich-das-risiko-in-ki-testumgebungen-reduzieren-lässt">Wie sich das Risiko in KI-Testumgebungen reduzieren lässt</h2><p>Wer Sandboxes für KI-Agenten baut, kann das Risiko auf vier Arten reduzieren und so die Erreichbarkeit begrenzen:</p><ol><li><strong>Die Routen sperren, die ein Build-Client nie nutzt.</strong> Ein Build-Client lädt nur Dateien herunter. Er hat keinen Grund, die Admin-API des Proxys, dessen Konfigurationsrouten oder dessen Token-Refresh-Route aufzurufen, die ein ablaufendes Token gegen ein neues tauscht und in diesem Vorfall missbraucht wurde.</li><li><strong>Einschränken, was der Proxy selbst erreichen kann.</strong> Der Agent kam heraus, weil der Proxy das gesamte Internet erreichte, und damit auch jede Instanz, die den Proxy kontrolliert. Die ausgehenden Verbindungen des Proxys sollten auf die Registries begrenzt sein, die er tatsächlich bedient.</li><li><strong>Den Proxy überwachen.</strong> Ein Proxy, der eine Build-Flotte bedient, arbeitet eintönig: kurze Verbindungen, kleine Downloads, Anfragen, die meist erfolgreich sind. Alles, was diesem Muster nicht folgt, ist eine Alarmierung wert, etwa dauerhaft offene Verbindungen, Daten, die in großen Mengen nach außen wandern, eine Serie von Anfragen nach nicht vorhandenen Paketen und jeder Aufruf einer Admin-Route.</li><li><strong>Nicht vertrauenswürdige Workloads wie internetseitige behandeln.</strong> Erreicht ein nicht vertrauenswürdiger Workload einen internen Dienst, sollte dieser Dienst als internetseitig gelten. Was den Workload kompromittiert, erreicht ihn ebenfalls. <a href="https://about.gitlab.com/de-de/blog/harden-pipeline-perimeter-for-ai-assisted-coding/" rel="">Dieselbe Frage für CI-Runner</a> haben wir uns bereits früher in diesem Jahr gestellt, dort läuft der nicht vertrauenswürdige Code in einer Pipeline statt in einer Agenten-Sandbox.</li></ol><h2 id="cyberfähige-modelle-verlangen-neue-überlegungen-zur-sandbox">Cyberfähige Modelle verlangen neue Überlegungen zur Sandbox</h2><p>Eine Sandbox ist eine Liste dessen, womit der Workload darin sprechen darf, und jeder Eintrag auf dieser Liste bringt seine eigene Reichweite mit. Bei einem Build-Job spielt das keine Rolle, bei Agenten schon, weil sie diese Liste auf eine Weise verbreitern, die im Entwurf von Allowlists nie vorgesehen war.</p><p>Über Evaluierungs-Harnesses hinaus ziehen <a href="https://about.gitlab.com/de-de/blog/agentic-ai-guides-and-resources/" rel="">agentische Workloads</a> auch in CI, in die Produktionsautomatisierung und in Werkzeuge ein, die mit internen Diensten interagieren. Jeder dieser Bereiche hat eine Liste mit ähnlichen Eigenschaften und ähnlicher Struktur. Je besser Modelle darin werden, Schwachstellen zu finden und zu verketten, desto weiter reicht das, worauf Agenten über diese Listen einwirken können.</p><p>OpenAI stellt fest, dass diese Agenten &quot;begrenzt bleiben durch die Rechte, die sie erlangen können, und die Systeme, mit denen sie kommunizieren können&quot;, bestehende Kontrollen also weiterhin wirken.</p><p>Ändern muss sich, wie sorgfältig wir diese Listen ziehen, um die Erreichbarkeit möglichst klein zu halten.</p><blockquote><p>Weitere Beiträge des Threat-Research-Teams stehen auf unserer <a href="https://about.gitlab.com/de-de/blog/categories/security-labs/" rel="">Security-Labs-Seite</a>.</p></blockquote>]]></content>
        <author>
            <name>Daniel Abeles</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/daniel-abeles/</uri>
        </author>
        <published>2026-08-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Wie GitLab ein eigenes Security-Control-Framework gebaut hat]]></title>
        <id>https://about.gitlab.com/de-de/blog/how-gitlab-built-a-security-control-framework-from-scratch/</id>
        <link href="https://about.gitlab.com/de-de/blog/how-gitlab-built-a-security-control-framework-from-scratch/"/>
        <updated>2026-08-08T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLabs Security-Compliance-Team stellte fest, dass die vorhandenen Security-Control-Frameworks sich nicht so weit anpassen ließen, dass sie zur Multi-Produkt- und Cloud-native-Umgebung der Plattform gepasst hätten.</p><p>Also haben wir ein eigenes gebaut.</p><p>Hier steht, was wir dabei gelernt haben und warum ein eigenes Security-Control-Framework auch für das eigene Compliance-Programm der richtige Schritt sein kann.</p><h2 id="der-weg-durch-die-frameworks">Der Weg durch die Frameworks</h2><p>Als ich im November 2022 zum Security-Compliance-Team von GitLab kam, verwalteten wir unsere Controls über das <a href="https://securecontrolsframework.com/" rel="">Secure Controls Framework</a>, sowohl für externe Zertifizierungen als auch für interne Compliance-Anforderungen. Mit wachsenden Anforderungen zeigte sich jedoch, dass wir etwas Umfassenderes brauchten.</p><p>Da die FedRAMP-Autorisierung auf unserer Roadmap stand, entschieden wir uns als Nächstes für <a href="https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final" rel="">NIST SP 800-53</a>. NIST SP 800-53 umfasst mehr als 1.000 Controls, doch diese Vollständigkeit passt nicht ideal zur Umgebung von GitLab.</p><p>Wir mussten nicht jedes NIST-Control umsetzen, sondern nur die, die für unsere konkreten Anforderungen gelten. Unser Fokus lag auf der Qualität der Controls, nicht auf ihrer Zahl. Unnötige Controls verbessern die Sicherheit nicht. Im Gegenteil: Zu viele können eine Umgebung unsicherer machen, weil Menschen Wege finden, übermäßig restriktive oder irrelevante Controls zu umgehen.</p><p>Manchen Controls fehlte außerdem die nötige Granularität. Das NIST-Control AC-2 &quot;Account Management&quot; etwa deckt Kontoerstellung und Provisionierung ab, Kontoänderung und Deaktivierung, Kontoentfernung und Beendigung, die Verwaltung geteilter Konten und Gruppenkonten sowie Kontoüberwachung und -prüfungen.</p><p>In der Praxis sind das mindestens sechs eigenständige Controls mit unterschiedlichen Verantwortlichen, Prüfverfahren und Risiken. Bei Attestierungen wie SOC 2 wird jede dieser Tätigkeiten als eigenes Control geprüft, weil sie unterschiedliche Nachweisanforderungen und operative Kontexte haben. Das allumfassende AC-2 von NIST bildete weder ab, wie wir Controls tatsächlich betreiben, noch wie Auditoren uns tatsächlich bewerten. Wir brauchten Controls, die granular genug sind, um unsere operative Umgebung abzubilden.</p><p>So kam es, dass wir NIST-Controls ständig anpassten, ergänzten und umbauten. Irgendwann wurde uns klar: Wir nutzten NIST SP 800-53 gar nicht mehr, wir bauten unser eigenes Framework darauf auf. Wir entschieden, dass ein eigenes, auf die Umgebung von GitLab zugeschnittenes Control-Framework unserem Multi-Produkt-Angebot und den jeweiligen Compliance-Anforderungen jedes Produkts am besten gerecht wird.</p><h2 id="das-gitlab-control-framework-aufbauen">Das GitLab Control Framework aufbauen</h2><p>In fünf methodischen Schritten haben wir unser eigenes Common-Controls-Framework aufgebaut: das GitLab Control Framework (GCF).</p><h3 id="_1-analysieren-was-wir-brauchen">1. Analysieren, was wir brauchen</h3><p>Wir haben unsere bestehenden Controls durchgesehen und jede Anforderung erfasst, die sich aus bereits gehaltenen Zertifizierungen, aus Zertifizierungen auf unserer Roadmap und aus unserem internen Compliance-Programm ergibt:</p><p><strong>Externe Zertifizierungen:</strong></p><ul><li><a href="https://about.gitlab.com/de-de/blog/guide-to-fulfilling-soc-2-security-requirements-with-gitlab/" rel="">SOC 2 Type II</a></li><li><a href="https://about.gitlab.com/de-de/blog/how-gitlab-can-support-your-iso-compliance-journey/" rel="">ISO 27001</a>, ISO 27017, ISO 27018, ISO 42001</li><li>PCI DSS</li><li>TISAX</li><li>Cyber Essentials</li><li>FedRAMP</li></ul><p><strong>Interne Compliance-Anforderungen:</strong></p><ul><li>Controls für unternehmenskritische Systeme, die nicht im Geltungsbereich externer Zertifizierungen liegen</li><li>Controls für Systeme mit Zugriff auf sensible Daten</li></ul><p>Damit stand die Ausgangsbasis: welche Controls existieren müssen, um unsere Compliance-Pflichten zu erfüllen.</p><h3 id="_2-von-etablierten-frameworks-lernen">2. Von etablierten Frameworks lernen</h3><p>Anschließend haben wir unsere Anforderungen mit anerkannten Frameworks abgeglichen:</p><ul><li>NIST SP 800-53</li><li>NIST Cybersecurity Framework (CSF)</li><li>Secure Controls Framework (SCF)</li><li>Common Controls Framework (CCF) von Adobe und Cisco</li></ul><p>Da wir in der Vergangenheit bereits Frameworks eingeführt hatten, wollten wir aus deren Struktur lernen und sicherstellen, dass uns keine wichtigen Sicherheitsdomänen, Controls oder bewährten Vorgehensweisen entgehen.</p><h3 id="_3-eigene-control-domänen-schaffen">3. Eigene Control-Domänen schaffen</h3><p>Aus dieser Analyse heraus haben wir 18 eigene Control-Domänen entwickelt, zugeschnitten auf die Umgebung von GitLab:</p><table><thead><tr><th>Kürzel</th><th>Domäne</th><th>Geltungsbereich der Controls</th></tr></thead><tbody><tr><td>AAM</td><td>Audit &amp; Accountability Management</td><td>Protokollierung, Monitoring und Führung von Audit-Trails über Systemaktivitäten</td></tr><tr><td>AIM</td><td>Artificial Intelligence Management</td><td>Speziell für Entwicklung, Bereitstellung und Governance von KI-Systemen</td></tr><tr><td>ASM</td><td>Asset Management</td><td>Erfassen, Nachverfolgen und Verwalten von Unternehmenswerten</td></tr><tr><td>BCA</td><td>Backups, Contingency, and Availability Management</td><td>Geschäftskontinuität, Notfallwiederherstellung und Systemverfügbarkeit</td></tr><tr><td>CHM</td><td>Change Management</td><td>Verwaltung von Änderungen an Systemen, Anwendungen und Infrastruktur</td></tr><tr><td>CSR</td><td>Customer Security Relationship Management</td><td>Kundenkommunikation, Transparenz und Sicherheitszusagen</td></tr><tr><td>DPM</td><td>Data Protection Management</td><td>Schutz von Vertraulichkeit, Integrität und Privatsphäre der Daten</td></tr><tr><td>EPM</td><td>Endpoint Management</td><td>Absicherung von Endgeräten und Arbeitsplatzrechnern</td></tr><tr><td>GPM</td><td>Governance &amp; Program Management</td><td>Security-Governance, Richtlinien und Programmaufsicht</td></tr><tr><td>IAM</td><td>Identity, Authentication, and Access Management</td><td>Identitäten, Authentifizierungsmechanismen und Zugriffskontrolle</td></tr><tr><td>INC</td><td>Incident Management</td><td>Erkennen von Sicherheitsvorfällen, Reaktion darauf und Wiederherstellung</td></tr><tr><td>ISM</td><td>Infrastructure Security Management</td><td>Sicherheit von Netzwerk, Servern und grundlegender Infrastruktur</td></tr><tr><td>PAS</td><td>Product and Application Security Management</td><td>Sicherheitsfunktionen im GitLab-Produkt, die per Dogfooding die eigene Entwicklung absichern, etwa Branch-Schutz und Code-Security-Scanning</td></tr><tr><td>PSM</td><td>People Security Management</td><td>Personalsicherheit, Schulung und Sensibilisierung</td></tr><tr><td>SDL</td><td>Software Development &amp; Acquisition Life Cycle Management</td><td>Sichere SDLC-Praktiken und Beschaffung von Fremdsoftware</td></tr><tr><td>SRM</td><td>Security Risk Management</td><td>Risikobewertung, Risikobehandlung und Risikosteuerung</td></tr><tr><td>TPR</td><td>Third Party Risk Management</td><td>Steuerung von Sicherheitsrisiken durch Lieferanten und Dienstleister</td></tr><tr><td>TVM</td><td>Threat &amp; Vulnerability Management</td><td>Erkennen und Beheben von Sicherheitsschwachstellen</td></tr></tbody></table><p>Jede Domäne fasst verwandte Controls zu logischen Familien zusammen, die sich daran orientieren, wie das Security-Programm von GitLab tatsächlich organisiert ist und betrieben wird. Diese Struktur gibt uns ein methodisches Vorgehen an die Hand, um Controls zu ergänzen, zu aktualisieren oder zu entfernen, wenn sich unsere Anforderungen ändern.</p><h3 id="_4-kontext-und-daten-ergänzen">4. Kontext und Daten ergänzen</h3><p>Mit den definierten Domänen standen zwei zentrale Fragen an: wie sich Controls über mehrere Produkte hinweg abbilden lassen, ohne das Framework zu duplizieren, und wie sich aussagekräftiger Umsetzungskontext erfassen lässt, um im großen Maßstab tatsächlich betreiben und auditieren zu können.</p><h4 id="über-mehrere-produkte-hinweg-skalieren">Über mehrere Produkte hinweg skalieren</h4><p>GitLab bietet mehrere Produktvarianten an: GitLab.com (mandantenfähiges SaaS auf GCP), GitLab Dedicated (Single-Tenant-SaaS auf AWS) und GitLab Dedicated for Government (GitLabs Single-Tenant-FedRAMP-Angebot auf AWS). Jede Variante hat eigene Infrastruktur, eigene Compliance-Geltungsbereiche und eigene Audit-Anforderungen. Wir mussten produktspezifische Audits unterstützen, ohne dafür jeweils komplett eigene Frameworks anzulegen.</p><p>Wir haben eine Control-Hierarchie entworfen, in der <strong>Level-1-Controls das Framework bilden</strong> und festlegen, was auf Organisationsebene umgesetzt sein muss. <strong>Level-2-Controls sind die Umsetzung</strong> und halten produktspezifisch fest, wie die jeweilige Anforderung tatsächlich erfüllt wird.</p><pre className="language-mermaid shiki shiki-themes github-light" code="%%{init: { &quot;fontFamily&quot;: &quot;GitLab Sans&quot; }}%%
graph TD
  accTitle: Control-Hierarchie
  accDescr: Level-1-Anforderungen laufen auf Level-2-Umsetzungen herunter.

  L1[&quot;Level 1: Framework&lt;br/&gt;Was umgesetzt sein muss&quot;];
  L2A[&quot;Level 2: GitLab.com&lt;br/&gt;Wie es umgesetzt ist&quot;];
  L2B[&quot;Level 2: Dedicated&lt;br/&gt;Wie es umgesetzt ist&quot;];
  L2C[&quot;Level 2: Dedicated for Gov&lt;br/&gt;Wie es umgesetzt ist&quot;];
  L2D[&quot;Level 2: Entity&lt;br/&gt;(von allen geerbt)&quot;];

  L1--&gt;L2A;
  L1--&gt;L2B;
  L1--&gt;L2C;
  L1--&gt;L2D;
" language="mermaid" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">%%{init: { &quot;fontFamily&quot;: &quot;GitLab Sans&quot; }}%%
</span></span><span class="line" line="2"><span class="sgsFI">graph TD
</span></span><span class="line" line="3"><span class="sgsFI">  accTitle: Control-Hierarchie
</span></span><span class="line" line="4"><span class="sgsFI">  accDescr: Level-1-Anforderungen laufen auf Level-2-Umsetzungen herunter.
</span></span><span class="line" line="5"><span emptyLinePlaceholder>
</span></span><span class="line" line="6"><span class="sgsFI">  L1[&quot;Level 1: Framework&lt;br/&gt;Was umgesetzt sein muss&quot;];
</span></span><span class="line" line="7"><span class="sgsFI">  L2A[&quot;Level 2: GitLab.com&lt;br/&gt;Wie es umgesetzt ist&quot;];
</span></span><span class="line" line="8"><span class="sgsFI">  L2B[&quot;Level 2: Dedicated&lt;br/&gt;Wie es umgesetzt ist&quot;];
</span></span><span class="line" line="9"><span class="sgsFI">  L2C[&quot;Level 2: Dedicated for Gov&lt;br/&gt;Wie es umgesetzt ist&quot;];
</span></span><span class="line" line="10"><span class="sgsFI">  L2D[&quot;Level 2: Entity&lt;br/&gt;(von allen geerbt)&quot;];
</span></span><span class="line" line="11"><span emptyLinePlaceholder>
</span></span><span class="line" line="12"><span class="sgsFI">  L1--&gt;L2A;
</span></span><span class="line" line="13"><span class="sgsFI">  L1--&gt;L2B;
</span></span><span class="line" line="14"><span class="sgsFI">  L1--&gt;L2C;
</span></span><span class="line" line="15"><span class="sgsFI">  L1--&gt;L2D;
</span></span></code></pre><p>Diese Trennung erlaubt es uns, ein einziges Framework mit produktspezifischen Umsetzungen zu pflegen, statt für jede Variante ein eigenes Framework zu verwalten. Entity-Controls gelten organisationsweit und werden von GitLab.com, GitLab Dedicated und GitLab Dedicated for Government geerbt.</p><h4 id="controls-mit-kontext-anreichern">Controls mit Kontext anreichern</h4><p>Klassische Control-Frameworks führen nur wenige Informationen mit: eine Control-ID, eine Beschreibung und eine verantwortliche Person. Das GCF geht einen anderen Weg, und seine eigentliche Stärke sind die umfangreichen Metadaten, die wir zu jedem Control führen. Über die Control-Beschreibung oder das Implementation Statement hinaus erfassen wir:</p><ul><li>Control-Verantwortung: Wer trägt die Verantwortung für das Control und sein Risiko?</li><li>Umgebung: Gilt es organisationsweit (Entity, von allen Produktvarianten geerbt), für GitLab.com oder für Dedicated?</li><li>Assets: Welche konkreten Systeme deckt dieses Control ab?</li><li>Häufigkeit: Wie oft wird das Control durchgeführt oder geprüft?</li><li>Art: Manuell, teilautomatisiert oder vollautomatisiert?</li><li>Klassifizierung: Dient es externen Zertifizierungen oder dem internen Risikomanagement?</li><li>Prüfdetails: Wie bewerten wir es? Welche Nachweise sammeln wir?</li></ul><p>Dieser Kontext macht aus dem GCF mehr als eine einfache Control-Liste: ein operationalisiertes Control-Inventar.</p><p>Mit dieser Struktur lassen sich Fragen wie diese beantworten:</p><ul><li>Welche Controls gelten für unser SOC-2-Audit für GitLab.com und welche für GitLab Dedicated? → Nach Umgebung filtern: GitLab.com</li><li>Welche Controls verantwortet das Infrastructure-Team? → Nach Verantwortung filtern</li><li>Welche Controls lassen sich automatisieren? → Nach Art filtern: manuell</li></ul><h3 id="_5-iterieren-reifen-lassen-und-skalieren">5. Iterieren, reifen lassen und skalieren</h3><p>Das GCF ist nicht statisch, sondern darauf angelegt, sich mit unserem Geschäft und der Compliance-Landschaft weiterzuentwickeln.</p><h4 id="neue-zertifizierungen-angehen">Neue Zertifizierungen angehen</h4><p>Weil der Kontext im GCF operationalisiert ist, lassen sich Geltungsbereich und Lücken bei neuen Zertifizierungen (ISMAP, IRAP, C5 und weitere) rasch bestimmen:</p><ul><li>Geltungsbereich bestimmen: Welches Produkt hat den geschäftlichen Bedarf (GitLab.com, GitLab Dedicated oder beide)?</li><li>Anforderungen zuordnen: Decken bestehende Controls die neuen Zertifizierungsanforderungen bereits ab?</li><li>Lücken erkennen: Welche neuen Controls müssen entstehen?</li><li>Zuordnungen aktualisieren: Bestehende Controls mit den neuen Zertifizierungsanforderungen verknüpfen.</li></ul><h4 id="auf-neue-regulierung-reagieren">Auf neue Regulierung reagieren</h4><p>Wenn neue Regulierung entsteht oder sich bestehende Anforderungen ändern:</p><ul><li>Bestehende Controls prüfen: Deckt ein vorhandenes Control die neue Anforderung bereits ab?</li><li>Aktualisieren oder neu anlegen: Entweder den Wortlaut eines bestehenden Controls anpassen oder ein neues Control anlegen.</li><li>Die strengste Fassung anwenden: Wenn mehrere Zertifizierungen ähnliche Anforderungen stellen, setzen wir die strengste um. Einmal absichern, vielfach erfüllen.</li><li>Über Zertifizierungen hinweg zuordnen: Das Control mit allen einschlägigen Zertifizierungsanforderungen verknüpfen.</li></ul><h4 id="den-control-lebenszyklus-steuern">Den Control-Lebenszyklus steuern</h4><p>Das Framework passt sich verschiedenen Veränderungen an:</p><ul><li>Geänderte Anforderungen: Aktualisieren Zertifizierungen ihre Anforderungen, prüfen wir die betroffenen Controls und passen Beschreibungen oder Zuordnungen an.</li><li>Abgekündigte Controls: Entfällt eine Anforderung oder wird ein Control nicht mehr gebraucht, markieren wir es als deprecated und nehmen es aus dem Monitoring-Plan.</li><li>Neu erkannte Risiken: Risikobewertungen können Lücken aufzeigen, die neue interne Controls erfordern.</li></ul><h2 id="die-stärke-gemeinsamer-controls-ein-control-mehrere-anforderungen">Die Stärke gemeinsamer Controls: ein Control, mehrere Anforderungen</h2><p>Einmal absichern und vielfach erfüllen ist nicht bloß ein Prinzip. Es bringt handfeste Vorteile dabei, wie wir Audits vorbereiten, Control-Verantwortliche unterstützen und neue Zertifizierungen angehen. So sieht das in der Praxis aus, qualitativ wie in Zahlen.</p><h3 id="qualitative-ergebnisse">Qualitative Ergebnisse</h3><p>Seit der Einführung des GCF haben sich unsere <a href="https://about.gitlab.com/de-de/blog/automated-compliance-management/" rel="">Compliance-Abläufe</a> deutlich verbessert:</p><h4 id="integrierter-audit-ansatz">Integrierter Audit-Ansatz</h4><p>Mit dem GCF pflegen wir ein Framework, dessen Controls mehreren Zertifizierungsanforderungen zugeordnet sind, statt für jedes Audit eigene Control-Sets zu verwalten. Ein einziges Control kann Anforderungen aus SOC 2, ISO 27001 und PCI DSS gleichzeitig erfüllen.</p><h4 id="schnellere-audit-vorbereitung">Schnellere Audit-Vorbereitung</h4><p>Über das GCF pflegen wir eine konsolidierte Anfrageliste statt getrennter Listen je Audit. Weil wir Controls mit konkretem Kontext definiert haben, steht in unseren Anfragelisten &quot;Okta-Nutzerliste&quot; statt eines generischen &quot;Produktions-Nutzerlisten&quot;. Das nimmt Mehrdeutigkeit und Auslegungsspielraum heraus. Wir sammeln keine &quot;N/A&quot;-Nachweise und überlassen es nicht den Auditoren, zu deuten, was &quot;Produktion&quot; in unserer Umgebung bedeutet. Alles ist bereits auf unsere tatsächlichen Systeme zugeschnitten.</p><h4 id="weniger-aufwand-für-beteiligte">Weniger Aufwand für Beteiligte</h4><p>Diese Integration entlastet unmittelbar alle Beteiligten. Control-Verantwortliche liefern Nachweise einmal, statt auf getrennte Anfragen von SOC-2-, ISO- und PCI-Auditoren zu antworten. Wenn wir Nachweise für <a href="https://about.gitlab.com/de-de/blog/automating-role-based-access-control-rbac-at-scale/" rel="">Zugriffskontrollen</a> sammeln, erfüllen diese die Anforderungen von SOC 2, ISO 27001 und PCI DSS gleichzeitig. Ein Control, eine Prüfung, ein Nachweis, und mehrere Zertifizierungen und Anforderungen sind erfüllt.</p><h4 id="effizientere-gap-analysen">Effizientere Gap-Analysen</h4><p>Bei neuen Zertifizierungen oder neuen Funktionen ermöglicht der operationalisierte Kontext eine gezieltere Gap-Analyse. Wir können bestimmen, welche Controls bereits existieren, was fehlt und welche Umsetzung nötig ist.</p><h3 id="quantifizierbare-ergebnisse">Quantifizierbare Ergebnisse</h3><p><strong>Control-Effizienz:</strong></p><ul><li>SOC-Controls um 58 % reduziert (200 Controls → 84) für GitLab.com und um 55 % (181 → 82) für GitLab Dedicated</li><li>Ein Framework trägt inzwischen 8+ Zertifizierungen</li></ul><p><strong>Audit-Effizienz:</strong></p><ul><li>4 Audit-Anfragelisten zu einer konsolidiert, Anfragen um 44 % reduziert (415 → 231)</li><li>95 % Evidence-Acceptance-Rate vor dem Fieldwork bei den jüngsten PCI-Audits</li></ul><p><strong>Umfang des Frameworks:</strong></p><ul><li>220+ aktive Controls über 18 eigene Domänen</li><li>Zugeordnet zu 1.300+ Zertifizierungsanforderungen</li><li>Trägt mehrere Produktvarianten</li></ul><h2 id="wie-es-weitergeht">Wie es weitergeht</h2><p>Das GCF entwickelt sich weiter, während wir Security- und KI-Controls ergänzen, neue Zertifizierungen angehen und unser Vorgehen schärfen.</p><p><strong>Für Fachleute in der Security-Compliance:</strong> Keine Scheu davor, ein eigenes Framework zu bauen, wenn die Industriestandards nicht passen. Der anfängliche Aufwand zahlt sich in Skalierbarkeit, Effizienz und Controls aus, die für die eigene Umgebung tatsächlich Sinn ergeben. Manchmal ist das beste Framework das selbst entworfene.</p><p>Wer tiefer einsteigen möchte, findet in unserer <a href="https://handbook.gitlab.com/handbook/security/security-assurance/security-compliance/sec-controls/" rel="">Dokumentation zum GitLab Control Framework</a> die Methodik, die Control-Domänen und die Feldstruktur im Detail.</p><style>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);}</style>]]></content>
        <author>
            <name>Davoud Tu</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/davoud-tu/</uri>
        </author>
        <published>2026-08-08T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[DevOps Stack aufbauen: Häufige Fehler und Best Practices für moderne Toolchains]]></title>
        <id>https://about.gitlab.com/de-de/blog/devops-stack/</id>
        <link href="https://about.gitlab.com/de-de/blog/devops-stack/"/>
        <updated>2026-08-07T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Die meisten DevOps Stacks sind nicht geplant – sie sind gewachsen. Ein Tool für CI/CD hier, ein separates für Security-Scans dort, dazu ein Projektmanagement-Tool, das niemand mehr hinterfragt. Was als pragmatische Lösung beginnt, wird mit der Zeit zu einer fragmentierten <a href="https://about.gitlab.com/de-de/topics/devops/devops-tools-explained/" rel="">Toolchain</a>, die mehr Probleme schafft, als sie löst: steigende Lizenzkosten, aufwendige Integrationen, ständige Kontextwechsel und blinde Flecken in der Sicherheit.</p><p>Dieser Beitrag zeigt, welche Fehler beim Aufbau eines DevOps Stacks besonders häufig auftreten und wie sich diese gezielt vermeiden lassen: mit klaren Best Practices für jede Phase des Software Delivery Lifecycle.</p><h2 id="was-ist-ein-devops-stack">Was ist ein DevOps Stack?</h2><p>Ein DevOps Stack ist die Gesamtheit aller Tools, Plattformen und Technologien, die ein Team für den gesamten Lebenszyklus der Softwareentwicklung einsetzt: von der Planung und Versionierung über Build, Test und Deployment bis hin zu Monitoring und Feedback. Anders als eine reine Tool-Liste beschreibt der DevOps Stack auch, wie diese Komponenten zusammenwirken: welche Daten zwischen ihnen fließen, welche Automatisierungen sie verbinden und wie sie in die bestehenden Prozesse und <a href="https://about.gitlab.com/de-de/topics/devops/" rel="">DevOps-Praktiken</a> eines Unternehmens eingebettet sind.</p><p>Ein gut aufgebauter DevOps Stack ermöglicht schnelle, sichere und wiederholbare Releases. Ein schlecht aufgebauter dagegen erzeugt Reibung an jeder Schnittstelle.</p><h2 id="warum-devops-stacks-in-der-praxis-häufig-zu-komplex-werden">Warum DevOps Stacks in der Praxis häufig zu komplex werden</h2><p>Die Komplexität eines DevOps Stacks entsteht selten durch eine bewusste Entscheidung. In der Regel wächst sie schleichend: Jedes Team wählt das Tool, das seine unmittelbaren Anforderungen am besten erfüllt, ohne den Gesamtkontext zu berücksichtigen. Über Monate und Jahre entsteht so eine Landschaft aus Einzellösungen, die zwar jeweils für sich funktionieren, aber nicht miteinander.</p><p>Die Folgen sind vielfältig und teuer. Jede Schnittstelle zwischen zwei Tools erfordert eine eigene Integration, die gebaut, gewartet und bei Updates angepasst werden muss. Entwickler(innen) wechseln ständig zwischen verschiedenen Oberflächen und verlieren dabei den Kontext. Sicherheitsrelevante Informationen sind über mehrere Systeme verteilt, sodass kein einheitliches Bild der Risikolage entsteht. Und je mehr Tools im Einsatz sind, desto schwieriger wird es, konsistente Governance-Regeln durchzusetzen.</p><p>Ein typisches Szenario: Das Planungstool kennt den Build-Status nicht, das CI/CD-System weiß nichts über offene Security-Findings, und das Monitoring-Dashboard hat keine Verbindung zu den Deployment-Logs. Jede Information muss manuell zusammengetragen werden – ein Aufwand, der mit jeder Iteration wächst.</p><p><strong>Entscheidend ist:</strong> Komplexität entsteht nicht nur durch die Anzahl der Tools, sondern vor allem durch fehlende Integration, unklare Prozesse und getrennte Datenflüsse. Ein DevOps Stack mit fünf schlecht integrierten Tools kann aufwendiger sein als einer mit zehn, die über eine gemeinsame Plattform verbunden sind.</p><blockquote><p><a href="https://about.gitlab.com/de-de/calculator/" rel=""><strong>Finde heraus, wie viel dich deine fragmentierte Toolchain wirklich kostet!</strong></a></p></blockquote><h2 id="häufige-fehler-beim-aufbau-eines-devops-stacks">Häufige Fehler beim Aufbau eines DevOps Stacks</h2><p>Die folgenden acht Fehler treten in der Praxis besonders häufig auf. Zu jedem gehört eine Best Practice, die zeigt, wie sich das Problem vermeiden oder beheben lässt.</p><h3 id="_1-den-devops-stack-nur-als-tool-liste-verstehen">1. Den DevOps Stack nur als Tool-Liste verstehen</h3><p>Der häufigste Fehler beginnt schon bei der Grundannahme: Ein DevOps Stack wird als Sammlung einzelner Tools betrachtet, die bestimmte Funktionen abdecken. CI/CD, Versionierung, Testing, Monitoring: Für jede Kategorie wird ein Produkt ausgewählt, und damit gilt der Stack als komplett.</p><p>Dabei fehlt das Entscheidende: der Workflow. Tools sind Mittel zum Zweck, kein Selbstzweck. Ohne ein klares Bild davon, wie Software im Unternehmen entwickelt, getestet, gesichert und ausgeliefert wird, bleibt jede Tool-Auswahl willkürlich. Das Ergebnis ist ein Stack, der auf dem Papier vollständig aussieht, in der Praxis aber voller Brüche steckt, weil die einzelnen Bausteine nicht aufeinander abgestimmt sind.</p><p><strong>Best Practice:</strong> Zuerst den Software Delivery Workflow definieren: von der Idee bis zum Release und darüber hinaus. Dann die passenden Tools oder Plattformfunktionen auswählen, die diesen Workflow unterstützen, statt ihn nachträglich um vorhandene Tools herum zu bauen.</p><h3 id="_2-tools-isoliert-nach-einzelfunktionen-auswählen">2. Tools isoliert nach Einzelfunktionen auswählen</h3><p>Ein Tool überzeugt im Proof-of-Concept. Es löst ein konkretes Problem hervorragend. Also wird es eingeführt, ohne zu prüfen, wie es sich in die bestehende Landschaft einfügt. Das Ergebnis: Tools, die für sich betrachtet exzellent sind, aber in der Gesamtarchitektur Brüche erzeugen.</p><p>Isolierte Tool-Entscheidungen führen dazu, dass Berechtigungsmodelle nicht kompatibel sind, Daten manuell zwischen Systemen übertragen werden müssen und Automatisierungsketten an Systemgrenzen abbrechen.</p><p><strong>Best Practice:</strong> Bei jeder Tool-Auswahl prüfen, wie sie in den gesamten Workflow passt: hinsichtlich Integration, Berechtigungen, Datenfluss, Automatisierung, Skalierbarkeit und Governance. Ein Tool, das isoliert gut funktioniert, aber nicht integrierbar ist, schafft langfristig mehr Probleme als es löst.</p><h3 id="_3-cicd-und-pipeline-architektur-zu-spät-planen">3. CI/CD und Pipeline-Architektur zu spät planen</h3><p>CI/CD wird in vielen Teams erst dann strukturiert aufgesetzt, wenn die Komplexität bereits überhandnimmt. In der Anfangsphase reichen einfache Skripte und manuelle Deployments. Doch mit wachsender Teamgröße und steigender Release-Frequenz werden fehlende Standards zum Flaschenhals: Jedes Team baut eigene Pipelines, es gibt keine einheitlichen Vorgaben für Tests, Security Checks oder Artefakt-Management.</p><p><strong>Best Practice:</strong> Die DevOps Pipeline von Anfang an als Rückgrat des Stacks planen. Standards für Pipeline as Code, Jobs, Tests, Security Checks, Artefakte und Deployment-Strategien früh definieren, bevor sich unterschiedliche Ansätze in den Teams verfestigen.</p><h3 id="_4-automatisierung-nur-punktuell-statt-durchgängig-denken">4. Automatisierung nur punktuell statt durchgängig denken</h3><p>Viele Teams automatisieren dort, wo der Leidensdruck am größten ist: den Build-Prozess, einzelne Tests oder das Deployment in die Staging-Umgebung. Der Rest bleibt manuell, insbesondere Security-Scans, Compliance-Prüfungen, Release-Freigaben und das Monitoring nach dem Go-live.</p><p>Punktuelle Automatisierung erzeugt gefährliche Lücken. Manuelle Schritte zwischen automatisierten Phasen sind nicht nur langsamer, sondern auch fehleranfälliger und schwerer nachzuvollziehen.</p><p><strong>Best Practice:</strong> DevOps Automation entlang des gesamten Software Delivery Lifecycle planen: von der Code-Änderung über Tests und Security bis Deployment, Monitoring und Feedback. Das Ziel ist eine durchgängige Kette, in der manuelle Eingriffe die Ausnahme sind, nicht die Regel.</p><p><a href="https://about.gitlab.com/de-de/customers/bitpanda/" rel="">Erfahre, wie Bitpanda mit GitLab den manuellen Aufwand stark reduziert hat und stündlich flexibel deployen kann.</a></p><blockquote><p>&quot;Wir haben keinen festen Release-Termin. Wir deployen täglich, stündlich.&quot; — David Papp, Head of Development, Bitpanda</p></blockquote><h3 id="_5-security-und-compliance-erst-nachträglich-integrieren">5. Security und Compliance erst nachträglich integrieren</h3><p>Security wird in vielen DevOps Stacks als nachgelagerter Schritt behandelt: Der Code wird entwickelt und getestet, erst danach prüft ein separates Security-Team auf Schwachstellen. Dieses Vorgehen führt zu späten Entdeckungen, teuren Nachbesserungen und Verzögerungen im Release-Zyklus.</p><p>Dasselbe gilt für Compliance: Wenn Audit-Anforderungen, Freigabeprozesse und Nachweispflichten nicht im Workflow verankert sind, entstehen sie als zusätzlicher manueller Aufwand, oft unter Zeitdruck und mit lückenhafter Dokumentation.</p><p><strong>Best Practice:</strong> Security und Compliance von Anfang an in den DevOps Stack integrieren. Shift-left Security bedeutet, automatisierte Scans bereits in der Pipeline laufen zu lassen und nicht erst am Ende. Klare Rollenmodelle, definierte Freigabeprozesse und auditierbare Workflows sollten Teil der Architektur sein, nicht nachträglich aufgesetzt werden.</p><h3 id="_6-monitoring-und-feedback-loops-vernachlässigen">6. Monitoring und Feedback-Loops vernachlässigen</h3><p>Viele DevOps Stacks enden beim Deployment. Was danach passiert – ob die Anwendung stabil läuft, wie Nutzer(innen) sie verwenden, wo Fehler auftreten – wird entweder gar nicht oder nur rudimentär erfasst. Ohne systematisches DevOps Monitoring fehlt dem Team die Grundlage für datengestützte Verbesserungen.</p><p>Ebenso wichtig sind Feedback-Loops: Erkenntnisse aus dem Betrieb müssen zurück in die Entwicklung fließen, damit wiederkehrende Probleme an der Wurzel behoben werden, nicht immer wieder im Incident-Management.</p><p><strong>Best Practice:</strong> Monitoring, Incident Response und Feedback-Loops als festen Bestandteil des DevOps Stacks behandeln. Das Ziel ist nicht nur die Auslieferung von Software, sondern ein geschlossener Kreislauf der kontinuierlichen Verbesserung.</p><h3 id="_7-versteckte-kosten-des-devops-stacks-unterschätzen">7. Versteckte Kosten des DevOps Stacks unterschätzen</h3><p>Die offensichtlichsten Kosten eines DevOps Stacks sind die Lizenzgebühren. Doch sie machen oft nur einen Bruchteil der Gesamtkosten aus. Integrationsaufwand, Betrieb und Wartung der Schnittstellen, Schulungen für verschiedene Tools, Produktivitätsverluste durch Kontextwechsel, Sicherheitsrisiken durch uneinheitliche Konfigurationen und der Aufwand für die Skalierung auf neue Teams – all das summiert sich.</p><p>Teams, die diese versteckten Kosten nicht systematisch erfassen, treffen Tool-Entscheidungen auf einer unvollständigen Datenbasis und unterschätzen den wahren Preis ihrer Fragmentierung.</p><p><strong>Best Practice:</strong> Die Gesamtkosten des Stacks regelmäßig bewerten und somit die DevOps Kosten senken: nicht nur Lizenzkosten, sondern auch Integrationsaufwand, Betrieb, Schulungen, Produktivitätsverluste, Sicherheitsrisiken und Skalierungsaufwand. Ein konsolidierter Stack spart nicht nur Lizenzgebühren, sondern reduziert auch den <a href="https://about.gitlab.com/de-de/topics/devops/reduce-devops-costs/" rel="">operativen Overhead erheblich</a>.</p><h3 id="_8-skalierung-governance-und-team-standards-nicht-mitdenken">8. Skalierung, Governance und Team-Standards nicht mitdenken</h3><p>Was für ein Team mit fünf Entwickler(inne)n funktioniert, skaliert selten auf zwanzig Teams mit unterschiedlichen Anforderungen. Ohne gemeinsame Standards für Tool-Auswahl, Pipeline-Vorlagen, Sicherheitsregeln und Rollenmodelle entsteht mit jedem neuen Team eine weitere Variante des DevOps Stacks, mit eigenen Konventionen, eigenen Workarounds und eigenen blinden Flecken.</p><p><strong>Best Practice:</strong> Standards für den DevOps Stack zentral definieren: Pipeline-Templates, Sicherheitsrichtlinien, Rollenmodelle, Dokumentationsvorgaben und Governance-Regeln. Dabei genug Flexibilität für Teams erhalten, um spezifische Anforderungen zu erfüllen, aber zentrale Leitplanken setzen, die Konsistenz und Nachvollziehbarkeit sicherstellen.</p><h2 id="wie-gitlab-beim-aufbau-moderner-devops-stacks-unterstützt">Wie GitLab beim Aufbau moderner DevOps Stacks unterstützt</h2><p>Die meisten der beschriebenen Fehler haben eine gemeinsame Ursache: Fragmentierung. Zu viele Einzeltools, zu viele Schnittstellen, zu wenig Durchgängigkeit. GitLab adressiert dieses Problem nicht als weiteres Tool im Stack, sondern als integrierte DevSecOps-Plattform, die zentrale Funktionen in einem gemeinsamen Workflow bündelt.</p><p>Von der Planung über Source Code Management, CI/CD, Security-Scanning und Compliance bis hin zu Deployment und Monitoring deckt GitLab den gesamten Software Delivery Lifecycle ab, auf einer einzigen Oberfläche, mit einheitlichen Berechtigungen, durchgängigen Datenflüssen und nativer Automatisierung. Teams arbeiten in derselben Umgebung, sprechen dieselbe Sprache und sehen denselben Stand ohne Kontextwechsel und ohne Integrationsaufwand zwischen verschiedenen Systemen.</p><p>Das bedeutet nicht, dass jedes Unternehmen ausschließlich GitLab nutzen muss. Aber eine Plattform, die den Kern des DevOps Stacks abdeckt, reduziert die Komplexität dort, wo sie am meisten schadet: an den Schnittstellen. Neue Teammitglieder arbeiten sich in eine Umgebung ein statt in zehn. Security-Findings, Build-Status und Deployment-Informationen sind an einem Ort verfügbar. Und Governance-Regeln lassen sich zentral definieren und durchsetzen, statt in jedem Tool einzeln konfiguriert zu werden.</p><blockquote><p><strong>Bereit für schnellere und sichere Releases ohne Tool-Wildwuchs?</strong></p><p>DevOps-Tools gibt es viele – und genau das bremst dich. Sorge mit einer integrierten Plattform für effiziente Prozesse über den gesamten SDLC hinweg!</p><p><a href="https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&amp;glm_content=default-saas-trial/" rel=""><strong>Jetzt kostenlos testen</strong></a></p></blockquote><h2 id="häufig-gestellte-fragen-zum-thema-devops-stack-aufbauen">Häufig gestellte Fragen zum Thema DevOps Stack aufbauen</h2><h3 id="was-ist-der-unterschied-zwischen-devops-stack-und-devops-toolchain">Was ist der Unterschied zwischen DevOps Stack und DevOps Toolchain?</h3><p>Die Begriffe werden oft synonym verwendet, beschreiben aber unterschiedliche Perspektiven. Eine DevOps Toolchain bezeichnet die Abfolge der Tools, die entlang des Software Delivery Lifecycle eingesetzt werden – typischerweise als lineare Kette von der Planung bis zum Monitoring. Der DevOps Stack ist der umfassendere Begriff: Er schließt neben den Tools auch die Plattformen, Infrastrukturkomponenten, Integrationen, Automatisierungen und Prozesse ein, die das Gesamtsystem bilden. Ein DevOps Stack beschreibt also nicht nur welche Tools im Einsatz sind, sondern auch wie sie zusammenwirken.</p><h3 id="wie-kann-man-tool-sprawl-vermeiden">Wie kann man Tool-Sprawl vermeiden?</h3><p>Tool-Sprawl entsteht, wenn Teams eigenständig und ohne zentrale Koordination Tools einführen. Die wirksamste Gegenmaßnahme ist eine Kombination aus klaren Governance-Regeln für die Tool-Auswahl, regelmäßigen Audits der bestehenden Tool-Landschaft und der Konsolidierung auf möglichst wenige, gut integrierte Plattformen. Bevor ein neues Tool eingeführt wird, sollte geprüft werden, ob eine vorhandene Lösung dieselbe Funktion bereits abdeckt oder abdecken könnte.</p><h3 id="wann-sollte-ein-devops-stack-konsolidiert-werden">Wann sollte ein DevOps Stack konsolidiert werden?</h3><p>Typische Anzeichen dafür, dass eine Konsolidierung überfällig ist: steigende Integrationskosten, häufige Brüche in der Automatisierung, mangelnde Transparenz über den Gesamtstatus von Projekten, wiederkehrende Sicherheitslücken an Systemgrenzen, hoher Schulungsaufwand für neue Teammitglieder und das Gefühl, mehr Zeit mit der Pflege der Tools als mit der eigentlichen Entwicklung zu verbringen.</p><h3 id="wann-ist-eine-devops-plattform-besser-als-einzelne-tools">Wann ist eine DevOps-Plattform besser als einzelne Tools?</h3><p>Eine integrierte Plattform bietet Vorteile, sobald die Kosten und der Aufwand für Integration, Wartung und Governance der Einzeltools den Nutzen ihrer spezifischen Stärken übersteigen. In der Praxis ist dieser Punkt oft früher erreicht als erwartet, insbesondere wenn Teams wachsen, Compliance-Anforderungen steigen oder die Release-Frequenz zunimmt. Eine Plattform eliminiert Schnittstellen, reduziert Kontextwechsel und schafft eine einheitliche Datenbasis für alle Beteiligten. Das heißt nicht, dass Spezialtools nie ihre Berechtigung haben, aber der Kern des Stacks profitiert fast immer von einer integrierten Lösung.</p>]]></content>
        <author>
            <name>GitLab Germany Team</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/gitlab-germany-team/</uri>
        </author>
        <published>2026-08-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Secrets Manager unterstützt ESO, Terraform und API]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-secrets-manager-add-eso-terraform-api-support/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-secrets-manager-add-eso-terraform-api-support/"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Heutzutage laufen oftmals Secret-Stores für CI/CD, Kubernetes und Terraform unabhängig nebeneinander. Das bedeutet allerdings: mehr Werkzeuge verwalten, Zugriffsmodelle synchron halten und im Fehlerfall Audit-Trails aus verschiedenen Quellen zusammenführen.</p><p>GitLab Secrets Manager unterstützt jetzt den External Secrets Operator (ESO) und Terraform und erweitert damit <a href="https://docs.gitlab.com/ci/secrets/secrets_manager/non_cicd_access/" rel="">den sicheren Abruf von Secrets über CI/CD-Pipelines hinaus</a>. Auf Basis von OpenBao bietet GitLab Secrets Manager <a href="https://about.gitlab.com/de-de/the-source/security/how-to-implement-secret-management-best-practices-with-gitlab/" rel="">eine einzige verlässliche Quelle für Secrets</a> entlang der gesamten Software-Delivery-Kette. Derselbe Secret-Store bedient jetzt:</p><ul><li>Kubernetes-Workloads über ESO</li><li>Terraform- oder OpenTofu-Runs</li><li>OpenBao- oder Vault-CLI</li><li>CI/CD-Jobs in GitLab (ab Version 19.0)</li><li>jede externe Automatisierung über die <a href="https://docs.gitlab.com/api/secrets_manager/" rel="">Secrets Manager API</a></li></ul><h3 id="kubernetes-external-secrets-operator">Kubernetes: External Secrets Operator</h3><p>ESO synchronisiert Secrets aus GitLab Secrets Manager über den Vault-Provider. Ein Workload im Cluster hält ein kurzlebiges JSON Web Token (JWT). Damit authentifiziert sich ESO bei OpenBao und schreibt das Secret in ein Kubernetes Secret.</p><p><img alt="External Secrets Operator" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785953823/ojlr4rv1r34oflo4fynv.png" /></p><p>Ein <a href="https://external-secrets.io/latest/api/secretstore/" rel="">SecretStore</a> legt fest, woher ESO Secrets bezieht und wie authentifiziert wird. GitLab Secrets Manager stellt eine Vault-kompatible KV-v2-API bereit, die sich über den Vault-Provider konfigurieren lässt. Das Feld namespace bildet die GitLab-Hierarchie ab (Organisation, Gruppe, Projekt) und grenzt ein, welche Secrets dieser Store erreichen kann. Die Authentifizierung nutzt ein von GitLab ausgestelltes JWT, das in einem Kubernetes Secret liegt und über secretRef referenziert wird.</p><pre className="language-yaml shiki shiki-themes github-light" code="apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
  name: gitlab-secrets-manager
  namespace: my-app
spec:
  provider:
    vault:
      server: https://secrets.gitlab.com      # provider.vault.server
      path: secrets/kv                        # provider.vault.path
      version: v2
      namespace: org_5/group_42/project_99    # provider.vault.namespace
      auth:
        jwt:
          path: api_jwt/cel                   # provider.vault.auth.jwt.path
          role: all_api                       # provider.vault.auth.jwt.role
          secretRef:
            name: gitlab-access-token         # Kubernetes secret holding the minted token
            key: token
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">apiVersion</span><span class="sgsFI">: </span><span class="sYBdl">external-secrets.io/v1
</span></span><span class="line" line="2"><span class="shJU0">kind</span><span class="sgsFI">: </span><span class="sYBdl">SecretStore
</span></span><span class="line" line="3"><span class="shJU0">metadata</span><span class="sgsFI">:
</span></span><span class="line" line="4"><span class="shJU0">  name</span><span class="sgsFI">: </span><span class="sYBdl">gitlab-secrets-manager
</span></span><span class="line" line="5"><span class="shJU0">  namespace</span><span class="sgsFI">: </span><span class="sYBdl">my-app
</span></span><span class="line" line="6"><span class="shJU0">spec</span><span class="sgsFI">:
</span></span><span class="line" line="7"><span class="shJU0">  provider</span><span class="sgsFI">:
</span></span><span class="line" line="8"><span class="shJU0">    vault</span><span class="sgsFI">:
</span></span><span class="line" line="9"><span class="shJU0">      server</span><span class="sgsFI">: </span><span class="sYBdl">https://secrets.gitlab.com</span><span class="sAwPA">      # provider.vault.server
</span></span><span class="line" line="10"><span class="shJU0">      path</span><span class="sgsFI">: </span><span class="sYBdl">secrets/kv</span><span class="sAwPA">                        # provider.vault.path
</span></span><span class="line" line="11"><span class="shJU0">      version</span><span class="sgsFI">: </span><span class="sYBdl">v2
</span></span><span class="line" line="12"><span class="shJU0">      namespace</span><span class="sgsFI">: </span><span class="sYBdl">org_5/group_42/project_99</span><span class="sAwPA">    # provider.vault.namespace
</span></span><span class="line" line="13"><span class="shJU0">      auth</span><span class="sgsFI">:
</span></span><span class="line" line="14"><span class="shJU0">        jwt</span><span class="sgsFI">:
</span></span><span class="line" line="15"><span class="shJU0">          path</span><span class="sgsFI">: </span><span class="sYBdl">api_jwt/cel</span><span class="sAwPA">                   # provider.vault.auth.jwt.path
</span></span><span class="line" line="16"><span class="shJU0">          role</span><span class="sgsFI">: </span><span class="sYBdl">all_api</span><span class="sAwPA">                       # provider.vault.auth.jwt.role
</span></span><span class="line" line="17"><span class="shJU0">          secretRef</span><span class="sgsFI">:
</span></span><span class="line" line="18"><span class="shJU0">            name</span><span class="sgsFI">: </span><span class="sYBdl">gitlab-access-token</span><span class="sAwPA">         # Kubernetes secret holding the minted token
</span></span><span class="line" line="19"><span class="shJU0">            key</span><span class="sgsFI">: </span><span class="sYBdl">token
</span></span></code></pre><p>Ein <a href="https://external-secrets.io/latest/api/externalsecret/" rel="">ExternalSecret</a> definiert, welche Secrets geholt werden und wohin sie gehören. Es referenziert den zuvor angelegten SecretStore und bildet Remote-Secrets auf ein Kubernetes Secret ab, das Workloads einhängen oder als Umgebungsvariablen referenzieren können.</p><p>ESO erstellt und besitzt das Ziel-Secret (synced-secret) und holt es bei jedem refreshInterval erneut von GitLab, sodass rotierte Werte ohne erneutes Deployment ankommen. Jeder Eintrag unter data bildet ein Remote-Secret auf einen Schlüssel im Ziel ab: remoteRef.key ist der Pfad im GitLab Secrets Manager, property wählt ein Feld innerhalb dieses Secrets aus, und secretKey ist der Schlüssel, unter dem es in Kubernetes landet.</p><pre className="language-yaml shiki shiki-themes github-light" code="apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: my-secret
  namespace: my-app
spec:
  refreshInterval: 45m
  secretStoreRef:
    name: gitlab-secrets-manager
    kind: SecretStore
  target:
    name: synced-secret
  data:
    - secretKey: value
      remoteRef:
        key: explicit/&lt;secret_name&gt;           # &lt;secrets_path&gt;/&lt;secret_name&gt;
        property: value
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">apiVersion</span><span class="sgsFI">: </span><span class="sYBdl">external-secrets.io/v1
</span></span><span class="line" line="2"><span class="shJU0">kind</span><span class="sgsFI">: </span><span class="sYBdl">ExternalSecret
</span></span><span class="line" line="3"><span class="shJU0">metadata</span><span class="sgsFI">:
</span></span><span class="line" line="4"><span class="shJU0">  name</span><span class="sgsFI">: </span><span class="sYBdl">my-secret
</span></span><span class="line" line="5"><span class="shJU0">  namespace</span><span class="sgsFI">: </span><span class="sYBdl">my-app
</span></span><span class="line" line="6"><span class="shJU0">spec</span><span class="sgsFI">:
</span></span><span class="line" line="7"><span class="shJU0">  refreshInterval</span><span class="sgsFI">: </span><span class="sYBdl">45m
</span></span><span class="line" line="8"><span class="shJU0">  secretStoreRef</span><span class="sgsFI">:
</span></span><span class="line" line="9"><span class="shJU0">    name</span><span class="sgsFI">: </span><span class="sYBdl">gitlab-secrets-manager
</span></span><span class="line" line="10"><span class="shJU0">    kind</span><span class="sgsFI">: </span><span class="sYBdl">SecretStore
</span></span><span class="line" line="11"><span class="shJU0">  target</span><span class="sgsFI">:
</span></span><span class="line" line="12"><span class="shJU0">    name</span><span class="sgsFI">: </span><span class="sYBdl">synced-secret
</span></span><span class="line" line="13"><span class="shJU0">  data</span><span class="sgsFI">:
</span></span><span class="line" line="14"><span class="sgsFI">    - </span><span class="shJU0">secretKey</span><span class="sgsFI">: </span><span class="sYBdl">value
</span></span><span class="line" line="15"><span class="shJU0">      remoteRef</span><span class="sgsFI">:
</span></span><span class="line" line="16"><span class="shJU0">        key</span><span class="sgsFI">: </span><span class="sYBdl">explicit/&lt;secret_name&gt;</span><span class="sAwPA">           # &lt;secrets_path&gt;/&lt;secret_name&gt;
</span></span><span class="line" line="17"><span class="shJU0">        property</span><span class="sgsFI">: </span><span class="sYBdl">value
</span></span></code></pre><p>Das <a href="https://gitlab.com/guided-explorations/secrets-management/gitlab-secrets-manager-with-eso-and-k3s" rel="">Tutorial</a> zeigt GitLab Secrets Manager zusammen mit ESO.</p><h3 id="infrastructure-as-code-terraform-und-opentofu">Infrastructure as Code: Terraform und OpenTofu</h3><p>Terraform-State und <code>.tfvars</code>-Dateien sind eine häufige Quelle geleakter Zugangsdaten, weil Secrets versehentlich auf der Festplatte landen oder in die Versionskontrolle eingecheckt werden. Terraform kann das vermeiden, indem es ein GitLab-Secret als Data Source liest und sich zum Zeitpunkt von plan oder apply mit einem ausgestellten JWT authentifiziert. Zugangsdaten lassen sich damit direkt in Terraform referenzieren, ohne dass etwas in <code>.tfvars</code>-Dateien oder CI/CD-Variablen gespeichert wird.</p><pre className="language-terraform shiki shiki-themes github-light" code="data &quot;external&quot; &quot;gitlab_secrets_token&quot; {
  program = [&quot;bash&quot;, &quot;${path.module}/scripts/mint_token.sh&quot;]

  query = {
    project_id = var.gitlab_project_id
  }
}

provider &quot;vault&quot; {
  address   = data.external.gitlab_secrets_token.result.server
  namespace = data.external.gitlab_secrets_token.result.namespace

  auth_login_jwt {
    mount = data.external.gitlab_secrets_token.result.auth_path
    role  = data.external.gitlab_secrets_token.result.role
    jwt   = data.external.gitlab_secrets_token.result.jwt
  }
}

data &quot;vault_kv_secret_v2&quot; &quot;my_secret&quot; {
  mount = data.external.gitlab_secrets_token.result.mount
  name  = &quot;${data.external.gitlab_secrets_token.result.secrets_path}/&lt;secret_name&gt;&quot;
}

output &quot;secret_value&quot; {
  value     = data.vault_kv_secret_v2.my_secret.data[&quot;value&quot;]
  sensitive = true
}
" language="terraform" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">data</span><span class="sYu0t"> &quot;external&quot;</span><span class="sYu0t"> &quot;gitlab_secrets_token&quot;</span><span class="sgsFI"> {
</span></span><span class="line" line="2"><span class="sgsFI">  program</span><span class="sD7c4"> =</span><span class="sgsFI"> [</span><span class="sYBdl">&quot;bash&quot;</span><span class="sgsFI">, </span><span class="sYBdl">&quot;</span><span class="sD7c4">${</span><span class="sgsFI">path</span><span class="sD7c4">.</span><span class="sgsFI">module</span><span class="sD7c4">}</span><span class="sYBdl">/scripts/mint_token.sh&quot;</span><span class="sgsFI">]
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="sgsFI">  query</span><span class="sD7c4"> =</span><span class="sgsFI"> {
</span></span><span class="line" line="5"><span class="sgsFI">    project_id </span><span class="sD7c4">=</span><span class="sgsFI"> var.gitlab_project_id
</span></span><span class="line" line="6"><span class="sgsFI">  }
</span></span><span class="line" line="7"><span class="sgsFI">}
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span class="s7eDp">provider</span><span class="sYu0t"> &quot;vault&quot;</span><span class="sgsFI"> {
</span></span><span class="line" line="10"><span class="sgsFI">  address</span><span class="sD7c4">   =</span><span class="sgsFI"> data</span><span class="sD7c4">.</span><span class="sgsFI">external</span><span class="sD7c4">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sD7c4">.</span><span class="sgsFI">result</span><span class="sD7c4">.</span><span class="sgsFI">server
</span></span><span class="line" line="11"><span class="sgsFI">  namespace</span><span class="sD7c4"> =</span><span class="sgsFI"> data</span><span class="sD7c4">.</span><span class="sgsFI">external</span><span class="sD7c4">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sD7c4">.</span><span class="sgsFI">result</span><span class="sD7c4">.</span><span class="sgsFI">namespace
</span></span><span class="line" line="12"><span emptyLinePlaceholder>
</span></span><span class="line" line="13"><span class="s7eDp">  auth_login_jwt</span><span class="sgsFI"> {
</span></span><span class="line" line="14"><span class="sgsFI">    mount</span><span class="sD7c4"> =</span><span class="sgsFI"> data</span><span class="sD7c4">.</span><span class="sgsFI">external</span><span class="sD7c4">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sD7c4">.</span><span class="sgsFI">result</span><span class="sD7c4">.</span><span class="sgsFI">auth_path
</span></span><span class="line" line="15"><span class="sgsFI">    role</span><span class="sD7c4">  =</span><span class="sgsFI"> data</span><span class="sD7c4">.</span><span class="sgsFI">external</span><span class="sD7c4">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sD7c4">.</span><span class="sgsFI">result</span><span class="sD7c4">.</span><span class="sgsFI">role
</span></span><span class="line" line="16"><span class="sgsFI">    jwt</span><span class="sD7c4">   =</span><span class="sgsFI"> data</span><span class="sD7c4">.</span><span class="sgsFI">external</span><span class="sD7c4">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sD7c4">.</span><span class="sgsFI">result</span><span class="sD7c4">.</span><span class="sgsFI">jwt
</span></span><span class="line" line="17"><span class="sgsFI">  }
</span></span><span class="line" line="18"><span class="sgsFI">}
</span></span><span class="line" line="19"><span emptyLinePlaceholder>
</span></span><span class="line" line="20"><span class="s7eDp">data</span><span class="sYu0t"> &quot;vault_kv_secret_v2&quot;</span><span class="sYu0t"> &quot;my_secret&quot;</span><span class="sgsFI"> {
</span></span><span class="line" line="21"><span class="sgsFI">  mount</span><span class="sD7c4"> =</span><span class="sgsFI"> data</span><span class="sD7c4">.</span><span class="sgsFI">external</span><span class="sD7c4">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sD7c4">.</span><span class="sgsFI">result</span><span class="sD7c4">.</span><span class="sgsFI">mount
</span></span><span class="line" line="22"><span class="sgsFI">  name</span><span class="sD7c4">  =</span><span class="sYBdl"> &quot;</span><span class="sD7c4">${</span><span class="sgsFI">data</span><span class="sD7c4">.</span><span class="sgsFI">external</span><span class="sD7c4">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sD7c4">.</span><span class="sgsFI">result</span><span class="sD7c4">.</span><span class="sgsFI">secrets_path</span><span class="sD7c4">}</span><span class="sYBdl">/&lt;secret_name&gt;&quot;
</span></span><span class="line" line="23"><span class="sgsFI">}
</span></span><span class="line" line="24"><span emptyLinePlaceholder>
</span></span><span class="line" line="25"><span class="s7eDp">output</span><span class="sYu0t"> &quot;secret_value&quot;</span><span class="sgsFI"> {
</span></span><span class="line" line="26"><span class="sgsFI">  value</span><span class="sD7c4">     =</span><span class="sgsFI"> data</span><span class="sD7c4">.</span><span class="sgsFI">vault_kv_secret_v2</span><span class="sD7c4">.</span><span class="sgsFI">my_secret</span><span class="sD7c4">.</span><span class="sgsFI">data[</span><span class="sYBdl">&quot;value&quot;</span><span class="sgsFI">]
</span></span><span class="line" line="27"><span class="sgsFI">  sensitive</span><span class="sD7c4"> =</span><span class="sYu0t"> true
</span></span><span class="line" line="28"><span class="sgsFI">}
</span></span></code></pre><p>Wie sich <a href="https://docs.gitlab.com/ci/secrets/secrets_manager/non_cicd_access/#use-with-terraform" rel="">Secrets in Terraform lesen lassen</a>, zeigt die Dokumentation.</p><h3 id="kommandozeile-openbao-oder-vault-cli">Kommandozeile: OpenBao- oder Vault-CLI</h3><p>Nicht jeder Workflow läuft direkt über die API. Wer ohnehin schon Skripte gegen Vault-kompatible Werkzeuge schreibt, liest mit der OpenBao- oder Vault-CLI Secrets aus GitLab Secrets Manager genauso wie aus Vault.</p><pre className="language-shell shiki shiki-themes github-light" code="export VAULT_ADDR=&quot;&lt;server&gt;&quot;
export VAULT_NAMESPACE=&quot;&lt;namespace&gt;&quot;

# Exchange the minted JWT for an OpenBao token, then export it.
vault write &quot;auth/&lt;auth_jwt_path&gt;/login&quot; role=&lt;role&gt; jwt=&lt;token&gt;
export VAULT_TOKEN=&quot;&lt;client_token&gt;&quot;

# Read the secret value.
vault kv get -mount=&lt;path&gt; &quot;&lt;secrets_path&gt;/&lt;secret_name&gt;&quot;
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="sD7c4">export</span><span class="sgsFI"> VAULT_ADDR</span><span class="sD7c4">=</span><span class="sYBdl">&quot;&lt;server&gt;&quot;
</span></span><span class="line" line="2"><span class="sD7c4">export</span><span class="sgsFI"> VAULT_NAMESPACE</span><span class="sD7c4">=</span><span class="sYBdl">&quot;&lt;namespace&gt;&quot;
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="sAwPA"># Exchange the minted JWT for an OpenBao token, then export it.
</span></span><span class="line" line="5"><span class="s7eDp">vault</span><span class="sYBdl"> write</span><span class="sYBdl"> &quot;auth/&lt;auth_jwt_path&gt;/login&quot;</span><span class="sYBdl"> role=</span><span class="sD7c4">&lt;</span><span class="sYBdl">rol</span><span class="sgsFI">e</span><span class="sD7c4">&gt;</span><span class="sYBdl"> jwt=</span><span class="sD7c4">&lt;</span><span class="sYBdl">toke</span><span class="sgsFI">n</span><span class="sD7c4">&gt;
</span></span><span class="line" line="6"><span class="sD7c4">export</span><span class="sgsFI"> VAULT_TOKEN</span><span class="sD7c4">=</span><span class="sYBdl">&quot;&lt;client_token&gt;&quot;
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span class="sAwPA"># Read the secret value.
</span></span><span class="line" line="9"><span class="s7eDp">vault</span><span class="sYBdl"> kv</span><span class="sYBdl"> get</span><span class="sYu0t"> -mount=</span><span class="sD7c4">&lt;</span><span class="sYu0t">path</span><span class="sD7c4">&gt;</span><span class="sYBdl"> &quot;&lt;secrets_path&gt;/&lt;secret_name&gt;&quot;
</span></span></code></pre><h3 id="wann-die-secrets-manager-api-sinnvoll-ist">Wann die Secrets Manager API sinnvoll ist</h3><p>Für Automatisierung, die weder zu GitLab CI/CD noch zu Kubernetes oder Terraform passt, ermöglicht die <a href="https://docs.gitlab.com/api/secrets_manager/" rel="">Secrets Manager API</a> beliebigen externen Systemen, Secrets aus dem Secrets Manager abzurufen, statt Zugangsdaten fest zu hinterlegen oder <a href="https://about.gitlab.com/de-de/blog/migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security/" rel="">getrennte Variablendateien</a> zu pflegen.</p><pre className="language-shell shiki shiki-themes github-light" code="# Request JWT token using Service Account
RESPONSE=$(curl --silent --request POST \
  --header &quot;PRIVATE-TOKEN: &lt;your_access_token&gt;&quot; \
  --url &quot;https://gitlab.example.com/api/v4/projects/&lt;project_id&gt;/secrets_manager/access_token&quot;)

SERVER=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.server)
NAMESPACE=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.namespace)
MOUNT=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.path)
SECRETS_PATH=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.secrets_path)
AUTH_PATH=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.auth.jwt.path)
ROLE=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.auth.jwt.role)
JWT=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.auth.jwt.token)

# Exchange the JWT for a short-lived OpenBao token.
VAULT_TOKEN=$(curl --silent --request POST \
  --header &quot;X-Vault-Namespace: $NAMESPACE&quot; \
  --data &quot;{\&quot;role\&quot;:\&quot;$ROLE\&quot;,\&quot;jwt\&quot;:\&quot;$JWT\&quot;}&quot; \
  &quot;$SERVER/v1/auth/$AUTH_PATH/login&quot; | jq --raw-output .auth.client_token)

# Read the secret value.
curl --silent \
  --header &quot;X-Vault-Token: $VAULT_TOKEN&quot; \
  --header &quot;X-Vault-Namespace: $NAMESPACE&quot; \
  &quot;$SERVER/v1/$MOUNT/data/$SECRETS_PATH/&lt;secret_name&gt;&quot;
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="sAwPA"># Request JWT token using Service Account
</span></span><span class="line" line="2"><span class="sgsFI">RESPONSE</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="s7eDp">curl</span><span class="sYu0t"> --silent</span><span class="sYu0t"> --request</span><span class="sYBdl"> POST</span><span class="sYu0t"> \
</span></span><span class="line" line="3"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;PRIVATE-TOKEN: &lt;your_access_token&gt;&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="4"><span class="sYu0t">  --url</span><span class="sYBdl"> &quot;https://gitlab.example.com/api/v4/projects/&lt;project_id&gt;/secrets_manager/access_token&quot;</span><span class="sgsFI">)
</span></span><span class="line" line="5"><span emptyLinePlaceholder>
</span></span><span class="line" line="6"><span class="sgsFI">SERVER</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.server</span><span class="sgsFI">)
</span></span><span class="line" line="7"><span class="sgsFI">NAMESPACE</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.namespace</span><span class="sgsFI">)
</span></span><span class="line" line="8"><span class="sgsFI">MOUNT</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.path</span><span class="sgsFI">)
</span></span><span class="line" line="9"><span class="sgsFI">SECRETS_PATH</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.secrets_path</span><span class="sgsFI">)
</span></span><span class="line" line="10"><span class="sgsFI">AUTH_PATH</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.auth.jwt.path</span><span class="sgsFI">)
</span></span><span class="line" line="11"><span class="sgsFI">ROLE</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.auth.jwt.role</span><span class="sgsFI">)
</span></span><span class="line" line="12"><span class="sgsFI">JWT</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.auth.jwt.token</span><span class="sgsFI">)
</span></span><span class="line" line="13"><span emptyLinePlaceholder>
</span></span><span class="line" line="14"><span class="sAwPA"># Exchange the JWT for a short-lived OpenBao token.
</span></span><span class="line" line="15"><span class="sgsFI">VAULT_TOKEN</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="s7eDp">curl</span><span class="sYu0t"> --silent</span><span class="sYu0t"> --request</span><span class="sYBdl"> POST</span><span class="sYu0t"> \
</span></span><span class="line" line="16"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;X-Vault-Namespace: </span><span class="sgsFI">$NAMESPACE</span><span class="sYBdl">&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="17"><span class="sYu0t">  --data</span><span class="sYBdl"> &quot;{</span><span class="sYu0t">\&quot;</span><span class="sYBdl">role</span><span class="sYu0t">\&quot;</span><span class="sYBdl">:</span><span class="sYu0t">\&quot;</span><span class="sgsFI">$ROLE</span><span class="sYu0t">\&quot;</span><span class="sYBdl">,</span><span class="sYu0t">\&quot;</span><span class="sYBdl">jwt</span><span class="sYu0t">\&quot;</span><span class="sYBdl">:</span><span class="sYu0t">\&quot;</span><span class="sgsFI">$JWT</span><span class="sYu0t">\&quot;</span><span class="sYBdl">}&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="18"><span class="sYBdl">  &quot;</span><span class="sgsFI">$SERVER</span><span class="sYBdl">/v1/auth/</span><span class="sgsFI">$AUTH_PATH</span><span class="sYBdl">/login&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .auth.client_token</span><span class="sgsFI">)
</span></span><span class="line" line="19"><span emptyLinePlaceholder>
</span></span><span class="line" line="20"><span class="sAwPA"># Read the secret value.
</span></span><span class="line" line="21"><span class="s7eDp">curl</span><span class="sYu0t"> --silent</span><span class="sYu0t"> \
</span></span><span class="line" line="22"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;X-Vault-Token: </span><span class="sgsFI">$VAULT_TOKEN</span><span class="sYBdl">&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="23"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;X-Vault-Namespace: </span><span class="sgsFI">$NAMESPACE</span><span class="sYBdl">&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="24"><span class="sYBdl">  &quot;</span><span class="sgsFI">$SERVER</span><span class="sYBdl">/v1/</span><span class="sgsFI">$MOUNT</span><span class="sYBdl">/data/</span><span class="sgsFI">$SECRETS_PATH</span><span class="sYBdl">/&lt;secret_name&gt;&quot;
</span></span></code></pre><h3 id="erste-schritte">Erste Schritte</h3><p><a href="https://about.gitlab.com/de-de/blog/secrets-manager-in-public-beta/" rel="">GitLab Secrets Manager ist in der Public Beta</a> für Premium und Ultimate. Der Secret-Zugriff über ESO, Terraform oder die API steht derzeit auf GitLab.com und GitLab Self-Managed zur Verfügung, GitLab Dedicated folgt.</p><p>Während der Beta-Phase ist Secrets Manager kostenlos. Mit der allgemeinen Verfügbarkeit wird daraus eine kostenpflichtige Funktion, die über <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/" rel="">GitLab Credits</a> abgerechnet wird. Vor einer Abrechnung ist eine ausdrückliche Zustimmung nötig, und wir kündigen das rechtzeitig an.</p><p><a href="https://docs.gitlab.com/ci/secrets/secrets_manager/non_cicd_access/" rel="">Die Dokumentation</a> hilft beim Einstieg. Wer eine Lücke findet oder einen Wunsch hat, <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/598100" rel="">kommentiert in diesem Issue</a>. Wir sammeln Feedback vor der allgemeinen Verfügbarkeit.</p><style>html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}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 .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 .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}</style>]]></content>
        <author>
            <name>Erick Bajao</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/erick-bajao/</uri>
        </author>
        <author>
            <name>Joe Randazzo</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/joe-randazzo/</uri>
        </author>
        <published>2026-08-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Confidential AI für GitLab Self-Hosted]]></title>
        <id>https://about.gitlab.com/de-de/blog/confidential-ai-for-gitlab-self-hosted/</id>
        <link href="https://about.gitlab.com/de-de/blog/confidential-ai-for-gitlab-self-hosted/"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Entwicklungsteams wollen KI-Coding-Agenten nutzen. Der Quellcode ist reguliertes geistiges Eigentum, das nicht an einen KI-Dienst Dritter gehen darf, und das Compliance-Team hat das schriftlich festgehalten. Der übliche Ausweg, ein eigenes GPU-Cluster aufzubauen und die Modelle selbst zu betreiben, bedeutet knappe Hardware zu beschaffen, ein Team für den Betrieb einzustellen und den führenden Modellen trotzdem um Monate hinterherzulaufen. Also passiert nichts, und die eigenen Teams fallen gegenüber jenen zurück, die KI vor einem Jahr eingeführt haben.</p><p><a href="https://about.gitlab.com/de-de/blog/gitlab-duo-self-hosted-enterprise-ai-built-for-data-privacy/" rel="">GitLab Duo Self-Hosted</a> kann jetzt <a href="https://www.privatemode.ai/de" rel="">Privatemode AI</a> als Modellanbieter nutzen. Privatemode betreibt aktuelle Modelle innerhalb von Confidential-Computing-Hardware, sodass Prompts, Quellcode und Completions durchgehend verschlüsselt bleiben, auch während der Inferenz. Das AI Gateway von GitLab Duo wird auf den Privatemode-Proxy gerichtet. Die Entwicklungsteams erhalten dann dieselben Duo-Funktionen wie mit jedem anderen Modell, mit einem Unterschied, der für eine regulierte Organisation zählt: Der Code verlässt nie eine verschlüsselte Grenze, und kein Dritter kann ihn lesen.</p><h2 id="die-unterstützung-die-regulierten-teams-bisher-verwehrt-bleibt">Die Unterstützung, die regulierten Teams bisher verwehrt bleibt</h2><p>KI-Unterstützung beim Programmieren ist längst mehr als Autovervollständigung. Die <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> übernimmt mehrstufige Arbeit: Sie reviewt Merge Requests, refaktoriert über Dateien hinweg, erzeugt Tests und führt sie aus, steuert agentische Flows als CI-Jobs und einiges mehr. Das verändert die Art, wie Teams liefern, und die Wirkung summiert sich. Teams, die sie nutzen, wenden weniger Aufwand für Standardaufgaben auf und mehr für inhaltliche Reviews.</p><p>Der Haken: Jede einzelne dieser Funktionen sendet Prompts und Quellcode an einen Modellanbieter. Für ein Team, das an proprietärem Code, regulierter Software oder sensiblem geistigem Eigentum arbeitet, ist allein diese Tatsache ein Ausschlusskriterium.</p><h2 id="warum-regulierte-organisationen-selbst-hosten">Warum regulierte Organisationen selbst hosten</h2><p>Für diese Organisationen ist Quellcode zentrales geistiges Eigentum, und wo er verarbeitet wird, ist eine vertragliche, branchenspezifische und regulatorische Frage, keine der Bequemlichkeit. Die Handelsalgorithmen einer Bank, die Firmware eines Medizingeräteherstellers, die Steuerungssoftware eines Rüstungsunternehmens: Dieses geistige Eigentum an einen externen KI-Dienst zu senden, kann IP-Schutz, Auftragsverarbeitungsverträge und Branchenregeln in einem einzigen Schritt verletzen.</p><p>Der Druck kommt aus mehreren Richtungen zugleich. NIS2 und der Digital Operational Resilience Act (DORA) heben die Anforderungen an operative Resilienz und Drittparteienrisiken in kritischer Infrastruktur und im Finanzsektor. Die DSGVO regelt, wie personenbezogene Daten in Code und Logs verarbeitet werden. Branchenregime wie die BaFin-Aufsicht im deutschen Finanzwesen, BSI C5 als Beschaffungsgrundlage und Vorgaben für Gesundheitsdaten setzen eigene Rahmen. Und viele europäische Organisationen behandeln <a href="https://about.gitlab.com/de-de/blog/gitlab-duo-self-hosted-models-on-aws-bedrock/" rel="">Datensouveränität</a> ohnehin als Anforderung erster Ordnung, unabhängig von einer einzelnen Regulierung.</p><p>Am deutlichsten spüren das Finanzdienstleister, Gesundheitswesen und Pharma, Verteidigung, der öffentliche Sektor und kritische Infrastruktur. GitLab Self-Hosted existiert genau dafür, dass dieser Code einen vertrauenswürdigen Perimeter nie verlassen muss. KI in den Workflow zu holen, sollte das nicht stillschweigend aushebeln.</p><h2 id="warum-ki-das-selbst-hosten-erschwert">Warum KI das Selbst-Hosten erschwert</h2><p>Ein selbst hostendes Team, das KI-Unterstützung beim Programmieren möchte, hat drei herkömmliche Optionen, und jede hat Kosten, die eine regulierte Organisation kaum tragen kann.</p><table><thead><tr><th></th><th>Öffentliche KI-SaaS</th><th>VPC / Private-Cloud-KI</th><th>Eigener LLM-Stack</th></tr></thead><tbody><tr><td>Quellcode verlässt den eigenen Perimeter</td><td>Ja</td><td>Ja (an den Betreiber)</td><td>Nein</td></tr><tr><td>Art der Zusicherung</td><td>Vertraglich (Nutzungsbedingungen)</td><td>Vertraglich (Betreiber + Cloud)</td><td>Selbst durchgesetzt</td></tr><tr><td>Sieht den Klartext</td><td>Der Anbieter</td><td>Betreiber und Cloud-Anbieter</td><td>Nur die eigene Organisation</td></tr><tr><td>Infrastrukturaufwand</td><td>Keiner</td><td>Gering</td><td>Hoch: GPUs, Modellbetrieb, Updates</td></tr><tr><td>Hält mit den führenden Modellen Schritt</td><td>Ja</td><td>Meistens</td><td>Selten, der Rückstand bleibt</td></tr></tbody></table><br /><p>Die Tabelle zeigt: Öffentliche KI-SaaS und VPC-Optionen legen Code offen und stützen sich auf vertragliche Zusicherungen, während ein eigener Stack den Code zwar privat hält, aber erheblichen Aufwand für GPUs und Modellbetrieb mit sich bringt.</p><p>Nüchtern zusammengefasst: Öffentliche SaaS scheidet aus, weil der Code das Haus verlässt. Ein VPC-isolierter oder Private-Cloud-Dienst verringert die Offenlegung, übergibt den Klartext aber weiterhin an den Betreiber und den darunterliegenden Cloud-Anbieter. Ein Vertrag ist zudem ein Versprechen, keine kryptografische Zusicherung. Eigene Modelle zu betreiben, hält den Code privat, ist aber teuer in der Beschaffung, teuer im Personal und strukturell hinter den besten verfügbaren Modellen. Vor dieser Wahl führen die meisten regulierten Organisationen KI nur eng begrenzt oder gar nicht ein.</p><p>Damit stellt sich die Frage: Wie erhalten Entwicklungsteams moderne KI-Coding-Agenten, ohne dass Quellcode den Perimeter verlässt und ohne selbst einen LLM-Stack zu betreiben? Die Antwort verlangt eine andere Art von Zusicherung, als ein Vertrag sie geben kann, nämlich eine, die Hardware durchsetzt.</p><h2 id="confidential-computing-die-architektonische-antwort">Confidential Computing: die architektonische Antwort</h2><p>Confidential Computing hält Daten <em>im Arbeitsspeicher</em> verschlüsselt, also während der Verarbeitung, mithilfe eines hardwarebasierten Trusted Execution Environment (TEE), eines isolierten Bereichs einer CPU oder GPU, in den weder Betriebssystem noch Hypervisor noch der Betreiber der Maschine hineinlesen können. Die relevante Hardware ist hier AMD SEV oder Intel TDX auf CPU-Seite, kombiniert mit NVIDIA Confidential Computing auf der GPU. Daten sind bei der Übertragung und im Ruhezustand mit AES-256 verschlüsselt und werden ausschließlich <em>innerhalb</em> des TEE entschlüsselt.</p><p>Was daraus statt eines Versprechens eine Zusicherung macht, ist die <strong>Remote Attestation</strong>. Bevor ein Client Daten sendet, fordert er das TEE auf nachzuweisen, was es ist: Die Hardware erzeugt signierte, kryptografische Belege darüber, welcher Code genau innerhalb der Enclave läuft. Der Client prüft diese Belege gegen bekannte Sollwerte und baut erst danach den verschlüsselten Kanal auf und sendet seine Anfrage. Erst prüfen, dann senden.</p><p><img alt="Datenflussdiagramm" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786033561/tjh50p5pliyu1oyftdtn.png" /></p><p>Das Datenflussdiagramm zeigt Prompts, die auf dem Client verschlüsselt, als Chiffrat übertragen und erst innerhalb eines Hardware-TEE entschlüsselt werden, in das weder der Betreiber des Dienstes noch der Cloud-Anbieter hineinsehen kann.</p><p>Die daraus folgende Sicherheitseigenschaft ist der eigentliche Punkt: Weder der Betreiber des KI-Dienstes noch der darunterliegende Cloud-Anbieter sieht Prompts, Completions oder Kontext. Nicht, weil sie versprechen, nicht hinzusehen, sondern weil die Hardware es nicht zulässt.</p><h2 id="privatemode-ai">Privatemode AI</h2><p><a href="https://docs.privatemode.ai/" rel="">Privatemode AI</a> stammt von <a href="https://edgeless.systems/" rel="">Edgeless Systems</a>, einem auf Confidential-Computing-Software spezialisierten Unternehmen aus Deutschland. <a href="https://images.nvidia.com/aem-dam/Solutions/Data-Center/confidential-computing/hpc-solution-brief-edgeless-systems-3427281.pdf?ncid=no-ncid" rel="">Laut NVIDIA</a> ist Privatemode das &quot;first generative AI framework that keeps prompts encrypted at all times&quot;.</p><p>Für die Entwicklungsarbeit bleibt die Mechanik unsichtbar. Privatemode stellt eine OpenAI-kompatible API bereit, und ein clientseitiger Proxy übernimmt Attestation und Verschlüsselung transparent, sodass Werkzeuge und SDKs, die die Standard-<code>/v1</code>-API sprechen, unverändert funktionieren. Aktuelles Flaggschiffmodell fürs Programmieren ist Kimi K2.6 mit 256K Kontext, weitere wie Kimi K3 und GLM folgen.</p><p>Das ist kein Laborexperiment. Privatemode läuft bereits produktiv bei Organisationen mit genau den oben beschriebenen Rahmenbedingungen. Capgemini nutzt es für Kunden aus regulierten Branchen, einschließlich vertraulicher Programmierarbeit. Die Bundesagentur für Arbeit setzt es im öffentlichen Sektor ein. Und Banken, Versicherer und Verteidigungsorganisationen nutzen es dort, wo Quellcode und Daten eine vertrauenswürdige Grenze nicht verlassen dürfen. Die Kryptografie ist post-quantensicher, was auch gegen Angriffe nach dem Muster &quot;harvest now, decrypt later&quot; schützt. Wer heute Chiffrat abgreift, um es mit der Hardware von morgen zu entschlüsseln, erhält nichts Verwertbares.</p><h2 id="so-funktioniert-die-integration">So funktioniert die Integration</h2><p>Mit GitLab Duo Self-Hosted lassen sich die KI-Funktionen von Duo aus einem selbst kontrollierten Modell bedienen statt aus einem von GitLab betriebenen Gateway. Privatemode tritt an diese Stelle.</p><p>Der Weg ist unkompliziert. GitLab Duo spricht mit einem selbst gehosteten <strong>AI Gateway</strong>, das die Inferenz an einen beliebigen OpenAI-kompatiblen Endpunkt weiterreicht. Der Privatemode-Proxy <em>ist</em> dieser Endpunkt: Er stellt eine Standard-<code>/v1</code>-API bereit und übernimmt Verschlüsselung und Attestation gegenüber dem Privatemode-Dienst. Trifft eine Anfrage ein, verschlüsselt der Proxy sie, bevor sie das eigene Netz verlässt, prüft das entfernte TEE per Attestation und leitet sie erst dann weiter. Entschlüsselt wird ausschließlich innerhalb der Confidential-Computing-Umgebung. Innerhalb von Duo, über Code Suggestions, Chat, Code Review und agentische Flows hinweg, bleibt die Arbeitsweise für Entwickelnde unverändert.</p><pre className="language-mermaid shiki shiki-themes github-light" code="sequenceDiagram
    autonumber
    actor Dev as Entwickelnde /&lt;br&gt;Duo Agent Platform
    participant GW as Selbst gehostetes&lt;br&gt;GitLab AI Gateway
    participant Proxy as Privatemode&lt;br&gt;Proxy
    participant TEE as Entferntes TEE&lt;br&gt;(CPU + GPU)

    Dev-&gt;&gt;GW: Inferenz-Anfrage (Code&lt;br&gt;Suggestions, Chat,&lt;br&gt;Code Review, Flows)
    GW-&gt;&gt;Proxy: Anfrage an OpenAI-&lt;br&gt;kompatiblen Endpunkt&lt;br&gt;weiterleiten

    rect rgb(255, 244, 214)
        Note over Proxy,TEE: Attestation, bevor Code gesendet wird
        Proxy-&gt;&gt;TEE: Attestation-Belege anfordern
        TEE--&gt;&gt;Proxy: Signierte Belege des Enclave-Codes
        Proxy-&gt;&gt;Proxy: Belege gegen bekannte Sollwerte prüfen
        Proxy-&gt;&gt;TEE: Verschlüsselten Kanal aufbauen (AES-256, post-quantensicher)
    end

    Proxy-&gt;&gt;TEE: Verschlüsselte Anfrage weiterleiten
    Note over TEE: Entschlüsselung und Inferenz&lt;br&gt;nur innerhalb der Enclave
    TEE--&gt;&gt;Proxy: Verschlüsselte Antwort
    Proxy--&gt;&gt;GW: Verschlüsselte Antwort
    GW--&gt;&gt;Dev: Completion (Arbeitsweise&lt;br&gt;unverändert)
" language="mermaid" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">sequenceDiagram
</span></span><span class="line" line="2"><span class="sgsFI">    autonumber
</span></span><span class="line" line="3"><span class="sgsFI">    actor Dev as Entwickelnde /&lt;br&gt;Duo Agent Platform
</span></span><span class="line" line="4"><span class="sgsFI">    participant GW as Selbst gehostetes&lt;br&gt;GitLab AI Gateway
</span></span><span class="line" line="5"><span class="sgsFI">    participant Proxy as Privatemode&lt;br&gt;Proxy
</span></span><span class="line" line="6"><span class="sgsFI">    participant TEE as Entferntes TEE&lt;br&gt;(CPU + GPU)
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span class="sgsFI">    Dev-&gt;&gt;GW: Inferenz-Anfrage (Code&lt;br&gt;Suggestions, Chat,&lt;br&gt;Code Review, Flows)
</span></span><span class="line" line="9"><span class="sgsFI">    GW-&gt;&gt;Proxy: Anfrage an OpenAI-&lt;br&gt;kompatiblen Endpunkt&lt;br&gt;weiterleiten
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sgsFI">    rect rgb(255, 244, 214)
</span></span><span class="line" line="12"><span class="sgsFI">        Note over Proxy,TEE: Attestation, bevor Code gesendet wird
</span></span><span class="line" line="13"><span class="sgsFI">        Proxy-&gt;&gt;TEE: Attestation-Belege anfordern
</span></span><span class="line" line="14"><span class="sgsFI">        TEE--&gt;&gt;Proxy: Signierte Belege des Enclave-Codes
</span></span><span class="line" line="15"><span class="sgsFI">        Proxy-&gt;&gt;Proxy: Belege gegen bekannte Sollwerte prüfen
</span></span><span class="line" line="16"><span class="sgsFI">        Proxy-&gt;&gt;TEE: Verschlüsselten Kanal aufbauen (AES-256, post-quantensicher)
</span></span><span class="line" line="17"><span class="sgsFI">    end
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sgsFI">    Proxy-&gt;&gt;TEE: Verschlüsselte Anfrage weiterleiten
</span></span><span class="line" line="20"><span class="sgsFI">    Note over TEE: Entschlüsselung und Inferenz&lt;br&gt;nur innerhalb der Enclave
</span></span><span class="line" line="21"><span class="sgsFI">    TEE--&gt;&gt;Proxy: Verschlüsselte Antwort
</span></span><span class="line" line="22"><span class="sgsFI">    Proxy--&gt;&gt;GW: Verschlüsselte Antwort
</span></span><span class="line" line="23"><span class="sgsFI">    GW--&gt;&gt;Dev: Completion (Arbeitsweise&lt;br&gt;unverändert)
</span></span></code></pre><br /><p>Im Sequenzdiagramm läuft eine Anfrage aus GitLab Duo über das selbst gehostete AI Gateway zum Privatemode-Proxy, der die entfernte Enclave attestiert und einen verschlüsselten Kanal aufbaut. Erst danach reicht er die Anfrage zur Inferenz innerhalb des TEE weiter.
AI Gateway und Proxy werden selbst betrieben, und das Setup ist deployment-agnostisch (Linux-Paket, Docker oder Kubernetes). Die Schritte sind dokumentiert und versionsspezifisch, deshalb hier nicht wiederholt: siehe <a href="https://www.privatemode.ai/coding-tool/gitlab-duo" rel="">Privatemodes Integrationsanleitung für GitLab Duo</a>.</p><h2 id="die-kompromisse">Die Kompromisse</h2><p>Keine Architektur ist umsonst, und ein technisches Publikum hat Anspruch darauf, die Kosten klar benannt zu bekommen.</p><p><strong>Gateway und Proxy werden selbst betrieben.</strong> Das ist echte Infrastrukturarbeit: das AI Gateway unter einem passenden Hostnamen bereitstellen, seine Image-Version bei jedem Upgrade zur GitLab-Version passend halten, JWT-Schlüssel und Zertifikate konfigurieren und den Proxy erreichbar halten. Es ist allerdings gewöhnlicher Infrastrukturbetrieb, keine GPU-Beschaffung und kein Modellbetrieb. Genau darin liegt der Unterschied. Die Alternative, die den Code ebenfalls privat hält, nämlich ein eigener LLM-Stack, bedeutet knappe GPUs zu kaufen und ein Team für Betrieb und Modell-Updates zu stellen, während man den führenden Modellen hinterherläuft. Privatemode ist ein gehosteter SaaS-Dienst, der den Modellbetrieb übernimmt, und was bleibt, sind ein Proxy und ein Gateway.</p><p><strong>Generische OpenAI-kompatible Modelle sind in GitLab Duo Self-Hosted noch nicht ausgereift.</strong> Sie laufen derzeit als Beta-Funktion, Support für modellspezifische Probleme ist also noch nicht zugesichert. Eine Härtung steht auf der Roadmap, doch wer jetzt eine vollständig unterstützte Konfiguration braucht, sollte diesen Zeithorizont im Rollout berücksichtigen.</p><p><strong>Attestation und Verschlüsselung erzeugen zusätzlichen Aufwand.</strong> Der zusätzliche Roundtrip und die kryptografische Arbeit kosten pro Anfrage etwas. In unseren Tests war das praktisch kein Problem, die Integrationsanleitung empfiehlt allerdings, das Timeout des AI Gateway für langsamere selbst gehostete Backends heraufzusetzen, weshalb sich eine Messung am eigenen Latenzbudget lohnt.</p><p><strong>Vertrauen bleibt nötig, aber es ist begrenzt.</strong> Die Zusicherung beruht darauf, dass das Hardware-TEE und die Kette der Attestation solide sind. Das ist eine kleinere, besser prüfbare Vertrauensannahme als &quot;dem Betreiber vertrauen, dass er nicht hinsieht&quot;, und die Belege der Attestation lassen sich selbst nachprüfen, aber null ist sie nicht. Confidential Computing verengt das Vertrauen auf das Silizium. Es beseitigt es nicht.</p><h2 id="was-das-in-der-praxis-bedeutet">Was das in der Praxis bedeutet</h2><ul><li><strong>Für regulierte Organisationen:</strong> Der Weg zu modernen KI-Coding-Agenten passt zur bestehenden Richtlinie für IP- und Datenschutz, weil der Code innerhalb einer hardwareverschlüsselten Grenze bleibt, und das ohne GPU-Kauf und ohne eigenen Modellbetrieb.</li><li><strong>Für Entwickelnde:</strong> Die GitLab-Duo-Erfahrung bleibt dieselbe, die Modelle sind dieselben oder besser, und neue Werkzeuge braucht es nicht. Da die Modellauswahl auf der Instanz liegt, übernehmen auch Chat und Code Suggestions im Editor über die GitLab Workflow Extension dasselbe vertrauliche Setup.</li><li><strong>Für Compliance- und Security-Teams:</strong> Die Architektur passt zur Richtung von BSI C5:2026 hin zu Confidential Computing und Remote Attestation, und sie liefert konkrete technische Belege, nämlich Verschlüsselung während der Verarbeitung und attestierte Ausführung, für Gespräche zu NIS2, DORA und DSGVO. Compliance stellt sie damit nicht allein her, denn Compliance ist organisatorisch und fortlaufend. Sie räumt aber den Einwand aus, der KI-Einführung überhaupt erst blockiert: &quot;Unser Code würde den Perimeter verlassen.&quot;</li></ul><h2 id="mit-privatemode-starten">Mit Privatemode starten</h2><p>Für Privatemode als selbst gehosteten Modellanbieter braucht es GitLab Self-Managed mit Premium oder Ultimate, ab Version 17.9. Hinzu kommt das Add-on GitLab Duo Enterprise. <a href="https://about.gitlab.com/de-de/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/" rel="">Agentische Flows</a> benötigen zusätzlich die GitLab Duo Agent Platform (allgemein verfügbar ab Version 18.8). Die Nutzung verbraucht GitLab Credits nach den Regeln und Multiplikatoren für Bring-your-own-Model, die in der <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/" rel="">Dokumentation zu GitLab Credits</a> beschrieben sind.</p><h2 id="weiterlesen">Weiterlesen</h2><ul><li><a href="https://docs.privatemode.ai/" rel="">Privatemode-Dokumentation</a></li><li><a href="https://www.privatemode.ai/coding-tool/gitlab-duo" rel="">Integrationsanleitung für GitLab Duo</a></li><li><a href="https://docs.privatemode.ai/guides/coding-assistants/" rel="">Leitfaden für Coding-Assistenten</a></li><li><a href="https://www.privatemode.ai/de/case-studies/capgemini-case-study" rel="">Capgemini-Fallstudie</a></li><li><a href="https://images.nvidia.com/aem-dam/Solutions/Data-Center/confidential-computing/hpc-solution-brief-edgeless-systems-3427281.pdf?ncid=no-ncid" rel="">NVIDIA-Lösungsbeschreibung</a></li></ul><style>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);}</style>]]></content>
        <author>
            <name>Mathias Ewald</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/mathias-ewald/</uri>
        </author>
        <author>
            <name>Martin Paloncy</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/martin-paloncy/</uri>
        </author>
        <published>2026-08-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Mit Claude und GitLab jeden Commit bis zur Produktion absichern]]></title>
        <id>https://about.gitlab.com/de-de/blog/claude-security-and-gitlab/</id>
        <link href="https://about.gitlab.com/de-de/blog/claude-security-and-gitlab/"/>
        <updated>2026-08-03T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Agentisches Coding zieht davon, während viele Governance-Programme in Unternehmen nicht mithalten können. Coding-Assistenten wie das <a href="https://code.claude.com/docs/en/security-guidance" rel="">Claude security guidance plugin</a> und <a href="https://code.claude.com/docs/en/claude-security" rel="">Claude Security</a> markieren und beheben verbreitete Schwachstellen bereits beim Schreiben, in derselben Session. Für sichereren Code ist das wertvoll, doch dort endet Sicherheit nicht. Ein Commit ist eine Etappe auf dem Weg in die Produktion: Merges, Abhängigkeits-Updates, Infrastrukturänderungen und Audits folgen erst, nachdem die Session beendet ist.</p><p>GitLab deckt den restlichen Weg in die Produktion ab. Im typischen Sicherheits-Workflow von Anthropics Claude zu GitLab gibt es fünf Übergaben. Dieser Artikel geht jede einzelne davon durch und zeigt, wie sich agentisches Coding im großen Maßstab steuern lässt.</p><p>Teams, die Claude security guidance und Claude Security bereits nutzen, können diesen Kontext über den <a href="https://docs.gitlab.com/user/model_context_protocol/mcp_server/" rel="">GitLab-MCP-Server</a> direkt in GitLab einspeisen und ihren bestehenden Workflow beibehalten. Claude übernimmt den Moment des Schreibens, GitLab alles von dort bis in die Produktion, auf einer Plattform.</p><h2 id="von-markierten-findings-zu-durchgesetzten-kontrollen">Von markierten Findings zu durchgesetzten Kontrollen</h2><p>Das Claude security guidance plugin prüft Code innerhalb der Session einer einzelnen entwickelnden Person und erkennt Probleme, während der Agent weiterarbeitet. Sobald dieser Code die Session verlässt, brauchen Security-Teams eine Aufzeichnung dessen, was darin geschah, und Kontrolle darüber, was als Nächstes passiert.</p><p>GitLab gibt Teams die Sichtbarkeit und die Kontrolle, um Guardrails für sicheres Coding zu definieren, bevor Code die Produktion erreicht, unabhängig davon, wo er entstanden ist.</p><ul><li><strong>Kontrollen einmal definieren, überall durchsetzen:</strong> <a href="https://docs.gitlab.com/user/application_security/configuration/security_configuration_profiles/" rel="">Security Configuration Profiles</a> wenden die erforderlichen Scans über jedes Projekt und jede Pipeline hinweg an, von außerhalb des Repositorys, sodass die Abdeckung konsistent ist und sich nicht umgehen lässt.</li><li><strong>Funktionstrennung durchsetzen, auch für Agenten:</strong> <a href="https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/" rel="">Merge-Request-Approval-Policies</a> stellen sicher, dass der Agent, der eine Änderung geschrieben hat, sie nicht selbst freigeben kann. Weder der Agent noch die Person, die ihn beauftragt hat, kann die eigene Arbeit ohne benannte freigebende Person mergen.</li><li><strong>Kritische Schwachstellen vor dem Ausliefern blockieren:</strong> Merge-Request-Approval-Policies halten jeden Merge mit ungelösten kritischen Findings zurück, bis eine benannte Person freigibt, sodass verworfene oder übersehene Schwachstellen nicht unbemerkt in die Produktion gelangen.</li><li><strong>Den Status jedes Findings dauerhaft verfolgen:</strong> <a href="https://docs.gitlab.com/user/application_security/vulnerability_report/" rel="">Vulnerability Report</a> und <a href="https://docs.gitlab.com/user/application_security/security_dashboard/" rel="">Security Dashboard</a> zeigen, ob ein Finding erkannt, mit Begründung verworfen oder behoben wurde.</li></ul><p><img alt="Scanner über jedes Projekt im Geltungsbereich hinweg aktivieren, ohne Möglichkeit sie zu umgehen" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/b29bi5eu71wuowipzskr.png" title="Scanner über jedes Projekt im Geltungsbereich hinweg aktivieren, ohne Möglichkeit sie zu umgehen" /></p><h2 id="vom-scan-in-der-session-zum-audit-nachweis">Vom Scan in der Session zum Audit-Nachweis</h2><p>Audit-Anforderungen im Change-Management werden auf Agenten ausgeweitet. Compliance-Frameworks wie SOC 2, PCI DSS und FedRAMP verlangen dokumentierte Nachweise, dass jede Änderung getestet, reviewt und freigegeben wurde, bevor sie ausgeliefert wurde.</p><p>GitLab macht Compliance-Kontrollen durchsetzbar und die Sammlung von Nachweisen für Auditoren automatisch.</p><ul><li><strong>Belegen, dass Scan und Review stattgefunden haben:</strong> <a href="https://docs.gitlab.com/user/compliance/compliance_frameworks/#gitlab-compliance-controls" rel="">Compliance Controls</a> garantieren, dass bei jedem Merge Request ein Scan läuft und jedes Finding im Merge Request und im Vulnerability Report auftaucht, sichtbar für einen Menschen.</li><li><strong>Auditoren nachvollziehbar antworten:</strong> <a href="https://docs.gitlab.com/ci/jobs/job_logs/" rel="">Pipeline-Logs</a>, <a href="https://docs.gitlab.com/user/project/merge_requests/approvals/" rel="">Freigabe-Nachweise</a> und <a href="https://docs.gitlab.com/user/compliance/audit_events/" rel="">Audit-Events</a> liefern eine reproduzierbare Historie darüber, was gescannt wurde und wer freigegeben hat, Änderung für Änderung, verknüpft mit den beteiligten Menschen und Agenten.</li><li><strong>Nachweise dem angefragten Framework zuordnen:</strong> <a href="https://docs.gitlab.com/user/compliance/compliance_frameworks/#gitlab-compliance-controls" rel="">Compliance Frameworks</a> gruppieren Nachweise in benannte Anforderungen, etwa SOC 2 oder ein eigenes Framework, jeweils aus konkreten Kontrollen aufgebaut, und der <a href="https://docs.gitlab.com/user/compliance/compliance_center/compliance_status_report/" rel="">Compliance-Status-Report</a> zeigt pro Framework, welche Kontrollen bestanden haben, ausstehen oder fehlgeschlagen sind.</li></ul><p><img alt="Audit-Log der Agenten-Aktivität mit Ereignissen auf Session-Ebene und Startzeiten" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/xehdn27jhyv1tb0agrjt.png" title="Audit-Log der Agenten-Aktivität mit Ereignissen auf Session-Ebene und Startzeiten" /></p><h2 id="steuern-welche-sensiblen-daten-gesendet-werden">Steuern, welche sensiblen Daten gesendet werden</h2><p>An ein Modell geht zur Prüfung vermutlich mehr Code samt dem Geschäftskontext darum herum als an einen Menschen. Regulierte Branchen, Behörden und Teams mit sensiblem geistigem Eigentum müssen entscheiden, was ihre Umgebung verlässt, etwa Zugangsdaten, proprietäre Logik und regulierte Daten. Diese Entscheidung muss fallen, bevor irgendein Scan läuft, und für jedes Werkzeug gelten, das den Code berührt.</p><p>Mit GitLab lässt sich festlegen, welche Daten ein Modell erreichen, noch bevor sie die eigene Umgebung verlassen.</p><ul><li><strong>Secrets und sensiblen Code von Modellen fernhalten:</strong> <a href="https://docs.gitlab.com/user/duo_agent_platform/context/" rel="">Kontext-Ausschlüsse</a> halten Secrets und sensible Dateien aus allem zurück, was ein Agent an Modelle sendet.</li><li><strong>Code und Inferenz innerhalb der eigenen Grenze halten, auf freigegebenen Modellen:</strong> Eine self-managed Umgebung mit self-hosted Modellen betreiben, damit nichts die eigene Umgebung verlässt. <a href="https://docs.gitlab.com/user/duo_agent_platform/model_selection/" rel="">Das Modell pro Flow auswählen</a>, einschränken, welche Modelle zulässig sind, und den eigenen Code aus dem Training halten.</li><li><strong>Filtern, was gesendet wird:</strong> <a href="https://docs.gitlab.com/user/gitlab_duo/prompt_guardrails/" rel="">Die Prompt-Guardrails von GitLab Duo</a> prüfen Code-Vorschläge auf Secrets, bevor sie ein Modell erreichen, und isolieren die Inhalte, auf die ein Prompt wirken kann, um das Risiko von Prompt Injection zu senken, zusätzlich zu allem, was ohnehin schon ausgeschlossen ist.</li></ul><p><img alt="Festlegen, welche Dateien oder Verzeichnisse nicht an KI-Modelle gesendet werden" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/uvgikegtzsabqdqahg04.png" title="Festlegen, welche Dateien oder Verzeichnisse nicht an KI-Modelle gesendet werden" /></p><h2 id="von-einem-scan-zu-vollständiger-scan-abdeckung-über-den-entwicklungszyklus">Von einem Scan zu vollständiger Scan-Abdeckung über den Entwicklungszyklus</h2><p>Anthropics <a href="https://github.com/anthropics/claude-plugins-official/tree/main/plugins/security-guidance" rel="">Dokumentation</a> stellt ausdrücklich klar, dass das Claude security guidance plugin ein unterstützendes Werkzeug nach dem Best-Effort-Prinzip ist, gedacht neben menschlichem Code-Review und verschiedenen Security-Scannern, nicht als Ersatz dafür. Diese Einordnung verdient Aufmerksamkeit, denn manche Schwachstellen existieren zum Zeitpunkt des Auslieferns noch nicht. Eine Abhängigkeit, die heute ausgeliefert wird, kann im nächsten Jahr eine kritische Schwachstelle gemeldet bekommen, ohne jede Änderung am eigenen Code. <a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-356a" rel="">Log4Shell</a> ist das deutlichste Beispiel: Anwendungen, die Jahre früher ausgeliefert worden waren, wurden in dem Moment angreifbar, in dem die Schwachstelle im Dezember 2021 öffentlich bekannt wurde.</p><p>Abhängigkeiten, Container-Images, Infrastrukturkonfiguration und Secrets, die längst in der Commit-Historie liegen, brauchen Scans, die unabhängig von einer einzelnen Session laufen.</p><p>GitLab sichert den gesamten Software-Delivery-Lebenszyklus ab.</p><ul><li><strong>Die gesamte Angriffsfläche abdecken:</strong> Scans für <a href="https://docs.gitlab.com/user/application_security/dependency_scanning/" rel="">Abhängigkeiten</a>, <a href="https://docs.gitlab.com/user/application_security/container_scanning/" rel="">Container</a>, <a href="https://docs.gitlab.com/user/application_security/iac_scanning/" rel="">Infrastructure as Code</a>, <a href="https://docs.gitlab.com/user/application_security/secret_detection/" rel="">Secrets</a> und <a href="https://docs.gitlab.com/user/application_security/dast/" rel="">dynamische Anwendungssicherheitstests (DAST)</a> prüfen die Teile einer Anwendung, die ein sessionbasiertes Review nie erreicht: die eingebundenen Abhängigkeiten, die ausgelieferten Images, die bereitgestellte Infrastruktur, die in Commits geratenen Secrets und die laufende Anwendung.</li><li><strong>Die Fehler finden, die Scannern entgehen können:</strong> Deterministische Scanner können Fehler in der Geschäftslogik, fehlerhafte Autorisierung oder Race Conditions nicht erkennen. <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/security_review/" rel="">Security Review Flow</a> schließt aus der Absicht auf genau diese Kategorie und hinterlässt Kommentare am betroffenen Code, auf die ein Mensch reagieren kann.</li><li><strong>Einen deterministischen Scan haben, dessen Ergebnisse nicht driften:</strong> Ein LLM-basiertes Review kann bei identischem Code von Durchlauf zu Durchlauf unterschiedliche Findings liefern. Ein deterministischer Scan wie advanced SAST verfolgt verunreinigte Daten mit einem festen Algorithmus über Funktionsgrenzen hinweg und liefert reproduzierbare, CWE-zugeordnete Ergebnisse, also die konsistenten Nachweise, die ein Compliance-Audit braucht.</li></ul><p><img alt="SAST, DAST sowie Abhängigkeits-, Container- und Secret-Scans verpflichtend in der Pipeline" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/tmmgtxgnlivwhjmx6uz7.png" title="SAST, DAST sowie Abhängigkeits-, Container- und Secret-Scans verpflichtend in der Pipeline" /></p><h2 id="ein-satz-guardrails-für-jeden-agenten-und-jede-entwickelnde-person">Ein Satz Guardrails für jeden Agenten und jede entwickelnde Person</h2><p>Das Claude security guidance plugin prüft den Code, den Claude innerhalb einer Session schreibt und committet. Commits aus der eigenen Shell, einschließlich des Shell-Escapes &quot;!&quot; innerhalb einer Session, <a href="https://code.claude.com/docs/en/security-guidance" rel="">liegen außerhalb dessen, was das Plugin prüft</a>. Claude Security erweitert das auf Anfrage auf eine vollständige Codebasis oder auf von Menschen geschriebenen Code, wenn eine entwickelnde oder administrierende Person es ausführt.</p><p>GitLabs Scan-Execution- und Merge-Request-Approval-Policies laufen in der Pipeline für jede Änderung. Die Abdeckung hängt damit nicht davon ab, ob ein Mensch oder ein Agent den Code geschrieben hat oder ob daran gedacht wurde, einen Scan zu starten.</p><p><img alt="Sicherheits-Scans so konfigurieren, dass sie auf jedem Standard-Branch laufen" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525383/hs2u66vp2c7fbxemwvbt.png" title="Sicherheits-Scans so konfigurieren, dass sie auf jedem Standard-Branch laufen" /></p><h2 id="steuern-was-ausgeliefert-wird">Steuern, was ausgeliefert wird</h2><p>Claude security guidance und Claude Security helfen Entwickelnden, Probleme im Moment des Schreibens zu erkennen und zu beheben. Sobald dieser Code die Session verlässt, sind Security- und Platform-Teams im Unternehmen dafür verantwortlich, ihn sicher in die Produktion zu bringen. Sie brauchen Sichtbarkeit darüber, was ein Agent getan hat, Nachweise, dass Sicherheitsverfahren eingehalten wurden, und die Möglichkeit, eine problematische Änderung vor dem Ausliefern zu stoppen.</p><p>GitLab schlägt die Brücke zum Claude-Workflow. Guardrails werden einmal in GitLab gesetzt, und jeder Agent und jede entwickelnde Person liefert innerhalb dieser Guardrails sicherer aus. Claude hilft dabei, sicheren Code zu schreiben. GitLab steuert alles von dort bis in die Produktion.</p><blockquote><p><a href="https://about.gitlab.com/de-de/free-trial/?utm_medium=native&amp;utm_source=integrate-market&amp;utm_campaign=eg_global_cmp_content-syndication_security_en_" rel="">Jetzt eine kostenlose Testversion von GitLab Ultimate starten</a></p><p>Ultimate bereits im Einsatz? <a href="https://docs.gitlab.com/user/application_security/policies/" rel="">Scan-Execution- und Merge-Request-Approval-Policies einrichten</a> und Guardrails ab heute durchsetzen.</p></blockquote>]]></content>
        <author>
            <name>Alisa Ho</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/alisa-ho/</uri>
        </author>
        <published>2026-08-03T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Governance für agentische KI, MCPs und KI-Code-Assistenten]]></title>
        <id>https://about.gitlab.com/de-de/blog/govern-agentic-ai-mcps-code-assistants/</id>
        <link href="https://about.gitlab.com/de-de/blog/govern-agentic-ai-mcps-code-assistants/"/>
        <updated>2026-07-31T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Bei der KI-Code-Vervollständigung war das menschliche Review von Anfang an eingebaut. Jemand tippt, ein Vorschlag erscheint, ein Mensch nimmt ihn an oder verwirft ihn. Vor dem Ausliefern sah ein Mensch jede Zeile.</p><p>Agentische KI durchbricht diese Schleife. Ein Agent öffnet einen Merge Request, ruft ein Tool auf, ändert eine CI/CD-Konfiguration und pusht eine Änderung, manchmal ohne dass jemand jeden einzelnen Schritt prüft. Hinzu kommt das <a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">Model Context Protocol (MCP)</a>, über das Agenten sich selbstständig mit externen Tools und Datenquellen verbinden. Damit verschiebt sich die Frage, die Engineering-Verantwortliche stellen: nicht mehr &quot;Welches Modell schreibt den besten Code?&quot;, sondern &quot;Was darf dieser Agent tun, und wie lässt sich belegen, was er getan hat?&quot;</p><p><a href="https://about.gitlab.com/de-de/resources/ai-accountability-survey-2026/" rel="">Eine eigene Untersuchung von GitLab</a> unter mehr als 1.500 Entwickelnden und Technologieverantwortlichen zeigt, wie verbreitet diese Sorge ist: 73 % der Befragten sehen die langfristige Wartbarkeit von Code kritisch, und 86 % stimmen zu, dass KI-generierter Code ohne klare Governance technische Schulden schneller anhäufen kann als die klassische Entwicklungspraxis.</p><p>Dieser Artikel zeigt, wie sich einige der Herausforderungen, die Organisationen bei der Governance agentischer KI zu sehen beginnen, vorausschauend angehen lassen. Er stellt ein Governance-Framework für agentische KI in der Softwareentwicklung vor und behandelt, was zu steuern ist, wo menschliches Review weiterhin hingehört, wie sich eine Einführung messen lässt und welche Checkliste Teams hilft, die auf die <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> standardisieren.</p><h2 id="warum-agentische-ki-eine-andere-governance-braucht">Warum agentische KI eine andere Governance braucht</h2><p>Bei einem interaktiven Coding-Assistenten bleibt das Sicherheitsmodell überschaubar, weil an jedem Schritt ein Mensch beteiligt ist: Eine Frage wird gestellt, ein Vorschlag geprüft, angenommen oder verworfen.</p><p>Anders liegt der Fall bei <a href="https://about.gitlab.com/de-de/topics/agentic-ai/" rel="">agentischer KI</a> in automatisierten Workflows. Kann ein Agent Tests ausführen, Konfigurationen ändern und <a href="https://about.gitlab.com/de-de/blog/multi-step-software-delivery-with-agentic-flows/" rel="">mehrstufige Aktionen über den Software-Lebenszyklus hinweg</a> vornehmen, ohne dass ein Mensch jeden Schritt prüft, verschieben sich die relevanten Fragen:</p><ul><li>Worauf kann dieser Agent zugreifen?</li><li>Wozu ist er berechtigt?</li><li>Welche Aktionen hat er ausgeführt, und lässt sich das im Nachhinein belegen?</li></ul><p>Die meisten Teams spüren das bereits. <a href="https://about.gitlab.com/de-de/resources/ai-accountability-survey-2026/" rel="">92 % der DevSecOps-Fachleute</a> berichten von mindestens einer Governance-Herausforderung bei KI-generiertem Code, und die konkreten Sorgen zielen genau auf die Fragen oben.</p><p>Zu den größten Sorgen zählen:</p><ul><li><strong>Code-Zuordnung:</strong> überhaupt unterscheiden zu können, welcher Code von einer KI und welcher von Menschen stammt.</li><li><strong>Rückverfolgbarkeit zur Absicht:</strong> KI-generierten Code mit der Geschäftsanforderung verbinden, die er erfüllen soll.</li><li><strong>Dokumentation, die mitwächst:</strong> Manuelle Dokumentation hält nicht stand, sobald Agenten einen wachsenden Teil der Codebasis erzeugen.</li></ul><p>Ist ein Agent für ein Projekt freigegeben, kann er in der Regel schreiben, löschen und pushen, ohne dass die einzelne Aktion vorab geprüft wird. An der Verantwortung für das, was in der Codebasis landet, ändert das nichts, ganz gleich ob Mensch oder Agent die Änderung vorgenommen hat.</p><p><strong>Governance für agentische KI ist kein Aufsatz auf die Governance der Code-Vervollständigung. Sie ist ein eigener Ansatz, aufgebaut auf Identität, Berechtigungen und Nachvollziehbarkeit.</strong></p><h2 id="kontrollen-für-mcps-agenten-modellzugriff-und-tool-berechtigungen-setzen">Kontrollen für MCPs, Agenten, Modellzugriff und Tool-Berechtigungen setzen</h2><p>Sobald Agenten Tools aufrufen und sich über Protokolle wie MCP mit externen Systemen verbinden, entscheidet die Rechtevergabe. Ein brauchbares Governance-Modell beantwortet drei Fragen, bevor ein Agent überhaupt läuft:</p><ol><li>Welche Agenten und Flows sind erlaubt?</li><li>Wo dürfen sie tätig werden?</li><li>Welche Modelle dürfen sie nutzen?</li></ol><p>In der Praxis greifen dafür mehrere Ebenen ineinander:</p><ul><li><a href="https://about.gitlab.com/de-de/blog/ai-catalog-discover-and-share-agents/" rel=""><strong>Ein zentraler Katalog für Agenten und Flows</strong></a>: Statt dass jedes Team eigene Agenten-Integrationen aufsetzt, bestimmt ein gemeinsamer AI Catalog, was veröffentlicht wird, abgestimmt auf die bestehenden Rollen und die Gruppenstruktur der Organisation.</li><li><a href="https://about.gitlab.com/blog/improve-ai-security-in-gitlab-with-composite-identities/" rel=""><strong>Composite Identity</strong></a><strong>:</strong> Die Identität jedes KI-Agenten bleibt mit dem Menschen verknüpft, der die Aktion angefragt hat, damit Aktivität nie allein dem Agenten zugerechnet wird. Beim Zugriff auf eine Ressource müssen beide authentifiziert und autorisiert sein, der Agent und der Mensch hinter ihm.</li><li><a href="https://docs.gitlab.com/user/duo_agent_platform/agents/tool-governance/" rel=""><strong>Tool-Approval-Guardrails</strong></a><strong>:</strong> Einzelne Agenten-Tools laufen autonom, pausieren für ein menschliches Review oder bleiben ganz blockiert. Eine sensible Aktion wie das Schreiben einer Datei oder das Löschen einer Ressource wartet damit auf eine Freigabe, bevor sie ausgeführt wird.</li><li><a href="https://about.gitlab.com/blog/how-gitlab-uses-prompt-guardrails-to-help-protect-customers/" rel=""><strong>Prompt-Guardrails</strong></a><strong>:</strong> Agenten verarbeiten auch nicht vertrauenswürdige Eingaben, etwa eine Webseite, einen Issue-Kommentar oder eine von Angreifenden kontrollierte Datei. Deshalb muss die Plattform Versuche erkennen, das Agentenverhalten mitten im Workflow zu kapern, und nicht erst im Nachhinein protokollieren.</li></ul><p>Ziel ist eine Kontrollebene, die Agenten-Berechtigungen genauso behandelt wie längst die menschlichen: rollenbasiert, nachvollziehbar und über alle Projekte hinweg konsistent.</p><h2 id="drei-fragen-zum-datenumgang-die-vorab-geklärt-sein-sollten">Drei Fragen zum Datenumgang, die vorab geklärt sein sollten</h2><p>Quellcode zählt zu den sensibelsten Werten eines Unternehmens, und jede KI-Funktion, die ihn liest, wirft eine Frage zum Datenumgang auf. Vor einer breiten Einführung agentischer KI wollen Technik- und Sicherheitsverantwortliche deshalb meist drei Punkte geklärt haben:</p><ul><li>Trainiert der Anbieter Modelle mit unserem Code?</li><li>Wem gehören Eingaben und Ausgaben?</li><li>Wo sitzen die Subprozessoren, und gibt es eine Benachrichtigung, wenn sich diese Liste ändert?</li></ul><p>In regulierten Branchen lautet die Antwort auf die dritte Frage oft: nirgends außerhalb der eigenen Infrastruktur. Damit wird Self-Hosting zum Governance-Hebel und nicht bloß zur Deployment-Vorliebe. <a href="https://about.gitlab.com/de-de/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/" rel="">Self-Hosting-Optionen</a> erlauben es, KI-Agenten vollständig auf selbst kontrollierter Infrastruktur zu betreiben, die Nutzung im Team weiterhin genau zu erfassen und regulatorische Anforderungen zu erfüllen.</p><p>Bring-your-own-Model geht einen Schritt weiter. Intern bereits validierte Modelle lassen sich anbinden und einzelnen Agenten-Flows zuordnen. Ein sensibler Workflow bleibt so an ein Modell gebunden, dem die Organisation vertraut, während weniger sensible Abläufe eine verwaltete Option nutzen.</p><h2 id="wo-autonomie-endet-und-review-beginnt">Wo Autonomie endet und Review beginnt</h2><p>Governance heißt nicht, Agenten das autonome Handeln zu verwehren. Sie heißt, bewusst festzulegen, wo Autonomie endet und Review beginnt. Eine praktikable Richtlinie unterscheidet dazu zwei Modi:</p><ul><li><strong>Interaktive Arbeit</strong>, bei der ein Mensch anwesend ist, jeden Vorschlag sieht und direkt entscheidet. Diesen Modus kennen die meisten Teams bereits aus der <a href="https://about.gitlab.com/topics/devops/ai-powered-code-completion/" rel="">KI-Code-Vervollständigung</a>.</li><li><strong>Automatisierte Arbeit im Hintergrund</strong>, etwa Agenten in CI/CD-Pipelines, die niemand in Echtzeit beobachtet. Hier findet das Review entweder vor der Aktion statt, über Tool-Approval-Guardrails, oder unmittelbar danach, über einen <a href="https://about.gitlab.com/de-de/blog/one-vulnerability-view/" rel="">Audit-Trail</a>, den ein Mensch prüfen kann.</li></ul><h3 id="entscheidungspunkte-die-es-zu-definieren-gilt">Entscheidungspunkte, die es zu definieren gilt</h3><p>Code-Review, Tests und Validierung sowie Deployment-Freigabe lassen sich über zwei Fragen bestimmen:</p><ul><li>Was davon kann ein Agent eigenständig erledigen?</li><li>Was verlangt eine namentliche menschliche Freigabe, bevor die Änderung weitergeht?</li></ul><p>Jeder Checkpoint braucht in der Praxis seinen eigenen Durchsetzungsmechanismus. Das kann so aussehen:</p><ul><li><a href="https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/" rel="">Merge-Request-Approval-Policies</a> legen fest, wer freigeben muss, bevor ein Merge Request landet, unabhängig davon, ob ein Agent oder ein Mensch ihn geöffnet hat.</li><li><a href="https://docs.gitlab.com/user/duo_agent_platform/agents/tool-governance/" rel="">Tool-Approval-Guardrails</a> entscheiden Tool für Tool, ob die Aktion eines Agenten autonom läuft, für ein Review pausiert oder blockiert bleibt.</li><li><a href="https://docs.gitlab.com/user/application_security/policies/scan_execution_policies/" rel="">Scanner-Durchsetzung</a> hält eine Änderung auf Pipeline-Ebene zurück, bis sie die geforderten Sicherheits- und Qualitätsprüfungen besteht.</li></ul><p>Wir empfehlen eine organisationsweite <a href="https://about.gitlab.com/blog/a-developers-guide-to-building-an-ai-security-governance-framework/" rel="">KI-Governance-Richtlinie</a>, statt die Regeln den Normen einzelner Teams zu überlassen. Das schafft konsistente Nutzung und erleichtert Auditoren die Prüfung des KI-Einsatzes.</p><h3 id="zusätzlicher-kontext-aus-der-entscheidungsebene">Zusätzlicher Kontext aus der Entscheidungsebene</h3><p>Diese Freigaben als strukturierte Datensätze festzuhalten, zahlt sich langfristig aus, denn in einem Chat-Thread oder im Gedächtnis einer prüfenden Person gehen sie verloren. Eine im letzten Quartal gewährte Ausnahme, die Richtlinienversion, unter der sie erteilt wurde, und wer sie freigegeben hat: Genau diese organisatorische Einschätzung müssen Auditoren wie künftige Agenten nachschlagen können.</p><p>Wer Entscheidungen als dauerhafte, abfragbare Ereignisse behandelt, gewinnt zusätzlich, dass die nächste Prüfung mit Kontext beginnt statt bei null, ob sie von einem Menschen oder einem Agenten kommt.</p><blockquote><p>Mehr über <a href="https://learn.gitlab.com/transcend-evergreen/whitepaper-use-case-for-context-graphs" rel="">die Entscheidungsebene</a> und darüber, wie festgehaltene Entscheidungsereignisse die Softwareentwicklung prägen.</p></blockquote><h2 id="fünf-metriken-die-eine-ki-einführung-messen">Fünf Metriken, die eine KI-Einführung messen</h2><p>Fünf Kategorien lohnen sich von Anfang an, und zwar zusammen betrachtet statt isoliert: Ein Anstieg der Adoption ohne begleitenden Blick auf die Risiko-Metriken ist selbst schon ein Warnsignal.</p><ol><li><strong>Adoption:</strong> aktive Nutzende von KI-Funktionen Woche für Woche, Zahl der ausgeführten Flows oder Agenten und welche Teams agentische Funktionen aktiviert haben und welche nicht.</li><li><strong>Akzeptanz und Qualität:</strong> nachgelagerte Signale wie die Revert-Rate bei KI-unterstützten Änderungen und wie oft KI-erstellte Merge Requests das Review ohne Nacharbeit bestehen. Eine einzelne Akzeptanzrate ist für sich ein schwacher Näherungswert, weil sie nichts darüber sagt, was mit dem Code nach der Annahme geschieht.</li><li><strong>Risiko:</strong> wie oft Tool-Approval-Guardrails eine Aktion für ein Review pausieren, wie oft daraus eine blockierte oder geänderte Aktion wird und ob eine Agenten-Aktivität einen Policy-Verstoß auslöst.</li><li><strong>Remediation:</strong> die Scanner-Abdeckung über Projekte hinweg, der Anteil automatisch behobener Schwachstellen gegenüber manuell triagierten und die Dauer bis zur Behebung markierter Findings.</li><li><strong>ROI:</strong> Sobald die Daten eines vollen Quartals vorliegen, lohnt der Blick auf den ROI der KI-Investition. Dazu erfassen, wie viel Aufwand Entwickelnde bei Aufgaben sparen, die Agenten nun übernehmen, und das gegen die Kosten pro behobenem Issue oder gemergter Änderung abwägen, in Credits oder Compute. Ein <a href="https://about.gitlab.com/de-de/blog/measuring-ai-roi-at-scale-a-practical-guide-to-gitlab-duo-analytics/" rel="">ausführlicher Blick auf den KI-ROI</a> zeigt, wie sich Rohdaten zur Nutzung in belastbare Geschäftserkenntnisse und ROI-Berechnungen überführen lassen.</li></ol><p>Werden alle fünf Metriken gemeinsam verfolgt, fallen Probleme der Einführung früh auf. Eine Einführung kann bei Adoption und Akzeptanz erfolgreich aussehen und dabei Risiko anhäufen, das erst ein Audit ein halbes Jahr später zutage fördert. Erst zusammen ergeben die Metriken ein belastbares Bild vom Wert der KI für die Organisation.</p><h2 id="governance-checkliste-für-die-gitlab-duo-agent-platform">Governance-Checkliste für die GitLab Duo Agent Platform</h2><p>Für Teams, die auf die GitLab Duo Agent Platform standardisieren, dient diese Checkliste als Ausgangspunkt, bevor agentische KI über einen Pilotbetrieb hinaus ausgeweitet wird:</p><ul className="contains-task-list"><li className="task-list-item"><input disabled type="checkbox" /> Das <a href="https://about.gitlab.com/de-de/ai-transparency-center/" rel="">AI Transparency Center</a> durchgehen und das eigene Verständnis von Datennutzung, Modellanbietern und Subprozessor-Zusagen bestätigen.</li><li className="task-list-item"><input disabled type="checkbox" /> Auf Plattformebene entscheiden, welche Agenten und Flows freigegeben sind, und sie über GitLabs <a href="https://about.gitlab.com/de-de/blog/ai-catalog-discover-and-share-agents/#creating-sharing-and-managing-visibility" rel="">AI Catalog</a> veröffentlichen, statt Teams eigene konfigurieren zu lassen.</li><li className="task-list-item"><input disabled type="checkbox" /> <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/tool-governance/" rel="">Tool-Approval-Guardrails</a> je nach Sensibilität des Tools auf &quot;immer erlauben&quot;, &quot;immer nachfragen&quot; oder &quot;immer verweigern&quot; setzen.</li><li className="task-list-item"><input disabled type="checkbox" /> <a href="https://docs.gitlab.com/development/ai_features/composite_identity/" rel="">Composite Identity</a> einrichten, damit jede Agenten-Aktion mit dem Menschen verknüpft ist, der sie angefragt hat, und der Zugriff die Autorisierung beider verlangt.</li><li className="task-list-item"><input disabled type="checkbox" /> Für regulierte Workloads <a href="https://about.gitlab.com/de-de/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/" rel="">Self-Hosting-Deployment und Bring-your-own-Model-Optionen</a> gegen die eigenen Anforderungen an den Datenstandort abwägen.</li><li className="task-list-item"><input disabled type="checkbox" /> Explizite Human-in-the-Loop-Checkpoints für Code-Review, Tests und Validierung sowie Deployment-Freigabe dokumentieren.</li><li className="task-list-item"><input disabled type="checkbox" /> <a href="https://docs.gitlab.com/user/compliance/audit_event_streaming/" rel="">Audit-Event-Streaming</a> für Agenten-Aktivität aktivieren, sodass jede Aktion in demselben Audit-Trail landet, den die Organisation bereits prüft.</li><li className="task-list-item"><input disabled type="checkbox" /> Die <a href="https://docs.gitlab.com/user/analytics/" rel="">Metriken der Einführung</a> (Adoption, Akzeptanz, Risiko, Remediation, ROI) festlegen, bevor der Pilotbetrieb ausgeweitet wird, und sie gemeinsam in wiederkehrendem Rhythmus prüfen.</li></ul><p>Die Checkliste in jedem Release-Zyklus erneut durchgehen: Governance für agentische KI ist keine einmalige Einrichtung. Neue Agenten, neue Tools und neue Modelle werfen die Fragen oft neu auf.</p><h2 id="wo-agentische-ki-auf-enterprise-kontrolle-trifft">Wo agentische KI auf Enterprise-Kontrolle trifft</h2><p>Agentische KI verändert, was zu steuern ist. Die Code-Vervollständigung fragte einen Menschen, ob ein Vorschlag gut ist. Agentische KI fragt, was ein Agent anfassen darf, wer es freigegeben hat und ob sich das später belegen lässt.</p><p>Diese Fragen vollständig zu beantworten verlangt Governance, die in der Plattform selbst steckt und nicht nachträglich darübergelegt wird. Die <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> stellt AI Catalog, Approval-Guardrails und Audit-Event-Streaming direkt dort bereit, wo die Arbeit stattfindet. Teams erhalten damit KI-Unterstützung und Enterprise-Kontrolle zugleich, weil die Guardrails Teil des Workflows sind und kein separater Prozess daneben.</p><blockquote><p>Jetzt eine <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">kostenlose Testversion der GitLab Duo Agent Platform</a> starten. Im Free-Tier lässt sich <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">in wenigen Schritten anmelden</a>. Wer bereits GitLab Premium oder Ultimate nutzt, kann <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">die Duo Agent Platform aktivieren</a> und die <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">im Abonnement enthaltenen GitLab Credits</a> nutzen.</p></blockquote>]]></content>
        <author>
            <name>Julie Griffin</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/julie-griffin/</uri>
        </author>
        <published>2026-07-31T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Warum GitLab den Open Weights and American AI Leadership Letter unterzeichnet hat]]></title>
        <id>https://about.gitlab.com/de-de/blog/open-weight-model-letter/</id>
        <link href="https://about.gitlab.com/de-de/blog/open-weight-model-letter/"/>
        <updated>2026-07-29T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Diese Woche hat GitLab den <a href="https://www.microsoft.com/en-us/corporate-responsibility/topics/open-weight/" rel="">Open Weights and American AI Leadership Letter</a> unterzeichnet und sich damit einer langen Reihe weiterer Technologieunternehmen angeschlossen, die ein starkes, offenes KI-Ökosystem unterstützen.</p><p>Der Brief vertritt die Auffassung, dass offene Modellgewichte Innovation fördern, Kunden mehr Kontrolle geben und einen wichtigen Weg zu Sicherheit und Schutz von KI eröffnen. Das ist nicht nur eine politische Position, die wir teilen, sondern zugleich zentral für unser Verständnis von agentischem Engineering: Teams leisten ihre beste Arbeit, wenn sie das für die Aufgabe passende Modell wählen können.</p><p>Als intelligente Orchestrierungsplattform für DevSecOps, die Tempo und Kontrolle im agentischen Software-Engineering verbindet, stellt GitLab die Wahlfreiheit der Kunden in den Vordergrund, orchestriert den Software-Lebenszyklus und unterstützt mehrere Modelle über den Workflow eines Teams hinweg.</p><h2 id="kunden-befähigen-ihre-ki-modelle-selbst-zu-wählen">Kunden befähigen, ihre KI-Modelle selbst zu wählen</h2><p>In vielen Organisationen wächst das Interesse an einem geregelten Zugang zu erstklassigen Foundation- und Open-Weight-Modellen. GitLab unterstützt beide.</p><p>Foundation-Modelle führen oft bei der allgemeinen Leistungsfähigkeit, während Open-Weight-Modelle Vorteile bei der Kontrolle über Kosten, Deployment und Datenstandort bieten können. Unser Ziel ist es, Kunden dabei zu helfen, beide nach Bedarf zu kombinieren.</p><p>Eine der kritischsten Entscheidungen, die Führungskräfte treffen, ist der Schutz von Software und strategischem geistigem Eigentum vor Bedrohungen für Sicherheit, Vertraulichkeit und Wettbewerbsfähigkeit. Organisationen sollten nicht an eine einzige Cloud oder einen einzigen KI-Modellanbieter gebunden sein.</p><p>GitLab ist die einzige Plattform, die zugleich Cloud-neutral und KI-Modell-neutral ist. Diese Wahlfreiheit hält jedoch nur, solange der Modellmarkt offen bleibt. Open-Weight-Modelle geben Entwicklungsteams die Wahl, wo sie ihre KI-Modelle ausführen, bei Bedarf in air-gapped Umgebungen, und behalten dabei die Kontrolle über ihren Code.</p><h2 id="unsere-position">Unsere Position</h2><p>Wie die politischen Entscheidungsträger wollen auch wir ein sicheres, geschütztes KI-Ökosystem und sehen Offenheit als einen wichtigen Teil des Wegs dorthin. Wir unterstützen eine Politik, die die Fähigkeit erhält, Open-Weight-Modelle zu entwickeln, zu verbreiten und zu nutzen, unter der Voraussetzung fokussierter, risikobasierter Schutzmaßnahmen und gezielter Werkzeuge gegen tatsächlichen Missbrauch. Solche Eingriffe können einen wesentlichen Beitrag zu einem robusten Ökosystem leisten, in dem mehrere Modellanbieter, offene wie proprietäre, im Wettbewerb um die beste Lösung antreten, zum Nutzen von Innovation, Sicherheit und Wahlfreiheit der Kunden.</p><h2 id="weiterführende-links">Weiterführende Links</h2><ul><li><a href="https://about.gitlab.com/de-de/ai-transparency-center/" rel="">GitLab AI Transparency Center</a></li><li><a href="https://about.gitlab.com/de-de/blog/securing-ai-together-gitlabs-partnership-with-security-researchers/" rel="">Gemeinsam KI absichern: GitLabs Partnerschaft mit Sicherheitsforschenden</a></li><li><a href="https://about.gitlab.com/de-de/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops/" rel="">Warum Unabhängigkeit für Unternehmen im DevSecOps wichtiger ist denn je</a></li></ul>]]></content>
        <author>
            <name>Bill Staples</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/bill-staples/</uri>
        </author>
        <published>2026-07-29T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claude Opus 5 auf GitLab: Reasoning für die anspruchsvollsten Aufgaben]]></title>
        <id>https://about.gitlab.com/de-de/blog/claude-opus-5-on-gitlab-duo-agent-platform/</id>
        <link href="https://about.gitlab.com/de-de/blog/claude-opus-5-on-gitlab-duo-agent-platform/"/>
        <updated>2026-07-27T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Ein Fehler bei einer Routineaufgabe kostet wenig. Ein Fehler bei einem großen Refactoring oder auf einer Debugging-Spur, die sich über Monate an Commit-Historie erstreckt, kostet weit mehr, denn er summiert sich unbemerkt über Hunderte von Interaktionen. Bis er auffällt, muss auch jeder darauf aufbauende Schritt wieder zurückgenommen werden. Das ist der Unterschied zwischen Arbeit, bei der Tempo zählt, und hochkomplexer Arbeit, die gleich beim ersten Mal stimmen muss.</p><p>Anthropics neuestes KI-Modell Claude Opus 5, jetzt auf der <a href="https://docs.gitlab.com/user/duo_agent_platform/" rel="">GitLab Duo Agent Platform</a> verfügbar, ist für die Aufgaben gebaut, die einem Agenten am meisten abverlangen. Mit Opus 5 kann das Entwicklungsteam Agenten auch komplexere, kritische Arbeit anvertrauen. In GitLabs interner Evaluierung löste Opus 5 93,3 % der Benchmark-Aufgaben, eine Verbesserung um 20,3 Punkte gegenüber der Lösungsrate von 73,0 % bei Opus 4.8.</p><blockquote><p><strong>&quot;Die Teams, die den größten Nutzen aus KI-Agenten ziehen, können ihre schwierigste, folgenreichste Arbeit übergeben und darauf vertrauen, dass das Reasoning vom ersten bis zum letzten Schritt trägt.&quot;</strong></p><p>– Stuart Moncada, VP, AI Product Management, GitLab</p></blockquote><h2 id="reasoning-auch-bei-komplexität">Reasoning – auch bei Komplexität</h2><p>Manche Teams zögern, ihre anspruchsvollste Arbeit an einen Agenten zu delegieren, weil sich Fehler nur aufwendig zurücknehmen lassen. Bei langlaufenden, hochkomplexen Aufgaben muss das Reasoning eines Agenten von Anfang bis Ende tragen. Mit dem tieferen Reasoning von Opus 5 werden mehr komplexe Aufgaben, etwa Features über mehrere Dateien und größere Refactorings, gleich beim ersten Mal korrekt gelöst, was das Diagnostizieren und erneute Prompten fehlgeschlagener Durchläufe reduziert. Teams, die die GitLab Duo Agent Platform mit Opus 5 nutzen, können mit weniger unvollständigen Patches rechnen und damit, dass mehr Arbeit merge-fertig zurückkommt.</p><p>Diese Verlässlichkeit erstreckt sich auch auf die Vollständigkeit. In GitLabs internen Tests schloss Opus 5 100 % der begonnenen Aufgaben ab und erreichte damit dieselbe Abschlussrate wie Opus 4.8. Der Unterschied liegt im Ergebnis: Mehr Lösungen von Opus 5 sind verifiziert korrekt, was die Lösungsrate von Opus 5 auf 93,3 % bringt, gegenüber 73,0 % bei Opus 4.8.</p><p>Eine Aufgabe in GitLabs Evaluierung verlangte mockbare SSO-Login-Unterstützung in einem CLI-Authentifizierungsablauf, eine Änderung über fünf Dateien hinweg, samt neuer exportierter Typen und Konfigurationsfelder. Mehrere andere getestete Modelle lieferten nicht einmal einen Lösungsversuch. Opus 5 baute die vollständige Implementierung, committete sie und öffnete einen Merge Request.</p><p>Dieselbe Präzision ist auch beim Code-Review zu erwarten. Opus 5 markiert echte Bugs und produziert wenige False Positives, sodass sich das Team auf echte Schwachstellen konzentrieren kann und weniger Rauschen filtern muss.</p><p>Laufen in einem Workload mehrere Agenten gleichzeitig, gibt es weniger Konflikte zwischen ihnen zu entwirren. Opus 5 hält Subagenten koordiniert und sorgt dafür, dass sie sich nicht in die Arbeit der anderen einmischen. Writer-Verifier-Muster fangen Probleme zwischen Agenten ab, bevor sie beim Team ankommen: Ein Agent prüft die Ausgabe eines anderen, bevor sie akzeptiert wird. Teams, die längere, autonomere Sessions mit mehr parallelen Agenten fahren, sehen die stärksten Ergebnisse.</p><p>Für kostensensible Workloads mit mehreren parallelen Agenten lassen sich mit <a href="https://about.gitlab.com/de-de/blog/gitlab-18-11-budget-guardrails-for-gitlab-credits/" rel="">Obergrenzen für den Verbrauch von GitLab Credits</a> harte Ausgabenlimits setzen, sodass parallele Arbeit nie über das Budget hinausläuft.</p><h2 id="tempo-auch-bei-den-anspruchsvollsten-aufgaben">Tempo auch bei den anspruchsvollsten Aufgaben</h2><p>Bei den anspruchsvollsten Benchmark-Aufgaben von GitLab verbindet Opus 5 Verlässlichkeit mit Tempo. Im 95. Perzentil, dem langsameren Ende seiner Läufe, war Opus 5 2,2 % schneller als Opus 4.8 (768 Sekunden gegenüber 784,98 Sekunden) und 21,9 % schneller als Sonnet 4.6 (768 Sekunden gegenüber 982,57 Sekunden). Für das Team bedeutet das planbarere Durchlaufzeiten, auch bei den längsten Läufen.</p><h2 id="das-passende-modell-für-die-jeweilige-aufgabe">Das passende Modell für die jeweilige Aufgabe</h2><p>Das passende Modell hängt von der Aufgabe ab, die gerade ansteht, nicht von einer einzigen organisationsweiten Vorgabe. Sonnet-Modelle übernehmen den Großteil der täglichen Entwicklungsarbeit: schnell, günstig und verlässlich für das, was die meisten Teams ständig einsetzen. Zu Opus 5 greift man, wenn die Arbeit tieferes Reasoning verlangt: das schwierigste Debugging, die größten Refactorings, die Entscheidungen, die man nicht noch einmal überarbeiten möchte.</p><p>Diese Wahl lässt sich direkt in der eigenen GitLab-Instanz über die <a href="https://docs.gitlab.com/user/duo_agent_platform/model_selection/" rel="">Modellauswahl</a> treffen. Welches Modell auch gewählt wird, es läuft in derselben Infrastruktur: dem Kontext-Layer, den Policy-Checks und dem Audit-Trail, die jedes Modell auf der GitLab Duo Agent Platform abdecken.</p><p><img alt="Opus 5 auf GitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785170335/jjimrfrttyyskwa96lnk.png" /></p><h2 id="erste-schritte-mit-opus-5">Erste Schritte mit Opus 5</h2><p>Claude Opus 5 ist ab sofort auf der GitLab Duo Agent Platform verfügbar und läuft wie andere Modelle über <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#models" rel="">GitLab Credits</a>. Neu bei der Duo Agent Platform? <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">Jetzt eine kostenlose Testversion starten</a>. Bereits GitLab Premium oder Ultimate abonniert? <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Die Duo Agent Platform aktivieren</a> und die <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">im Abonnement enthaltenen GitLab Credits</a> nutzen.</p>]]></content>
        <author>
            <name>Brittany Lutz</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/brittany-lutz/</uri>
        </author>
        <published>2026-07-27T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Java mit Cursor und GitLab modernisieren]]></title>
        <id>https://about.gitlab.com/de-de/blog/modernize-java-with-cursor-and-gitlab/</id>
        <link href="https://about.gitlab.com/de-de/blog/modernize-java-with-cursor-and-gitlab/"/>
        <updated>2026-07-22T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<h2 id="warum-java-modernisierung-mehr-als-ein-task-ist">Warum Java-Modernisierung mehr als ein Task ist</h2><p>&quot;Java 8 auf Java 21 modernisieren&quot; klingt nach einer einzigen Aufgabe, ist es aber nicht. Es betrifft den Build, die Runtime, Abhängigkeiten, APIs, Nebenläufigkeit, Tests, Container und das Produktionsverhalten, oft alles gleichzeitig. Wer einen Agenten bittet, das alles in einem einzigen Prompt zu erledigen, bekommt einen riesigen Merge Request, den niemand sicher reviewen kann.</p><p>Cursor, ein KI-Coding-Agent, ist im fokussierten Teil dieses Problems stark. Bekommt er einen einzelnen fehlschlagenden Test oder ein abgegrenztes Issue, kann er die Implementierung untersuchen, erklären, was schiefging, einen Fix vorschlagen und die Tests ausführen, ohne aus dem Entwicklungsfluss zu reißen. Was er nicht allein entscheiden kann, ist, was &quot;sicher&quot; über eine mehrstufige Migration hinweg bedeutet.</p><p>Genau hier kommt GitLab ins Spiel: Die <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">Duo Agent Platform</a> orchestriert KI-Workflows im übrigen Software-Lebenszyklus und ist darauf ausgelegt, die Arbeit von Coding-Agenten zu zertifizieren. Die Issue-Hierarchie mit Epics macht den Plan dauerhaft und reviewbar. Der GitLab-Model-Context-Protocol-Server (<a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">MCP</a>) bringt den Kontext aus dem Entwicklungszyklus nach Cursor. CI/CD, Security-Scanning, Code-Review, Impact-Analyse und ein serviceübergreifender Test liefern die Belege, die es braucht, bevor sich das Produktionsverhalten ändert.</p><p>Der Nutzen steht damit fest: eine Migration, der ein Team vertrauen kann. Jede Änderung ist abgegrenzt, reviewt, gegen Java 8 und Java 21 getestet und bis zu einem Work Item mit den zugehörigen Entscheidungen und Belegen zurückverfolgbar. Cursor übernimmt die Implementierung, GitLab liefert den Nachweis. Eine bestehende Java-8-Codebasis wird nicht dadurch sicherer zu modernisieren, dass ein Agent den Code schreibt, sondern dadurch, dass jede Änderung abgegrenzt, reviewt, gegen beide Java-Versionen getestet und nachvollziehbar ist.</p><p>Angesprochen sind damit Teams, die auf einer bestehenden Java-8-Codebasis sitzen und agentisches Tempo nutzen wollen, ohne Governance, Review und Nachvollziehbarkeit aufzugeben. Cursor arbeitet schnell innerhalb einer abgegrenzten Aufgabe. Code Review Flow, Developer Flow, CI/CD, Code-Owner-Freigaben und Impact-Analyse sind das, was dieses Tempo sicher macht. Sie sind keine optionalen Kontrollpunkte, sondern der Mechanismus, der jeden von einem Agenten erzeugten Merge Request an denselben Maßstab hält wie jeden anderen.</p><p>Das Folgende ist die praktische Umsetzung: drei aufeinander aufbauende Use Cases, die zeigen, wie sich das Schritt für Schritt in Cursor und GitLab durchführen lässt.</p><ol><li><a href="#einen-fehlschlagenden-end-to-end-test-mit-cursor-beheben">Einen fehlschlagenden End-to-End-Test mit Cursor beheben</a></li><li><a href="#quality-gates-zur-java-21-modernisierung-vorbereiten">Quality-Gates zur Java-21-Modernisierung vorbereiten</a></li><li><a href="#das-http-connection-handling-mit-java-21-modernisieren">Das HTTP-Connection-Handling mit Java 21 modernisieren</a></li></ol><p>Die Reihenfolge hat einen Grund: klein anfangen, Projektkontext ergänzen, dann eine Grenze modernisieren.</p><h2 id="die-demo-umgebung-aus-java-collector-und-rust-backend">Die Demo-Umgebung aus Java-Collector und Rust-Backend</h2><p>Für alle drei Use Cases nutzen wir den <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">Java HTTP Metrics Collector aus der Tanuki IoT Platform</a>. Er prüft HTTP-Endpunkte, erfasst Metriken wie Antwortstatus und Timing und schickt die Messwerte an sein <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/backend/rust-metrics-store" rel="">Rust-Metrics-Backend</a>. Das gibt uns eine sichtbare Anwendungsgrenze zum Modernisieren und einen echten Backend-Vertrag zum Verifizieren. Das Rust-Backend haben wir vor einiger Zeit im <a href="https://about.gitlab.com/de-de/blog/fix-bugs-with-codex-and-gitlab/" rel="">Tutorial zu Codex und GitLab</a> entwickelt, und es fügt sich nun in die Produktionsarchitektur ein:</p><pre className="language-mermaid shiki shiki-themes github-light" code="flowchart LR
  subgraph sources[&quot;HTTP metric sources&quot;]
    direction TB
    health[&quot;Health endpoint&quot;]
    maintenance[&quot;Maintenance endpoint&quot;]
  end

  java[&quot;Java HTTP metrics collector&quot;]
  rust[(&quot;Rust metrics-store backend&quot;)]

  java --&gt;|&quot;GET&quot;| health
  java --&gt;|&quot;GET&quot;| maintenance
  java --&gt;|&quot;POST /api/metrics&quot;| rust
  rust --&gt;|&quot;HTTP response&quot;| java

  classDef source fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#0f172a
  classDef focus fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
  classDef backend fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a

  class health,maintenance source
  class java focus
  class rust backend
" language="mermaid" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">flowchart LR
</span></span><span class="line" line="2"><span class="sgsFI">  subgraph sources[&quot;HTTP metric sources&quot;]
</span></span><span class="line" line="3"><span class="sgsFI">    direction TB
</span></span><span class="line" line="4"><span class="sgsFI">    health[&quot;Health endpoint&quot;]
</span></span><span class="line" line="5"><span class="sgsFI">    maintenance[&quot;Maintenance endpoint&quot;]
</span></span><span class="line" line="6"><span class="sgsFI">  end
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span class="sgsFI">  java[&quot;Java HTTP metrics collector&quot;]
</span></span><span class="line" line="9"><span class="sgsFI">  rust[(&quot;Rust metrics-store backend&quot;)]
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sgsFI">  java --&gt;|&quot;GET&quot;| health
</span></span><span class="line" line="12"><span class="sgsFI">  java --&gt;|&quot;GET&quot;| maintenance
</span></span><span class="line" line="13"><span class="sgsFI">  java --&gt;|&quot;POST /api/metrics&quot;| rust
</span></span><span class="line" line="14"><span class="sgsFI">  rust --&gt;|&quot;HTTP response&quot;| java
</span></span><span class="line" line="15"><span emptyLinePlaceholder>
</span></span><span class="line" line="16"><span class="sgsFI">  classDef source fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#0f172a
</span></span><span class="line" line="17"><span class="sgsFI">  classDef focus fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
</span></span><span class="line" line="18"><span class="sgsFI">  classDef backend fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a
</span></span><span class="line" line="19"><span emptyLinePlaceholder>
</span></span><span class="line" line="20"><span class="sgsFI">  class health,maintenance source
</span></span><span class="line" line="21"><span class="sgsFI">  class java focus
</span></span><span class="line" line="22"><span class="sgsFI">  class rust backend
</span></span></code></pre><h2 id="voraussetzungen">Voraussetzungen</h2><ol><li><a href="https://cursor.com/de/" rel="">Cursor</a> installiert und konfiguriert. In diesem Tutorial nutzen wir die Cursor-IDE.</li><li>Ein GitLab-Projekt mit dem Quellcode des Java-Collectors, Issues und Modernisierungs-Work-Items. Nutzen lässt sich der <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">Java HTTP Metrics Collector der Tanuki IoT Platform</a>.</li><li>Java 8 für den ersten Use Case und Java 21 für die Modernisierungsarbeit</li><li>Maven, Docker und Docker Compose für lokale Builds und funktionale Tests</li><li>Der <a href="https://docs.gitlab.com/user/model_context_protocol/mcp_server/" rel="">GitLab-MCP-Server</a>, aktiviert auf der GitLab-Instanz oder der Top-Level-Gruppe</li><li><a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">GitLab Duo Code Review Flow</a>, <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/developer/" rel="">Developer Flow</a> und ein Custom Flow für die Impact-Analyse bei Breaking Changes (siehe Abschnitt &quot;Tipps für Cursor und GitLab&quot;), aktiviert für das Java-Collector-Projekt. Diese Flows wenden die Projekt-Guardrails auf jeden Merge Request an, den der Agent erstellt.</li></ol><h3 id="das-gitlab-projekt-vorbereiten">Das GitLab-Projekt vorbereiten</h3><p>Um den Workflow in der eigenen Umgebung nachzuvollziehen, zunächst das Projekt importieren, klonen und in Cursor öffnen:</p><ol><li>Den <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">Java HTTP Metrics Collector der Tanuki IoT Platform</a> in die eigene GitLab-Umgebung importieren, samt aller offenen Issues.</li><li>Das Projekt in die lokale Umgebung klonen und hineinwechseln.</li><li>Das Projekt in Cursor öffnen.</li></ol><pre className="language-shell shiki shiki-themes github-light" code="git clone https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector.git
cd java-http-metrics-collector

cursor .
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> clone</span><span class="sYBdl"> https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector.git
</span></span><span class="line" line="2"><span class="sYu0t">cd</span><span class="sYBdl"> java-http-metrics-collector
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="s7eDp">cursor</span><span class="sYBdl"> .
</span></span></code></pre><p>Das Projekt enthält eine <code>AGENTS.md</code>-Datei mit Repository-Anweisungen und Maven-Befehlen. Cursor kann diese lokalen Anweisungen nutzen, um zu verstehen, wie das Projekt organisiert ist und wie Änderungen getestet werden sollen.</p><p><img alt="Der Java HTTP Metrics Collector in Cursor geöffnet, mit AGENTS.md-Anweisungen" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733478/l4hqhlzxekmhobu2qg0v.png" /></p><h2 id="einen-fehlschlagenden-end-to-end-test-mit-cursor-beheben">Einen fehlschlagenden End-to-End-Test mit Cursor beheben</h2><p>Der Collector erlaubt es, den von einem Endpunkt erwarteten HTTP-Statuscode zu konfigurieren. Die Implementierung behandelt jedoch jede <code>2xx</code>-Antwort als erfolgreich, und <code>503</code>-Fehler schlugen immer fehl, selbst wenn sie als erwartet konfiguriert waren.</p><p>Der End-to-End-Test legt diese Diskrepanz bereits offen, aber der CI/CD-Job darf fehlschlagen. Das hat aus einem nützlichen Signal hingenommenes Hintergrundrauschen gemacht.</p><p><img alt="Der fehlschlagende End-to-End-Test und sein auf &quot;allowed to fail&quot; gesetzter CI/CD-Job" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733536/uaxqalqoceujyja7usmv.png" /></p><h3 id="mit-cursor-reproduzieren-und-beheben">Mit Cursor reproduzieren und beheben</h3><p>Das Problem lässt sich lokal reproduzieren. Die Cursor-IDE mit einem neuen Chat öffnen und damit beginnen, das beobachtbare Problem direkt im Prompt zu beschreiben:</p><pre className="language-markdown shiki shiki-themes github-light" code="Can you help me fix the end-to-end tests in this project? Please create an analysis first, then fix it, and run the tests again.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Can you help me fix the end-to-end tests in this project? Please create an analysis first, then fix it, and run the tests again.
</span></span></code></pre><p>Cursor beginnt damit, die Endpunkt-Konfiguration in den <code>HttpCollector</code> und den fehlschlagenden End-to-End-Test zurückzuverfolgen, und identifiziert die Ursache.</p><p><img alt="Cursor analysiert das Problem und die Ursache" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733605/ojz2pzcftwjfcfscjtwg.png" /></p><p>Nachdem die fokussierten Tests und die vollständige Maven-Testsuite durchlaufen, einen Branch und Merge Request erstellen. Der zuvor auf &quot;allowed to fail&quot; gesetzte End-to-End-Job kann verpflichtend werden, sobald er deterministisch und grün ist.</p><pre className="language-markdown shiki shiki-themes github-light" code="Can you create a git branch and merge request?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Can you create a git branch and merge request?
</span></span></code></pre><h3 id="reviewen-und-mergen">Reviewen und mergen</h3><p>Der Merge Request stößt automatisch CI/CD-Build und -Tests sowie Security-Scanning an.</p><p><img alt="Merge Request mit behobenen End-to-End-Tests" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733663/koz3yb3zq5ewwl6vrbgk.png" /></p><p><a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">GitLab Duo Code Review</a> reviewt die fokussierte Änderung anschließend anhand der Java-spezifischen Review-Anweisungen des Projekts.</p><p><img alt="Code-Review-Feedback" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733717/cjxeoecb4fa7yrvy7i90.png" /></p><p>Wenn das Review ein konkretes Problem findet, adressieren wir es über den Developer Flow, bevor wir mergen. Das ist der Punkt: Der Code Review Flow stellt sicher, dass jeder von einem Agenten erzeugte Merge Request denselben Maßstab erfüllt wie jeder andere, unabhängig davon, wie schnell Cursor ihn erzeugt hat. Der Merge Request bleibt die Fläche für Zusammenarbeit und Entscheidung.</p><p><img alt="Developer Flow adressiert das Review-Feedback" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733848/wehjrbkhhyhze8vtkaby.png" /></p><p>Der Fix gibt uns eine Verhaltens-Baseline. Wir haben einen echten Bug korrigiert, ohne ihn mit einer Runtime-Migration zu vermischen, und die Tests schützen jetzt den Vertrag über den erwarteten Status während der folgenden Modernisierungsarbeit.</p><p>In diesem Video wird gezeigt, wie Cursor die erwarteten End-to-End-Tests untersucht und behebt:</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/vpPt8TICiZY" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="quality-gates-zur-java-21-modernisierung-vorbereiten">Quality-Gates zur Java-21-Modernisierung vorbereiten</h2><p>Der erste Fix kam allein mit Repository-Kontext aus. Die nächste Anforderung ist deutlich größer: den Collector von Java 8 auf Java 21 modernisieren.</p><p>Diese Arbeit hat bereits Planungskontext im <a href="https://gitlab.com/groups/gitlab-da/demo-environments/tanuki-iot-platform/-/work_items/13" rel="">Epic zur Java-Modernisierung</a>: untergeordnete Work Items, Team-Diskussionen, Recherche mit Merge Requests, Pipeline-Historie, Abhängigkeiten und Security-Findings. Diese Details liegen nicht im lokalen Checkout. Statt sie alle in einen riesigen Prompt zu kopieren, lässt sich der GitLab-Kontext mit MCP nach Cursor bringen.</p><h3 id="den-gitlab-mcp-server-in-cursor-konfigurieren">Den GitLab-MCP-Server in Cursor konfigurieren</h3><p>Zunächst sicherstellen, dass der GitLab-MCP-Server auf der Instanz oder der Top-Level-Gruppe <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#prerequisites" rel="">aktiviert</a> ist. Cursor nutzt HTTP-Transport, um sich ohne zusätzliche Abhängigkeiten direkt zu verbinden.</p><p>Um <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#connect-cursor-to-the-gitlab-mcp-server" rel="">Cursor mit dem GitLab-MCP-Server zu verbinden</a>:</p><ol><li>In Cursor zu <strong>Settings &gt; Cursor Settings &gt; Tools &amp; MCP</strong> gehen.</li><li>Unter <strong>Installed MCP Servers</strong> die Option <strong>New MCP Server</strong> wählen.</li><li>Die folgende Definition zum <code>mcpServers</code>-Schlüssel in der geöffneten <code>mcp.json</code>-Datei hinzufügen. Für GitLab.com <code>&lt;gitlab.example.com&gt;</code> durch <code>gitlab.com</code> ersetzen. Für GitLab Self-Managed oder Dedicated die eigene Instanz-URL verwenden.</li></ol><pre className="language-json shiki shiki-themes github-light" code="{
  &quot;mcpServers&quot;: {
    &quot;GitLab&quot;: {
      &quot;type&quot;: &quot;http&quot;,
      &quot;url&quot;: &quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
    }
  }
}
" language="json" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">{
</span></span><span class="line" line="2"><span class="sYu0t">  &quot;mcpServers&quot;</span><span class="sgsFI">: {
</span></span><span class="line" line="3"><span class="sYu0t">    &quot;GitLab&quot;</span><span class="sgsFI">: {
</span></span><span class="line" line="4"><span class="sYu0t">      &quot;type&quot;</span><span class="sgsFI">: </span><span class="sYBdl">&quot;http&quot;</span><span class="sgsFI">,
</span></span><span class="line" line="5"><span class="sYu0t">      &quot;url&quot;</span><span class="sgsFI">: </span><span class="sYBdl">&quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
</span></span><span class="line" line="6"><span class="sgsFI">    }
</span></span><span class="line" line="7"><span class="sgsFI">  }
</span></span><span class="line" line="8"><span class="sgsFI">}
</span></span></code></pre><ol start="4"><li>Die Datei speichern und warten, bis sich die OAuth-Autorisierungsseite im Browser öffnet. Öffnet sie sich nicht, Cursor schließen und neu starten.</li><li>Die Autorisierungsanfrage im Browser prüfen und bestätigen.</li><li>Zurück in Cursor die aufgelisteten Tools inspizieren.</li></ol><p><img alt="Der GitLab-MCP-Server nach der OAuth-Autorisierung in Cursor verbunden" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733928/anreghjemkrnuezohhzh.png" /></p><p>Jetzt lässt sich ein neuer Chat starten und eine Frage auf Basis der verfügbaren GitLab-MCP-Tools stellen.</p><p>Wenn Cursor sich bei GitLab MCP authentifiziert, handelt es mit der bestehenden GitLab-Identität. Es kann nur auf Projekte und Ressourcen zugreifen, auf die man ohnehin schon Zugriff hat. MCP bringt freigegebenen Kontext in die IDE. Es umgeht keine GitLab-Berechtigungen.</p><h3 id="die-umgebung-für-die-java-21-modernisierung-vorbereiten">Die Umgebung für die Java-21-Modernisierung vorbereiten</h3><p>Das <a href="https://gitlab.com/groups/gitlab-da/demo-environments/tanuki-iot-platform/-/work_items/13" rel="">Epic zur Modernisierung von Java 8 auf 21</a> bricht den nötigen Plan in kleinere Iterationen herunter, wobei jedes Artefakt und jede Änderung für sich testbar ist.</p><p><img alt="GitLab-Epic mit untergeordneten Issues" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733989/thwfzpvbs7tcm0un2xg6.png" /></p><p>Der erste Schritt ist sicherzustellen, dass die CI/CD-Infrastruktur sowohl Java 8 als auch 21 parallel testet. Auch die Testabdeckung von Beginn an in jede Modernisierungsaufgabe hinein zu erhöhen, ist verpflichtend.</p><p>Die Cursor-IDE öffnen und den folgenden Prompt nutzen, um den Planungskontext abzurufen:</p><pre className="language-markdown shiki shiki-themes github-light" code="Please help me modernize this sensor from Java 8 to 21. We want to start with the base line for CI/CD builds in work item 14, and then also look into test coverage from 21. Start the implementation in a new Git branch called `maint-java-21` so we can continue testing different scenarios.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Please help me modernize this sensor from Java 8 to 21. We want to start with the base line for CI/CD builds in work item 14, and then also look into test coverage from 21. Start the implementation in a new Git branch called </span><span class="sYu0t">`maint-java-21`</span><span class="sgsFI"> so we can continue testing different scenarios.
</span></span></code></pre><p>Nach dem Abschluss der Arbeit am Issue zur Sichtbarkeit des CI-Builds kann Cursor mit dem MCP-Tool <code>create_workitem_note</code> zusätzlich einen zusammenfassenden Kommentar in das Issue einfügen.</p><p><img alt="Cursor-Zusammenfassung mit Tool-Aufruf des GitLab-MCP-Servers" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734071/bks4lwnncddardc05r3e.png" /></p><p>Der neue Merge Request stößt CI/CD-Pipelines an sowie den Code Review Flow, der Kommentare zum Development-Style-Guide hinterlässt, in denen Dokumentation eingefordert wird.</p><p><img alt="Code-Review-Feedback im Merge Request" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734168/z7ootq0wqmom3yxmdexj.png" /></p><p>Das Feedback lässt sich unmittelbar in der GitLab-Oberfläche adressieren, indem man den Service-Account des Developer Flow erwähnt.</p><pre className="language-markdown shiki shiki-themes github-light" code="@duo-developer-&lt;group-name&gt; Can you help address the review feedback?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">@duo-developer-&lt;group-name&gt; Can you help address the review feedback?
</span></span></code></pre><p>Dieser Prompt startet eine neue Hintergrund-Session, und wir können uns währenddessen auf andere Aufgaben konzentrieren. Alternativ lässt sich zurück in die Cursor-IDE wechseln und deren Chat bitten, das Review-Feedback im Merge Request zu adressieren.</p><p><img alt="Cursor-IDE-Prompt &quot;There is review feedback in the MR - please help me fix it&quot;" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734264/n5ky8nj73bpb1imzrj6h.png" /></p><p>Cursor setzt die Änderungen um und fügt mit dem MCP-Tool <code>create_merge_request_note</code> Kommentare in die Merge-Request-Threads ein.</p><p><img alt="GitLab-Merge-Request mit adressierten Code-Review-Kommentaren" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734337/hah0qxe8ei5h6iefzqz4.png" /></p><p>Die Änderung behält die temporäre Java-8-Baseline und ergänzt eine eigene Java-21-Build- und -Testvalidierung. Damit wird die Kompatibilität in der Pipeline sichtbar, bevor der Quellcode beginnt, Java-21-only-APIs zu nutzen. Sobald diese Quality-Gates existieren, ist jede weitere agentengetriebene Änderung reviewt, getestet und nachvollziehbar. Das ist derselbe Maßstab, den wir auf jeden anderen Merge Request anwenden, und er ist es, der es sicher macht, Cursor schnell arbeiten zu lassen.</p><p>In diesem Video wird gezeigt, wie Cursor GitLab MCP nutzt, um Quality-Gates vorzubereiten und Code-Review-Feedback zu adressieren:</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/bqT2exfE5Go" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="das-http-connection-handling-mit-java-21-modernisieren">Das HTTP-Connection-Handling mit Java 21 modernisieren</h2><p>Der Java HTTP Metrics Collector nutzt derzeit die veraltete <code>HttpURLConnection</code>-API aus Java 8. Java 21 hat die HTTP-Bibliothek mit <code>java.net.http.HttpClient</code> modernisiert, aber das ist nicht bloß ein mechanisches Umbenennen. Redirects, eingeschränkte Header, Timeout-Geltungsbereich, Response-Bodies, Unterbrechung und Verbindungswiederverwendung können sich alle unterschiedlich verhalten. Deshalb liegt die Umsetzung in einem einzigen abgegrenzten Work Item: <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/work_items/16" rel="">Replace HttpURLConnection with java.net.http.HttpClient</a>. Setzen wir das in die Praxis um.</p><p>Die Cursor-IDE mit einem neuen Chat öffnen und um die Umsetzung der Änderungen bitten.</p><p><strong>Hinweis:</strong> Für diesen Use Case wollen wir ein lokales Docker-Compose-Setup nutzen, um die Änderungen zu verifizieren. Wer das Verhalten nachvollziehen möchte, installiert Docker und Docker Compose, andernfalls den zweiten Prompt weglassen.</p><pre className="language-markdown shiki shiki-themes github-light" code="We want to continue modernizing the app to Java 21 - use the same maint-java-21 branch, and start implementing issue 16.

Verify the changes locally using the docker compose setup, after making the changes.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">We want to continue modernizing the app to Java 21 - use the same maint-java-21 branch, and start implementing issue 16.
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="sgsFI">Verify the changes locally using the docker compose setup, after making the changes.
</span></span></code></pre><p>Der GitLab-MCP-Server liefert den Issue-Kontext, die Akzeptanzkriterien, Abhängigkeiten und zugehörigen Diskussionen. Das erste Code-Modernisierungs-Issue bleibt bewusst synchron und begrenzt. Es ersetzt <code>HttpURLConnection</code> durch einen einzigen wiederverwendbaren <code>HttpClient</code> und fügt keine Virtual Threads hinzu, ändert nicht das Zeitmodell und behebt keine unabhängigen Abhängigkeiten. Das sind wertvolle Folgeschritte, aber sie zu kombinieren würde es erschweren, Verhaltensänderungen zu isolieren, zu reviewen und zurückzurollen.</p><h3 id="lokal-umsetzen-und-verifizieren">Lokal umsetzen und verifizieren</h3><p>Fokussierte lokale HTTP-Server-Tests decken Methoden, Header, erwartete und unerwartete Statuscodes, Redirects, Timeouts, Response-Metadaten, Verbindungsfehler und Unterbrechung ab.</p><p><img alt="Cursor führt lokale Maven-Tests aus" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734391/fuxi3jcrcg5alhuqcrje.png" /></p><p>Der funktionale Test mit Docker Compose belegt anschließend, dass authentifizierte Messwerte weiterhin im <code>rust-metrics-store</code>-Backend ankommen.</p><p><img alt="Cursor führt lokal Docker Compose mit dem Rust-Backend aus" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734439/w83djmi4df9dfynb9dfj.png" /></p><p>Falls die CI/CD-Pipelines nach den Änderungen fehlschlagen, lassen sich die GitLab-MCP-Server-Tools nutzen, um direkt in der Cursor-IDE zu inspizieren und zu beheben, ohne den Kontext zu wechseln.</p><p><img alt="Cursor-IDE mit Tool-Aufruf des GitLab-MCP-Servers zum Abrufen von CI/CD-Job-Logs" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734501/g4mfs2zdrffzb9pd8v09.png" /></p><p>In der GitLab-Oberfläche lässt sich der <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/fix_pipeline/" rel="">Fix CI/CD Pipeline Flow</a> nutzen oder der <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/ci_expert_agent/" rel="">CI Expert Agent</a> um Hilfe bitten.</p><h3 id="cicd-und-review-belege">CI/CD- und Review-Belege</h3><p>GitLab CI/CD, GitLab Duo Code Review, Security-Scanning und KI-gestützte Impact-Analyse liefern die abschließenden Belege im Merge Request. Menschliches Review zählt an den subtilen Grenzen weiterhin am meisten: Jeder beabsichtigte Verhaltensunterschied sollte im Merge Request explizit sein, nicht erst nach dem Deployment entdeckt werden.</p><p><img alt="Developer Flow mit Impact-Analyse" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734549/jxqds2bwzcedn7yafdvr.png" /></p><p>In diesem Video wird gezeigt, wie Cursor und GitLab die HTTP-Bibliothek des Collectors auf Java 21 modernisieren:</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/AZEDvb474n0" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="tipps-für-cursor-und-gitlab">Tipps für Cursor und GitLab</h2><p>Hier einige Tipps, um Cursor und GitLab zusammen zu nutzen.</p><h3 id="impact-analyse-für-breaking-changes-bei-der-modernisierung-automatisieren">Impact-Analyse für Breaking Changes bei der Modernisierung automatisieren</h3><p>Der <a href="https://www.youtube.com/watch?v=AZEDvb474n0" rel="">dritte Use Case</a> zeigt den Developer Flow bei einer Impact-Analyse für Breaking Changes. Dieser Workflow lässt sich in einen automatisierten <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">Custom Flow</a> überführen, der ausgelöst wird, sobald ein Merge Request bereit ist oder die Pipeline in Ordnung ist. Zusätzlicher Kontext lässt sich aus <a href="https://about.gitlab.com/de-de/blog/introducing-gitlab-orbit/" rel="">GitLab Orbit</a> abrufen, das einen Kontextgraphen über Code, Work Items, Merge Requests, Schwachstellen und mehr bereitstellt.</p><p>Der Beispiel-Flow lässt sich im AI Catalog inspizieren: <a href="https://gitlab.com/explore/ai-catalog/flows/1013017/" rel="">MR Impact analysis (Orbit)</a>. Dank an meine Kollegin Fatima Sarah Kalid für die Inspiration. Custom Flows sind allgemein verfügbar in <a href="https://about.gitlab.com/de-de/blog/multi-step-software-delivery-with-agentic-flows/" rel="">GitLab 19.2</a>.</p><p><img alt="Custom Flow im AI Catalog" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734604/nk2faraxdhghiktndrs5.png" /></p><p><img alt="Merge-Request-Impact-Analyse mit einem Custom Flow in der GitLab Duo Agent Platform und Orbit" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734740/app3pnjwqzoyulojkomq.png" /></p><h3 id="richtlinien-und-grenzen-für-agenten-dokumentieren">Richtlinien und Grenzen für Agenten dokumentieren</h3><h4 id="agentsmd-für-java">AGENTS.md für Java</h4><p>Eine <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/" rel=""><code>AGENTS.md</code></a>-Datei hilft Cursor und anderen Coding-Agenten, die Projektarchitektur, Befehle, den Code-Stil, Testerwartungen und Grenzen zu verstehen. Diese Anweisungen nah am Code halten und konkret genug, um sie zu verifizieren.</p><p>Beispiel aus der <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/AGENTS.md?ref_type=heads" rel=""><code>AGENTS.md</code> im Java-HTTP-Metrics-Collector-Projekt</a>.</p><pre className="language-markdown shiki shiki-themes github-light" code="# Java HTTP Metrics Collector - Agent Instructions

## Overview

The Java HTTP Metrics Collector is a REST API metrics collection sensor for the Tanuki IoT Platform. It monitors HTTP endpoints, collects performance metrics (response time, status codes, content length), and exports them in Prometheus text format. The application runs continuously with configurable collection intervals and supports concurrent endpoint monitoring.

## Code Style and Standards

### Java 8 Compatibility

- Do not modernize Java 8 code to Java 11+ features unless there is a GitLab issue or task specifically requesting modernization
- Target Java 8 for source and compilation: `maven.compiler.source=1.8` and `maven.compiler.target=1.8`
- Use Java 8 compatible patterns (e.g., anonymous inner classes instead of lambdas where appropriate)

### Documentation

- All public classes must have Javadoc describing purpose and usage
- All public methods must have Javadoc with `@param` and `@return` tags
- Include code examples in main class Javadoc

### Class Organization

- **Main entry point**: `HttpMetricsCollector` - orchestrates configuration loading, metric collection, and export
- **Collector**: `HttpCollector` - performs HTTP requests and collects metrics
- **Exporter**: `PrometheusExporter` - exports metrics in Prometheus text format
- **Models**: `CollectorConfig`, `EndpointConfig`, `HttpMetric` - data transfer objects

### Dependency Management

- Always use Maven for dependency management
- Use property-based version management for dependencies (e.g., `${jackson.version}`)
- Keep dependencies up-to-date in `pom.xml`

### Error Handling

- Use try-catch blocks with proper resource management (try-with-resources where applicable)
- Log errors using SLF4J Logger
- Gracefully handle configuration loading failures
- Implement proper shutdown hooks for resource cleanup

### Concurrency

- Use `ExecutorService` for concurrent HTTP requests
- Thread pool size is limited to the minimum of endpoint count and 10
- Properly shutdown executor service with timeout handling
- Use `Future` objects to collect results from concurrent tasks
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="surfw"># Java HTTP Metrics Collector - Agent Instructions
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="surfw">## Overview
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span class="sgsFI">The Java HTTP Metrics Collector is a REST API metrics collection sensor for the Tanuki IoT Platform. It monitors HTTP endpoints, collects performance metrics (response time, status codes, content length), and exports them in Prometheus text format. The application runs continuously with configurable collection intervals and supports concurrent endpoint monitoring.
</span></span><span class="line" line="6"><span emptyLinePlaceholder>
</span></span><span class="line" line="7"><span class="surfw">## Code Style and Standards
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span class="surfw">### Java 8 Compatibility
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sqxcx">-</span><span class="sgsFI"> Do not modernize Java 8 code to Java 11+ features unless there is a GitLab issue or task specifically requesting modernization
</span></span><span class="line" line="12"><span class="sqxcx">-</span><span class="sgsFI"> Target Java 8 for source and compilation: </span><span class="sYu0t">`maven.compiler.source=1.8`</span><span class="sgsFI"> and </span><span class="sYu0t">`maven.compiler.target=1.8`
</span></span><span class="line" line="13"><span class="sqxcx">-</span><span class="sgsFI"> Use Java 8 compatible patterns (e.g., anonymous inner classes instead of lambdas where appropriate)
</span></span><span class="line" line="14"><span emptyLinePlaceholder>
</span></span><span class="line" line="15"><span class="surfw">### Documentation
</span></span><span class="line" line="16"><span emptyLinePlaceholder>
</span></span><span class="line" line="17"><span class="sqxcx">-</span><span class="sgsFI"> All public classes must have Javadoc describing purpose and usage
</span></span><span class="line" line="18"><span class="sqxcx">-</span><span class="sgsFI"> All public methods must have Javadoc with </span><span class="sYu0t">`@param`</span><span class="sgsFI"> and </span><span class="sYu0t">`@return`</span><span class="sgsFI"> tags
</span></span><span class="line" line="19"><span class="sqxcx">-</span><span class="sgsFI"> Include code examples in main class Javadoc
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="surfw">### Class Organization
</span></span><span class="line" line="22"><span emptyLinePlaceholder>
</span></span><span class="line" line="23"><span class="sqxcx">-</span><span class="sbYKK"> **Main entry point**</span><span class="sgsFI">: </span><span class="sYu0t">`HttpMetricsCollector`</span><span class="sgsFI"> - orchestrates configuration loading, metric collection, and export
</span></span><span class="line" line="24"><span class="sqxcx">-</span><span class="sbYKK"> **Collector**</span><span class="sgsFI">: </span><span class="sYu0t">`HttpCollector`</span><span class="sgsFI"> - performs HTTP requests and collects metrics
</span></span><span class="line" line="25"><span class="sqxcx">-</span><span class="sbYKK"> **Exporter**</span><span class="sgsFI">: </span><span class="sYu0t">`PrometheusExporter`</span><span class="sgsFI"> - exports metrics in Prometheus text format
</span></span><span class="line" line="26"><span class="sqxcx">-</span><span class="sbYKK"> **Models**</span><span class="sgsFI">: </span><span class="sYu0t">`CollectorConfig`</span><span class="sgsFI">, </span><span class="sYu0t">`EndpointConfig`</span><span class="sgsFI">, </span><span class="sYu0t">`HttpMetric`</span><span class="sgsFI"> - data transfer objects
</span></span><span class="line" line="27"><span emptyLinePlaceholder>
</span></span><span class="line" line="28"><span class="surfw">### Dependency Management
</span></span><span class="line" line="29"><span emptyLinePlaceholder>
</span></span><span class="line" line="30"><span class="sqxcx">-</span><span class="sgsFI"> Always use Maven for dependency management
</span></span><span class="line" line="31"><span class="sqxcx">-</span><span class="sgsFI"> Use property-based version management for dependencies (e.g., </span><span class="sYu0t">`${jackson.version}`</span><span class="sgsFI">)
</span></span><span class="line" line="32"><span class="sqxcx">-</span><span class="sgsFI"> Keep dependencies up-to-date in </span><span class="sYu0t">`pom.xml`
</span></span><span class="line" line="33"><span emptyLinePlaceholder>
</span></span><span class="line" line="34"><span class="surfw">### Error Handling
</span></span><span class="line" line="35"><span emptyLinePlaceholder>
</span></span><span class="line" line="36"><span class="sqxcx">-</span><span class="sgsFI"> Use try-catch blocks with proper resource management (try-with-resources where applicable)
</span></span><span class="line" line="37"><span class="sqxcx">-</span><span class="sgsFI"> Log errors using SLF4J Logger
</span></span><span class="line" line="38"><span class="sqxcx">-</span><span class="sgsFI"> Gracefully handle configuration loading failures
</span></span><span class="line" line="39"><span class="sqxcx">-</span><span class="sgsFI"> Implement proper shutdown hooks for resource cleanup
</span></span><span class="line" line="40"><span emptyLinePlaceholder>
</span></span><span class="line" line="41"><span class="surfw">### Concurrency
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`ExecutorService`</span><span class="sgsFI"> for concurrent HTTP requests
</span></span><span class="line" line="44"><span class="sqxcx">-</span><span class="sgsFI"> Thread pool size is limited to the minimum of endpoint count and 10
</span></span><span class="line" line="45"><span class="sqxcx">-</span><span class="sgsFI"> Properly shutdown executor service with timeout handling
</span></span><span class="line" line="46"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`Future`</span><span class="sgsFI"> objects to collect results from concurrent tasks
</span></span></code></pre><h4 id="code-review-anweisungen-für-java">Code-Review-Anweisungen für Java</h4><p>Der GitLab Duo Code Review Flow hilft, Style-Guides und Grenzen einzuhalten. Er erwartet spezifische Anweisungen in der <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/" rel="">Datei <code>.gitlab/duo/mr-review-instructions.yaml</code></a>, zum Beispiel für <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/.gitlab/duo/mr-review-instructions.yaml?ref_type=heads" rel="">Java</a>:</p><pre className="language-yaml shiki shiki-themes github-light" code="# Custom instructions for GitLab Duo Code Review

instructions:
  # General guidelines

  - name: Code Review
    instructions: |
      1. Focus on correctness and performance
      2. Ensure code comments and documentation are clear and concise
      3. Be respectful and constructive in comments

  - name: CI/CD Configuration
    fileFilters:
      - &quot;.gitlab-ci.yml&quot;
    instructions: |
      1. Do not use YAML anchors
      2. Always use rules in jobs, avoid using `only`

  # Java style guide

  - name: Java Style Guide
    fileFilters:
      - &quot;**/*.java&quot;
    instructions: |
      1. Do not modernize Java 8 code to Java 11+ features, unless there is a GitLab issue or task specifically requesting modernization
      2. All public classes must have Javadoc describing purpose and usage
      3. All public methods must have Javadoc with @param and @return tags
      4. Include code examples in main class Javadoc
      5. All public methods must have at least one test case
      6. Use httpbun.com for test endpoints (status codes, delays, JSON responses)
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="sAwPA"># Custom instructions for GitLab Duo Code Review
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="shJU0">instructions</span><span class="sgsFI">:
</span></span><span class="line" line="4"><span class="sAwPA">  # General guidelines
</span></span><span class="line" line="5"><span emptyLinePlaceholder>
</span></span><span class="line" line="6"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">Code Review
</span></span><span class="line" line="7"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="8"><span class="sYBdl">      1. Focus on correctness and performance
</span></span><span class="line" line="9"><span class="sYBdl">      2. Ensure code comments and documentation are clear and concise
</span></span><span class="line" line="10"><span class="sYBdl">      3. Be respectful and constructive in comments
</span></span><span class="line" line="11"><span emptyLinePlaceholder>
</span></span><span class="line" line="12"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">CI/CD Configuration
</span></span><span class="line" line="13"><span class="shJU0">    fileFilters</span><span class="sgsFI">:
</span></span><span class="line" line="14"><span class="sgsFI">      - </span><span class="sYBdl">&quot;.gitlab-ci.yml&quot;
</span></span><span class="line" line="15"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="16"><span class="sYBdl">      1. Do not use YAML anchors
</span></span><span class="line" line="17"><span class="sYBdl">      2. Always use rules in jobs, avoid using `only`
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sAwPA">  # Java style guide
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">Java Style Guide
</span></span><span class="line" line="22"><span class="shJU0">    fileFilters</span><span class="sgsFI">:
</span></span><span class="line" line="23"><span class="sgsFI">      - </span><span class="sYBdl">&quot;**/*.java&quot;
</span></span><span class="line" line="24"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="25"><span class="sYBdl">      1. Do not modernize Java 8 code to Java 11+ features, unless there is a GitLab issue or task specifically requesting modernization
</span></span><span class="line" line="26"><span class="sYBdl">      2. All public classes must have Javadoc describing purpose and usage
</span></span><span class="line" line="27"><span class="sYBdl">      3. All public methods must have Javadoc with @param and @return tags
</span></span><span class="line" line="28"><span class="sYBdl">      4. Include code examples in main class Javadoc
</span></span><span class="line" line="29"><span class="sYBdl">      5. All public methods must have at least one test case
</span></span><span class="line" line="30"><span class="sYBdl">      6. Use httpbun.com for test endpoints (status codes, delays, JSON responses)
</span></span></code></pre><p>Im Zuge der Code-Modernisierung wird die erste Richtlinie mit der Java-8-Durchsetzung aktualisiert werden müssen.</p><h3 id="einen-bewährten-workflow-in-eine-agentische-skill-überführen">Einen bewährten Workflow in eine agentische Skill überführen</h3><p>Wenn ein spezialisierter Workflow wiederholbar wird, lässt er sich in einer <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agent_skills/" rel="">agentischen Skill</a> festhalten. Skills werden bei Bedarf geladen und belegen das Kontextfenster nicht standardmäßig.</p><p>Mit funktionierendem CI/CD, Tests und reviewten Entscheidungen beginnen, damit die agentische Skill bewährte Praxis widerspiegelt und keinen ungetesteten Plan. <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/work_items/24" rel="">Issue 24</a> im Modernisierungs-Epic hält den Ansatz in einer fokussierten agentischen Skill für die Java-21+-Modernisierung fest. Das schafft Mehrwert über den aktuellen Merge Request hinaus: Künftige Agenten-Sessions können dieselben Sicherheitsgrenzen wiederverwenden, statt sie aus früheren Diskussionen zu rekonstruieren.</p><p>Diese Beispiel-Implementierung einer Skill lässt sich ausprobieren, inspiriert von der bestehenden <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/skills/java8-maven-maintenance/SKILL.md?ref_type=heads" rel="">Java-8-Maven-Maintenance-Skill</a>:</p><pre className="language-markdown shiki shiki-themes github-light" code="---
name: java21-modernization
description: &gt;-
  Guide incremental Java 8 to Java 21+ modernization for the HTTP metrics
  collector. Use when a GitLab work item asks for Java 21 CI visibility,
  runtime/image upgrades, HttpClient migration, dependency or source API
  modernization, or review of maint-java-21 style merge requests. Do not use
  for routine Java 8 maintenance; prefer java8-maven-maintenance instead.
compatibility: Requires Maven, Docker Compose, and access to the owning GitLab work item.
---

# Java 21 Modernization

## Overview

Modernize in small, reviewable steps. The owning work item is authoritative.
Preserve collector → Rust metrics-store behavior unless the issue says otherwise.

Companion skill: `skills/java8-maven-maintenance/` for the Java 8 default path.

## Before editing

1. Read the owning issue/epic, `AGENTS.md`, `.gitlab-ci.yml`, `pom.xml`,
   `Dockerfile`, and affected tests.
2. Record the current baseline:
   - `maven.compiler.source` / `target`
   - default CI image vs any `*:java-21` jobs
   - container base image
   - observable CLI/Compose behavior
3. Classify the change into **one** lane:
   - CI visibility only
   - runtime / image switch
   - source / API modernization
   - dependency upgrade
   - tests / contract checks

Do not combine lanes in one MR unless the work item explicitly requires it.

## Workflow

Copy and track:

```text
Modernization progress:
- [ ] Baseline recorded
- [ ] Scoped to owning work item
- [ ] Target-JDK CI evidence available before JDK-only APIs
- [ ] Java 8 lane preserved until exit criteria say otherwise
- [ ] Unit / IT / Compose checks run
- [ ] MR documents risks, rollback, human decisions
```

## Guardrails

- Do not remove Java 8 compatibility unless the work item authorizes it.
- Do not introduce Java 21-only APIs before target-JDK CI evidence exists.
- Do not mix runtime upgrades with unrelated refactors.
- Do not claim performance wins without measurements.
- Preserve the Java → Rust API and authentication contract.
- Stop for a human decision when support policy, rollback, data format, or downstream compatibility is unclear.

## Validation

```bash
mvn -Dmaven.repo.local=.m2/repository test
mvn -Dmaven.repo.local=.m2/repository clean package
```

If Compose or container files change:

```bash
docker compose config --quiet
TANUKI_INGESTION_TOKEN=replace-me docker compose up -d --build
# confirm metric_sample logs and authenticated ingest still work
docker compose down -v
```

## Completion report

In the MR description, include:

1. Baseline before the change
2. Lane changed (CI / runtime / source / deps / tests)
3. Evidence run (commands + CI jobs)
4. Remaining risks and rollback
5. Human decisions still open

## Out of scope

- Broad &quot;modernize everything to Java 21&quot; prompts
- HTTP endpoint semantics unrelated to the JDK migration
  (use `skills/http-endpoint-collector-behavior/`)
- Security triage unrelated to the migration slice
  (use `skills/security-triage-java-sensor/`)
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">---
</span></span><span class="line" line="2"><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">java21-modernization
</span></span><span class="line" line="3"><span class="shJU0">description</span><span class="sgsFI">: </span><span class="sD7c4">&gt;-
</span></span><span class="line" line="4"><span class="sYBdl">  Guide incremental Java 8 to Java 21+ modernization for the HTTP metrics
</span></span><span class="line" line="5"><span class="sYBdl">  collector. Use when a GitLab work item asks for Java 21 CI visibility,
</span></span><span class="line" line="6"><span class="sYBdl">  runtime/image upgrades, HttpClient migration, dependency or source API
</span></span><span class="line" line="7"><span class="sYBdl">  modernization, or review of maint-java-21 style merge requests. Do not use
</span></span><span class="line" line="8"><span class="sYBdl">  for routine Java 8 maintenance; prefer java8-maven-maintenance instead.
</span></span><span class="line" line="9"><span class="shJU0">compatibility</span><span class="sgsFI">: </span><span class="sYBdl">Requires Maven, Docker Compose, and access to the owning GitLab work item.
</span></span><span class="line" line="10"><span class="sgsFI">---
</span></span><span class="line" line="11"><span emptyLinePlaceholder>
</span></span><span class="line" line="12"><span class="surfw"># Java 21 Modernization
</span></span><span class="line" line="13"><span emptyLinePlaceholder>
</span></span><span class="line" line="14"><span class="surfw">## Overview
</span></span><span class="line" line="15"><span emptyLinePlaceholder>
</span></span><span class="line" line="16"><span class="sgsFI">Modernize in small, reviewable steps. The owning work item is authoritative.
</span></span><span class="line" line="17"><span class="sgsFI">Preserve collector → Rust metrics-store behavior unless the issue says otherwise.
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sgsFI">Companion skill: </span><span class="sYu0t">`skills/java8-maven-maintenance/`</span><span class="sgsFI"> for the Java 8 default path.
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="surfw">## Before editing
</span></span><span class="line" line="22"><span emptyLinePlaceholder>
</span></span><span class="line" line="23"><span class="sqxcx">1.</span><span class="sgsFI"> Read the owning issue/epic, </span><span class="sYu0t">`AGENTS.md`</span><span class="sgsFI">, </span><span class="sYu0t">`.gitlab-ci.yml`</span><span class="sgsFI">, </span><span class="sYu0t">`pom.xml`</span><span class="sgsFI">,
</span></span><span class="line" line="24"><span class="sYu0t">   `Dockerfile`</span><span class="sgsFI">, and affected tests.
</span></span><span class="line" line="25"><span class="sqxcx">2.</span><span class="sgsFI"> Record the current baseline:
</span></span><span class="line" line="26"><span class="sqxcx">   -</span><span class="sYu0t"> `maven.compiler.source`</span><span class="sgsFI"> / </span><span class="sYu0t">`target`
</span></span><span class="line" line="27"><span class="sqxcx">   -</span><span class="sgsFI"> default CI image vs any </span><span class="sYu0t">`*:java-21`</span><span class="sgsFI"> jobs
</span></span><span class="line" line="28"><span class="sqxcx">   -</span><span class="sgsFI"> container base image
</span></span><span class="line" line="29"><span class="sqxcx">   -</span><span class="sgsFI"> observable CLI/Compose behavior
</span></span><span class="line" line="30"><span class="sqxcx">3.</span><span class="sgsFI"> Classify the change into </span><span class="sbYKK">**one**</span><span class="sgsFI"> lane:
</span></span><span class="line" line="31"><span class="sqxcx">   -</span><span class="sgsFI"> CI visibility only
</span></span><span class="line" line="32"><span class="sqxcx">   -</span><span class="sgsFI"> runtime / image switch
</span></span><span class="line" line="33"><span class="sqxcx">   -</span><span class="sgsFI"> source / API modernization
</span></span><span class="line" line="34"><span class="sqxcx">   -</span><span class="sgsFI"> dependency upgrade
</span></span><span class="line" line="35"><span class="sqxcx">   -</span><span class="sgsFI"> tests / contract checks
</span></span><span class="line" line="36"><span emptyLinePlaceholder>
</span></span><span class="line" line="37"><span class="sgsFI">Do not combine lanes in one MR unless the work item explicitly requires it.
</span></span><span class="line" line="38"><span emptyLinePlaceholder>
</span></span><span class="line" line="39"><span class="surfw">## Workflow
</span></span><span class="line" line="40"><span emptyLinePlaceholder>
</span></span><span class="line" line="41"><span class="sgsFI">Copy and track:
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span class="sgsFI">```text
</span></span><span class="line" line="44"><span class="sgsFI">Modernization progress:
</span></span><span class="line" line="45"><span class="sgsFI">- [ ] Baseline recorded
</span></span><span class="line" line="46"><span class="sgsFI">- [ ] Scoped to owning work item
</span></span><span class="line" line="47"><span class="sgsFI">- [ ] Target-JDK CI evidence available before JDK-only APIs
</span></span><span class="line" line="48"><span class="sgsFI">- [ ] Java 8 lane preserved until exit criteria say otherwise
</span></span><span class="line" line="49"><span class="sgsFI">- [ ] Unit / IT / Compose checks run
</span></span><span class="line" line="50"><span class="sgsFI">- [ ] MR documents risks, rollback, human decisions
</span></span><span class="line" line="51"><span class="sgsFI">```
</span></span><span class="line" line="52"><span emptyLinePlaceholder>
</span></span><span class="line" line="53"><span class="surfw">## Guardrails
</span></span><span class="line" line="54"><span emptyLinePlaceholder>
</span></span><span class="line" line="55"><span class="sqxcx">-</span><span class="sgsFI"> Do not remove Java 8 compatibility unless the work item authorizes it.
</span></span><span class="line" line="56"><span class="sqxcx">-</span><span class="sgsFI"> Do not introduce Java 21-only APIs before target-JDK CI evidence exists.
</span></span><span class="line" line="57"><span class="sqxcx">-</span><span class="sgsFI"> Do not mix runtime upgrades with unrelated refactors.
</span></span><span class="line" line="58"><span class="sqxcx">-</span><span class="sgsFI"> Do not claim performance wins without measurements.
</span></span><span class="line" line="59"><span class="sqxcx">-</span><span class="sgsFI"> Preserve the Java → Rust API and authentication contract.
</span></span><span class="line" line="60"><span class="sqxcx">-</span><span class="sgsFI"> Stop for a human decision when support policy, rollback, data format, or downstream compatibility is unclear.
</span></span><span class="line" line="61"><span emptyLinePlaceholder>
</span></span><span class="line" line="62"><span class="surfw">## Validation
</span></span><span class="line" line="63"><span emptyLinePlaceholder>
</span></span><span class="line" line="64"><span class="sgsFI">```bash
</span></span><span class="line" line="65"><span class="s7eDp">mvn</span><span class="sYu0t"> -Dmaven.repo.local=.m2/repository</span><span class="sYBdl"> test
</span></span><span class="line" line="66"><span class="s7eDp">mvn</span><span class="sYu0t"> -Dmaven.repo.local=.m2/repository</span><span class="sYBdl"> clean</span><span class="sYBdl"> package
</span></span><span class="line" line="67"><span class="sgsFI">```
</span></span><span class="line" line="68"><span emptyLinePlaceholder>
</span></span><span class="line" line="69"><span class="sgsFI">If Compose or container files change:
</span></span><span class="line" line="70"><span emptyLinePlaceholder>
</span></span><span class="line" line="71"><span class="sgsFI">```bash
</span></span><span class="line" line="72"><span class="s7eDp">docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> config</span><span class="sYu0t"> --quiet
</span></span><span class="line" line="73"><span class="sgsFI">TANUKI_INGESTION_TOKEN</span><span class="sD7c4">=</span><span class="sYBdl">replace-me</span><span class="s7eDp"> docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> up</span><span class="sYu0t"> -d</span><span class="sYu0t"> --build
</span></span><span class="line" line="74"><span class="sAwPA"># confirm metric_sample logs and authenticated ingest still work
</span></span><span class="line" line="75"><span class="s7eDp">docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> down</span><span class="sYu0t"> -v
</span></span><span class="line" line="76"><span class="sgsFI">```
</span></span><span class="line" line="77"><span emptyLinePlaceholder>
</span></span><span class="line" line="78"><span class="surfw">## Completion report
</span></span><span class="line" line="79"><span emptyLinePlaceholder>
</span></span><span class="line" line="80"><span class="sgsFI">In the MR description, include:
</span></span><span class="line" line="81"><span emptyLinePlaceholder>
</span></span><span class="line" line="82"><span class="sqxcx">1.</span><span class="sgsFI"> Baseline before the change
</span></span><span class="line" line="83"><span class="sqxcx">2.</span><span class="sgsFI"> Lane changed (CI / runtime / source / deps / tests)
</span></span><span class="line" line="84"><span class="sqxcx">3.</span><span class="sgsFI"> Evidence run (commands + CI jobs)
</span></span><span class="line" line="85"><span class="sqxcx">4.</span><span class="sgsFI"> Remaining risks and rollback
</span></span><span class="line" line="86"><span class="sqxcx">5.</span><span class="sgsFI"> Human decisions still open
</span></span><span class="line" line="87"><span emptyLinePlaceholder>
</span></span><span class="line" line="88"><span class="surfw">## Out of scope
</span></span><span class="line" line="89"><span emptyLinePlaceholder>
</span></span><span class="line" line="90"><span class="sqxcx">-</span><span class="sgsFI"> Broad &quot;modernize everything to Java 21&quot; prompts
</span></span><span class="line" line="91"><span class="sqxcx">-</span><span class="sgsFI"> HTTP endpoint semantics unrelated to the JDK migration
</span></span><span class="line" line="92"><span class="sgsFI">  (use </span><span class="sYu0t">`skills/http-endpoint-collector-behavior/`</span><span class="sgsFI">)
</span></span><span class="line" line="93"><span class="sqxcx">-</span><span class="sgsFI"> Security triage unrelated to the migration slice
</span></span><span class="line" line="94"><span class="sgsFI">  (use </span><span class="sYu0t">`skills/security-triage-java-sensor/`</span><span class="sgsFI">)
</span></span></code></pre><h2 id="fazit">Fazit</h2><p>Die drei Use Cases in diesem Tutorial bauen aufeinander auf. Cursor hat allein mit Repository-Kontext einen hingenommenen End-to-End-Testfehler behoben. Dann brachte der GitLab-MCP-Server den Modernisierungsplan herein, sodass Cursor Quality-Gates einziehen und die Schleife beim Duo-Review-Feedback direkt aus der IDE schließen konnte. Schließlich nahm Cursor eine einzige abgegrenzte Java-21-Änderung vor und ersetzte HttpURLConnection durch einen wiederverwendbaren HttpClient, abgesichert durch fokussierte Tests, serviceübergreifende Ingestion-Läufe, Pipeline, Security-Scans, eine Software Bill of Materials, Review-Belege und Impact-Analyse.</p><p>Eine Legacy-Java-8-Codebasis wird nicht dadurch sicherer zu modernisieren, dass ein Agent den Code schreibt. Sie wird sicherer, weil jede Änderung abgegrenzt, reviewt, gegen Java 8 und Java 21 getestet und bis zu einem Work Item mit den Entscheidungen und Belegen dahinter nachvollziehbar ist. Cursor übernimmt die Implementierung. GitLab liefert den Nachweis. Zusammen machen sie die Migration zu etwas, dem ein Team vertrauen kann.</p><p>Wer diesen Workflow ausprobieren möchte, beginnt mit einem Test, der einen hingenommenen Fehler in einer Legacy-Anwendung offenlegt. Diesen Test verlässlich machen, den größeren Modernisierungsplan in GitLab festhalten und eine Grenze wählen, die sich unabhängig ändern und belegen lässt. Das gibt dem Agenten eine fokussierte Aufgabe und dem Team Belege, die es reviewen kann.</p><blockquote><p>Wer die GitLab Duo Agent Platform heute noch nicht nutzt, kann mit <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">einer kostenlosen Testversion</a> beginnen.</p><p>Wer GitLab bereits im Free-Tier nutzt, kann sich für die GitLab Duo Agent Platform anmelden, indem er <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">einigen wenigen Schritten folgt</a>.</p><p>Und wer bereits GitLab Premium oder Ultimate abonniert hat, kann direkt loslegen, indem er <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">die Duo Agent Platform aktiviert</a> und die <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">enthaltenen</a> GitLab Credits aus dem Abonnement nutzt.</p></blockquote><style>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 .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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 .sbYKK, html code.shiki .sbYKK{--shiki-default:#24292E;--shiki-default-font-weight:bold}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}</style>]]></content>
        <author>
            <name>Michael Friedrich</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/michael-friedrich/</uri>
        </author>
        <published>2026-07-22T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Sechs Möglichkeiten, die DevOps Kosten zu senken, zu sparen und zu optimieren]]></title>
        <id>https://about.gitlab.com/de-de/blog/reduce-devops-costs/</id>
        <link href="https://about.gitlab.com/de-de/blog/reduce-devops-costs/"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>DevOps verspricht schnellere Releases, bessere Zusammenarbeit und eine höhere Softwarequalität. Doch in der Praxis schöpft so manche Organisation das Einsparpotenzial ihrer DevOps-Plattform nicht vollständig aus. Fragmentierte Toolchains, manuelle Prozesse und ungenutzte KI-Potenziale sorgen dafür, dass Budgets zunehmend unter Druck geraten. Laut dem aktuellen <a href="https://about.gitlab.com/de-de/blog/devsecops-report-germany/" rel="">DevSecOps Report von GitLab</a> gehen Teams im Schnitt sieben Arbeitsstunden pro Woche durch ineffiziente Abläufe verloren – nahezu ein kompletter Arbeitstag einer Person.</p><p>Gleichzeitig eröffnen sich durch Automatisierung, künstliche Intelligenz und moderne Services neue Möglichkeiten, die vor wenigen Jahren noch undenkbar waren. Unternehmen sollten zunächst ihre bestehenden Strukturen analysieren, um geeignete Lösungen gezielt in ihre DevOps-Prozesse zu integrieren. Wer diese Hebel strategisch einsetzt, kann messbare Produktivitätssteigerungen und Kostensenkungen erzielen.</p><p>Die gute Nachricht: DevOps-Kosten zu senken und gleichzeitig die Innovationskraft zu stärken, schließt sich nicht aus. In diesem Beitrag zeigen wir dir sechs konkrete Hebel, mit denen du dein DevOps-Budget entlastest und langfristig sparen kannst: von einer besseren Auslastung über die Konsolidierung der Toolchain bis hin zu agentischer KI.</p><h2 id="wie-lassen-sich-devops-kosten-effizient-senken">Wie lassen sich DevOps Kosten effizient senken?</h2><p>DevOps-Kosten nachhaltig zu senken erfordert das Zusammenspiel technischer, organisatorischer und strategischer Maßnahmen. Entscheidend ist, Ressourcen bedarfsgerecht einzusetzen, unnötige Redundanzen zu vermeiden, wiederkehrende Aufgaben zu automatisieren und die richtigen Tools intelligent zu bündeln. Die folgenden sechs Bereiche bieten das größte Potenzial für mehr Effizienz und langfristige Kosteneinsparungen.</p><table><thead><tr><th>Hebel</th><th>Kernmaßnahme</th></tr></thead><tbody><tr><td>Cloud-Nutzung optimieren</td><td>Ressourcen richtig dimensionieren und Leerlauf vermeiden</td></tr><tr><td>CI/CD Pipelines automatisieren</td><td>Manuelle Schritte durch KI-gestützte Automatisierung ersetzen</td></tr><tr><td>Toolchain konsolidieren</td><td>Redundante Tools abschaffen und auf eine Plattform setzen</td></tr><tr><td>Architektur modernisieren</td><td>Cloud-native Konzepte einführen und Wartungsaufwand senken</td></tr><tr><td>Prozesse konsolidieren</td><td>Silos aufbrechen und Abstimmungsaufwand reduzieren</td></tr><tr><td>Agentic AI etablieren</td><td>Agentische KI-Lösungen für messbare Effizienzgewinne nutzen</td></tr></tbody></table><blockquote><p><strong>Schone deinen Geldbeutel und deine Nerven!</strong></p><p>Eine All-in-One-Plattform vermindert Reibungsverluste, administrativen Overhead und sorgt für mehr Produktivität!</p><p><a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial%2F&amp;glm_source=about.gitlab.com%2Fde-de" rel=""><strong>Jetzt kostenlos testen</strong></a></p></blockquote><h2 id="_1-cloud-nutzung-optimieren">1. Cloud-Nutzung optimieren</h2><p>Die Flexibilität der Cloud hat einen Preis: Ohne aktive Steuerung wachsen die Kosten schnell unkontrolliert. Wildwuchs entsteht, wenn Instanzen eingerichtet und vergessen werden, Speicherressourcen ungenutzt mitlaufen oder SaaS-Lizenzen bezahlt, aber nicht verwendet werden. Denn die entsprechenden Kosten umfassen weit mehr als reine Rechenleistung: Speicher, Netzwerkverkehr, Überwachung und Backups summieren sich oft unbemerkt.</p><p>Drei Maßnahmen helfen dabei, die Nutzung kontinuierlich zu überprüfen und unmittelbar Kosten einsparen zu können:</p><ul><li><strong>Rightsizing</strong> bedeutet, die tatsächlich benötigten Kapazitäten regelmäßig mit den gebuchten Umgebungen abzugleichen. Überdimensionierte Instanzen, die dauerhaft nur einen Bruchteil ihrer Leistung nutzen, sind ein häufiger Kostentreiber.</li><li><strong>Autoscaling</strong> passt die verfügbare Rechenleistung dynamisch an die aktuelle Nachfrage an. So können Unternehmen Lastspitzen abfangen, ohne in ruhigen Zeiten unnötige Kapazitäten bereitzuhalten.</li><li><strong>Reservierte Instanzen</strong> lohnen sich für planbare Workloads: Wer sich langfristig bindet, zahlt deutlich weniger als im On-Demand-Modell.</li></ul><h2 id="_2-cicd-pipelines-automatisieren">2. CI/CD Pipelines automatisieren</h2><p>Manuelle Schritte in einer CI/CD-Pipeline sind nicht nur fehleranfällig und kosten vor allem Zeit. Jedes händische Deployment, jeder separat gestartete Test und jede manuell vorgenommene Konfigurationsanpassung führt zu einer Verzögerung im Entwicklungszyklus und bindet wertvolle Kompetenz.</p><p>Hier setzt KI-gestützte Automatisierung an. Der DevSecOps Report zeigt: 68 % der befragten DevSecOps-Fachkräfte in Deutschland setzen KI bereits im Software Development Lifecycle ein. Bei weiteren 17 % steht die Einführung im Jahr 2026 an. Die größten Effizienzgewinne entstehen dabei durch die Automatisierung repetitiver Aufgaben (41 %), die KI-gestützte Unterstützung bei Tests und Qualitätssicherung (39 %) sowie die automatische Erkennung von Bugs (38 %).</p><p>Dabei beschleunigt sich die Entwicklung rasant: 98 % der befragten DevSecOps-Fachkräfte geben an, dass ihnen KI-Tools bereits Effizienzgewinne gebracht haben. Wer CI/CD Pipelines heute noch vollständig manuell betreibt, verschenkt damit nicht nur Zeit, sondern auch einen zunehmend relevanten Wettbewerbsvorteil.</p><p>Neben der Automatisierung aktiver Prozesse lohnt sich auch ein Blick auf passive Kosten: Ungenutzte Testumgebungen, die dauerhaft laufen, verursachen erhebliche Leerlaufkosten. Automatisches Herunterfahren nach definierten Inaktivitätszeiträumen oder zeitbasierte Löschregeln schaffen hier schnell Abhilfe – oft mit überraschend großem Effekt auf das Gesamtbudget. Entscheidend ist, dass die gesamte DevOps Pipeline von Anfang an auf Automatisierung ausgelegt ist, damit manuelle Eingriffe gar nicht erst zur Gewohnheit werden.</p><h2 id="_3-toolchain-konsolidieren">3. Toolchain konsolidieren</h2><p>Tool-Fragmentierung gehört zu den größten versteckten Kostentreibern im DevOps-Umfeld. Wenn Teams für Planung, Versionierung, CI/CD, Security-Scans und Monitoring jeweils eigene Lösungen einsetzen, entstehen Lizenzkosten, Integrationsaufwand und Reibungsverluste an jeder Schnittstelle. Laut dem globalen DevSecOps Report nutzen 60 % der Unternehmen mehr als fünf verschiedene Tools in der Softwareentwicklung. Bei KI-Tools sind es sogar 49 %, die mehr als fünf im Einsatz haben.</p><p>Redundanzen lassen sich am einfachsten identifizieren, indem du den gesamten Tool-Stack einmal systematisch erfasst und gezielt auf DevOps Automation setzt, um wiederkehrende Integrations- und Wartungsaufgaben zu eliminieren. Der <a href="https://about.gitlab.com/de-de/calculator/" rel="">GitLab Toolchain-Rechner</a> bietet eine schnelle Möglichkeit, die tatsächlichen Kosten deiner aktuellen Toolchain sichtbar zu machen.</p><p>Die konsequenteste Form der Konsolidierung ist die Umstellung auf eine All-in-One-Plattform, die den gesamten DevSecOps-Lebenszyklus abdeckt: von der Planung über die Entwicklung und das Testen bis zum Deployment und Monitoring. Statt mehrere Einzellösungen zu verwalten, zu lizenzieren und über Schnittstellen miteinander zu verbinden, arbeiten alle Teams auf einer gemeinsamen Basis. Das reduziert nicht nur die direkten Lizenzkosten, sondern eliminiert auch den erheblichen Integrationsaufwand, der bei jeder Toolchain mit mehreren Anbietern anfällt.</p><blockquote><p><strong>DevOps zentralisieren und effizienter entwickeln!</strong></p><p>Starte jetzt deine 30-tägige Testversion und entfessle das volle Potenzial deiner Entwickler(innen) mit einer zentralen Plattform für die gesamte Softwareentwicklung!</p><p><a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial%2F&amp;glm_source=about.gitlab.com%2Fde-de" rel=""><strong>Jetzt kostenlos testen</strong></a></p></blockquote><h2 id="_4-architektur-modernisieren">4. Architektur modernisieren</h2><p>Eine alternde Infrastruktur verschlingt Budget: nicht nur für den direkten Unterhalt, sondern auch für die zunehmend schwierige Wartung. Legacy-Systeme erfordern spezialisiertes Know-how, das auf dem Arbeitsmarkt immer knapper wird, und verhindern gleichzeitig die Integration moderner DevOps-Praktiken. Im Laufe der Zeit wachsen diese versteckten Kosten enorm: von zusätzlichen Ressourcen für die Pflege bis hin zu Produktivitätsverlusten, die Investitionen in langfristiges Wachstum blockieren.</p><p>Cloud-native Konzepte wie Container-Orchestrierung, Microservices und Infrastructure as Code senken den internen Wartungsaufwand erheblich. Sie ermöglichen schnellere Deployments, eine bessere Skalierbarkeit und weniger Abhängigkeit von einzelnen Expert(inn)en.</p><p>Die Transformation einer gewachsenen Systemlandschaft muss dabei nicht auf einmal erfolgen. Eine schrittweise Implementierung reduziert technische Risiken und ermöglicht es, zunächst einzelne Komponenten oder eine besonders wartungsintensive Anwendung zu modernisieren.</p><p>Ein zukunftssicher aufgestellter DevOps-Stack schafft gleichzeitig die technische Basis, um Automation und KI-gestützte Workflows effektiv zu implementieren. Die Modernisierung der Architektur ist damit kein Selbstzweck, sondern eine Voraussetzung für nachhaltige Kostenreduktion in allen anderen Bereichen.</p><p><a href="https://about.gitlab.com/de-de/customers/siemens/" rel="">Erfahre, wie Siemens mit GitLab eine Open-Source-DevOps-Kultur geschaffen hat, die über 6,4 Mio. Builds pro Monat umsetzt.</a></p><blockquote><p>&quot;Wir bemühen uns sehr, eine Open-Source-Kultur einzuführen, und bisher waren wir wirklich erfolgreich. Mit CI/CD haben wir jeden Monat 1,5 Millionen Builds erstellt. Die ganze Kultur hat sich völlig verändert.&quot; — Fabio Huser, Softwarearchitekt bei Siemens Smart Infrastructure</p></blockquote><h2 id="_5-prozesse-konsolidieren">5. Prozesse konsolidieren</h2><p>Technik allein löst das Kostenproblem nicht. Oft sind es organisatorische Ineffizienzen, die den größten Anteil am verschwendeten Budget ausmachen. Der <a href="https://about.gitlab.com/de-de/blog/devsecops-report-germany/" rel="">DevSecOps Report</a> zeichnet ein deutliches Bild: DevSecOps-Fachkräfte in Deutschland verbringen im Schnitt nur 16 % ihrer Arbeitszeit mit dem Schreiben von neuem Code. Meetings und administrative Aufgaben machen mit 18 % den größten Einzelposten aus, gefolgt von Security-Arbeit (13 %), der Verbesserung bestehenden Codes (12 %) und Tests (12 %).</p><p>Als wichtigste Faktoren, die die Zusammenarbeit im Software Development Lifecycle einschränken, nennen 32 % der Befragten organisatorische Silos und veraltete Dokumentationen. Fehlender Wissensaustausch (30 %) und unklare Prozesse oder Tool-Fragmentierung (jeweils 29 %) verschärfen das Problem zusätzlich.</p><p>Kostenreduktion beginnt hier mit dem konsequenten Aufbrechen von Silos: gemeinsame Plattformen statt isolierter Teamwerkzeuge, standardisierte Review-Prozesse statt Ad-hoc-Abstimmungen, automatisierte Compliance statt manueller Audits. Gerade im Bereich Compliance investieren DevSecOps-Teams laut der Studie durchschnittlich elf Stunden pro Monat. Dazu kommen weitere zehn Stunden für die Behebung von Sicherheitsproblemen nach dem Release. Hier liegt enormes Einsparpotenzial: 77 % der Befragten erwarten, dass sich bis 2027 &quot;Compliance as Code&quot; etabliert, bei dem Vorgaben automatisiert im Entwicklungsprozess verankert sind.</p><p>Jede Stunde, die nicht in Abstimmungsschleifen oder manuelle Prüfungen fließt, steht für produktive Entwicklungsarbeit zur Verfügung und das wirkt sich unmittelbar auf die DevOps-Kosten aus.</p><h2 id="_6-agentic-ai-etablieren">6. Agentic AI etablieren</h2><p>Auf Automatisierung, Konsolidierung und optimierten Prozessen kann agentische KI gezielt aufbauen und die Weiterentwicklung vorantreiben. Sie erweitert klassische Automatisierungsansätze, indem sie nicht nur einzelne Aufgaben ausführt, sondern komplexe, mehrstufige Workflows eigenständig übernimmt: von der Code-Generierung über automatisierte Reviews bis hin zur Sicherheitsanalyse.</p><p>Die Zahlen unterstreichen das Potenzial: Laut der <a href="https://about.gitlab.com/de-de/blog/software-innovation-study-germany/" rel="">Software Innovation Study von GitLab</a> berichten Unternehmen, die KI in der Softwareentwicklung einsetzen, bereits von einem durchschnittlichen Umsatzwachstum von 43 % und einer Produktivitätssteigerung von 46 %. 89 % der deutschen Führungskräfte erwarten, dass agentische KI innerhalb von drei Jahren zum Standard in der Softwareentwicklung wird.</p><p>Entscheidend ist dabei nicht der bloße Einsatz einzelner KI-Tools, sondern ihre strategische Integration in den gesamten Entwicklungsprozess. Denn auch bei KI droht Tool-Wildwuchs: Bereits 49 % der Unternehmen nutzen mehr als fünf verschiedene KI-Tools parallel – mit den gleichen Integrations- und Wartungsproblemen, die auch bei klassischen DevOps-Tools auftreten.</p><p>Eine Plattform, die agentische KI nativ einbettet, vermeidet diesen Wildwuchs isolierter Insellösungen und schafft stattdessen durchgängige Effizienzgewinne über alle Phasen des Software Development Lifecycle: von der automatisierten Code-Generierung über intelligente Security-Scans bis hin zur vorausschauenden Fehlererkennung. Einen praxisnahen Einblick in die Möglichkeiten agentischer KI für DevOps bietet unser Webinar zu Agentic AI.</p><blockquote><p><strong>Nutze das volle Potenzial agentischer KI mit der GitLab Duo Agent Plattform!</strong></p><p>Automatisiere komplexe DevOps-Workflows, steigere die Produktivität deiner Teams und beschleunige die Softwareentwicklung mit agentischer KI.</p><p><a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial%2F&amp;glm_source=about.gitlab.com%2Fde-de" rel=""><strong>Jetzt kostenlos testen</strong></a></p></blockquote><h2 id="fazit-devops-gezielt-verbessern-und-nachhaltig-sparen">Fazit: DevOps gezielt verbessern und nachhaltig sparen</h2><p>Wer seine DevOps-Kosten reduzieren möchte, sollte nicht nur einzelne Lizenzpreise betrachten. Die größten Hebel liegen in einer besseren Ressourcennutzung, automatisierten Pipelines, einer konsolidierten Toolchain, moderner Architektur, klaren Zuständigkeiten und sinnvoll eingebundener KI.</p><p>Unternehmen, die ihre Entwicklungsstrukturen regelmäßig überprüfen und verbessern, können ihre Entwicklungszyklen verkürzen, Ausgaben minimieren und langfristig sparen. Entscheidend ist, technische und organisatorische Maßnahmen gemeinsam zu betrachten.</p>]]></content>
        <author>
            <name>GitLab Germany Team</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/gitlab-germany-team/</uri>
        </author>
        <published>2026-07-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Work Items automatisch zuweisen mit dem Trigger "Work item created"]]></title>
        <id>https://about.gitlab.com/de-de/blog/how-to-use-a-work-item-created-trigger/</id>
        <link href="https://about.gitlab.com/de-de/blog/how-to-use-a-work-item-created-trigger/"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Ein neuer, ereignisgesteuerter Trigger in der <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> lässt Flows in dem Moment starten, in dem ein Work Item entsteht – und verwandelt Triage und Zuweisung von einer manuellen Daueraufgabe in einen automatischen Ablauf. Diese Anleitung zeigt, wie sich der Trigger &quot;Work item created&quot; nutzen lässt; die folgende Videodemonstration begleitet die einzelnen Schritte:</p><iframe width="560" height="315" src="https://www.youtube.com/embed/WNDYRZpOeOo?si=o_n6IBoyeQO5UhDp" title="YouTube video player" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerPolicy="strict-origin-when-cross-origin" allowFullScreen></iframe><p>Das Video zeigt, wie der Flow startet, routet und zuweist – und was durchgängige, automatische Abläufe für eigene Projekte leisten können.</p><h2 id="warum-manuelle-zuweisung-nicht-mitwächst">Warum manuelle Zuweisung nicht mitwächst</h2><p>Arbeit manuell über Projekte hinweg zuzuweisen, ist anspruchsvoller, als es wirkt. Es ist nicht eine einzelne Entscheidung, sondern Dutzende, Tag für Tag. Für jedes neue Issue muss jemand innehalten, die Kapazität des Teams prüfen, die aktuelle Auslastung gegen eingehende Aufgaben abwägen und dann entscheiden, wohin das Item gehört. Kommen Meetings, Pausen oder Urlaub hinzu, zieht sich der Vorgang weiter. In kleinem Maßstab funktioniert das, mit wachsendem Volumen bricht es jedoch zusammen: verzögerte Triage, ungleich verteilte Arbeit und Team-Leads, die ihre Zeit ins Routing stecken statt in wertvollere Aufgaben.</p><p>Bislang war diese Reibung fest in der Funktionsweise der Flows verankert. Jeder <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/" rel="">GitLab Duo Flow</a> benötigte eine Aktion im UI – etwa eine Mention, eine Zuweisung oder ein Assign-Reviewer-Event –, um zu starten. Flows programmatisch anzustoßen oder sie auszulösen, sobald etwas geschah, war ohne manuelles Eingreifen nicht möglich. Selbst ein gut gebauter Zuweisungs-Flow wartete also auf eine Person, die ihn in Gang setzte.</p><h2 id="was-der-trigger-work-item-created-verändert">Was der Trigger &quot;Work item created&quot; verändert</h2><p>Der Trigger &quot;Work item created&quot; schließt diese Lücke. Er löst automatisch aus, sobald ein neues Work Item in einem Projekt entsteht, ganz ohne manuelle Übergabe. Statt dass eine Person das Issue bemerkt, die Auslastung des Teams einschätzt und zuweist, wird ein Flow von selbst aktiv und übernimmt das Routing. Mit Triggern laufen Flows, sobald die von der jeweiligen Organisation definierten Bedingungen erfüllt sind – fortlaufend, im Hintergrund –, während die Entwicklungsteams sich auf die Arbeit konzentrieren, die tatsächlich Urteilsvermögen erfordert. Der Trigger &quot;Work item created&quot; ist dabei nur einer von vielen: Als Auslöser steht eine Reihe von Ereignistypen zur Auswahl, und jeder davon kann jeden im Projekt aktivierten Agenten oder Flow anstoßen – Spielraum genug, um Agenten schrittweise in die eigenen Abläufe einzubinden.</p><h2 id="was-teams-davon-haben">Was Teams davon haben</h2><p><strong>Triage ohne Handgriff.</strong> Zuweisung und Routing geschehen, sobald ein Work Item entsteht, nicht erst, wenn jemand dazu kommt.</p><p><strong>Skaliert mit jedem Volumen.</strong> Ob ein einzelnes Issue oder Hunderte – der Trigger verarbeitet sie alle, ohne jemanden zusätzlich zu belasten.</p><p><strong>Ausgewogene Zuweisung.</strong> Der Flow kann Auslastung und Verfügbarkeit jedes Teammitglieds abwägen, bevor er zuweist – dasselbe Urteilsvermögen, das eine Person anlegen würde, nur konsistent angewendet.</p><p><strong>Befreit das Team von Fleißarbeit.</strong> Kein manuelles Durchsehen offener Work Items mehr, um zu entscheiden, wer Kapazität hat – ein Agent trifft die Entscheidung mit denselben Informationen, die auch eine Person hätte.</p><h2 id="automatische-zuweisung-schritt-für-schritt">Automatische Zuweisung Schritt für Schritt</h2><p>Ein konkretes Szenario im Projekt <strong>Intra-account-transfers</strong> macht das greifbar.</p><h3 id="_1-der-flow-work-item-assigner-ist-angelegt-und-für-neue-work-items-im-projekt-aktiviert">1. Der Flow &quot;Work item assigner&quot; ist angelegt und für neue Work Items im Projekt aktiviert</h3><p><img alt="Flow &quot;Work item assigner&quot; für Projekt intra-account-transfers aktiviert" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210850/Blog/Imported/test-work-item-trigger-blog-workflow-test/image5.png" title="Flow &quot;Work item assigner&quot; für Projekt intra-account-transfers aktiviert" /></p><h3 id="_2-wie-der-flow-aufgebaut-ist">2. Wie der Flow aufgebaut ist</h3><p>Der Flow &quot;Work item assigner&quot; nutzt zwei Agenten, jeder mit einem eigenen, detaillierten Prompt, der den Ablauf und die einzusetzenden Tools vorgibt. Der erste Agent ermittelt über <a href="https://about.gitlab.com/de-de/blog/introducing-gitlab-orbit/" rel="">GitLab Orbit</a> die aktuelle Auslastung jeder Ressource in der Organisation. GitLab Orbit ist der Lifecycle-Kontextgraph für die Softwareentwicklung, der KI-Agenten in der Duo Agent Platform präziser macht.</p><p><img alt="Definition des ersten Agenten &quot;determine_resource_with_least_open_work&quot;" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210858/Blog/Imported/test-work-item-trigger-blog-workflow-test/image8.png" title="Definition des ersten Agenten &quot;determine_resource_with_least_open_work&quot;" /></p><p><img alt="Prompt des ersten Agenten" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210866/Blog/Imported/test-work-item-trigger-blog-workflow-test/image9.png" title="Prompt des ersten Agenten" /></p><p>Der zweite Agent ermittelt die Person mit den wenigsten offenen Work Items und weist ihr das neue Item zu.</p><p><img alt="Definition des zweiten Agenten &quot;assign_work_item_prompt&quot;" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210875/Blog/Imported/test-work-item-trigger-blog-workflow-test/image4.png" title="Definition des zweiten Agenten &quot;assign_work_item_prompt&quot;" /></p><p><img alt="Prompt des zweiten Agenten" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210883/Blog/Imported/test-work-item-trigger-blog-workflow-test/image7.png" title="Prompt des zweiten Agenten" /></p><p>Da die Zuweisungslogik im Flow selbst steckt, genügt der Trigger, um den gesamten Ablauf in Gang zu setzen.</p><h3 id="_3-wie-der-trigger-auslöst">3. Wie der Trigger auslöst</h3><p>3.1. Ein brandneues Work Item wird erstellt.</p><p><img alt="Ein neues Issue wird erstellt" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210892/Blog/Imported/test-work-item-trigger-blog-workflow-test/image2.png" title="Ein neues Issue wird erstellt" /></p><p>3.2. Sobald das Issue entsteht, löst der Trigger aus, und der Flow &quot;Work item assigner&quot; startet von selbst. Das Aktivitätsprotokoll des Flows macht den Ablauf Schritt für Schritt nachvollziehbar: Der erste Agent ruft die Projektinformationen ab und zählt mit den GitLab-Orbit-Tools die offenen Work Items jeder Person in der obersten Gruppe.</p><p><img alt="Erster Agent liefert die Anzahl offener Work Items je Person in der obersten Gruppe" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210901/Blog/Imported/test-work-item-trigger-blog-workflow-test/image6.png" title="Erster Agent liefert die Anzahl offener Work Items je Person in der obersten Gruppe" /></p><p>Der zweite Agent ermittelt anschließend das am wenigsten ausgelastete Teammitglied – in der Demo ist das William – und führt die Zuweisung aus.</p><p><img alt="Zweiter Agent wählt William als zuständige Person für das neue Issue" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210908/Blog/Imported/test-work-item-trigger-blog-workflow-test/image1.png" title="Zweiter Agent wählt William als zuständige Person für das neue Issue" /></p><h3 id="_4-prüfen-ob-das-issue-der-am-wenigsten-ausgelasteten-person-zugewiesen-wurde">4. Prüfen, ob das Issue der am wenigsten ausgelasteten Person zugewiesen wurde</h3><p>Ein Blick zurück auf das Issue bestätigt es: Das neue Work Item wurde automatisch William zugewiesen.</p><p><img alt="Das aktualisierte Issue mit William als zuständiger Person" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210914/Blog/Imported/test-work-item-trigger-blog-workflow-test/image3.png" title="Das aktualisierte Issue mit William als zuständiger Person" /></p><h3 id="_5-der-nutzen-über-den-gesamten-ablauf">5. Der Nutzen über den gesamten Ablauf</h3><p>Das Szenario führt vor allem eines vor Augen: die Verschiebung, wer die Arbeit erledigt. Statt dass eine Person offene Work Items durchsieht, um herauszufinden, wer Kapazität hat, und das Issue dann von Hand zuweist, übernimmt der <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">Custom Flow</a> der GitLab Duo Agent Platform, ausgelöst durch den Trigger &quot;Work item created&quot;, all das von selbst. Es nimmt dem Team eine Routineentscheidung ab, die ein Agent mit genau denselben Informationen treffen kann wie ein Mensch – so bleibt die Aufmerksamkeit für das frei, worauf es ankommt.</p><h3 id="_6-zum-weiterdenken">6. Zum Weiterdenken</h3><p>Mögliche Erweiterungen dieses Custom Flows:</p><ul><li>Eine Anbindung per Model Context Protocol (<a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">MCP</a>) an das HR- oder Urlaubssystem, damit der Agent bei der Zuweisung die Urlaubszeiten der Ressourcen berücksichtigen kann.</li><li>Eine MCP-Anbindung an die Kalender der Ressourcen, damit der Agent bei der Zuweisung die Verfügbarkeit berücksichtigen kann.</li></ul><h2 id="loslegen">Loslegen</h2><p>Eingehende Arbeit im großen Maßstab zuzuweisen, war immer eine stille Belastung: Dutzende kleiner Entscheidungen am Tag, jede mit der Prüfung von Auslastung und Verfügbarkeit, bevor ein Issue geroutet wird – ein Vorgang, der mit wachsendem Volumen zusammenbricht. Der Trigger &quot;Work item created&quot; in der GitLab Duo Agent Platform beseitigt diesen Engpass, indem er einen Flow auslöst, sobald ein Work Item entsteht, ganz ohne manuelle Übergabe. Wie die Anleitung oben zeigt, kann ein Flow aus zwei Agenten, gestützt auf GitLab Orbit, die tatsächliche Auslastung des Teams auslesen und jedes neue Item der Person zuweisen, die es am besten übernehmen kann. Das Ergebnis: Work Items werden zugewiesen, sobald sie entstehen, ausgewogenere Arbeitslasten und ein Team, das sich auf die Arbeit konzentrieren kann, die wirklich menschliches Urteilsvermögen braucht.</p><blockquote><p><a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">Jetzt eine kostenlose Testversion der GitLab Duo Agent Platform starten.</a></p></blockquote>]]></content>
        <author>
            <name>Cesar Saavedra</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/cesar-saavedra/</uri>
        </author>
        <published>2026-07-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Was die Community beim Transcend Hackathon auf GitLab Orbit gebaut hat]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-transcend-hackathon-orbit/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-transcend-hackathon-orbit/"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Mehrere tausend Entwickler(innen) erhielten Zugang zu GitLab Orbit – ohne weitere Vorgaben, was damit zu tun sei. Die Community entwickelte daraufhin Lösungen für reale Probleme aus dem Produktionsalltag. <strong>Es sind die Fragen, die sich Woche für Woche stellen: Was bricht diese Änderung? Welche Tests sind wirklich relevant? Und was kostet diese Migration am Ende?</strong></p><p><a href="https://about.gitlab.com/de-de/gitlab-orbit/" rel="">GitLab Orbit</a> ist ein lebendiger, abfragbarer Graph des eigenen Codes samt Merge Requests, Pipelines, Deployments und Verantwortlichkeiten, in dem jede Beziehung zwischen diesen Elementen aktuell gehalten wird. Agenten schreiben zwar guten Code, tun sich aber schwer damit, das umgebende System zu verstehen. Die verbindenden Fragen – <em>was hängt hiervon ab</em>, <em>welche Tests decken es ab</em>, <em>wer verantwortet die Folgen</em> – bedeuteten früher, dass ein Agent Dateien durchsuchte oder eine Entwicklerin bzw. ein Entwickler sich durch vier Werkzeuge graben musste. Orbit macht daraus eine einzige Abfrage. Agenten erreichen Orbit über das Model Context Protocol (<a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">MCP</a>), Menschen fragen ihn direkt ab, und die Antwort kommt aus dem Graphen selbst statt aus einer Recherche über mehrere Werkzeuge hinweg. Die <a href="https://about.gitlab.com/de-de/gitlab-orbit/" rel="">Orbit-Startseite</a> erzählt die ganze Geschichte. Uns interessierte, was Menschen bauen, sobald dieses Werkzeug ihnen gehört.</p><p>Am Hackathon nahmen 1.576 registrierte Entwickler(innen) teil, die 265 zugelassene Projekte im Showcase Track auf Basis von GitLab Orbit einreichten: Agenten, Flows und Skills. Unabhängig davon brachten 26 Mitwirkende 61 Verbesserungen direkt in die Orbit-Codebase ein – von zusätzlicher Sprachunterstützung über Bugfixes bis zu präziseren Docs. Die Community baute nicht nur auf Orbit auf, sie machte Orbit besser.</p><h2 id="welche-probleme-die-community-anging">Welche Probleme die Community anging</h2><p>Noch vor jeder Bewertung fiel eines auf: Sortiert man die Einreichungen danach, was sie tatsächlich leisten, ergibt sich ein deutliches Ungleichgewicht.</p><p><strong>70 Teams</strong> bauten eine Variante desselben Werkzeugs: <em>Zeig mir, was diese Änderung brechen könnte, bevor ich sie merge.</em> Mehr als 30 entwickelten Hilfen für Onboarding und Codeverständnis – das Problem <em>hilf mir, diese Codebase zu verstehen</em>. Danach folgten Incident-Root-Cause-Analyse, Architecture Drift, die Diagnose instabiler Pipelines und das Verfolgen einer CVE über mehrere Repositories hinweg.</p><p>Das ist kein Zufall. Solche Fragen stellen sich ständig, und sie wurden bislang schlecht beantwortet, weil die Antworten über Git, CI, Deployment-Werkzeuge und einige wenig vertrauenswürdige Dashboards verstreut lagen. Liegen sie in einem einzigen Graphen, greifen die Teams gezielt darauf zu.</p><p>Das ist Orchestrierung mit Kontext und eingebauter Kontrolle, nicht Orchestrierung allein. Und wenn Dutzende unabhängige Teams von sich aus zur gleichen Abfrage greifen, ist das ein Signal, das Plattformverantwortliche lesen sollten: Der Kontext ist der Ort, an dem die Arbeit tatsächlich stattfindet. In den stark besetzten Kategorien war die Messlatte hoch. Projekte hoben sich ab, indem sie 68 andere Teams hinter sich ließen oder einen Weg gingen, den sonst niemand einschlug.</p><h2 id="am-saubersten-gebaut">Am saubersten gebaut</h2><p><strong>Gewinner: <a href="https://gitlab-transcend.devpost.com/submissions/1054521-sankofa" rel="">Sankofa</a>.</strong> Drei Agenten, jeder ausgelöst durch einen anderen Moment im Arbeitsalltag, alle lesen aus GitLab Orbit. Beim Öffnen einer Merge Request liefert Radar den Blast Radius: nachgelagerte Aufrufer, betroffene Pipelines und das Team, das die Folgen verantwortet. Bei der Zuweisung eines Issues erstellt Guide vorab eine kurze Einordnung. Taucht eine Schwachstelle auf, verfolgt Shield jeden Pfad dorthin. Der Kontext erscheint dort, wo bereits gearbeitet wird, und tritt dann in den Hintergrund.</p><blockquote><p>„Wenn eine Sicherheitslücke gemeldet wird, verbringen Teams Tage damit, ihre Reichweite manuell nachzuvollziehen, weil nichts die Zusammenhänge automatisch herstellt.&quot;</p><p>Lester K, Sankofa</p></blockquote><p>Shield erledigt das in einem einzigen Durchlauf über den Graphen.</p><p><strong>Zweitplatziert:</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1054106-stayed-shipped" rel="">Stayed Shipped</a>. Das Projekt stellt eine Frage, die gängige Dashboards nicht beantworten: Wie viele der Änderungen, die KI-Agenten im letzten Monat gemergt haben, sind noch in Produktion? Es verfolgt, ob eine gemergte Änderung Bestand hat oder still von einer erfahrenen Fachkraft nachgebessert wird – unsichtbar für jede Standardmetrik.</p><h2 id="am-besten-bedienbar">Am besten bedienbar</h2><p><strong>Gewinner: <a href="https://gitlab-transcend.devpost.com/submissions/1062163-carver-the-migration-quoting-agent" rel="">Carver</a>.</strong> Carver beziffert eine Legacy-Migration, bevor man sich auf sie festlegt. Man gibt an, was migriert werden soll; Carver liest den Abhängigkeitsgraphen von GitLab Orbit und erstellt einen Kostenvoranschlag: wie viele Einheiten, wie aufwendig, in welcher Reihenfolge und wo die Risiken liegen. Überzeugt hat in dieser Kategorie das Ergebnis. Carver gibt eine Zeile pro Einheit aus, dimensioniert und mit Risikomarkierung, und zeigt Details erst auf Nachfrage. Die Migration von AngularJS zu Angular weist das Projekt in seiner Demo mit rund neun Wochen manuellem Aufwand gegenüber zehn Dollar Generierungskosten aus, wobei der ungetestete, tragende Service rot markiert ist.</p><blockquote><p>„Es prüft Orbit, findet den Service nicht und fragt nach, wo der eigentliche Code liegt.&quot;</p><p>Anes Mulalic, Carver</p></blockquote><p>Deshalb weigert sich der Agent, eine Zahl zu erfinden, die er nicht belegen kann.</p><p><strong>Zweitplatziert:</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1062651-marshal-autonomous-migration-assistant" rel="">Marshal</a>. Gleiches Gebiet, umgekehrter Ansatz: volle Autonomie. Man deklariert ein organisationsweites Ziel, und Marshal findet über GitLab Orbit jedes betroffene Repository, ordnet die Arbeit in eine Reihenfolge und reicht Merge Requests Welle für Welle ein, ohne dass ein Ziel verloren geht.</p><h2 id="größte-wirkung">Größte Wirkung</h2><p><strong>Gewinner: <a href="https://gitlab-transcend.devpost.com/submissions/1061837-crosscut" rel="">CrossCut</a>.</strong> CrossCut führt nur die Tests aus, die eine Änderung tatsächlich brechen könnte. Beim Öffnen einer Merge Request zieht es die geänderten Symbole heran, folgt dem Call Graph von GitLab Orbit bis zur echten transitiven Auswirkung und baut eine Pipeline, die genau diese Tests ausführt und keine weiteren. Kein Modell im Spiel, kein Raten, nur Traversierung. Bei einer großen oder repoübergreifenden Test-Suite reduziert das den CI-Umfang laut Projektangabe um 90 % oder mehr.</p><blockquote><p>„Man braucht den Call Graph der gesamten Codebase, um zu wissen, welche Tests eine Änderung erreichen kann. Genau das baut GitLab Orbit – statt zu raten, fragen wir einfach den Graphen.&quot;</p><p>Pritesh Kumar, CrossCut</p></blockquote><p><strong>Zweitplatziert:</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1061548-orbitweaver" rel="">OrbitWeaver</a>. Es refaktoriert autonom und nutzt dafür den exakten Blast Radius von GitLab Orbit statt Vektorähnlichkeit. Es erfasst jede betroffene Datei und bearbeitet sie in Abhängigkeitsreihenfolge – das überzeugendste Argument dafür, warum ein echter Graph unscharfer Suche überlegen ist, wenn ein Fehler eine rote Pipeline bedeutet.</p><h2 id="beste-idee">Beste Idee</h2><p><strong>Gewinner: <a href="https://gitlab-transcend.devpost.com/submissions/1056751-transcend" rel="">Transcend</a>.</strong> Die meisten Teams fragten GitLab Orbit direkt ab – für die meisten Fragen der richtige Weg. Transcend baute darauf eine zweite Reasoning-Engine auf, mit dem Semantic-Web-Stack aus OWL, SPARQL und RDF, um Fragen zu erreichen, die die native API nicht in einem einzigen Aufruf ausdrücken kann. Transitive Hülle. Joins, die die eigene Codebase verlassen und das strukturierte Wissen der Welt hinzuziehen. Die Demo fragt, welche Methoden zum Knowledge-Graph-Embedding eine Codebase implementiert, und erhält die Klassennamen samt den Papers, die sie inspiriert haben, deren Autor(inn)en und Jahreszahlen – live mit dem Code verknüpft. Orbit als Fundament zu begreifen, auf dem sich aufbauen lässt, statt als API, die man nur aufruft, war hier wirklich neu, und genau das zeichnet diese Kategorie aus.</p><p><strong>Zweitplatziert:</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1053916-universal-agent-os" rel="">Universal Agent OS</a>. Es baut die Governance-Schicht um Agenten herum, nicht den Agenten selbst: erst befragen, vor dem Coden planen, Belege sichern und Validierung erzwingen. Je größer der Anteil des Codes wird, den Agenten schreiben, desto mehr wird ihre Rechenschaft zum eigentlichen Problem. Es ist dasselbe Problem, das der Kontext von GitLab Orbit an jeder anderen Stelle dieser Liste sichtbar macht: Agenten produzieren in großem Umfang, und dennoch muss jemand für das Ergebnis geradestehen.</p><h2 id="contribute-track">Contribute Track</h2><p>Der Contribute Track lief parallel zum Showcase Track und war keine Nebensache. 26 Mitwirkende brachten 61 Merge Requests direkt in die Codebase von GitLab Orbit ein: Sprachunterstützung für C++20 Concepts, Go-Paketdeklarationen, Kotlin Coroutines und Ruby Lambdas; Ontologie-Korrekturen; einen SIGPIPE-Bug in der CI; das erste Tutorial für Orbit-Abfragen; und Aufräumarbeiten an der Dokumentation, damit die nächste Person nicht über <code>max_depth</code> versus <code>max_hops</code> stolpert. Neunzehn erhielten einen Geldpreis, alle 26 Swag-Credits.</p><p>Die Geldpreise gingen an die ersten 40 gemergten Beiträge; diese Liste spiegelt daher ebenso die Reihenfolge wie die Qualität wider. Es sind die Mitwirkenden, deren funktionierende Änderung als Erste geprüft und gemergt wurde. Glückwunsch den Preisträger(inne)n dieser Runde:</p><p><a href="https://gitlab.com/achalbajpai" rel="">achalbajpai</a>, <a href="https://gitlab.com/aishahsofea" rel="">aishahsofea</a>, <a href="https://gitlab.com/AlphaTheGoat27" rel="">AlphaTheGoat27</a>, <a href="https://gitlab.com/anushkrishnav" rel="">anushkrishnav</a>, <a href="https://gitlab.com/bartekp854" rel="">bartekp854</a>, <a href="https://gitlab.com/bhandari.varun04" rel="">bhandari.varun04</a>, <a href="https://gitlab.com/ChaitanyaManik17" rel="">ChaitanyaManik17</a>, <a href="https://gitlab.com/fa220" rel="">fa220</a>, <a href="https://gitlab.com/fongse" rel="">fongse</a>, <a href="https://gitlab.com/gatlavishweshwarreddy26" rel="">gatlavishweshwarreddy26</a>, <a href="https://gitlab.com/gkepas" rel="">gkepas</a>, <a href="https://gitlab.com/JonstonChan" rel="">JonstonChan</a>, <a href="https://gitlab.com/koves" rel="">koves</a>, <a href="https://gitlab.com/MattGaiser" rel="">MattGaiser</a>, <a href="https://gitlab.com/MatthewOscar" rel="">MatthewOscar</a>, <a href="https://gitlab.com/nexpectArpit" rel="">nexpectArpit</a>, <a href="https://gitlab.com/priyansh3133" rel="">priyansh3133</a>, <a href="https://gitlab.com/Vinayreddy765" rel="">Vinayreddy765</a>, <a href="https://gitlab.com/zidanesalim" rel="">zidanesalim</a>.</p><p>Alle <a href="https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/merge_requests?scope=all&amp;state=merged&amp;label_name%5B%5D=orbit::hackathon" rel="">gemergten Beiträge</a> im Überblick.</p><h2 id="was-die-community-uns-gezeigt-hat">Was die Community uns gezeigt hat</h2><p>Über ein Werkzeug lernt man etwas, indem man beobachtet, was Menschen damit bauen, bevor ihnen jemand sagt, wofür es gedacht ist. Niemand baute einen Chatbot. Die starken Einreichungen setzten im Kern alle beim Gleichen an: Sie nahmen eine Frage, die früher eine Recherche über vier Werkzeuge hinweg bedeutete, und beantworteten sie mit einer einzigen Abfrage.</p><ul><li>Was bricht, wenn ich das merge?</li><li>Welche Tests sind wirklich relevant?</li><li>Was kostet diese Migration am Ende?</li><li>Ist die Änderung vom letzten Monat noch aktiv?</li></ul><p><strong>Diese Funktionen haben wir nicht ausgeliefert.</strong> Die Community fand sie, sobald der Graph in Reichweite war. Das sagt mehr über GitLab Orbit aus als jeder Benchmark.</p><p>Das komplette Teilnehmerfeld findet sich in der <a href="https://gitlab-transcend.devpost.com/project-gallery" rel="">Projektgalerie</a>. Viele gute Projekte passten nicht in acht Kategorien.</p><h2 id="was-sich-mit-gitlab-orbit-umsetzen-lässt">Was sich mit GitLab Orbit umsetzen lässt</h2><p>Jedes der genannten Gewinnerprojekte ist eine Antwort auf dieselbe Frage: Was kann ein Agent leisten, wenn er aus First-Party-Kontext über das gesamte System hinweg schließt, statt aus Fragmenten zu raten? GitLab Orbit bildet Code, Work Items, Merge Requests, Pipelines, Deployments und Verantwortlichkeiten fortlaufend in einem Graphen ab, sodass Agenten und Entwicklungsteams aus einer einzigen Quelle der Wahrheit schöpfen. Für den Einstieg braucht es keinen Hackathon. Diese Muster hat die Community erprobt, jedes davon verankert in einem Anwendungsfall, für den Orbit gebaut wurde.</p><ul><li><strong>Änderungen absichern, bevor gepusht wird.</strong> GitLab Orbit lässt sich in einer einzigen Abfrage nach jedem nachgelagerten Aufrufer einer Funktion, den davon gespeisten Pipelines und dem verantwortlichen Team fragen. Sankofas Radar tut dies an einer Merge Request; CrossCut nutzt denselben Call Graph und führt nur die Tests aus, die eine Änderung erreichen kann, was einen CI-Lauf laut Projektangabe um 90 % reduziert. So lassen sich verborgene Abhängigkeiten früh erkennen, statt sie erst am Ende der CI zu entdecken.</li><li><strong>Sicherere Migrationen mit vollem Systemkontext.</strong> Abfragen lässt sich, welche Services von dem abhängen, der migriert werden soll, in welcher Reihenfolge und wo das Risiko sitzt. Carver macht daraus einen bezifferten Kostenvoranschlag, Marshal treibt sie Repository für Repository voran. Beide ermitteln den Blast Radius aus dem realen Abhängigkeitsgraphen, sodass ein Plattformteam sich auf einen Migrationstermin festlegen kann, statt verborgene Abhängigkeiten erst nach drei Wochen zu entdecken.</li><li><strong>Blast-Radius-Analyse für Schwachstellen.</strong> Von einer verwundbaren Funktion aus folgt der Graph jedem erreichbaren Endpunkt, den Pipelines, die ihn bauen, und den verantwortlichen Teams. Sankofas Shield erledigt in einem einzigen Durchlauf, was früher eine Korrelationsarbeit Projekt für Projekt bedeutete.</li></ul><p>Der rote Faden: Die Antwort lag nie im Code allein. Sie liegt darin, wie Code mit Pipelines, Deployments, Schwachstellen und Verantwortlichkeiten zusammenhängt, und GitLab Orbit hält diese Zusammenhänge aktuell, sodass sich alles in einer einzigen Abfrage klären lässt. Agenten auf der <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> fragen ihn nativ ab, externe Agenten verbinden sich über MCP, und Entwicklungsteams fragen denselben Graphen direkt über den Data Explorer ab. Ein Graph, eine Quelle der Wahrheit – für jeden Agenten und jede Person im Team.</p><h2 id="gitlab-orbit-ausprobieren">GitLab Orbit ausprobieren</h2><p>Allen Teilnehmenden ein Dankeschön. Wer selbst etwas bauen möchte, beginnt mit <a href="https://about.gitlab.com/de-de/gitlab-orbit/" rel="">GitLab Orbit</a> auf der <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>: Derselbe Kontext, den diese Teams genutzt haben, ist im eigenen Software-Lebenszyklus bereits verfügbar. Eine Neuauflage folgt. Wer zuerst davon erfahren möchte, meldet sich unter <a href="https://contributors.gitlab.com" rel="">contributors.gitlab.com</a> an.</p><p>Bereits Zugang zur GitLab Duo Agent Platform und zu GitLab Orbit – und neugierig, wie weit sich das treiben lässt? <a href="https://about.gitlab.com/community/co-create/" rel="">Für Co-Create bewerben</a>.</p>]]></content>
        <author>
            <name>Mattias Michaux</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/mattias-michaux/</uri>
        </author>
        <published>2026-07-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Mehrstufige Software-Delivery wird zu vertrauenswürdigen Agentic Flows]]></title>
        <id>https://about.gitlab.com/de-de/blog/multi-step-software-delivery-with-agentic-flows/</id>
        <link href="https://about.gitlab.com/de-de/blog/multi-step-software-delivery-with-agentic-flows/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Zu wissen, was in der Softwareentwicklung als Nächstes zu tun ist, ist selten der schwierige Teil. Es genau in denselben Schritten erneut zu tun – ein Issue umsetzen, eine Pipeline reparieren, eine Merge Request prüfen – ist es. Chat, der nur Antworten liefert, lässt jede Übergabe weiterhin an einem selbst hängen. Selbstgeschriebene Skripte übernehmen keine Änderungen bei Zugriffskontrollen, neuen Triggern oder aktualisierten Review-Gates. In beiden Fällen bleiben die mehrstufigen Abläufe, auf die sich Teams verlassen, weiterhin als Runbooks in den Köpfen einzelner Personen stecken.</p><p><a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2</a> schließt diese Lücke, da <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">Custom Flows</a> die allgemeine Verfügbarkeit erreichen: KI-gestützte Workflows, die einmal definiert, durch native GitLab-Events ausgelöst und in der CI/CD-Pipeline ausgeführt werden. Ein selbstheilendes Pipeline-Muster wie <em>fehlgeschlagenen Test analysieren → Fix generieren → committen → Team benachrichtigen</em> wird zu etwas, das die Plattform durchgängig ausführen kann.</p><p>Zusätzlich starten <a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/#start-foundational-flows-from-agentic-chat" rel="">Foundational Flows</a> nicht mehr nur über einen Button, eine Mention oder eine Assignment. Passt eine Anfrage in GitLab Duo Agentic Chat jetzt zu spezialisierter Arbeit – eine Änderung umsetzen, eine Merge Request prüfen, eine fehlgeschlagene Pipeline reparieren –, empfiehlt Duo den passenden Flow, die Übergabe wird bestätigt, und die weitere Ausführung lässt sich aus der Konversation heraus verfolgen.</p><p>Damit kommt agentische Software-Delivery über Single-Turn-Chat hinaus. Teams kodieren die Abläufe, denen sie bereits vertrauen, starten sie über Events oder Chat und behalten den Menschen bei der Freigabe statt bei jedem einzelnen Zwischenschritt.</p><h2 id="warum-mehrstufige-software-delivery-manuell-bleibt">Warum mehrstufige Software-Delivery manuell bleibt</h2><p>Agentische Demos bevorzugen einzelne Interaktionsschritte. Echte Delivery-Arbeit ist eine Kette: Kontext sammeln, Code ändern, eine Merge Request öffnen, auf CI warten und auf Review reagieren. Ohne Flows ist jedes Glied dieser Kette eine Person, die klickt, einfügt oder sich an ungeschriebene Abläufe erinnert.</p><p>Der Aufbau dieser Ketten fühlte sich lange provisorisch an, solange Custom Flows innerhalb der GitLab Duo Agent Platform noch nicht ausgereift waren. Teams schoben die Kodierung der Pfade, denen sie bereits vertrauen – etwa selbstheilende Pipelines, „Implementiere dieses Issue&quot; oder ereignisgesteuerte Folgeaktionen – auf, weil Produktionsreife und Event-Abdeckung noch fehlten.</p><h2 id="was-agentic-flows-für-engineering-teams-verändern">Was Agentic Flows für Engineering-Teams verändern</h2><ul><li><strong>Die Abläufe automatisieren, denen bereits vertraut wird.</strong> Custom Flows führen mehrstufige Aufgaben projektübergreifend aus, ausgelöst durch GitLab-Events, mit denen bereits gearbeitet wird: Mentions, Assignments, Pipelines, Änderungen im Merge-Request-Lifecycle, Work-Item-Änderungen und mehr. Sie laufen unter einer Composite Identity, sodass Zugriff begrenzt und Aktionen nachvollziehbar zuordenbar bleiben.</li><li><strong>Spezialisierte Arbeit direkt aus dem Chat starten.</strong> Agentic Chat lässt sich bitten, den Developer Flow zur Umsetzung von Arbeit, den Code Review Flow zur Prüfung einer Merge Request oder den Fix CI/CD Pipeline Flow zur Diagnose und Behebung einer fehlgeschlagenen Pipeline zu nutzen. Die Übergabe wird bestätigt, danach lässt sich weiterarbeiten, während der Fortschritt inline angezeigt wird.</li><li><strong>Automatisches Review gezielt steuern.</strong> In GitLab 19.2 lassen Exclusion Rules zu, Auto-Review für bot-erstellte oder nach Branch-Mustern gefilterte Merge Requests zu überspringen, bei denen keine Credits verbraucht werden sollen. Custom Review Instructions legen fest, worauf das Review achtet – damit lässt sich nicht nur bestimmen, welche Merge Requests geprüft werden, sondern auch wie.</li></ul><p><strong>Duo Agentic Flows in Aktion:</strong></p><iframe src="https://player.vimeo.com/video/1210303097?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="19.2 Custom Flows Reach GA Status"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="wie-funktionieren-sie">Wie funktionieren sie?</h2><p><strong>Custom Flows.</strong> Ein Custom Flow lässt sich aus einem Projekt oder dem <a href="https://docs.gitlab.com/user/duo_agent_platform/ai_catalog/" rel="">AI Catalog</a> erstellen, die Sichtbarkeit wählen, dort aktivieren, wo er gebraucht wird, und mit einem <a href="https://docs.gitlab.com/user/duo_agent_platform/triggers/" rel="">Trigger</a> versehen, damit die passenden GitLab-Events ihn starten. An sensiblen Schritten lassen sich Human-in-the-Loop-Checkpoints hinzufügen. In 19.2 erhalten Custom Flows außerdem einen „Work Item Status Changed&quot;-Trigger sowie eine Bulk-Aktivierung für öffentliche Flows über bis zu 100 Projekte hinweg. Für die Zukunft ist ein Flow Creation Agent auf der Roadmap, mit dem sich ein Flow in einfacher Sprache beschreiben lässt, um eine lauffähige Definition zu erhalten, ohne zunächst das komplette Schema von Hand zu schreiben.</p><p><strong>Foundational Flows in Agentic Chat.</strong> Wenn eine Anfrage zu spezialisierter Arbeit passt, kann sie an einen Foundational Flow übergeben werden; die Ausführung wird vor dem Start bestätigt, und die Konversation bleibt währenddessen bestehen. Das ist der Unterschied zu Chat, der nur antwortet: Der mehrstufige Teil verlässt die eigenen Hände, ohne GitLab zu verlassen.</p><p><strong>Aktualisierte Automatisierung für den Code Review Flow.</strong> Exclusion Rules verhindern, dass bot-gesteuerte oder nicht relevante Merge Requests Code-Review-Zyklen verbrauchen, die nicht eingeplant waren. Und <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/" rel="">Custom Review Instructions</a> legen fest, wie „gut&quot; für das jeweilige Team aussieht – so bedeutet mehr Automatisierung nicht, dass alles gleich geprüft wird.</p><h2 id="die-bereits-gelebten-pfade-jetzt-kodieren">Die bereits gelebten Pfade jetzt kodieren</h2><p>Custom Flows sind jetzt allgemein verfügbar, und Foundational Flows lassen sich jetzt aus Agentic Chat heraus starten, das Anfragen anhand der Beschreibung des Bedarfs an den passenden Spezial-Flow weiterleitet – und übersetzt so die agentischen Software-Delivery-Abläufe, denen das eigene Team bereits vertraut, in vorhersehbare Automatisierung, jenseits von ungeschriebenem Wissen.</p><p>Mehr erfahren? Der Einstieg gelingt über die Dokumentation zu <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">Custom Flows</a> und <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/" rel="">Foundational Flows</a>. Ein Punkt zur Planung: Event-gesteuerte Flows verbrauchen Credits abhängig von der geleisteten Arbeit. Ein Test in wenigen Projekten empfiehlt sich, bevor sie über eine große Gruppe hinweg freigegeben werden.</p><p>Wie bei anderen Fähigkeiten der Duo Agent Platform lässt sich der Zugang zu Agentic Flows über eine <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">kostenlose Testversion der GitLab Duo Agent Platform</a> erhalten. Im Free-Tier ist die <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">Anmeldung in wenigen Schritten</a> möglich.</p><p>Bereits auf GitLab Premium oder Ultimate? Der Einstieg gelingt durch das <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Aktivieren der Duo Agent Platform</a> und die Nutzung der im Abonnement enthaltenen <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits/" rel="">GitLab Credits</a>.</p>]]></content>
        <author>
            <name>Ozer Dondurmacioglu</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/ozer-dondurmacioglu/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Duo Security Review erkennt Logikfehler, die Scanner übersehen]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-duo-security-review-flow/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-duo-security-review-flow/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Statische Scanner sind stark darin, Schwachstellen zu erkennen, die einem bekannten Muster folgen, etwa ungeprüfte Query-Inputs, hartcodierte Secrets oder unsichere Deserialisierung. Schwierig wird es bei Fehlern in der Anwendungslogik, wo kein Muster zum Abgleich existiert – nur validen Code, der für die jeweilige Domäne das Falsche tut. Bleiben solche Fehler unentdeckt, treten sie erst spät zutage und werden teurer in der Behebung.</p><p>Security Review Flow, jetzt in der Public Beta, prüft Code-Änderungen so, wie es ein Security Engineer tun würde. Anstatt Signaturen abzugleichen, verfolgt der Flow die Absicht hinter dem Code, um Logikfehler vor der Produktion zu erkennen. Das ist ein wichtiger Schritt, um gefährliche Fehler aufzudecken, die Scanner meist übersehen.</p><h2 id="wo-musterbasierte-scanner-blind-bleiben">Wo musterbasierte Scanner blind bleiben</h2><p>Die schädlichsten Schwachstellen wirken Zeile für Zeile oft korrekt, verletzen aber einen Kontext, der im Code selbst nicht enthalten ist – etwa das Autorisierungsmodell, Regeln zur Sensibilität von Daten oder die vorgesehenen Workflows. Drei der häufigsten Schwachstellenklassen im Überblick:</p><p><strong>Zugriff und Autorisierung:</strong> Ob Nutzende eine Ressource lesen oder ändern dürfen, legt das Autorisierungsmodell fest, nicht ein Sprachkonstrukt. Broken Object Level Authorization (der Zugriff auf die Daten anderer Nutzender durch das Ändern einer ID) führt die <a href="https://owasp.org/API-Security/editions/2023/en/0x11-t10/" rel="">OWASP API Security Top 10</a> seit 2019 an.</p><p><strong>Data Exposure:</strong> Ein Objekt zu serialisieren und zurückzugeben, ist gewöhnlicher, korrekt wirkender Code. Ob dabei Daten offengelegt werden, hängt davon ab, welche Felder sensibel sind und wer sie erhält – Fakten der jeweiligen Domäne, nicht der Syntax.</p><p><strong>Kontrollfluss und Workflow:</strong> Business-Logic- und Race-Condition-Fehler entstehen, wenn valide Operationen in falscher Reihenfolge ablaufen, unerwartet wiederholt werden oder manipuliert werden. Beispiele sind ein Checkout, der ohne Zahlung erreichbar ist, ein Status, der durch eine Race Condition erneut betreten wird, oder ein Parameter, der zur Preisänderung manipuliert wird.</p><p>Solche Fehler zu erkennen, erforderte bisher entweder manuelles Security Review, das sich über jede Merge Request (MR) hinweg nur teuer skalieren lässt, oder Penetration Testing und Bug Bounties, die zu spät greifen. Die Folge ist eine wachsende Lücke zwischen dem Tempo der Entwicklung und dem Umfang, in dem Security-Expertise angewendet werden kann.</p><h2 id="security-expertise-in-jede-mr-einbringen">Security-Expertise in jede MR einbringen</h2><p>Security Review Flow, ein Foundational Flow auf der GitLab Duo Agent Platform, schließt diese Lücke, indem er nachvollzieht, was der Code eigentlich leisten soll. Er erkennt genau die oben beschriebenen Fehlerklassen: Broken Object Level Authorization und Broken Function Level Authorization, fehlende Autorisierung bei zustandsändernden Operationen, Information Disclosure, Mass Assignment, Business-Logic-Fehler und Race Conditions in zustandsbehafteten Workflows.</p><p>Er ergänzt klassische Scanner und menschliche Analyse, statt sie zu ersetzen, und prüft Code genau zum Zeitpunkt der Änderung, wenn eine Korrektur am günstigsten ist. GitLabs eigenes Application-Security-Team hat Security Review Flow während der gesamten Entwicklung über interne MRs hinweg eingesetzt.</p><p><strong>Security Review Flow in Aktion:</strong></p><iframe src="https://player.vimeo.com/video/1209923383?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="19.2 Security Review Flow"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="so-funktioniert-es">So funktioniert es</h2><p>Ist eine MR bereit, lässt sich ein Review von <code>Duo Security Review</code> anfordern – genau wie von einer Person. Der Flow analysiert den Diff im Kontext: die Originaldateien, geänderte Zeilen, die MR-Diskussion und verwandten Code. Seine Reasoning-Logik ist auf Präzision optimiert, und ein unabhängiger Validierungsschritt prüft jeden Finding, um wahrscheinliche False Positives herauszufiltern.</p><p>Findings erscheinen als Diff-Threads an den relevanten Zeilen, ergänzt durch eine Zusammenfassung in einer internen Notiz. Bei öffentlichen Projekten bleiben sie auf die interne Notiz beschränkt, sodass keine Security-Details offengelegt werden.</p><p>Jedes Finding liefert den Kontext, der für das Review nötig ist:</p><ul><li><strong>Vulnerability Type</strong> mit CWE-Referenz</li><li><strong>Severity</strong>: Critical, High, Medium oder Low</li><li><strong>Tier</strong>: Tier 1 (Exploitable), Tier 2 (Logic Flaw) oder Tier 3 (Design Issue)</li><li><strong>Eine verständliche Erklärung</strong> des Problems</li><li><strong>Ein Fix-Vorschlag</strong>, sofern verfügbar</li></ul><p>Die Severity bestimmt den Review-Status: Ein Critical- oder High-Finding setzt ihn auf <em>Request changes</em>, während Medium- oder Low-Findings zu <em>Comment</em> führen. Der Flow genehmigt nie – auch dann nicht, wenn er nichts findet –, die finale Entscheidung liegt immer bei einem Menschen.</p><p>Von dort aus lässt sich der Duo-Security-Review-Service-Account der jeweiligen Organisation in einem Kommentar-Thread erwähnen, um eine Frage zu stellen, die Behebung zu diskutieren oder ein Finding infrage zu stellen. Jedes Finding lässt sich auflösen, indem der Fix als Standard-MR-Suggestion übernommen, als False Positive verworfen oder das Risiko akzeptiert wird. Nach dem Commit der Fixes lässt sich ein neues Review anfordern, um die Änderungen zu prüfen.</p><h2 id="den-ersten-security-review-flow-ausführen">Den ersten Security Review Flow ausführen</h2><p>Security Review Flow befindet sich für die GitLab-Ultimate-Kundschaft in der Public Beta. Verfügbar ist der Flow auf GitLab.com, GitLab Self-Managed und GitLab Dedicated.</p><p>Der Einstieg gelingt über die <a href="https://docs.gitlab.com/ee/user/duo_agent_platform/flows/foundational_flows/security_review/" rel="">Security-Review-Flow-Dokumentation</a>.</p><p>Der Zugang zu Security Review Flow lässt sich über eine <a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial&amp;glm_source=about.gitlab.com/gitlab-duo-agent-platform/" rel="">kostenlose Testversion der GitLab Duo Agent Platform</a> erhalten. Bereits im GitLab-Ultimate-Abo? Die <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platform aktivieren</a> und die im Abonnement enthaltenen <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">GitLab Credits</a> nutzen.</p><p>Die Kosten variieren je nach Komplexität des Diffs und dem gewählten Modell – ein Test an wenigen MRs empfiehlt sich, bevor der Flow breiter eingesetzt wird. Die Preisgestaltung kann zur allgemeinen Verfügbarkeit angepasst werden.</p><p>Feedback lässt sich im <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/600304" rel="">Feature-Feedback-Issue</a> teilen – so fließt es direkt in die Weiterentwicklung ein.</p>]]></content>
        <author>
            <name>Mark Settle</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/mark-settle/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Die GitLab Duo Agent Platform kommt ins Terminal]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-duo-cli-generally-available/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-duo-cli-generally-available/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Der Großteil der Arbeit bei der Software-Delivery findet nicht nur im Editor statt. Pipelines schlagen fehl. Tests brechen. Schwachstellen tauchen auf. Und ein großer Teil dieser Arbeit beginnt und endet an der Kommandozeile.</p><p>Agentische KI im Terminal, die nur Code versteht, hilft bei alldem nicht weiter. Ein eigenständiger Assistent kennt weder die Agents über den gesamten Software-Lifecycle hinweg, noch die Berechtigungen über die vielen Projekte einer Organisation, noch einen spezifischen Projektkontext, der in GitLab bereits eingerichtet ist.</p><p>Genau das ändert sich mit <a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2</a>. <a href="https://docs.gitlab.com/user/gitlab_duo_cli/" rel="">GitLab Duo CLI</a> ist jetzt allgemein verfügbar und bringt <a href="https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/" rel="">GitLab Duo Agentic Chat</a> direkt ins Terminal. Anders als von außen angeflanschte Tools kennt es das jeweilige Projekt, die Pipelines und das Agent-Setup bereits. Es lässt sich interaktiv nutzen, während erkundet und gebaut wird, oder headless, wenn es in einem Job oder Skript laufen soll.</p><p>Dadurch bleiben Entwicklungsteams in der Shell, in der der Fehler aufgetreten ist, und die Arbeit setzt sich über Terminal, UI und Editor hinweg fort. Platform-Teams steuern den Rollout wie alles andere in GitLab, und agentische Unterstützung deckt endlich mehr vom Delivery-Lifecycle ab als nur „Schreib diese Funktion.&quot;</p><h2 id="warum-agentische-ki-im-terminal-bei-code-stehen-blieb">Warum agentische KI im Terminal bei Code stehen blieb</h2><p>Agentische Tools reiften zuerst dort, wo Demos am besten aussehen: beim Bearbeiten von Dateien. Der Lifecycle nach dem Commit ist unübersichtlicher und operativer. Liegt der Fehler in einer Pipeline, einer Dependency oder einer CI-Konfiguration, steckt der Kontext in GitLab – nicht im Trainingsdatensatz eines Coding Agents oder im lokalen Kontext.</p><p>Teams, die diese Lücke mit generischen CLI-Assistenten schließen wollten, zahlten einen weiteren Preis: keine gemeinsame Admin-Kontrolle, keine auf die Plattform abgestimmte MCP-/Setup-Diagnose und kein einheitliches Identitätsmodell mit dem Rest des agentischen Software-Lifecycles. Agentische Arbeit im Terminal blieb so auf Coding beschränkt, statt im übrigen Delivery-Prozess zu unterstützen.</p><h2 id="was-teams-mit-der-allgemeinen-verfügbarkeit-von-duo-cli-bekommen">Was Teams mit der allgemeinen Verfügbarkeit von Duo CLI bekommen</h2><ul><li><strong>Im Terminal bleiben für die Arbeit, die dort ohnehin stattfindet.</strong> Nachvollziehen, wie die Codebase zusammenspielt, bauen und refactoren, Pipeline-Fehlern nachgehen, CI/CD aufräumen und mehrstufige Aufgaben erledigen – ohne für jede Antwort in den Browser zu wechseln.</li><li><strong>Genau dort weitermachen, wo aufgehört wurde – auf jeder Oberfläche.</strong> Sessions werden zwischen GitLab Duo CLI, der GitLab-UI und den Editor-Extensions geteilt. Start im Browser. Weiter in der Shell. Dieselbe Konversation.</li><li><strong>Erst planen, dann bauen.</strong> Der Interactive Mode funktioniert wie Agentic Chat: Der Plan Mode schaut sich alles an, ohne etwas zu verändern, der Build Mode nimmt die Änderungen vor. Soll es unbeaufsichtigt laufen? Der Headless Mode klinkt sich in CI-Jobs und Skripte ein.</li><li><strong>Aktivieren, sobald der Zeitpunkt passt.</strong> Duo CLI funktioniert auf GitLab.com, GitLab Self-Managed und GitLab Dedicated. Auf Self-Managed und Dedicated können Admins den Instanzzugriff ein- oder ausschalten. Überall, wo es genutzt wird, lässt sich mit <code>/doctor</code> das eigene Setup prüfen und mit <code>/mcp</code> die MCP-Konfiguration einsehen.</li></ul><p><strong>GitLab Duo CLI in Aktion:</strong></p><iframe src="https://player.vimeo.com/video/1210314517?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="Demo - Duo CLI goes GA with 19.2"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="so-funktioniert-duo-cli">So funktioniert Duo CLI</h2><p>Der einfachste Weg führt über die <a href="https://docs.gitlab.com/cli/duo/cli/" rel="">GitLab CLI</a>: <code>glab duo cli</code> ausführen, und <code>glab</code> übernimmt die Authentifizierung. <code>duo</code> lässt sich auch als eigenständiges Tool mit einem Personal Access Token installieren und ausführen. Beide Varianten unterstützen dieselben Modi und Funktionen.</p><ul><li><strong>Interactive Mode</strong> — Chat im Terminal, Tools werden vor der Ausführung bestätigt. Codebase erkunden, einen Fix planen und dann in den Build Mode wechseln, sobald Änderungen vorgenommen werden sollen.</li><li><strong>Headless Mode</strong> — nicht-interaktive Ausführung für Runner, Skripte und Automatisierung. Dafür <code>glab duo cli run --goal</code> oder <code>duo run --goal</code> verwenden.</li></ul><p>Schlägt zum Beispiel eine Pipeline fehl, lässt sich direkt aus derselben Shell fragen:</p><pre className="language-shell shiki shiki-themes github-light" code="$ glab duo cli
&gt; Die Pipelines in MR 23 schlagen fehl. Bitte hilf mir, sie zu beheben.
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">$</span><span class="sYBdl"> glab</span><span class="sYBdl"> duo</span><span class="sYBdl"> cli
</span></span><span class="line" line="2"><span class="sD7c4">&gt;</span><span class="sgsFI"> Die Pipelines in MR 23 schlagen fehl. Bitte hilf mir, sie zu beheben.
</span></span></code></pre><p>Duo CLI analysiert die Lage, ermittelt die Fehlerursache und schlägt Änderungen vor, die sich vor dem Anwenden prüfen lassen. Beim Skalieren folgt es den eigenen Custom Instructions (<code>chat-rules.md</code>, <code>AGENTS.md</code>, <code>SKILL.md</code>), und interaktive Sessions lassen sich mit <a href="https://docs.gitlab.com/user/gitlab_duo_cli/#custom-slash-commands" rel="">Custom Slash Commands</a> erweitern.</p><h2 id="duo-cli-schon-heute-nutzen">Duo CLI schon heute nutzen</h2><p>Installation und Authentifizierung gelingen über die <a href="https://docs.gitlab.com/user/gitlab_duo_cli/" rel="">GitLab-Duo-CLI-Dokumentation</a> – wer die GitLab CLI bereits nutzt, startet direkt mit <a href="https://docs.gitlab.com/cli/duo/cli/" rel=""><code>glab duo cli</code></a>.</p><p>Neu bei GitLab? <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">Kostenlose Testversion der GitLab Duo Agent Platform starten</a>. Bereits auf Premium oder Ultimate? <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platform aktivieren</a> und die im Abonnement enthaltenen <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits/" rel="">GitLab Credits</a> nutzen.</p><style>html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}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);}</style>]]></content>
        <author>
            <name>Ozer Dondurmacioglu</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/ozer-dondurmacioglu/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Forrester-Studie ermittelt 400 % ROI für die GitLab Duo Agent Platform]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Eine <a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">Total-Economic-Impact™-Studie von Forrester Consulting</a> untersucht den wirtschaftlichen Nutzen der <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>. Für die betrachtete Musterorganisation ermittelt Forrester über drei Jahre einen ROI von 400 % und einen Kapitalwert (Net Present Value) von 7,5 Mio. USD, bei einer Amortisation innerhalb von sechs Monaten.</p><p><a href="https://about.gitlab.com/de-de/topics/agentic-ai/" rel="">Agentische Programmierung</a> beschleunigt die Arbeit der Entwicklungsteams. Die schwierigere Frage ist, wie Unternehmen aus diesem Tempo einen messbaren Ertrag gewinnen, denn schnellere Commits sind nur ein Teil dessen, was produktionsreife Software ausmacht. Ein Systems Engineer aus dem Versicherungs- und Finanzsektor beschreibt es so: Die Plattform übernehme 80 bis 90 % der Code-Generierung, und der Code-Review beanspruche einen Bruchteil der früheren Zeit.</p><p>Um den erzielbaren Nutzen einzuordnen, befragte Forrester vier Entscheidungsträger aus den Branchen Finanzdienstleistung, Softwareentwicklung, Unterhaltung und Versicherung, die die <a href="https://about.gitlab.com/de-de/blog/gitlab-duo-agent-platform-is-generally-available/" rel="">GitLab Duo Agent Platform produktiv einsetzen</a>. Aus ihren Angaben formte Forrester eine einzige zusammengesetzte Musterorganisation: ein global tätiges Unternehmen mit 3 Mrd. USD Jahresumsatz und 3.000 Mitarbeitenden, das die Zahl der Plattform-Nutzenden über drei Jahre von 150 auf 250 erhöht.</p><h2 id="kosten-und-nutzen-im-verhältnis">Kosten und Nutzen im Verhältnis</h2><p>Die Studie legt den erforderlichen Aufwand offen: risikobereinigte Kosten über drei Jahre von 1,3 Mio. USD für Verbrauchs-Credits sowie 589.000 USD für Implementierung und laufenden Betrieb, einschließlich interner Personalkosten für Pilotprogramm, Schulung und Support. Diesen Kosten stehen 9,4 Mio. USD an Nutzen gegenüber. Daraus ergeben sich der ROI von 400 % und der Kapitalwert von 7,5 Mio. USD.</p><p><img alt="Grafik: Nutzen der GitLab Duo Agent Platform" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783954053/j8qizamomxpvqcxjabeu.png" /></p><h2 id="ausgangslage-vor-der-einführung">Ausgangslage vor der Einführung</h2><p>Vor der Einführung der GitLab Duo Agent Platform schilderten die Befragten bekannte Engpässe. Teams waren auf manuelle Prozesse, das Wissen einzelner Senior-Engineers und informellen Wissensaustausch angewiesen, um Software zu erstellen, zu prüfen und abzusichern. Neue Teammitglieder kamen nicht weiter, ohne einen Senior-Engineer von der eigenen Arbeit abzuziehen. Sicherheitskorrekturen blieben liegen, bis eine der wenigen Personen mit dem nötigen Kontext Zeit fand. Und nicht das Schreiben von Code, sondern der Review hielt die Auslieferung häufig auf. Genau diese Abhängigkeiten bildete Forrester in der Musterorganisation ab und maß ihre Auflösung.</p><h2 id="ergebnisse-nach-der-einführung">Ergebnisse nach der Einführung</h2><p><a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">Forrester quantifiziert vier Nutzenbereiche</a> für die Musterorganisation, die sich auf 9,4 Mio. USD risikobereinigten Nutzen gegenüber 1,9 Mio. USD Kosten summieren.</p><p><strong>Neue Entwickelnde benötigten 80 % weniger Einarbeitungszeit.</strong> Statt Kolleginnen und Kollegen von der eigenen Arbeit abzuziehen, nutzten neue Teammitglieder den in IDE und Repository eingebetteten <a href="https://about.gitlab.com/de-de/blog/gitlab-duo-agent-platform-complete-getting-started-guide/" rel="">agentischen Chat</a>, um sich eigenständig in unbekannte Codebasen und Konventionen einzuarbeiten. Forrester beziffert die Einsparung auf 582.000 USD.</p><p><strong>Eine auf acht Monate veranschlagte Migration war nach zwei Monaten abgeschlossen.</strong> Die Musterorganisation nutzte die Plattform, um während einer umfangreichen Migration von einer On-Premises-Umgebung zu GitLab SaaS Pipeline-Fehler zu diagnostizieren und Probleme unmittelbar zu beheben. Das entspricht einer um 75 % kürzeren Laufzeit und 157.000 USD eingesparten Personalkosten.</p><p><strong>Sicherheits- und QA-Engineers gewannen 40 % ihrer Arbeitszeit zurück.</strong> Mithilfe kontextbezogener Erklärungen und Korrekturvorschläge der Plattform verringerten sie den Aufwand für die Behebung von Schwachstellen und waren weniger auf Senior-Engineers angewiesen. Forrester rechnet dies mit 1,3 Mio. USD Personaleinsparung über drei Jahre.</p><p><strong>Jede entwickelnde Person gewann 20 % der Wochenarbeitszeit für Feature-Arbeit zurück.</strong> Agentischer Chat und KI-Agenten übernahmen Code-Review, Tests und Fehlersuche, die zuvor Entwicklungszeit banden. Über alle Entwickelnden summiert Forrester dies auf 7,4 Mio. USD, mit wachsender Nutzung über den Dreijahreszeitraum.</p><p>Forrester nennt zudem nicht quantifizierte Nutzen: Einsparungen durch die Konsolidierung sich überschneidender KI-Entwicklungswerkzeuge, höhere Zufriedenheit in den Entwicklungsteams und besseren Wissensaustausch zwischen Teams.</p><h2 id="zusammenspiel-über-den-gesamten-lebenszyklus">Zusammenspiel über den gesamten Lebenszyklus</h2><p>Das Muster, das die Studie festhält: Agentische Programmierung steigert die Ausgabe einzelner Entwickelnder, doch der Ertrag summiert sich erst, wenn dieses Tempo über eine Infrastruktur läuft, die den gesamten Software-Lebenszyklus abdeckt.</p><p>Wer den Business Case für agentische Infrastruktur im eigenen Unternehmen aufbaut, findet in der Studie einen Rahmen, der auf den dokumentierten Erfahrungen von vier Unternehmen beruht.</p><blockquote><p><a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">Die vollständige Forrester-Total-Economic-Impact™-Studie zur GitLab Duo Agent Platform lesen</a> – mit Methodik, Finanzmodell und Interview-Ergebnissen.</p></blockquote><p><em>Diese Studie wurde von GitLab in Auftrag gegeben und von Forrester Consulting durchgeführt. Sie ist nicht als Wettbewerbsanalyse gedacht. Forrester trifft keine Annahmen über den möglichen ROI anderer Organisationen; die Ergebnisse geben die Erfahrungen der befragten Organisationen und der daraus gebildeten Musterorganisation wieder. GitLab stellte die Namen der Kundinnen und Kunden für die Interviews bereit, nahm an diesen jedoch nicht teil, und Forrester behält die redaktionelle Kontrolle über die Ergebnisse der Studie.</em></p>]]></content>
        <author>
            <name>Jessica Taylor</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/jessica-taylor/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Wenn ein Versions-Bump den Build bricht, behebt GitLab ihn]]></title>
        <id>https://about.gitlab.com/de-de/blog/dependency-scanning-auto-remediation/</id>
        <link href="https://about.gitlab.com/de-de/blog/dependency-scanning-auto-remediation/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>KI schreibt mehr Code und zieht mehr Dependencies nach – das erhöht das Risiko für Anwendungen. Der Großteil dieser Angriffsfläche stammt nicht aus Code, den das eigene Team aktiv ausgewählt hat. Eine <a href="https://arxiv.org/abs/2503.22134" rel="">Studie zum Maven-Ökosystem</a> aus 2025 fand Schwachstellen in rund 63 % der aktuellsten Releases über transitive Dependencies, gegenüber 31 % über direkte.</p><p><a href="https://docs.gitlab.com/user/application_security/remediate/dependency_scanning_auto_remediation/" rel="">Dependency Scanning Auto-Remediation</a>, jetzt in der Beta, schließt diese Lücke bei der Security. Findet <a href="https://about.gitlab.com/de-de/blog/sbom-based-dependency-scanning/" rel="">Dependency Scanning</a> ein verwundbares Paket, öffnet GitLab eine Merge Request zur Aktualisierung, nutzt KI zur Behebung von Build-brechenden Änderungen und iteriert, bis die Pipeline durchläuft – wobei jede Änderung den bestehenden Gates und dem Audit-Trail unterliegt.</p><p>Dadurch schrumpfen Security-Backlogs, ohne Entwicklungsteams von ihrer eigentlichen Arbeit abzulenken, werden Schwachstellen mit hoher Severity innerhalb der Compliance-Fristen behoben, und Breaking Upgrades kommen als freigabebereite Merge Requests an.</p><h2 id="warum-der-dependency-backlog-immer-weiter-wächst">Warum der Dependency-Backlog immer weiter wächst</h2><p>Verwundbare und veraltete Komponenten sind ein altbekanntes <a href="https://about.gitlab.com/de-de/blog/2025-owasp-top-10-whats-changed-and-why-it-matters/" rel="">OWASP-Top-10</a>-Risiko und eine der Hauptquellen für Remediation-Backlogs. Findings zu beheben ist langsame, manuelle Arbeit, die mit der Feature-Entwicklung konkurriert – Schwachstellen mit hoher Severity bleiben dadurch über die 30-Tage-Fristen von PCI-DSS und <a href="https://about.gitlab.com/blog/gitlab-dedicated-for-government-now-fedramp-authorized/" rel="">FedRAMP</a> hinaus ungelöst. Gleichzeitig beschleunigt KI-gestütztes Exploit-Engineering die Offenlegung und Bewaffnung von Schwachstellen, selbst in etablierten Libraries.</p><p>Etwa jedes achte <a href="https://link.springer.com/article/10.1007/s10664-024-10563-4" rel="">Dependency-Update führt zu einem Breaking Change</a>, und viele als abwärtskompatibel gekennzeichnete Updates brechen trotzdem den Build. Teams verschieben komplexe Änderungen tendenziell – und je länger diese Schwachstellen liegen bleiben, desto gravierender werden sie.</p><h2 id="vom-backlog-zum-fix-ohne-entwicklungsteams-abzulenken">Vom Backlog zum Fix, ohne Entwicklungsteams abzulenken</h2><p>Dependency Scanning Auto-Remediation macht aus verwundbaren Dependencies geprüfte, merge-bereite Fixes, sodass Findings abgearbeitet werden und die Auflösung von Breaking Changes nicht länger die Entwicklungsteams bindet. Teams profitieren dabei in drei Bereichen: Backlog, Aufwand und Kontrolle.</p><ul><li><strong>Den Dependency-Backlog verkleinern.</strong> Verwundbare Dependencies werden aktualisiert, sobald sie gefunden werden – Findings stapeln sich dadurch nicht, und Issues mit hoher Severity bleiben innerhalb der Compliance-Fristen.</li><li><strong>Aufwändige Breaking-Change-Rewrites vermeiden.</strong> Bricht ein Bump den Build, committet die <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> einen Fix – Entwicklungsteams prüfen dann eine funktionierende Änderung, statt sie von Grund auf selbst zu schreiben.</li><li><strong>Jede Änderung unter Kontrolle behalten.</strong> Auto-Remediation entwirft die Änderung, aber gemergt wird erst nach Freigabe durch einen Reviewer – und jede MR hinterlässt einen Audit-Trail zu dem, was sich geändert hat und wer es freigegeben hat.</li></ul><h2 id="schwachstellen-schließen-auch-wenn-code-änderungen-nötig-sind">Schwachstellen schließen, auch wenn Code-Änderungen nötig sind</h2><p>Dependency Scanning Auto-Remediation behebt Schwachstellen und löst Breaking Changes in zwei Stufen:</p><p><strong>Automated Dependency Version Bumping</strong> läuft automatisch, sobald das Scanning eine verwundbare Dependency erkennt, und öffnet eine Merge Request zur Aktualisierung auf die nächste fehlerbereinigte Version. Existiert kein geeigneter Fix, bleibt das Finding im Vulnerability Report, bis ein sicherer Upgrade-Pfad verfügbar ist. Jede MR wird einem dedizierten Service-Account zugeordnet, wodurch sich jede Änderung einer eindeutigen Identität zuordnen lässt.</p><p><strong>Agentic Breaking Change Resolution</strong> übernimmt die schwierigen Fälle, in denen ein Versions-Bump Breaking Changes verursacht. Schlägt die Pipeline einer Remediation-MR fehl, weil die neue Version das Projekt bricht, analysiert die GitLab Duo Agent Platform automatisch die Pipeline-Fehler, den Changelog der Dependency und wie der Code die Dependency nutzt. Anschließend committet sie innerhalb derselben MR Fixes, damit das Projekt mit der aktualisierten Version funktioniert. Bekommt sie die Pipeline nicht zum Laufen, stoppt sie und hält in der MR fest, was sie gefunden hat, damit von dort aus weitergearbeitet werden kann. Unterstützte Ökosysteme umfassen Bundler, Maven, Gradle sowie die wichtigsten Python- und JavaScript/TypeScript-Paketmanager; <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/604602" rel="">Rust</a> und <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/604601" rel="">Go</a> sind für die kommenden Monate geplant.</p><p>Auto-Remediation mergt nie von sich aus. Für das Review legt jede MR offen, welche Schwachstelle sie adressiert, auf welche Version sie hebt und welchen Code die GitLab Duo Agent Platform vorgeschlagen hat, damit der Build durchläuft – so muss beim Review niemand die Änderung erst rekonstruieren.</p><h2 id="so-funktioniert-dependency-scanning-auto-remediation">So funktioniert Dependency Scanning Auto-Remediation</h2><p>Auto-Remediation läuft automatisch, sobald SBOM-basiertes Dependency Scanning eine verwundbare Dependency mit verfügbarem Fix erkennt. Für ein einzelnes Finding lässt es sich auch manuell aus dem Vulnerability Report heraus starten. GitLab öffnet dann eine Remediation-MR, die den gewohnten Review- und Merge-Prozess durchläuft; ist Agentic Breaking Change Resolution aktiviert und bricht der Versions-Bump die Pipeline, versucht die GitLab Duo Agent Platform, die daraus entstehenden Code-Änderungen innerhalb derselben Merge Request zu beheben.</p><p>Eingebaute Schutzmechanismen verhindern, dass die Remediation-Automatisierung zur Belastung wird. Cooldown-Zeiträume verhindern, dass stark frequentierte Projekte bei jeder Pipeline eine Remediation auslösen, und GitLab legt eine geschlossene MR nur dann neu an, wenn ein neuerer Fix verfügbar ist.</p><p>Remediation lässt sich an die jeweilige Risikotoleranz anpassen. Möglich ist die Ausrichtung auf Schwachstellen jeder Severity von Low bis Critical, das Begrenzen, wie weit Versions-Bumps gehen dürfen (Patch, Minor oder Major), sowie das Speichern der Einstellungen in Konfigurationsprofilen auf Projekt- oder Gruppenebene (während der Beta über die API).</p><p>Remediation läuft über die eigene Pipeline der Organisation und übernimmt damit die bestehenden Zugriffskontrollen und Freigabe-Gates. Zusätzlich entsteht ein vollständiges, auditierbares Protokoll dazu, was sich geändert hat, wer es freigegeben hat und warum.</p><p>Dependency Scanning Auto-Remediation in Aktion:</p><iframe src="https://player.vimeo.com/video/1210291456?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="Dependency Scanning Auto Remediation"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="den-dependency-backlog-schon-heute-abbauen">Den Dependency-Backlog schon heute abbauen</h2><p>Dependency Scanning Auto-Remediation befindet sich in der Public Beta. Verfügbar ist es auf <a href="https://gitlab.com" rel="">GitLab.com</a> und wird schrittweise für GitLab Self-Managed und GitLab Dedicated ausgerollt.</p><p>Der Einstieg gelingt über die <a href="https://docs.gitlab.com/user/application_security/remediate/dependency_scanning_auto_remediation/" rel="">Dokumentation zu Dependency Scanning Auto-Remediation</a>.</p><p>Automated Dependency Version Bumping ist in GitLab Ultimate ohne Zusatzkosten enthalten.</p><p>Der Zugang zu Agentic Breaking Change Resolution lässt sich über eine <a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial&amp;glm_source=about.gitlab.com/gitlab-duo-agent-platform/" rel="">kostenlose Testversion der GitLab Duo Agent Platform</a> erhalten. Bereits im GitLab-Ultimate-Abo? Die <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platform aktivieren</a> und die im Abonnement enthaltenen <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">GitLab Credits</a> nutzen.</p><p>Feedback vorhanden? Es lässt sich im <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/600511" rel="">Feature-Feedback-Epic</a> teilen.</p>]]></content>
        <author>
            <name>Mark Settle</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/mark-settle/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
</feed>