<?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-04-28T16:35:28.413Z</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[curl aus Omnibus-GitLab FIPS-Paketen in 19.0 entfernt]]></title>
        <id>https://about.gitlab.com/de-de/blog/curl-removed-from-omnibus-gitlab-fips-packages-in-19-0/</id>
        <link href="https://about.gitlab.com/de-de/blog/curl-removed-from-omnibus-gitlab-fips-packages-in-19-0/"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Ab Omnibus-GitLab 19.0 (und dem nachfolgenden Patch-Release für bestehende
unterstützte Versionen) enthalten FIPS-Pakete keine von GitLab gebaute Version
von curl mehr. Stattdessen wird das curl-Paket der Linux-Distribution des
Kunden verwendet – analog zur bestehenden Praxis, bei der FIPS-Pakete bereits
das OpenSSL der Distribution nutzen.</p><h2 id="warum-wird-diese-änderung-vorgenommen">Warum wird diese Änderung vorgenommen?</h2><p>Diese Änderung ist notwendig, weil curl 8.18.0 die Kompilierung gegen
OpenSSL 1.x als veraltet markiert hat. Das verhindert die Fortführung des
bisherigen Ansatzes auf Amazon Linux 2 und AlmaLinux 8 (betrifft
RHEL-8-Kunden). GitLab stellt die meisten Abhängigkeiten für Omnibus-GitLab
selbst bereit, verknüpft in FIPS-Paketen jedoch mit den kryptografischen
Bibliotheken der Distribution statt eigene zu bündeln – dieses Modell wird
nun auf curl ausgeweitet.</p><p>Aus Gründen der Wartbarkeit und Sicherheit wird diese Änderung auf alle
FIPS-Pakete angewendet, einschließlich Distributionen mit OpenSSL 3.0 oder
höher. Alle FIPS-Kunden sind betroffen.</p><h2 id="was-ist-zu-tun">Was ist zu tun?</h2><h3 id="gitlab-self-managed">GitLab Self-Managed</h3><p>GitLab 19.0 wird ab dem 21. Mai 2026 verfügbar sein.</p><blockquote><p>Weitere Informationen zum <a href="https://about.gitlab.com/releases/" rel="">Release-Zeitplan</a>.</p></blockquote><p>Ab dem 19.0 Omnibus-GitLab FIPS-Paket wird das gebündelte curl entfernt und
durch das curl der Linux-Distribution des Kunden ersetzt. Die GitLab-Instanz
des Kunden funktioniert weiterhin wie erwartet. Diese Änderung hat keine
weiteren Auswirkungen und erfordert keine sofortigen Maßnahmen.</p><h2 id="wichtiger-hinweis">Wichtiger Hinweis</h2><p>GitLab ist künftig nicht mehr für die Bereitstellung von Sicherheitsupdates
für curl in FIPS-Paketen verantwortlich. Es obliegt dem Kunden, das curl des
eigenen Betriebssystems aktuell zu halten, um Fixes und Sicherheits-Patches
zu erhalten. Scanner-Findings für curl spiegeln künftig das Host-OS-Paket
wider und nicht mehr eine von GitLab gebündelte Version. Dies entspricht der
bestehenden Handhabung von OpenSSL in FIPS-Umgebungen.</p><h2 id="probleme-nach-der-umstellung">Probleme nach der Umstellung?</h2><p>Bei Bedarf bitte ein Issue im
<a href="https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/new?issue&amp;issuable_template=Bug" rel="">Omnibus-GitLab Issue Tracker</a>
öffnen.</p>]]></content>
        <author>
            <name>Adam Chu</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/adam-chu/</uri>
        </author>
        <published>2026-04-24T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab AI Hackathon 2026: Hier sind die Gewinner und ihre Projekte]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-ai-hackathon-2026-meet-the-winners/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-ai-hackathon-2026-meet-the-winners/"/>
        <updated>2026-04-22T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>KI schreibt Code. Das wird inzwischen erwartet. Aber Planung, Security,
Compliance und Deployments? Diese Lücken bleiben. Ich leite
Contributor-Programme seit Jahren. Ich habe noch nie erlebt, dass eine
Community so auf eine Technologie reagiert.</p><p>Deshalb haben wir <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>
geöffnet und Entwickler(innen) weltweit eingeladen, KI-Agenten zu bauen, die Teams
dabei helfen, sichere Software schneller zu liefern. Keine Chatbots, die
Fragen beantworten – sondern Agenten, die in Workflows einspringen, auf
Ereignisse reagieren und in deinem Auftrag handeln. Der GitLab AI Hackathon
lief vom 9. Februar bis zum 25. März 2026 auf Devpost. Google Cloud und
Anthropic waren Co-Sponsoren.</p><p>Als mein Team diesen Hackathon mit Google Cloud und Anthropic plante, bat
ich die Juroren, vier Dinge zu bewerten: technische Umsetzung, Design,
potenzielle Wirkung und Ideenqualität. Wir hatten auf starke Beteiligung
gehofft. Was wir bekamen, hat uns alle überrascht. Neunzehn Juroren
verbrachten 18 Tage damit, jeden Beitrag zu prüfen. Google Cloud und
Anthropic stellten Juroren, Preise und Cloud-Zugang bereit. Die Community
baute Hunderte von Agenten und Flows – weil sie diese Probleme lösen wollten.</p><p>Fast 7.000 Entwickler(innen) nahmen teil. Sie bauten in wenigen Wochen über 600
Agenten und Flows. Die Preise über alle Kategorien summierten sich auf
65.000 US-Dollar – bereitgestellt von GitLab, Google Cloud und Anthropic.</p><p>Wer schon einmal erlebt hat, wie ein erfahrener Engineer das Unternehmen
verlässt und die Hälfte des Team-Wissens mitnimmt, weiß, warum das
Gewinnerprojekt so eingeschlagen hat.</p><p>Lies weiter und erfahre, was die Community gebaut hat.</p><h2 id="gesamtsieger-lore">Gesamtsieger: LORE</h2><p><a href="https://devpost.com/software/lore-living-organizational-record-engine" rel="">LORE</a>,
die Living Organizational Record Engine, nutzt acht Agenten mit einem Router,
der jede Frage an den richtigen Agenten weiterleitet, Logik zur Vermeidung
zirkulärer Schleifen im Wissensgraphen, ein visuelles Dashboard und
Carbon-Tracking. Das Kommandozeilen-Werkzeug kommt mit 43 Tests – ja, 43
Tests in einem Hackathon-Projekt.</p><p>LORE löst ein reales Problem: das Wissen, das in den Köpfen von Engineers
lebt und mit ihnen geht, wenn sie das Unternehmen verlassen. In meiner
Erfahrung ist ein Hackathon-Projekt mit 43 Tests eine Seltenheit. So viele
Tests in einem Hackathon-Projekt sagen etwas über das Team dahinter aus.</p><p>Jurorin April Guo (Anthropic) schrieb: „Das fühlt sich wie ein Produkt an,
nicht wie ein Hackathon-Projekt.&quot;</p><h3 id="google-cloud-gewinner">Google Cloud-Gewinner</h3><p><a href="https://devpost.com/software/gitdefender" rel="">Gitdefender</a> gewann den Google
Cloud Grand Prize. Es arbeitet innerhalb von Code-Review-Workflows, findet
und behebt Sicherheitsprobleme. Es erkennt den Fehler, schreibt den Fix und
öffnet den Code-Review. Kein Mensch muss eingreifen.</p><p><a href="https://devpost.com/software/aegis-2m1oq0" rel="">Aegis</a> gewann den Google Cloud
Runner Up. Es liefert KI-gestützte Erklärungen für jede Entscheidung, die
es trifft – auf Google Cloud gehostet und bereit für den Produktionseinsatz.</p><h3 id="anthropic-gewinner">Anthropic-Gewinner</h3><p><a href="https://devpost.com/software/graphdev" rel="">GraphDev</a> gewann den Anthropic Grand
Prize. Es kartiert Code-Verbindungen und zeigt, wie sich Systeme im Laufe
der Zeit verändern. Juror Aboobacker MK (GitLab) merkte an, es sei „synchron
mit unserer Arbeit am GitLab Knowledge Graph.&quot; Juror Ayush Billore (GitLab)
schrieb: „Demo und UX haben mich begeistert – extrem nützlich, um zu
verstehen, wie das System sich entwickelt hat und was von Änderungen
betroffen ist.&quot; Man sieht die vollständige Auswirkung einer Änderung, bevor
man sie vornimmt.</p><p><a href="https://devpost.com/software/pipeheal" rel="">DocSync</a> gewann den Anthropic Runner
Up. Es nutzt drei Agenten: Detector, Writer und Reviewer. Ist DocSync vom
Fix überzeugt, öffnet es einen Code-Review. Ist es das nicht, erstellt es
ein Issue für eine manuelle Prüfung.</p><h2 id="kategorie-gewinner">Kategorie-Gewinner</h2><h3 id="technisch-beeindruckendste-lösung">Technisch beeindruckendste Lösung</h3><p>Datenbank-Migrationen brechen Dinge.
<a href="https://devpost.com/software/time-traveler-w3cxp0" rel="">Time-Traveler</a> erstellt
eine sichere Kopie des Produktions-Setups, führt die Migration gegen diese
Kopie durch und meldet das Ergebnis. Es betreibt fünf Agenten, die über eine
Bridge verbunden sind – mit echtem Google Cloud-Deployment, echten
PostgreSQL-Migrationen und echten Daten.</p><h3 id="wirkungsvollste-lösung">Wirkungsvollste Lösung</h3><p><a href="https://devpost.com/software/redagent" rel="">RedAgent</a> prüft KI-generierte
Security-Reports und schließt die Vertrauenslücke zwischen KI-Findings und
Entwickleraktion. Wer KI für Security Scanning einsetzt, kennt dieses
Problem. Ich habe Teams erlebt, die KI-Findings ignorierten, weil sie sie
nicht verifizieren konnten. RedAgent gibt Teams eine Möglichkeit, KI-Output
zu prüfen, bevor er Entwickler(innen) erreicht.</p><h3 id="einfachste-bedienung">Einfachste Bedienung</h3><p><a href="https://devpost.com/software/launch-control-bgp8az" rel="">Launch Control</a> liefert
ausgefeilte UX und solide Infrastruktur – und schnitt auch beim Thema
Nachhaltigkeit gut ab.</p><h2 id="das-nachhaltigkeitssignal">Das Nachhaltigkeitssignal</h2><p>Fünf Projekte gewannen Preise oder Boni für ökologische Wirkung.
Software-Auslieferung hat einen Carbon-Fußabdruck durch CI/CD-Pipelines –
und nun verarbeiten auch LLMs Rechenleistung im großen Maßstab. Wir haben
die Green Agent-Kategorie ins Leben gerufen, um Entwickler(innen) herauszufordern,
diesen Fußabdruck zu messen und zu reduzieren. Stacy Cline und Kim Buncle
aus GitLabs Nachhaltigkeitsteam halfen bei der Beurteilung der
Green Agent-Kategorie.</p><h3 id="green-agent-preis">Green Agent-Preis</h3><p><a href="https://devpost.com/software/greenpipe" rel="">GreenPipe</a> scannt CI/CD-Pipelines
auf Umweltwirkung und erstellt Carbon-Footprint-Berichte. Juroren Kim Buncle
und Rajesh Agadi (Google) unterstützten das Projekt.</p><h3 id="sustainable-design-bonus">Sustainable Design-Bonus</h3><p>Sustainable Design-Boni wurden an Projekte vergeben, die außergewöhnliche
Nachhaltigkeitspraktiken in ihrem Design zeigten – von
Modell-Optimierungstechniken bis hin zu energieeffizienten
Architekturentscheidungen.</p><ul><li><a href="https://devpost.com/software/bugflow-ai-regression-detective-ci-optimizer" rel="">BugFlow</a>
verwandelte einen Bug-Report in 10 Fixes in 20 Minuten.</li><li><a href="https://devpost.com/software/delta-cyber-reasoning-system" rel="">DELTA Cyber Reasoning</a>
ist automatisiertes Fuzz-Testing für Security.</li><li><a href="https://devpost.com/software/carbonlint" rel="">CarbonLint</a> wandte Code-Analyse
auf den Energieverbrauch an.</li><li><a href="https://devpost.com/software/tfguardian" rel="">TFGuardian</a> enthält unter anderem
einen Carbon-Footprint-Analyser.</li></ul><p>Herzlichen Glückwunsch an alle Gewinner des Sustainable Design-Bonus!</p><p>Juror Jens-Joris Decorte (TechWolf) zitierte das Ergebnis: Die Kosten sanken
von 556 auf 18 US-Dollar pro Monat – ein Carbon-Rückgang von 96 % (das sind
538 US-Dollar monatliche Einsparung mit einem Nachhaltigkeitslabel).</p><h2 id="sechs-projekte-wurden-lobend-erwähnt">Sechs Projekte wurden lobend erwähnt</h2><p>Sechs Projekte erhielten Ehrenmeldungen:</p><ul><li><a href="https://devpost.com/software/securitymonkey" rel="">SecurityMonkey</a> injiziert
bekannte Schwachstellen in einen Test-Branch und bewertet, wie gut die
Security-Scanner sie erkennen.</li><li><a href="https://devpost.com/software/stregent" rel="">stregent</a> überwacht CI/CD-Pipelines
und lässt Entwickler(innen) Fixes aus WhatsApp heraus untersuchen und mergen –
ohne einen Laptop zu öffnen.</li><li><a href="https://devpost.com/software/compliance-sentinel-autonomous-devsecops-governance" rel="">Compliance Sentinel</a>
bewertet jeden Merge Request auf Compliance-Risiko und blockiert den Merge
bei kritischen Verstößen.</li><li><a href="https://devpost.com/software/carbon-tracker-ij25kf" rel="">Carbon Tracker</a>
berechnet den Carbon-Fußabdruck jedes CI/CD-Pipeline-Jobs und veröffentlicht
Optimierungstipps im Merge Request.</li><li><a href="https://devpost.com/software/docuguard" rel="">RepoWarden</a> ist die erste Living
Specification Engine – ein KI-System, das festhält, warum Code geschrieben
wurde, nicht nur was er tut.</li><li><a href="https://devpost.com/software/mr-compliance-auditor" rel="">MR Compliance Auditor</a>
sammelt Nachweise über Merge Requests, ordnet sie SOC-2-Kontrollen zu und
streamt Compliance-Scores auf ein Live-Dashboard.</li></ul><p>Mein liebstes Zitat aus dem Judging stammte von Luca Chun Lun Lit (Anthropic),
der stregents Mobile-First-Ansatz beschrieb: „Im Wesentlichen vom Handy aus
programmieren zu können ist das nächste Level in der Engineering-Erfahrung.&quot;</p><blockquote><p>Entdecke die über 600 Einreichungen in der
<a href="https://gitlab.devpost.com/project-gallery" rel="">Projektgalerie</a>.</p></blockquote><h2 id="was-als-nächstes-kommt">Was als Nächstes kommt</h2><p>Jeder Agent in diesem Hackathon arbeitete innerhalb eines einzelnen Projekts.
Die Ergebnisse waren trotzdem beeindruckend. Einige Teilnehmer betrieben einen
lokalen Wissensgraphen parallel zu ihren Agenten, um Code-Beziehungen und
Abhängigkeiten im Repo sichtbar zu machen. LORE erfasst Projekthistorie.
Gitdefender findet Schwachstellen. Agenten mit reichhaltigerem lokalem Kontext
zu kombinieren hilft Contributors bereits heute, schärfere Werkzeuge zu bauen.
Der nächste Hackathon baut darauf auf. Melde dich auf
<a href="https://contributors.gitlab.com/" rel="">contributors.gitlab.com</a> an, um als Erster
zu erfahren, wann Details bekannt gegeben werden.</p><h2 id="loslegen">Loslegen</h2><p>Ein besonderer Dank gilt Lee Tickett (GitLab) und Mattias Michaux (GitLab)
für die Orchestrierung der Orchestratoren und Innovatoren hinter diesem
Hackathon!</p><p>Danke an alle, die ein Projekt eingereicht haben. Fast 7.000 von euch haben
gezeigt, was GitLab Duo Agent Platform kann, wenn eine Community beschließt
zu bauen. Ich bin stolz auf das, was ihr hier gebaut habt – und ich kann es
kaum erwarten zu sehen, was ihr als Nächstes baut.</p><p>Baue deinen eigenen Agenten auf
<a href="https://docs.gitlab.com/user/duo_agent_platform/" rel="">GitLab Duo Agent Platform</a>.
Entdecke Community-gebaute Agenten im
<a href="https://docs.gitlab.com/user/duo_agent_platform/ai_catalog/" rel="">AI Catalog</a>.
Du orchestrierst. KI beschleunigt.</p>]]></content>
        <author>
            <name>Nick Veenhof</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/nick-veenhof/</uri>
        </author>
        <published>2026-04-22T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab + Amazon: KI-Orchestrierung auf sicherem Fundament]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-amazon-platform-orchestration-on-a-trusted-ai-foundation/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-amazon-platform-orchestration-on-a-trusted-ai-foundation/"/>
        <updated>2026-04-21T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Wer GitLab einsetzt und eine ausgereifte AWS-Praxis betreibt, findet in der
Kombination aus Duo Agent Platform und Amazon Bedrock eine passende Ergänzung.
Das Prinzip ist klar: GitLab übernimmt die Orchestrierungsschicht und
beschleunigt den gesamten Software-Lifecycle mit agentischer KI. Bedrock stellt
im Hintergrund eine sichere, compliance-fähige Foundation-Model-Schicht mit
KI-Inferenz bereit.</p><p>GitLab Duo Agent Platform ermöglicht Planung, Merge-Pipelines, Security
Scanning, Vulnerability Remediation und mehr als Teil bestehender
GitLab-Workflows. Der GitLab AI Gateway leitet Modell-Anfragen an Bedrock
weiter – oder an GitLab-verwaltete, Bedrock-gestützte Endpunkte, je nach
Deployment-Konfiguration. Damit lässt sich auf den IAM-Richtlinien,
VPC-Grenzen, regionalen Kontrollen und Cloud-Commitments aufbauen, die bereits
in AWS bestehen.</p><p>Wer Amazon Bedrock bereits nutzt und KI-Unterstützung innerhalb der bestehenden
GitLab-Workflows sucht – nicht in einem weiteren eigenständigen Chat-Werkzeug –
findet in dieser Kombination die passende Architektur.</p><p>Dieser Artikel beleuchtet zunächst das Problem, mit dem viele Teams heute
konfrontiert sind: KI ist fragmentiert, Datenpfade sind unklar, und
Bedrock-Investitionen werden zu wenig genutzt, wenn KI außerhalb des
Software-Lifecycles operiert. Anschließend werden die Deployment-Optionen für
GitLab Duo Agent Platform erläutert:</p><ul><li>Integriert mit selbst gehosteten Modellen auf Amazon Bedrock für GitLab
Self-Managed-Deployments und selbst gehosteten AI Gateway</li><li>Integriert mit GitLab-betriebenen Modellen auf Amazon Bedrock (mit
GitLab-eigenen Keys) für GitLab Self-Managed-Deployments und
GitLab-gehosteten AI Gateway</li><li>Integriert mit GitLab-betriebenen Modellen auf Amazon Bedrock (mit
GitLab-eigenen Keys) für GitLab.com-Instanzen und GitLab-gehosteten
AI Gateway</li></ul><p>Abschließend wird zusammengefasst, wie dieser Ansatz nicht freigegebene
KI-Werkzeuge (Shadow AI) und Point-Tool-Sprawl vermeidet, ohne einen parallelen
Tech-Stack für KI-Werkzeuge aufzubauen.</p><h2 id="ki-überall-kontrolle-nirgends">KI überall, Kontrolle nirgends</h2><p>Irgendwo im Unternehmen nutzen Softwareteams gerade ein KI-Werkzeug, das die
Sicherheitsabteilung nicht freigegeben hat. Prompt-Daten verlassen
möglicherweise die eigene Umgebung über einen Pfad, den niemand vollständig
nachverfolgt hat. Und die Bedrock-Investition des Unternehmens wird zu wenig
genutzt, während einzelne Teams separate KI-Werkzeuge auf eigene Rechnung
betreiben – Workloads und Cloud-Ausgaben fließen so an Plattformen ab, auf die
bereits Commitments bestehen.</p><p>Das ist kein Personalproblem – es ist ein Architekturproblem. Und es
manifestiert sich in nahezu jedem Unternehmen in denselben drei Einschränkungen:</p><p><strong>Operative Fragmentierung.</strong> Jedes Team – manchmal jede einzelne Person –
wählt das eigene Entwicklungs-Toolset, einschließlich KI-Werkzeuge und
Modellauswahl. Diese Fragmentierung macht eine durchgängige Governance innerhalb
des Software-Lifecycles nahezu unmöglich.</p><p><strong>Sicherheit und Datensouveränität.</strong> Wo fließen Prompt- und Code-Daten
tatsächlich hin? Wer ist Eigentümer der Protokolle?</p><p><strong>Cloud-Ausgabenoptimierung.</strong> Commitments gegenüber zentralen Cloud-Anbietern
wie AWS werden verwässert, wenn Workloads und KI-Nutzung zu Point-Tools
außerhalb bestehender Vereinbarungen abwandern.</p><p>GitLab Duo Agent Platform und Amazon Bedrock adressieren diese Probleme
gemeinsam. Die Aufgabenteilung ist eindeutig: Duo Agent Platform verantwortet
die Workflow-Orchestrierung mit agentischer KI für die Softwareentwicklung,
Bedrock verantwortet die Inferenzschicht und hostet freigegebene
Foundation-Modelle, und das Unternehmen behält die vollständige Kontrolle über
die Daten- und Richtliniengrenzen, die bereits in AWS definiert wurden. Drei
Aufgaben, drei Verantwortliche, keine Fragmentierung.</p><h2 id="gitlab-duo-agent-platform-die-agentische-steuerungsebene">GitLab Duo Agent Platform: Die agentische Steuerungsebene</h2><p>GitLab Duo Agent Platform ist GitLabs agentische KI-Schicht: ein Framework aus
spezialisierten Agenten und Abläufen, die gleichzeitig und parallel operieren –
über traditionelle stufenbasierte Übergaben hinaus – und Arbeit über den
gesamten Software-Lifecycle hinweg automatisieren. Statt eines einzelnen
Assistenten, der auf Prompts reagiert, ermöglicht Duo Agent Platform Teams die
asynchrone Orchestrierung vieler KI-Agenten auf Basis einheitlicher Daten und
Projektkontexte. Dazu gehören Issues, Merge Requests, Pipelines und Security
Findings. Lineare Workflows werden so zu koordinierter, kontinuierlicher
Zusammenarbeit zwischen Softwareteams und ihren KI-Agenten – im erforderlichen
Umfang.</p><p>Mit dieser Steuerungsebene stellt sich die nächste Frage: Welches KI-Fundament
soll diese Agenten antreiben? Für Unternehmen, die GitLab Self-Managed auf AWS
betreiben und sicherstellen müssen, dass Inferenz-Traffic, Prompt-Daten und
Protokolle ebenfalls in der AWS-Umgebung verbleiben – gemeinsam mit den
Software-Lifecycle-Daten – ist Amazon Bedrock als KI-Inferenzschicht die
naheliegende Wahl.</p><h2 id="amazon-bedrock-das-vertrauenswürdige-ki-fundament">Amazon Bedrock: Das vertrauenswürdige KI-Fundament</h2><p>Amazon Bedrock ist eine vollständig verwaltete, serverlose
Foundation-Model-Schicht, die vollständig in der AWS-Umgebung des Kunden läuft.
Kundendaten verbleiben im AWS-Account des Kunden. Eingaben und Ausgaben sind
während der Übertragung und im Ruhezustand verschlüsselt, werden nie mit
Modellanbietern geteilt und nie zum Training von Basismodellen verwendet. Bedrock
verfügt über Compliance-Zertifizierungen für DSGVO und BSI C5, die viele
Anforderungen regulierter Branchen abdecken. Teams können außerdem eigene
feinabgestimmte Modelle über Custom Model Import einbinden und gemeinsam mit
nativen Bedrock-Modellen über dieselbe Infrastruktur betreiben – ohne separate
Deployment-Pipelines. Bedrock Guardrails ergänzt konfigurierbare
Schutzmaßnahmen über alle Modelle hinweg: Content-Filterung,
Halluzinationserkennung und Schutz sensibler Daten.</p><p>Gemeinsam konsolidieren GitLab Duo Agent Platform und Bedrock
DevSecOps-Orchestrierung und KI-Modell-Governance – und helfen dabei, die
Fragmentierung zu vermeiden, die entsteht, wenn Teams KI-Werkzeuge eigenständig
einführen.</p><h2 id="die-passende-deployment-variante-wählen">Die passende Deployment-Variante wählen</h2><p>Die Integration liefert dieselben Kernfunktionen von GitLab Duo Agent Platform,
unabhängig von der gewählten Deployment-Variante. Was variiert, ist: Wer
betreibt GitLab, wer betreibt den AI Gateway, und in welchem Bedrock-Account
läuft die Inferenz? Die passende Variante hängt davon ab, wo das Unternehmen
bereits operiert.</p><p>Die Integration umfasst drei Hauptkomponenten:</p><ul><li><strong>GitLab Duo Agent Platform:</strong> Agentische Workflows, eingebettet in den
gesamten Software-Lifecycle</li><li><strong>AI Gateway (GitLab-verwaltet oder selbst gehostet):</strong> Die
Abstraktionsschicht zwischen Duo Agent Platform und dem
Foundation-Model-Backend</li><li><strong>Amazon Bedrock:</strong> KI-Modell- und Inferenzsubstrat</li></ul><p><img alt="Deployment von GitLab und AWS Bedrock" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1776362365/udmvmv2efpmwtkxgydch.png" /></p><p>Die Wahl der Deployment-Variante richtet sich danach, wo das Unternehmen die
Steuerungshebel platzieren möchte. Die folgenden Varianten sind so konzipiert,
dass sie Teams dort abholen, wo sie bereits stehen – ob SaaS-first,
Self-Managed aus Compliance-Gründen oder vollständig auf AWS mit bestehenden
Bedrock-Investitionen.</p><table><thead><tr><th align="left">Deployment-Variante</th><th align="left">GitLab.com-Instanz mit GitLab-gehostetem AI Gateway und GitLab-betriebenen Bedrock-Modellen</th><th align="left">GitLab Self-Managed mit GitLab-gehostetem AI Gateway und GitLab-betriebenen Bedrock-Modellen</th><th align="left">GitLab Self-Managed mit selbst gehostetem AI Gateway und kundenbetriebenen Bedrock-Modellen</th></tr></thead><tbody><tr><td align="left"><strong>Geeignet wenn:</strong></td><td align="left">Primär auf GitLab.com und kein eigener Betrieb von AI Gateway und Bedrock-Modellen gewünscht</td><td align="left">GitLab Self-Managed aus Compliance- und operativen Gründen erforderlich, aber keine eigene Verwaltung der KI-Schicht gewünscht</td><td align="left">AWS-zentrierte Umgebung mit bestehender Bedrock-Nutzung und strengen Anforderungen an Datenkontrolle</td></tr><tr><td align="left"><strong>Wesentliche Vorteile</strong></td><td align="left">Schnellster Einstieg in Duo Agent Platform-Workflows: GitLab betreibt GitLab.com, den AI Gateway und die integrierten Bedrock-KI-Modelle.</td><td align="left">GitLab in der eigenen Umgebung betreiben und Bedrock-Modelle über einen GitLab-verwalteten AI Gateway nutzen – Deployment-Kontrolle kombiniert mit vereinfachtem KI-Betrieb.</td><td align="left">GitLab und AI Gateway im eigenen AWS-Account betreiben, bestehende IAM/VPC/Regionen wiederverwenden, Protokolle und Daten in der eigenen Umgebung halten und Bedrock-Nutzung aus bestehenden AWS-Commitments beziehen.</td></tr></tbody></table><h2 id="praxiseinsatz-von-gitlab-duo-agent-platform-mit-amazon-bedrock">Praxiseinsatz von GitLab Duo Agent Platform mit Amazon Bedrock</h2><p>Plattformteams können GitLab Duo Agent Platform mit Amazon Bedrock nutzen, um
zentral festzulegen, welche Modelle Code-Vorschläge, Sicherheitsanalysen und
Pipeline-Remediation übernehmen. So lassen sich Schutzmaßnahmen und
Protokollierung zentral durchsetzen, statt einzelnen Teams die eigenständige
Einführung separater Werkzeuge zu überlassen.</p><p>Security-Workflows profitieren besonders. GitLab Duo Agent Platform-Agenten
können Fixes für Security Findings innerhalb von GitLab vorschlagen und
validieren – und so den manuellen Triage-Aufwand reduzieren, den
Entwicklungsteams sonst außerhalb der Plattform leisten müssten.</p><p>Für Unternehmen mit bestehenden AWS-Commitments lässt sich die KI-Nutzung so
mit bestehenden Cloud-Vereinbarungen in Einklang halten. Separate, ungeplante
Ausgaben entfallen.</p><h2 id="der-kreislauf-schließt-sich">Der Kreislauf schließt sich</h2><p>Die Hindernisse, die Enterprise-KI-Adoption verlangsamen, sind oft nicht
technischer Natur. Sie sind organisatorischer Natur: fragmentiertes Tooling,
nicht nachverfolgbare Datenflüsse und Cloud-Ausgaben, die sich nie
konsolidieren. Diese Probleme können KI-Programme zum Stillstand bringen, selbst
nachdem Pilotprojekte erfolgreich waren.</p><p>GitLab Duo Agent Platform und Amazon Bedrock adressieren jeden dieser Punkte
direkt. Plattformteams erhalten konsistente Governance, Auditierbarkeit und
standardisierte Pfade für die KI-Nutzung über den gesamten Software-Lifecycle.
Entwicklungsteams erhalten optimierte, agentische Workflows, die sich nativ in
GitLab anfühlen. Und AWS-zentrierte Unternehmen können ihre bestehende
Bedrock-Investition erweitern, statt parallel dazu eine separate
KI-Infrastruktur aufzubauen.</p><p>Das Ergebnis ist ein KI-Programm, das skaliert, ohne zu fragmentieren.
Governance und Entwicklungsgeschwindigkeit auf demselben Stack, für dieselben
Teams, unter Richtlinien, die das Unternehmen bereits besitzt.</p><blockquote><p>Um die passende Deployment-Variante zu identifizieren und GitLab Duo Agent
Platform und Amazon Bedrock mit der bestehenden AWS-Strategie in Einklang zu
bringen, steht das <a href="https://about.gitlab.com/sales/" rel="">GitLab Sales-Team</a> zur
Verfügung – für Architekturberatung und Implementierungsunterstützung.
Weitere Informationen bietet auch die
<a href="https://about.gitlab.com/partners/technology-partners/aws/" rel="">AWS-Partnerseite</a>.</p></blockquote>]]></content>
        <author>
            <name>Joe Mann</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/joe-mann/</uri>
        </author>
        <author>
            <name>Mark Kriaf</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/mark-kriaf/</uri>
        </author>
        <published>2026-04-21T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Was ist neu in Git 2.54.0?]]></title>
        <id>https://about.gitlab.com/de-de/blog/whats-new-in-git-2-54-0/</id>
        <link href="https://about.gitlab.com/de-de/blog/whats-new-in-git-2-54-0/"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Das Git-Projekt hat kürzlich <a href="https://lore.kernel.org/git/xmqqa4uxsjrs.fsf@gitster.g/T/#u" rel="">Git 2.54.0</a> veröffentlicht. Werfen wir einen Blick auf einige bemerkenswerte Highlights dieses Releases, das Beiträge des Git-Teams bei GitLab enthält.</p><h2 id="pluggable-object-databases">Pluggable Object Databases</h2><p>Git bietet bereits die Möglichkeit, Referenzen entweder mit dem &quot;files&quot;-Backend oder dem <a href="https://about.gitlab.com/de-de/blog/a-beginners-guide-to-the-git-reftable-format/" rel="">&quot;reftable&quot;-Backend</a> zu speichern. Dies wird durch geeignete Abstraktionen in Git ermöglicht, die verschiedene Backends zulassen.</p><p>Referenzen sind aber nur einer der beiden wichtigen Datentypen, die in Repositories gespeichert werden – der andere sind Objekte. Objekte werden in der Object Database gespeichert, und jede Object Database wiederum besteht aus mehreren Objektquellen, aus denen Objekte gelesen oder in die geschrieben werden kann. Jede Objektquelle speichert einzelne Objekte entweder als sogenannte &quot;Loose&quot;-Objekte oder komprimiert mehrere Objekte in ein &quot;Packfile&quot; im Verzeichnis <code className="">.git/objects</code>.</p><p>Bisher hatten diese Quellen jedoch keine echte Abstraktionsschicht, sodass das Speicherformat für Objekte komplett in Git fest verdrahtet war. Das ändert sich nun endlich mit Pluggable Object Databases! Das Konzept ist unkompliziert und ähnlich wie bei Referenzen: Statt fest verdrahteter Codepfade für die Objektspeicherung wird eine Abstraktionsschicht eingeführt, die verschiedene Backends für die Objektspeicherung ermöglicht.</p><p>Obwohl die Idee einfach ist, ist die Umsetzung komplex, da es überall in Git fest verdrahtete Annahmen über die verwendeten Speicherformate gibt. Die Arbeit an diesem Thema begann bereits mit Git 2.48, das im Januar 2025 veröffentlicht wurde. Der anfängliche Fokus lag darauf, objektbezogene Subsysteme eigenständig zu machen und geeignete Subsysteme für die bestehenden Backends in Git zu erstellen.</p><p>Mit Git 2.54 wurde nun ein Meilenstein erreicht: Das Object-Database-Backend ist jetzt pluggable. Noch wird nicht die gesamte Funktionalität von Git abgedeckt, aber die Einführung eines alternativen Backends, das eine sinnvolle Teilmenge der Operationen verarbeitet, ist jetzt ein realistisches Unterfangen.</p><p>Derzeit funktionieren nur lokale Workflows wie das Erstellen von Commits, das Anzeigen von Commit-Graphen oder das Durchführen von Merges mit einer solchen alternativen Implementierung. Ausgenommen ist insbesondere alles, was mit einem Remote interagiert, zum Beispiel beim Fetchen oder Pushen von Änderungen. Dennoch ist dies das Ergebnis von fast zwei Jahren Arbeit über fast 400 Commits, die Upstream gemergt wurden, und die Arbeit daran wird natürlich fortgesetzt.</p><p>Warum ist das relevant? Die Idee ist, dass es praktikabel wird, neue Speicherformate in Git einzuführen. Beispiele könnten sein:</p><ul><li>Ein Speicherformat, das große Binärdateien effizienter speichern kann als es Packfiles heute tun</li><li>Ein Speicherformat, das speziell auf GitLab zugeschnitten ist, um Repositories noch effizienter bereitstellen zu können</li></ul><p>Dies ist ein groß angelegtes Vorhaben, das die Zukunft von Git und GitLab maßgeblich prägen dürfte.</p><p><em>Dieses Projekt wurde von <a href="https://gitlab.com/pks-gitlab" rel="">Patrick Steinhardt</a> geleitet.</em></p><h2 id="einfachere-bearbeitung-der-commit-historie">Einfachere Bearbeitung der Commit-Historie</h2><p>In vielen Softwareentwicklungsprojekten ist es gängige Praxis, nicht nur den Code zu verfeinern, sondern auch die Commit-Historie zu bereinigen, damit sie leicht überprüfbar ist. Das Ergebnis ist eine Reihe kleiner, atomarer Commits, die jeweils eine Sache tun, mit einer guten Commit-Nachricht, die die Intention des Commits sowie spezifische Nuancen beschreibt.</p><p>Natürlich entstehen diese atomaren Commits meist nicht einfach von selbst während des Entwicklungsprozesses. Stattdessen gewinnt die Person, die die Änderungen erstellt, durch Iteration ein besseres Verständnis dafür, und die Art und Weise, die Commits aufzuteilen, wird mit der Zeit klarer. Darüber hinaus kann der anschließende Review-Prozess zu Feedback führen, das Änderungen an den erstellten Commits erfordert.</p><p>Die Konsequenz dieses Prozesses ist, dass die Commit-Historie im Laufe der Entwicklung viele Male umgeschrieben werden muss. Historisch hat Git dafür <a href="https://git-scm.com/docs/git-rebase#_interactive_mode" rel="">interaktive Rebases</a> vorgesehen. Diese interaktiven Rebases sind ein extrem leistungsfähiges Werkzeug: Sie ermöglichen es, Commits umzuordnen, Commit-Nachrichten umzuschreiben, mehrere Commits zusammenzufassen oder beliebige Bearbeitungen an jedem Commit vorzunehmen.</p><p>Allerdings sind sie auch etwas kryptisch und schwer zu verstehen. Man muss den Basis-Commit für den Rebase bestimmen, verstehen, wie ein etwas obskures &quot;Instruction Sheet&quot; zu bearbeiten ist, und sich mit dem zustandsbehafteten Rebase-Prozess auskennen. Zum Beispiel wird beim Rebase eines Topic-Branch ein Instruction Sheet wie das folgende angezeigt:</p><pre className="language-shell shiki shiki-themes github-light" code="pick b60623f382 # t: detect errors outside of test cases # empty
pick b80cb55882 # t: prepare `test_match_signal ()` calls for `set -e`
pick 5ffe397f30 # t: prepare `test_must_fail ()` for `set -e`
pick 5e9b0cf5e1 # t: prepare `stop_git_daemon ()` for `set -e`
pick 299561e7a2 # t: prepare `git config --unset` calls for `set -e`
pick ed0e7ca2b5 # t: detect errors outside of test cases
" language="shell" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#6F42C1">pick</span><span style="--shiki-default:#032F62"> b60623f382</span><span style="--shiki-default:#6A737D"> # t: detect errors outside of test cases # empty
</span></span><span class="line" line="2"><span style="--shiki-default:#6F42C1">pick</span><span style="--shiki-default:#032F62"> b80cb55882</span><span style="--shiki-default:#6A737D"> # t: prepare `test_match_signal ()` calls for `set -e`
</span></span><span class="line" line="3"><span style="--shiki-default:#6F42C1">pick</span><span style="--shiki-default:#032F62"> 5ffe397f30</span><span style="--shiki-default:#6A737D"> # t: prepare `test_must_fail ()` for `set -e`
</span></span><span class="line" line="4"><span style="--shiki-default:#6F42C1">pick</span><span style="--shiki-default:#032F62"> 5e9b0cf5e1</span><span style="--shiki-default:#6A737D"> # t: prepare `stop_git_daemon ()` for `set -e`
</span></span><span class="line" line="5"><span style="--shiki-default:#6F42C1">pick</span><span style="--shiki-default:#032F62"> 299561e7a2</span><span style="--shiki-default:#6A737D"> # t: prepare `git config --unset` calls for `set -e`
</span></span><span class="line" line="6"><span style="--shiki-default:#6F42C1">pick</span><span style="--shiki-default:#032F62"> ed0e7ca2b5</span><span style="--shiki-default:#6A737D"> # t: detect errors outside of test cases
</span></span></code></pre><p>Interaktive Rebases sind also zwar leistungsfähig, aber auch ziemlich einschüchternd für durchschnittliche Nutzende.</p><p>Das muss aber nicht so sein. Tools wie <a href="https://www.jj-vcs.dev/latest/" rel="">Jujutsu</a> bieten Interfaces, die im Vergleich zu Git deutlich einfacher zu benutzen sind – zum Beispiel kann man einfach <code className="">jj split</code> ausführen, um einen Commit in zwei aufzuteilen. Bei Git mit interaktiven Rebases erfordert dieser Anwendungsfall viele verschiedene Schritte mit verwirrenden Befehlszeilenargumenten.</p><p>Inspiriert von Jujutsu wurde daher ein neuer Befehl git-history(1) in Git eingeführt, der die Grundlage für eine bessere Bearbeitung der Historie bildet. Derzeit hat dieser Befehl zwei Unterbefehle:</p><ul><li><code className="">git history reword</code> ermöglicht das einfache Umschreiben einer Commit-Nachricht. Man gibt den Commit an, dessen Nachricht umformuliert werden soll, Git fragt nach der neuen Commit-Nachricht, und das war&#39;s.</li><li><code className="">git history split</code> ermöglicht das Aufteilen eines Commits in zwei, inspiriert von <code className="">jj split</code>. Man gibt einen Commit an, Git fragt, welche Änderungen in welchen Commit aufgenommen werden sollen und nach den beiden Commit-Nachrichten, und dann ist man fertig.</li></ul><p>Das ist natürlich erst der Anfang, und im Laufe der Zeit sollen weitere Unterbefehle hinzukommen. Zum Beispiel:</p><ul><li><code className="">git history fixup</code> um gestagete Änderungen automatisch in einen bestimmten Commit einzufügen</li><li><code className="">git history drop</code> um einen Commit zu entfernen</li><li><code className="">git history reorder</code> um die Reihenfolge von Commits zu ändern</li><li><code className="">git history squash</code> um eine Reihe von Commits zusammenzufassen</li></ul><p>Aber das ist noch nicht alles! Zusätzlich zur einfachen Bearbeitung der Historie kann dieser neue Befehl auch automatisch alle lokalen Branches rebasen, die den bearbeiteten Commit zuvor enthielten. Das bedeutet, man kann sogar einen Commit bearbeiten, der nicht auf dem aktuellen Branch liegt, und alle Branches, die den Commit enthalten, werden umgeschrieben.</p><p>Es mag zunächst überraschend erscheinen, dass Git automatisch abhängige Branches rebast, da dies eine deutliche Abweichung von der Funktionsweise von git-rebase(1) darstellt. Dies ist aber Teil eines größeren Vorhabens, um bessere Unterstützung für Stacked Diffs in Git zu bringen – eine Methode, eine Reihe mehrerer abhängiger Branches zu erstellen, die unabhängig voneinander überprüft werden können, aber gemeinsam auf ein größeres Ziel hinarbeiten.</p><p><em>Dieses Projekt wurde von <a href="https://gitlab.com/pks-gitlab" rel="">Patrick Steinhardt</a> mit Unterstützung von <a href="https://github.com/newren" rel="">Elijah Newren</a> geleitet.</em></p><h2 id="ein-nativer-ersatz-für-git-sizer1">Ein nativer Ersatz für git-sizer(1)</h2><p>Die Größe eines Git-Repositorys ist ein wichtiger Faktor, der bestimmt, wie gut Git und GitLab damit umgehen können. Aber die Größe allein ist nicht der einzige Faktor, da die Performance eines Repositorys letztlich eine Kombination aus mehreren verschiedenen Dimensionen ist:</p><ul><li>Die Tiefe der Commit-Historie</li><li>Die Struktur des Verzeichnisbaums</li><li>Die Größe der im Repository gespeicherten Dateien</li><li>Die Anzahl der Referenzen</li></ul><p>Das sind nur einige der Dimensionen, die berücksichtigt werden müssen, wenn man vorhersagen will, ob Git ein Repository gut verarbeiten kann.</p><p>Obwohl klar ist, dass die reine Repository-Größe nicht ausreicht, bietet Git selbst keine Tools, die einen einfachen Überblick über diese Metriken geben. Stattdessen ist man auf Drittanbieter-Tools wie <a href="https://github.com/github/git-sizer" rel="">git-sizer(1)</a> angewiesen, um diese Lücke zu füllen. Dieses Tool leistet hervorragende Arbeit bei der Darstellung dieser Informationen, ist aber kein Bestandteil von Git und muss daher separat installiert werden.</p><p>Observability von Repository-Interna ist bei GitLab entscheidend, daher wurde in <a href="https://about.gitlab.com/de-de/blog/whats-new-in-git-2-52-0/#new-subcommand-for-git-repo1-to-display-repository-metrics" rel="">Git 2.52 ein neuer <code className="">git repo structure</code>-Befehl eingeführt</a>, um Repository-Metriken anzuzeigen, der in Git 2.53 erweitert wurde, um <a href="https://about.gitlab.com/blog/whats-new-in-git-2-53-0/#more-data-collected-in-git-repo-structure" rel="">inflated und Disk-Sizes für Objekte nach Typ anzuzeigen</a>.</p><p>In Git 2.54 wird dieser Befehl weiter ausgebaut, sodass nicht nur die Gesamtgröße angezeigt wird, sondern auch die größten Objekte nach Typ:</p><pre className="language-shell shiki shiki-themes github-light" code="$ git clone https://gitlab.com/git-scm/git.git
$ cd git
$ git repo structure
Counting objects: 410445, done.
| Repository structure      | Value       |
| ------------------------- | ----------- |
| * References              |             |
|   * Count                 |    1.01 k   |
|     * Branches            |       1     |
|     * Tags                |    1.00 k   |
|     * Remotes             |       9     |
|     * Others              |       0     |
|                           |             |
| * Reachable objects       |             |
|   * Count                 |  410.45 k   |
|     * Commits             |   83.99 k   |
|     * Trees               |  164.46 k   |
|     * Blobs               |  161.00 k   |
|     * Tags                |    1.00 k   |
|   * Inflated size         |    7.46 GiB |
|     * Commits             |   57.53 MiB |
|     * Trees               |    2.33 GiB |
|     * Blobs               |    5.07 GiB |
|     * Tags                |  737.48 KiB |
|   * Disk size             |  181.37 MiB |
|     * Commits             |   33.11 MiB |
|     * Trees               |   40.58 MiB |
|     * Blobs               |  107.11 MiB |
|     * Tags                |  582.67 KiB |
|                           |             |
| * Largest objects         |             |
|   * Commits               |             |
|     * Maximum size    [1] |   17.23 KiB |
|     * Maximum parents [2] |      10     |
|   * Trees                 |             |
|     * Maximum size    [3] |   58.85 KiB |
|     * Maximum entries [4] |    1.18 k   |
|   * Blobs                 |             |
|     * Maximum size    [5] | 1019.51 KiB |
|   * Tags                  |             |
|     * Maximum size    [6] |    7.13 KiB |

[1] f6ecb603ff8af608a417d7724727d6bc3a9dbfdf
[2] 16d7601e176cd53f3c2f02367698d06b85e08879
[3] 203ee97047731b9fd3ad220faa607b6677861a0d
[4] 203ee97047731b9fd3ad220faa607b6677861a0d
[5] aa96f8bc361fd84a1459440f1e7de02ab0dc3543
[6] 07e38db6a5a03690034d27104401f6c8ea40f1fc
" language="shell" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#6F42C1">$</span><span style="--shiki-default:#032F62"> git</span><span style="--shiki-default:#032F62"> clone</span><span style="--shiki-default:#032F62"> https://gitlab.com/git-scm/git.git
</span></span><span class="line" line="2"><span style="--shiki-default:#6F42C1">$</span><span style="--shiki-default:#032F62"> cd</span><span style="--shiki-default:#032F62"> git
</span></span><span class="line" line="3"><span style="--shiki-default:#6F42C1">$</span><span style="--shiki-default:#032F62"> git</span><span style="--shiki-default:#032F62"> repo</span><span style="--shiki-default:#032F62"> structure
</span></span><span class="line" line="4"><span style="--shiki-default:#6F42C1">Counting</span><span style="--shiki-default:#032F62"> objects:</span><span style="--shiki-default:#032F62"> 410445,</span><span style="--shiki-default:#032F62"> done.
</span></span><span class="line" line="5"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> Repository</span><span style="--shiki-default:#032F62"> structure</span><span style="--shiki-default:#D73A49">      |</span><span style="--shiki-default:#6F42C1"> Value</span><span style="--shiki-default:#D73A49">       |
</span></span><span class="line" line="6"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> -------------------------</span><span style="--shiki-default:#D73A49"> |</span><span style="--shiki-default:#6F42C1"> -----------</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="7"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> *</span><span style="--shiki-default:#032F62"> References</span><span style="--shiki-default:#D73A49">              |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="8"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Count</span><span style="--shiki-default:#D73A49">                 |</span><span style="--shiki-default:#6F42C1">    1.01</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="9"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Branches</span><span style="--shiki-default:#D73A49">            |</span><span style="--shiki-default:#6F42C1">       1</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="10"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">                |</span><span style="--shiki-default:#6F42C1">    1.00</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="11"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Remotes</span><span style="--shiki-default:#D73A49">             |</span><span style="--shiki-default:#6F42C1">       9</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="12"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Others</span><span style="--shiki-default:#D73A49">              |</span><span style="--shiki-default:#6F42C1">       0</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="13"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#D73A49">                           |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="14"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> *</span><span style="--shiki-default:#032F62"> Reachable</span><span style="--shiki-default:#032F62"> objects</span><span style="--shiki-default:#D73A49">       |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="15"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Count</span><span style="--shiki-default:#D73A49">                 |</span><span style="--shiki-default:#6F42C1">  410.45</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="16"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Commits</span><span style="--shiki-default:#D73A49">             |</span><span style="--shiki-default:#6F42C1">   83.99</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="17"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Trees</span><span style="--shiki-default:#D73A49">               |</span><span style="--shiki-default:#6F42C1">  164.46</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="18"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Blobs</span><span style="--shiki-default:#D73A49">               |</span><span style="--shiki-default:#6F42C1">  161.00</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="19"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">                |</span><span style="--shiki-default:#6F42C1">    1.00</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="20"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Inflated</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#D73A49">         |</span><span style="--shiki-default:#6F42C1">    7.46</span><span style="--shiki-default:#032F62"> GiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="21"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Commits</span><span style="--shiki-default:#D73A49">             |</span><span style="--shiki-default:#6F42C1">   57.53</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="22"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Trees</span><span style="--shiki-default:#D73A49">               |</span><span style="--shiki-default:#6F42C1">    2.33</span><span style="--shiki-default:#032F62"> GiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="23"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Blobs</span><span style="--shiki-default:#D73A49">               |</span><span style="--shiki-default:#6F42C1">    5.07</span><span style="--shiki-default:#032F62"> GiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="24"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">                |</span><span style="--shiki-default:#6F42C1">  737.48</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="25"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Disk</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#D73A49">             |</span><span style="--shiki-default:#6F42C1">  181.37</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="26"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Commits</span><span style="--shiki-default:#D73A49">             |</span><span style="--shiki-default:#6F42C1">   33.11</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="27"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Trees</span><span style="--shiki-default:#D73A49">               |</span><span style="--shiki-default:#6F42C1">   40.58</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="28"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Blobs</span><span style="--shiki-default:#D73A49">               |</span><span style="--shiki-default:#6F42C1">  107.11</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="29"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">                |</span><span style="--shiki-default:#6F42C1">  582.67</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="30"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#D73A49">                           |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="31"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> *</span><span style="--shiki-default:#032F62"> Largest</span><span style="--shiki-default:#032F62"> objects</span><span style="--shiki-default:#D73A49">         |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="32"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Commits</span><span style="--shiki-default:#D73A49">               |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="33"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Maximum</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#24292E">    [1] </span><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   17.23</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="34"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Maximum</span><span style="--shiki-default:#032F62"> parents</span><span style="--shiki-default:#24292E"> [2] </span><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">      10</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="35"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Trees</span><span style="--shiki-default:#D73A49">                 |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="36"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Maximum</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#24292E">    [3] </span><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   58.85</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="37"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Maximum</span><span style="--shiki-default:#032F62"> entries</span><span style="--shiki-default:#24292E"> [4] </span><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">    1.18</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="38"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Blobs</span><span style="--shiki-default:#D73A49">                 |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="39"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Maximum</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#24292E">    [5] </span><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> 1019.51</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="40"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">                  |</span><span style="--shiki-default:#D73A49">             |
</span></span><span class="line" line="41"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Maximum</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#24292E">    [6] </span><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">    7.13</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span style="--shiki-default:#24292E">[1] </span><span style="--shiki-default:#6F42C1">f6ecb603ff8af608a417d7724727d6bc3a9dbfdf
</span></span><span class="line" line="44"><span style="--shiki-default:#24292E">[2] 16d7601e176cd53f3c2f02367698d06b85e08879
</span></span><span class="line" line="45"><span style="--shiki-default:#24292E">[3] 203ee97047731b9fd3ad220faa607b6677861a0d
</span></span><span class="line" line="46"><span style="--shiki-default:#24292E">[4] 203ee97047731b9fd3ad220faa607b6677861a0d
</span></span><span class="line" line="47"><span style="--shiki-default:#24292E">[5] aa96f8bc361fd84a1459440f1e7de02ab0dc3543
</span></span><span class="line" line="48"><span style="--shiki-default:#24292E">[6] 07e38db6a5a03690034d27104401f6c8ea40f1fc
</span></span></code></pre><p>Mit diesen Informationen ist die Funktionsparität mit git-sizer(1) nahezu erreicht. Ganz fertig ist die Arbeit aber noch nicht – geplant sind weitere Features wie:</p><ul><li>Severity Levels wie sie in git-sizer(1) existieren</li><li>Graphen, die die Verteilung der Objektgrößen visualisieren</li><li>Die Möglichkeit, Objekte zu scannen, die über eine Teilmenge von Referenzen erreichbar sind</li></ul><p><em>Dieses Projekt wurde von <a href="https://gitlab.com/justintobler" rel="">Justin Tobler</a> geleitet.</em></p><h2 id="neue-infrastruktur-für-repository-wartung">Neue Infrastruktur für Repository-Wartung</h2><p>Beim Schreiben von Daten in ein Git-Repository entstehen in der Regel weitere Loose-Objekte. Ohne Verwaltung führt dies zu einer großen Anzahl separater Dateien im Verzeichnis <code className="">.git/objects/</code>, was mehrere Operationen verlangsamt, die auf viele Objekte gleichzeitig zugreifen wollen. Git packt diese Objekte daher regelmäßig in &quot;Packfiles&quot;, um eine gute Performance sicherzustellen.</p><p>Das ist aber nicht die einzige Datenstruktur, die im Laufe der Zeit ineffizient werden kann: Das Aktualisieren von Referenzen kann Loose-Referenzen erzeugen, Reflogs müssen getrimmt, Worktrees können veralten, und Caches wie Commit-Graphen müssen regelmäßig aktualisiert werden.</p><p>All diese Aufgaben wurden historisch von <a href="https://git-scm.com/docs/git-gc" rel="">git-gc(1)</a> verwaltet. Dieses Tool hat jedoch eine monolithische Architektur, in der es im Grunde alle erforderlichen Aufgaben sequenziell ausführt. Diese Grundlage ist schwer erweiterbar und bietet wenig Flexibilität, wenn die Wartung leicht angepasst werden soll.</p><p>Das Git-Projekt führte in Git 2.29 das neue Tool <a href="https://git-scm.com/docs/git-maintenance" rel="">git-maintenance(1)</a> ein. Im Gegensatz zu git-gc(1) ist git-maintenance(1) nicht monolithisch, sondern um Tasks herum strukturiert. Diese Tasks sind frei konfigurierbar, sodass kontrolliert werden kann, welche Tasks ausgeführt werden, was eine deutlich feinere Kontrolle über die Repository-Wartung ermöglicht.</p><p>Schließlich wurde Git standardmäßig auf git-maintenance(1) umgestellt. Zu Beginn war allerdings der einzige standardmäßig aktivierte Task der git-gc(1)-Task, der – wie der Name vermuten lässt – einfach <code className="">git gc</code> ausführt. Um die Wartung manuell mit dem neuen Befehl auszuführen, kann <code className="">git maintenance run</code> aufgerufen werden, aber Git führt dies auch automatisch nach verschiedenen anderen Befehlen aus.</p><p>In den letzten Releases wurden alle einzelnen Tasks implementiert, die von git-gc(1) unterstützt werden, auch in git-maintenance(1), um Funktionsparität zwischen den beiden Tools sicherzustellen.</p><p>Darüber hinaus wurde ein neuer Task implementiert, der Gits moderne Architektur für das Repacking von Objekten mit <a href="https://git-scm.com/docs/git-repack#Documentation/git-repack.txt---geometricfactor" rel="">Geometric Compaction</a> nutzt. Geometric Compaction eignet sich deutlich besser für große Monorepos, und mit den Arbeiten zur Kompatibilität mit Partial Clones, <a href="https://about.gitlab.com/de-de/blog/whats-new-in-git-2-53-0/#geometric-repacking-support-with-promisor-remotes" rel="">die in Git 2.53 eingeflossen sind</a>, stellen sie jetzt einen vollständigen Ersatz für die bisherige Repacking-Strategie in Git dar.</p><p>Mit Git 2.54 wurde nun ein weiterer bedeutender Meilenstein erreicht: Statt der bisherigen git-gc(1)-basierten Strategie wird jetzt standardmäßig Geometric Repacking mit feingranularen individuellen Wartungs-Tasks verwendet! Neben der höheren Effizienz für große Monorepos stellt dies auch eine einfachere Grundlage für zukünftige Weiterentwicklungen sicher.</p><p><em>Die git-maintenance(1)-Infrastruktur wurde ursprünglich von <a href="https://github.com/derrickstolee" rel="">Derrick Stolee</a> implementiert, und Geometric Maintenance wurde von <a href="https://github.com/ttaylorr" rel="">Taylor Blau</a> eingeführt. Die Arbeit zur Einführung der neuen feingranularen Tasks und die Migration zur neuen Wartungsstrategie wurde von <a href="https://gitlab.com/pks-gitlab" rel="">Patrick Steinhardt</a> geleitet.</em></p><h2 id="weiterlesen">Weiterlesen</h2><p>Dieser Artikel hat nur einige der Beiträge hervorgehoben, die von GitLab und der breiteren Git-Community zu diesem aktuellen Release geleistet wurden. Weitere Informationen dazu finden sich in der <a href="https://lore.kernel.org/git/xmqqa4uxsjrs.fsf@gitster.g/T/#u" rel="">offiziellen Release-Ankündigung</a> des Git-Projekts. Außerdem lohnt sich ein Blick in die <a href="https://about.gitlab.com/blog/tags/git/" rel="">früheren Git-Release-Blogposts</a>, um weitere vergangene Highlights der Beiträge von GitLab-Teammitgliedern zu sehen.</p><style>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>Patrick Steinhardt</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/patrick-steinhardt/</uri>
        </author>
        <published>2026-04-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[KI entdeckt Zero-Days schneller, als Teams reagieren können: So bereitet man die Pipeline vor]]></title>
        <id>https://about.gitlab.com/de-de/blog/prepare-your-pipeline-for-ai-discovered-zero-days/</id>
        <link href="https://about.gitlab.com/de-de/blog/prepare-your-pipeline-for-ai-discovered-zero-days/"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Anthropics <a href="https://red.anthropic.com/2026/mythos-preview/" rel="">Mythos-Preview-Modell</a>
hat kürzlich Tausende von Zero-Day-Schwachstellen in allen wichtigen
Betriebssystemen und Webbrowsern identifiziert – darunter ein OpenBSD-Fehler,
der 27 Jahre lang unentdeckt blieb. In Tests verknüpfte Mythos autonom vier
Schwachstellen zu einem funktionierenden Browser-Exploit, der seine Sandbox
verließ. Anthropic schränkt den Zugang zu Mythos ein, doch der Leiter der
offensiven Cyber-Forschung des Unternehmens erwartet, dass vergleichbare
Werkzeuge innerhalb von sechs bis zwölf Monaten in Angreiferhänden sein werden.</p><p>Die Verteidigungsseite hat nicht Schritt gehalten. Ein Drittel der ausgenutzten
CVEs im ersten Halbjahr 2025 zeigte Aktivität vor oder am Tag der Offenlegung
– bevor die meisten Teams überhaupt wissen, dass es etwas zu patchen gibt. KI
komprimiert dieses Fenster weiter, beschleunigt Angreifer und überschwemmt
Teams mit Whitehat-Meldungen schneller, als sie triagiert werden können.
Defender-Werkzeuge haben sich verbessert, doch die meisten Unternehmen können
sie nicht schnell genug operationalisieren, um die Lücke zwischen Entdeckung
und Ausnutzung zu schließen.</p><p>Wenn das Fenster zwischen Offenlegung und Ausnutzung in Stunden gemessen wird,
kann das Sicherheitsteam nicht die letzte Verteidigungslinie sein. Sicherheit
muss dort greifen, wo Code in das System eintritt: in der Pipeline, bei jedem
Merge Request, durch Richtlinien durchgesetzt. Was automatisiert werden kann,
sollte automatisiert werden. Was es nicht kann, muss schneller als heute den
richtigen Menschen erreichen.</p><h2 id="bekannte-schwachstellen-übersteigen-bereits-die-remediation-kapazitäten">Bekannte Schwachstellen übersteigen bereits die Remediation-Kapazitäten</h2><p>Der Engpass ist nicht die Erkennung – sondern das Handeln im erforderlichen
Umfang auf Basis bereits bekannter Informationen. 60 % der
Sicherheitsverletzungen im Verizon DBIR 2025 betrafen die Ausnutzung bekannter
Schwachstellen, für die bereits ein Patch verfügbar war. Teams konnten sie
nicht rechtzeitig schließen.</p><p>Der Rückstand war bereits vor Mythos untragbar. Entwicklungsteams verbringen
<a href="https://about.gitlab.com/resources/developer-survey/" rel="">11 Stunden pro Monat mit der Behebung von Schwachstellen</a>
nach dem Release – statt neue Funktionen zu liefern. Über die Hälfte der
Unternehmen hat mindestens eine internetexponierte Schwachstelle offen, und der
mediane Zeitraum zur Schließung der Hälfte dieser Schwachstellen beträgt
361 Tage. Ausnutzung dauert Stunden, Remediation dauert Monate.</p><p>KI-gestützte Entwicklung vergrößert die Lücke – und Verantwortliche sind sich
dessen bewusst. Bis Juni 2025 fügte KI-generierter Code über 10.000 neue
Security-Findings pro Monat in Fortune-50-Repositories hinzu – ein zehnfacher
Anstieg gegenüber sechs Monaten zuvor. Georgia Tech identifizierte im März 2026
34 <a href="https://research.gatech.edu/bad-vibes-ai-generated-code-vulnerable-researchers-warn" rel="">CVEs mit nachweisbarem KI-Ursprung</a>,
gegenüber 6 im Januar. Diese Zahl erfasst nur die Fälle, in denen die
KI-Urheberschaft eindeutig nachweisbar ist. KI-Coding-Assistenten halluzinieren
Paketnamen, greifen auf veraltete Muster zurück und kopieren unsichere Beispiele
aus Trainingsdaten. Mehr Code, mehr Abhängigkeiten und mehr Schwachstellen pro
Zeile werden schneller erzeugt, als Sicherheitsteams sie prüfen können.</p><p>Verteidiger müssen sich ebenfalls frontier KI-Modelle zunutze machen – nicht
als externe Werkzeuge, die nachträglich an den SDLC angedockt werden, sondern
als integrale Bestandteile derselben Richtlinien, Freigaben und Audit-Trails
wie der Rest des Teams.</p><h2 id="sicherheit-im-tempo-von-ki-gestützter-entwicklung">Sicherheit im Tempo von KI-gestützter Entwicklung</h2><p>Wenn eine kritische CVE bekannt wird: Wie schnell kann das Team bestätigen,
welche Projekte betroffen sind? Wie viele Werkzeugwechsel durchläuft ein Alert,
bevor ein Entwickler mit der Behebung beginnen kann?</p><p>Teams, die am meisten von KI profitieren, haben Richtlinien,
Durchsetzungsmechanismen und Kontrollen bereits in ihre Entwicklungs-Workflows
eingebettet. KI verstärkt dieses Fundament. Sie ersetzt es nicht.</p><p><strong>Durchsetzung am Punkt der Änderung.</strong> Wenn Ausnutzungsfenster schrumpfen,
muss jede Codezeile, die in ein Repository eingeht, einen definierten
Kontrollsatz durchlaufen – keine separate Prüfung, in einem anderen Werkzeug,
durch ein anderes Team. Unternehmen benötigen die Möglichkeit,
Sicherheitsrichtlinien über alle Gruppen und Projekte hinweg durchzusetzen, mit
dem Merge Request als Durchsetzungspunkt. Richtlinien einmal definiert, überall
angewendet, Ausnahmen geprüft, genehmigt und protokolliert.</p><p><strong>Einfache Probleme vor dem Merge Request abfangen.</strong> Hardcodierte Secrets,
bekannt-vulnerable Importe und veraltete API-Aufrufe können in der IDE markiert
werden, bevor ein Commit gepusht wird. Das Abfangen zum Zeitpunkt der
Erstellung bedeutet weniger Findings, die den MR blockieren – so dass
Review-Zyklen für Findings reserviert bleiben, die komponentenübergreifenden
Kontext erfordern: Erreichbarkeit, Ausnutzbarkeit und architektonisches Risiko.</p><p><strong>Triage standardmäßig automatisiert.</strong> Sicherheit in jeden Merge Request
einzubetten erzeugt ein Volumenproblem. Mehr Scans, mehr Findings, mehr Lärm
erreicht Entwicklungsteams, die nicht geschult sind, eine erreichbare kritische
Schwachstelle von einer theoretischen zu unterscheiden. KI muss
False-Positive-Erkennung, Erreichbarkeit, Ausnutzbarkeitskontext und
Schweregradbewertung übernehmen, bevor ein Entwickler das Finding sieht –
damit die Findings, die ihn erreichen, tatsächlich seine Zeit rechtfertigen.</p><p><strong>Remediation wie jede andere Änderung verwaltet.</strong> KI-gestützte Remediation
komprimiert den Zeitrahmen zum Schließen von Schwachstellen, aber jeder
generierte Fix muss denselben Governance-Prozess durchlaufen wie eine
menschlich erstellte Änderung: Richtlinien erzwingen Scans, die richtigen
Prüfer genehmigen, und Nachweise werden aufgezeichnet. GitLabs automatisierte
Remediation schlägt jeden Fix in einem Merge Request mit einem Konfidenzwert
vor. Der MR dokumentiert, welche Richtlinie angewendet wurde, welche Scans
durchgeführt wurden, was sie gefunden haben und wer genehmigt hat. Menschlich
erstellter Code und KI-generierter Code durchlaufen denselben Prozess – mit
demselben Audit-Trail.</p><h2 id="so-sieht-eine-vorbereitete-pipeline-aus">So sieht eine vorbereitete Pipeline aus</h2><p>Ein Proof-of-Concept-Exploit für eine Schwachstelle in einem verbreiteten
Open-Source-Paket erscheint auf einer Security-Mailingliste. Es gibt noch keine
CVE, keinen NVD-Eintrag und keine Scanner-Signatur. Das Sicherheitsteam erfährt
es auf dem üblichen Weg: jemand teilt es in Slack.</p><p>Ein Security-Engineer fragt den Security-Agenten, ob das Paket verwendet wird,
welche Projekte betroffene Versionen haben und ob verwundbare Call-Pfade in der
Produktion erreichbar sind. Der Agent prüft den Dependency-Graphen jedes
Projekts, gleicht die betroffenen Versionen und Einstiegspunkte aus der Meldung
ab und gibt eine priorisierte Liste exponierter Projekte mit Details zur
Erreichbarkeit zurück. Eine manuelle Suche in Repositories oder das Warten auf
ein Scanner-Update entfällt. Die Frage „Sind wir betroffen?&quot; ist in Minuten
beantwortet.</p><p>Der Engineer startet eine Remediation-Kampagne für alle exponierten Projekte.
Der Remediation-Agent schlägt Fixes vor: Versions-Updates, wo ein gepatchtes
Release verfügbar ist, und Patches für verwundbare Call-Pfade, wo es keines
gibt. Scan-Execution-Policies sind bereits für Projekte mit
ISO-27001-Zertifizierung aktiv. Der Engineer verschärft die Regeln, um Merges
bei jedem Merge Request zu blockieren, der die betroffene Abhängigkeit einführt
oder beibehält. Eine Approval-Policy erfordert nun Security-Freigabe für jeden
Fix. Der erste vorgeschlagene Patch schlägt in der Pipeline fehl, weil ein
Integrationstest eine Regression aufdeckt. Der Agent überarbeitet den Patch auf
Basis des Testergebnisses, der zweite Versuch besteht. Das Entwicklungsteam
prüft die Änderungen, Security gibt unter der verschärften Richtlinie frei, und
Merges erfolgen über die gesamte Kampagne hinweg.</p><p>Beim nächsten Audit-Review legt das Sicherheitsteam einen Bericht vor, der
zeigt, wie Richtlinien durchgesetzt und Risiken während der Kampagne reduziert
wurden. Er enthält Scan-Ergebnisse, angewendete Richtlinien, Genehmiger und
Merge-Zeitstempel für jeden MR in jedem betroffenen Projekt. Die Nachweise
wurden automatisch während des Prozesses erzeugt – nicht im Nachhinein
zusammengestellt.</p><h2 id="handlungsfelder-jetzt-identifizieren">Handlungsfelder jetzt identifizieren</h2><p>Mythos existiert heute, und vergleichbare Modelle werden innerhalb eines Jahres
in Angreiferhänden sein. Jeder Monat bis dahin ist eine Gelegenheit, die
Software-Lieferkette zu stärken.</p><p>Diese Fragen zeigen, wo die Pipeline steht:</p><ul><li>Wie wird sichergestellt, dass Sicherheitsscans bei jedem Merge Request
durchgeführt werden – nicht nur in Projekten, in denen Teams sie konfiguriert
haben?</li><li>Wenn ein kompromittiertes Paket heute in den Dependency-Tree eingeht –
würde die Pipeline es vor dem Build abfangen?</li><li>Wenn ein Scanner ein kritisches Finding meldet: Wie viele Werkzeugwechsel
durchläuft es, bevor ein Entwickler mit der Behebung beginnt?</li><li>Wenn ein KI-Agent einen Code-Fix für eine Schwachstelle vorschlägt – welchen
Prozess durchläuft dieser Fix vor dem Erreichen der Produktion, und ist dieser
Prozess auditierbar?</li><li>Wenn Auditoren den Nachweis verlangen, dass eine bestimmte Richtlinie auf
eine bestimmte Änderung angewendet wurde – wie lange dauert die Bereitstellung?</li></ul><p>Wo diese Fragen Lücken aufzeigen, empfiehlt sich gezielte Maßnahmen.
<a href="https://about.gitlab.com/de-de/sales/" rel="">Mit einem GitLab Solutions Architect sprechen</a>
– zur Rolle von Security-Governance im Entwicklungs-Lifecycle.</p>]]></content>
        <author>
            <name>Omer Azaria</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/omer-azaria/</uri>
        </author>
        <published>2026-04-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitHubs neue Copilot-Richtlinie: Was regulierte Unternehmen jetzt prüfen müssen]]></title>
        <id>https://about.gitlab.com/de-de/blog/github-copilots-new-policy-for-ai-training-is-a-governance-wake-up-call/</id>
        <link href="https://about.gitlab.com/de-de/blog/github-copilots-new-policy-for-ai-training-is-a-governance-wake-up-call/"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitHub hat kürzlich angekündigt, wie Interaktionsdaten von Copilot-Nutzenden
künftig verwendet werden. Ab dem 24. April 2026 werden Daten aus Copilot Free,
Pro und Pro+ standardmäßig zum Training von KI-Modellen genutzt, sofern
Nutzende nicht aktiv widersprechen. Betroffen sind Eingaben, Ausgaben,
Code-Snippets und zugehöriger Kontext. Copilot Business und Enterprise sind
aufgrund bestehender Vertragskonditionen ausgenommen.</p><p>Für Unternehmen in regulierten Branchen wirft diese Änderung Fragen auf, die
über individuelle Entwicklerpräferenzen weit hinausgehen. Sie zwingt zu einer
grundlegenden Prüfung, die Führungskräfte aus Engineering und IT-Sicherheit
jedem KI-Anbieter in ihrem Stack stellen sollten: Werden unsere Daten für
KI-Training verwendet?</p><p>GitLabs Antwort lautet: Nein. GitLab trainiert KI-Modelle nicht mit
Kundendaten – auf keiner Preisstufe. KI-Anbieter sind vertraglich verpflichtet,
Kundeneingaben und -ausgaben nicht für eigene Zwecke zu verwenden. Das
<a href="https://about.gitlab.com/de-de/ai-transparency-center/" rel="">GitLab AI Transparency Center</a>
macht diese Zusage prüfbar. Eine zentrale Dokumentation zeigt, welche Modelle
welche Funktionen betreiben, wie Daten verarbeitet werden, welche
Unterauftragsverarbeiter beteiligt sind und wie lange Daten gespeichert werden.
Das AI Transparency Center dokumentiert außerdem den Compliance-Status jeder
Funktion – einschließlich der Bestätigung, dass GitLabs aktuelle KI-Funktionen
nicht als Hochrisikosysteme im Sinne des EU AI Act eingestuft werden. Diesen
Standard hat GitLab-CEO Bill Staples
<a href="https://www.linkedin.com/posts/williamstaples_gitlab-1810-agentic-ai-now-open-to-even-activity-7443280763715985408-aHxf" rel="">wiederholt bekräftigt</a>
– er spiegelt GitLabs Unternehmensmission und das
<a href="https://trust.gitlab.com/" rel="">Trust Center</a> wider.</p><h2 id="was-die-richtlinienänderung-tatsächlich-bedeutet">Was die Richtlinienänderung tatsächlich bedeutet</h2><p>GitHub gibt zudem an, dass die Daten mit verbundenen Unternehmen – darunter
Microsoft – für KI-Entwicklungszwecke geteilt werden können.</p><p>Quellcode zählt häufig zum sensibelsten geistigen Eigentum eines Unternehmens.
Er kann proprietäre Geschäftslogik abbilden, interne Systemarchitekturen
offenlegen oder Datenflüsse berühren, die strengen Aufbewahrungs- und
Zugriffsrichtlinien unterliegen. Wenn dieser Code einen KI-Assistenten
durchläuft und zum Training von Modellen verwendet wird, die auch Wettbewerbern
dienen, werden Anbieterdatenpraktiken zu einem konkreten IP-Risiko. Regulierte
Branchen weltweit – von Finanzdienstleistungen über Gesundheitswesen bis zum
öffentlichen Sektor – operieren unter Compliance-Anforderungen, die genau
diesen Punkt adressieren: dokumentierte, prüfbare Kontrolle über den Umgang
Dritter mit sensiblen Daten.</p><p>Eine Anbieterrichtlinie, die Datenstandardeinstellungen ändert, ein aktives
Widerspruchsrecht erfordert und je nach Vertragsstufe unterschiedliche
Schutzstandards bietet, erzeugt genau die Art unkontrollierbarer Variablen,
die Compliance-Teams nicht akzeptieren können. Der
<a href="https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng" rel="">Digital Operational Resilience Act (DORA)</a>
– seit Januar 2025 für europäische Finanzinstitute verbindlich – macht dies
explizit: Wesentliche Änderungen an IT-Drittanbieterbeziehungen erfordern
dokumentierte Bewertung und Nachverfolgung.</p><h2 id="was-regulierte-unternehmen-von-ki-anbietern-tatsächlich-benötigen">Was regulierte Unternehmen von KI-Anbietern tatsächlich benötigen</h2><p>Regulierte Unternehmen diskutieren nicht mehr grundsätzlich, ob KI in
Entwicklungs-Workflows eingesetzt werden soll. Der Fokus liegt darauf, dies so
zu tun, dass es gegenüber Aufsichtsbehörden, Vorständen und Kunden vertretbar
ist. Dabei sind branchenübergreifend konsistente Anforderungen sichtbar
geworden.</p><p><strong>Vertragliche Klarheit.</strong> Regulierte Unternehmen benötigen spezifische,
dokumentierte und bedingungslose Zusagen darüber, was mit ihren Daten geschieht
– nicht etwas, das je nach Vertragsstufe variiert oder eine Handlung vor einem
Stichtag erfordert.</p><p><strong>Prüfbarkeit.</strong> IT-Risikomanagement-Frameworks verlangen von Unternehmen, die
eingesetzten KI-Systeme zu verstehen und zu validieren: die Trainingsdaten
hinter diesen Modellen und die beteiligten Drittparteien. Anbieter, die diese
Fragen nicht beantworten können, erzeugen Dokumentationsrisiken für die
Organisationen, die sich auf sie stützen.</p><p><strong>Trennung von Anbieterinteressen.</strong> Wenn ein KI-Anbieter Modelle auf Basis
von Kundennutzungsdaten trainiert, werden Code und Workflows zu Eingaben für
ein System, das auch Wettbewerbern dient. Für Institutionen mit proprietären
Handelsalgorithmen, Underwriting-Modellen oder Betrugserkennungssystemen ist
das ein konkretes IP-Risiko.</p><h2 id="gitlabs-position-zur-ki-datenverwaltung">GitLabs Position zur KI-Datenverwaltung</h2><p>GitLab verwendet Kundendaten nicht zum Training von KI-Modellen. Diese Zusage
gilt auf jeder Preisstufe; KI-Anbieter sind vertraglich verpflichtet, Eingaben
und Ausgaben, die mit GitLab-Kunden verbunden sind, nicht für eigene Zwecke zu
verwenden.</p><p>Dies ist eine bewusste architektonische und richtlinienbezogene Entscheidung –
kein Merkmal einer bestimmten Preisstufe. Wie GitLabs
<a href="https://about.gitlab.com/de-de/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops/" rel="">Beitrag zur Enterprise-Unabhängigkeit</a>
festhält, ist Datenverwaltung zu einem &quot;zunehmend kritischen Faktor bei
Unternehmensentscheidungen&quot; geworden – getrieben durch nationale und regionale
Datenschutzgesetze und wachsende Bedenken hinsichtlich der Kontrolle über
sensibles geistiges Eigentum.</p><p>GitLab ist cloud-neutral und modell-neutral und unterstützt
Self-Hosted-Deployments ohne kommerzielle Bindung an einen einzelnen
Cloud-Anbieter oder ein Large Language Model. Diese Unabhängigkeit ist für
regulierte Unternehmen relevant, die Risiken durch Anbieterkonzentration
bewerten. Der
<a href="https://handbook.gitlab.com/handbook/product/ai/continuity-plan/" rel="">AI Continuity Plan</a>
dokumentiert, wie Anbieterveränderungen gehandhabt werden – einschließlich
wesentlicher Änderungen daran, wie KI-Anbieter Kundendaten behandeln. Er ist
eine direkte Antwort auf die Governance-Anforderungen unter Frameworks wie
<a href="https://handbook.gitlab.com/handbook/legal/dora/" rel="">DORA</a>.</p><h2 id="die-governance-lücke-die-ki-teams-schließen-müssen">Die Governance-Lücke, die KI-Teams schließen müssen</h2><p>GitHubs Richtlinienaktualisierung macht deutlich: Für Unternehmen in
regulierten Branchen ist das genaue Verständnis des Datenumgangs eines
KI-Werkzeugs eine Voraussetzung für dessen Einsatz. Das bedeutet, Anbietern
klare, dokumentierte Antworten auf folgende Fragen abzuverlangen:</p><ol><li>Werden unsere Daten zum Training von KI-Modellen verwendet?</li><li>Wer sind Ihre KI-Modell-Unterauftragsverarbeiter?</li><li>Was geschieht, wenn ein Anbieter seine Datenpraktiken ändert?</li><li>Lässt sich ein Deployment realisieren, das alle KI-Verarbeitung innerhalb
der eigenen Infrastruktur hält?</li><li>Welche Haftungsübernahme wird für KI-generierte Ausgaben angeboten?</li></ol><p>Anbieter, die diese Fragen klar beantworten und die Antworten in prüfbarer
Form dokumentieren, sind Anbieter, auf die sich aufbauen lässt.
<strong>Wer das nicht kann, schafft Compliance-Risiken bei jedem Policy-Update.</strong>
Wenn ein Anbieter Datenpraktiken mit 30 Tagen Ankündigungsfrist ändern kann,
ist das kein partnerschaftlicher Rahmen für regulierte Unternehmen – das ist
ein strukturelles Compliance-Risiko.</p><blockquote><p>Mehr zu GitLabs Ansatz für KI-Governance im
<a href="https://about.gitlab.com/de-de/ai-transparency-center/" rel="">GitLab AI Transparency Center</a>.</p></blockquote>]]></content>
        <author>
            <name>Allie Holland</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/allie-holland/</uri>
        </author>
        <published>2026-04-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab 18.11: Budgetkontrolle für GitLab Credits – Ausgabelimits und Nutzergrenzen]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-18-11-budget-guardrails-for-gitlab-credits/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-18-11-budget-guardrails-for-gitlab-credits/"/>
        <updated>2026-04-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Teams, die GitLab Duo Agent Platform mit On-Demand GitLab Credits nutzen, profitieren von automatisierten Workflows, die früher ganze Sprints beansprucht haben. Mit wachsender Nutzung steigt jedoch der Bedarf an Kostentransparenz – seitens Finance, Procurement und Platform-Teams, die belegen müssen, dass KI-Ausgaben begrenzt, planbar und steuerbar sind.</p><p>Eine wesentliche Hürde bei der breiteren KI-Einführung ist nicht Skepsis gegenüber der Technologie. Es ist die Unsicherheit bei der Kostenkontrolle. Ohne Ausgabeobergrenzen kann ein arbeitsintensiver Monat zu unerwarteten Kosten führen. Ohne Nutzerlimits können wenige Intensivnutzende das Credit-Kontingent des gesamten Teams aufbrauchen, bevor der Monat endet. Und ohne beides müssen Engineering-Verantwortliche, die Agentic AI weiter ausrollen wollen, aufwändigere Budgetgenehmigungsprozesse durchlaufen.</p><p>Seit der <a href="https://about.gitlab.com/blog/gitlab-duo-agent-platform-is-generally-available/" rel="">allgemeinen Verfügbarkeit</a> bietet GitLab Duo Agent Platform bereits Nutzungs-Governance und Transparenz. Mit GitLab 18.11 kommen Verbrauchssteuerung für <a href="https://about.gitlab.com/blog/introducing-gitlab-credits/" rel="">GitLab Credits</a> hinzu: Ausgabeobergrenzen und Budgetlimits, die Organisationen noch mehr Kontrolle und Transparenz über den Credit-Verbrauch geben.</p><h2 id="gitlab-credits-steuern">GitLab Credits steuern</h2><p>GitLab 18.11 führt drei Steuerungsebenen für den GitLab-Credits-Verbrauch ein: eine Ausgabenobergrenze auf Abonnementebene, Nutzerlimits auf individueller Ebene sowie Einblick in den Status und die Durchsetzung beider Limits.</p><h3 id="ausgabenobergrenze-auf-abonnementebene">Ausgabenobergrenze auf Abonnementebene</h3><p>Billing Account Manager können ab sofort eine monatliche Höchstgrenze für den Verbrauch von On-Demand GitLab Credits des gesamten Abonnements festlegen.</p><p>Funktionsweise:</p><ul><li><strong>Limit festlegen</strong> im <code className="">Customers Portal</code> unter den GitLab-Credits-Einstellungen des Abonnements.</li><li><strong>Ausgaben automatisch begrenzen.</strong> Erreicht der On-Demand-Verbrauch die Obergrenze, wird der DAP-Zugriff für alle Nutzenden des Abonnements pausiert – bis die nächste monatliche Periode beginnt.</li><li><strong>Anpassungen jederzeit möglich.</strong> Das Limit lässt sich innerhalb des Monats anheben oder deaktivieren, um den Zugriff wiederherzustellen.</li></ul><p>Das Limit wird monatlich zurückgesetzt; die konfigurierte Grenze gilt so lange, bis sie geändert wird. Da Nutzungsdaten in Intervallen synchronisiert werden – nicht in Echtzeit –, kann nach Erreichen der Obergrenze eine geringe Mehrmenge anfallen, bevor die Durchsetzung greift. Details dazu finden sich in der <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/" rel="">GitLab-Credits-Dokumentation</a>.</p><h3 id="nutzerlimits-auf-individueller-ebene">Nutzerlimits auf individueller Ebene</h3><p>Nicht alle Nutzenden verbrauchen Credits im gleichen Tempo – das ist erwartbar. Problematisch wird es, wenn ein oder zwei Intensivnutzende einen unverhältnismäßig großen Anteil des Kontingents beanspruchen und der Rest des Teams vor Monatsende keinen Zugriff mehr hat.</p><p>Individuelle Nutzerlimits verhindern, dass einzelne Nutzende mehr als ihren fairen Anteil verbrauchen:</p><ul><li><strong>Einheitliches Nutzerlimit.</strong> Ein gleiches Credit-Limit für alle Nutzenden des Abonnements lässt sich über die GitLab GraphQL API setzen. Anders als die Abonnementobergrenze gilt dieses Limit für den Gesamtverbrauch einer Person über alle Credit-Quellen hinweg.</li><li><strong>Individuelle Ausnahmen.</strong> Für differenzierte Limits können über die GraphQL API individuelle Credit-Obergrenzen für bestimmte Nutzende gesetzt werden. So lässt sich beispielsweise Staff Engineers ein höheres Kontingent einräumen, während für das breitere Team ein Standardlimit gilt.</li><li><strong>Individuelle Durchsetzung.</strong> Erreicht eine Person ihr Limit, behält sie vollen Zugriff auf GitLab. Lediglich die Duo-Agent-Platform-Nutzung via Credits wird bis zum nächsten Abrechnungszeitraum pausiert. Alle anderen arbeiten unterbrechungsfrei weiter – bis sie ihr eigenes Limit oder die Abonnementobergrenze erreichen, je nachdem, was zuerst eintritt.</li></ul><h3 id="sichtbarkeit-und-benachrichtigungen">Sichtbarkeit und Benachrichtigungen</h3><p>Wird die Abonnementobergrenze erreicht, sendet GitLab eine E-Mail-Benachrichtigung an Billing Account Manager, damit diese reagieren können: das Limit anheben, die nächste Periode abwarten oder Credits umverteilen.</p><p>Innerhalb von GitLab können Group Owner (GitLab.com) und Instanz-Administratoren (Self-Managed) einsehen, welche Nutzenden aufgrund ihres individuellen Limits gesperrt wurden, und den Zugriff durch Anpassung der Grenze über die GraphQL API wiederherstellen.</p><h2 id="warum-budgetlimits-die-ki-skalierung-ermöglichen">Warum Budgetlimits die KI-Skalierung ermöglichen</h2><p>Klare Steuerungsmechanismen sind entscheidend, wenn Organisationen ihre KI-Nutzung ausweiten. Drei Gründe:</p><h3 id="planbare-ki-budgets">Planbare KI-Budgets</h3><p>Verbrauchssteuerung für GitLab Duo Agent Platform macht KI-Ausgaben zu einer planbaren, begrenzten Budgetposition auf Basis von On-Demand GitLab Credits. Das erleichtert sowohl die Budgetfreigabe durch Finance als auch die Planung der quartalsweisen Ausgaben.</p><h3 id="governance-und-interne-kostenverrechnung">Governance und interne Kostenverrechnung</h3><p>Große Organisationen müssen KI-Ausgaben häufig internen Budgets, Kostenstellen oder Abteilungsrichtlinien zuordnen. Individuelle Nutzerlimits geben Platform-Teams einen unkomplizierten Mechanismus, Credits fair zuzuweisen und den Verbrauch auf Personenebene nachzuverfolgen. Die API-Konfiguration macht dies auch im Enterprise-Maßstab handhabbar. In Kombination mit den personenbezogenen Verbrauchsdaten aus dem GitLab-Credits-Dashboard lassen sich Verbrauchsmuster nachverfolgen – als Grundlage für interne Kostenverrechnungs- oder Budgetzuweisungsprozesse.</p><h3 id="sicherheit-beim-skalieren">Sicherheit beim Skalieren</h3><p>Viele Kunden starten GitLab Duo Agent Platform zunächst mit einer kleinen Pilotgruppe. Verbrauchssteuerung beseitigt die Risiken, die mit einer Ausweitung auf die gesamte Organisation verbunden sind. Duo Agent Platform lässt sich auf Hunderte oder Tausende von Entwicklungsteams ausrollen – mit der Gewissheit, dass eine harte Ausgabenobergrenze das Budget schützt. Wächst die Nutzung schneller als erwartet, greift das Limit – nicht eine unerwartete Rechnung.</p><h2 id="sitzplatzbasiert-vs-verbrauchsbasiert">Sitzplatzbasiert vs. verbrauchsbasiert</h2><p>Viele KI-Coding-Tools setzen auf ein sitzplatzbasiertes Preismodell. Eine feste Anzahl von Lizenzen wird zu einem einheitlichen Preis pro Nutzenden erworben. Einfach, aber unflexibel: Der Preis ist derselbe, unabhängig davon, ob jemand das Tool zehnmal täglich nutzt oder gar nicht. Wenn Anbieter zudem Premium-Modelle und verbrauchsabhängige Zusatzkosten auf die Lizenzgebühr aufschlagen, erodiert die Kostentransparenz, die das Lizenzmodell ursprünglich versprochen hat.</p><p>GitLab verfolgt einen anderen Ansatz: verbrauchsbasierte Abrechnung mit harten Limits und einem zentralen Governance-Dashboard. Das verbindet die Flexibilität, nur für tatsächliche Nutzung zu zahlen, mit der Budgetplanbarkeit durchgesetzter Ausgabengrenzen.</p><h2 id="anwendungsbeispiele">Anwendungsbeispiele</h2><p><strong>Beispiel 1: Mittelgroßes SaaS-Unternehmen mit 200 Entwicklungspersonen.</strong> Die Organisation setzt eine Abonnementobergrenze in Höhe des erwarteten On-Demand-Verbrauchs. Die VP of Engineering kann Finance gegenüber zuverlässig zusichern, dass die Duo-Agent-Platform-Ausgaben den genehmigten Betrag nicht überschreiten werden – auch während des Onboardings neuer Teams. Nähert sich die Grenze in der Monatsmitte, erhält der Billing Account Manager eine Benachrichtigung und kann entscheiden: Limit anheben oder die nächste Periode abwarten.</p><p><strong>Beispiel 2: Globales Finanzdienstleistungsunternehmen mit 2.000 Entwicklungspersonen.</strong> Das Unternehmen setzt individuelle Nutzerlimits, um einen fairen Zugang sicherzustellen. Staff Engineers, die an komplexen Refactoring-Projekten arbeiten, erhalten über die API ein höheres individuelles Kontingent; die meisten Entwicklungsteams erhalten ein Standard-Pauschalimit. Einzelne Nutzende können das Gesamtkontingent nicht erschöpfen. Das Platform-Team nutzt die personenbezogenen Verbrauchsdaten im GitLab-Credits-Dashboard für die Nachverfolgung von Verbrauchsmustern und die quartalsweise Budgetplanung.</p><h2 id="erste-schritte">Erste Schritte</h2><p>Verbrauchssteuerung ist für GitLab.com- und Self-Managed-Kunden ab GitLab 18.11 verfügbar. Die Konfiguration erfolgt je nach Geltungsbereich und Rolle an unterschiedlichen Stellen.</p><p><strong>Abonnementobergrenze</strong></p><p>Billing Account Manager setzen die Abonnementobergrenze im Customers Portal:</p><ol><li>Im <code className="">Customers Portal</code> anmelden.</li><li>Auf der Abonnementkarte zu den <strong>GitLab Credits</strong>-Einstellungen navigieren.</li><li>Die monatliche On-Demand-Credits-Obergrenze aktivieren und den gewünschten Wert eingeben.</li></ol><p><strong>Einheitliches Nutzerlimit</strong></p><p>Das einheitliche Nutzerlimit wird über die GitLab GraphQL API durch Namespace Owner (GitLab.com) oder Instanz-Administratoren (Self-Managed) gesetzt. Details zu verfügbaren Konfigurationsoberflächen finden sich in der <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/" rel="">GitLab-Credits-Dokumentation</a>.</p><p><strong>Individuelle Ausnahmen</strong></p><p>Für differenzierte Limits können Namespace Owner (GitLab.com) und Instanz-Administratoren (Self-Managed) individuelle Obergrenzen programmatisch setzen – geeignet für Automatisierungs- und Infrastructure-as-Code-Workflows.</p><p><strong>Verbrauch und Status überwachen</strong></p><ul><li><strong>Customers Portal:</strong> Detaillierter Verbrauch und Limitstatus einsehbar.</li><li><strong>GitLab.com:</strong> Group Owner können gesperrte Nutzende unter <strong>Einstellungen &gt; GitLab Credits</strong> einsehen.</li><li><strong>Self-Managed:</strong> Instanz-Administratoren können Limitstatus und gesperrte Nutzende unter <strong>Admin &gt; GitLab Credits</strong> einsehen.</li></ul><h2 id="gitlab-duo-agent-platform-bereit-für-die-skalierung">GitLab Duo Agent Platform – bereit für die Skalierung</h2><p>Verbrauchssteuerung ist ab sofort in GitLab 18.11 verfügbar. Ausgabelimits setzen, Duo Agent Platform auf weitere Teams ausrollen – und die KI-Ausgaben dabei vollständig im Griff behalten.</p><blockquote><p><a href="https://docs.gitlab.com/subscriptions/gitlab_credits/" rel="">Mehr über GitLab Credits und Verbrauchssteuerung erfahren</a>.</p></blockquote>]]></content>
        <author>
            <name>Bryan Rothwell</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/bryan-rothwell/</uri>
        </author>
        <published>2026-04-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab 18.11: KI-Agenten CI Expert und Data Analyst schließen Entwicklungslücken]]></title>
        <id>https://about.gitlab.com/de-de/blog/ci-expert-and-data-analyst-ai-agents-target-development-gaps/</id>
        <link href="https://about.gitlab.com/de-de/blog/ci-expert-and-data-analyst-ai-agents-target-development-gaps/"/>
        <updated>2026-04-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>KI generiert Code schneller, als die Systeme drum herum mithalten können. Mehr Code bedeutet mehr Merge Requests in der Warteschlange, mehr Pipelines, die konfiguriert werden müssen, mehr Fragen zur Delivery, für die niemand Zeit hat – und die meisten Tools, auf die Teams sich stützen, wurden nicht für dieses Tempo entwickelt.</p><p>In GitLab 18.11 adressieren zwei neue Foundational Agents der Duo Agent Platform konkrete Lücken im Entwicklungszyklus, die KI bislang weitgehend unberührt gelassen hat:</p><ul><li><strong>CI Expert Agent (jetzt in Beta)</strong> schließt die Lücke zwischen dem Schreiben von Code und einer laufenden Pipeline</li><li><strong>Data Analyst Agent (jetzt allgemein verfügbar)</strong> schließt die Lücke zwischen dem Ausliefern von Code und der Fähigkeit, grundlegende Fragen zur tatsächlichen Delivery zu beantworten</li></ul><p>Diese Problembereiche lassen sich nicht mit einem allgemeinen Assistenten lösen. Ein Tool außerhalb von GitLab kann eine YAML-Datei generieren oder eine Frage beantworten – es hat jedoch keine Kenntnis davon, wie Pipelines historisch performt haben, wo Fehler gehäuft auftreten oder wie die tatsächlichen MR-Durchlaufzeiten aussehen. Dieser Kontext liegt in GitLab. Diese Agenten auch.</p><h2 id="schnelles-ci-setup-mit-ci-expert-agent">Schnelles CI-Setup mit CI Expert Agent</h2><p>KI beschleunigt das Schreiben von Code erheblich. Den Code in eine laufende Pipeline zu bringen ist etwas, das die meisten Teams Tage oder Wochen später erledigen – wenn überhaupt. Das Blank-Page-Problem liegt nicht mehr im Editor. Es liegt jetzt in der <code className="">.gitlab-ci.yml</code>.</p><p>Entwicklungsteams, die CI noch nie konfiguriert haben, wissen nicht, wie Language Detection in YAML aussieht, welche Test-Befehle verwendet werden sollten oder wie das Ergebnis vor dem Push validiert wird. Teams kopieren entweder eine Konfiguration aus einem früheren Projekt, die möglicherweise nicht passt, fügen Beispiele aus der Dokumentation zusammen oder warten auf die eine Person, die es schon einmal gemacht hat. Ist diese Person nicht verfügbar, wird CI zu etwas, das man &quot;später erledigt&quot;. Aus &quot;später&quot; wird &quot;nie&quot;.</p><p>Wenn CI dauerhaft ausbleibt, zeigen sich die Folgen im gesamten Entwicklungsprozess: Änderungen werden ohne automatisierte Absicherung ausgeliefert, Regressionen tauchen in der Produktion statt in der Pipeline auf, und Arbeit häuft sich in größeren, riskanteren Batches an. Teams gewöhnen sich mit der Zeit daran, ohne strukturierte Rückkopplung zu arbeiten – auf undokumentiertes Erfahrungswissen angewiesen statt auf einen reproduzierbaren Feedback-Mechanismus, der in jeden Commit integriert ist.</p><p>CI Expert Agent, jetzt in Beta verfügbar, beseitigt diese Hürde systematisch. Der Agent analysiert das Repository, erkennt Sprache und Framework und schlägt eine funktionsfähige Build- und Test-Pipeline vor, die auf dem tatsächlichen Repository-Inhalt basiert – mit einer Erklärung jeder Entscheidung in verständlicher Sprache. Das Ziel: eine laufende Pipeline, ohne YAML manuell schreiben zu müssen.</p><p>Funktionsumfang von CI Expert Agent:</p><ul><li>Repository-bewusste Pipeline-Generierung erkennt Sprache, Framework und Test-Setup</li><li>Generiert valide, ausführbare Build- und Test-Konfigurationen</li><li>Geführter Erstkonfigurations-Ablauf mit verständlicher Erklärung jedes Schritts im Agentic Chat</li><li>Native GitLab-CI-Semantik ohne Konfigurations-Übersetzung</li></ul><p>Da der Agent innerhalb von GitLab läuft und das tatsächliche Pipeline-Verhalten über Zeit beobachtet, kann jede Verbesserung auf der Arbeitsweise der Teams aufbauen – nicht nur auf statischen Beispielen.</p><iframe src="https://player.vimeo.com/video/1183458036?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="CI/CD Expert Agent"></iframe><script src="https://player.vimeo.com/api/player.js"></script><p><br /><br /></p><p>CI Expert Agent ist verfügbar auf GitLab.com, Self-Managed und Dedicated in den Editionen Free, Premium und Ultimate – mit aktivierter Duo Agent Platform.</p><h2 id="sdlc-daten-in-natürlicher-sprache-abfragen-mit-data-analyst-agent">SDLC-Daten in natürlicher Sprache abfragen mit Data Analyst Agent</h2><p>KI hat das Tempo der Code-Auslieferung erhöht. Grundlegende Fragen dazu, wie diese Arbeit verläuft, sind dadurch nicht einfacher zu beantworten – im Gegenteil.</p><p>Wie lange liegen MRs im Review? Welche Pipelines bremsen Teams aus? Werden Deployment-Ziele tatsächlich erreicht? Diese Fragen ließen sich früher mit einem Blick auf ein Dashboard beantworten. Mit mehr Code, mehr Teams und mehr Komplexität sind die Daten zwar vorhanden – sie liegen in GitLab – der Zugriff erfordert jedoch nach wie vor das Warten auf ein Analytics-Team, eine Dashboard-Anfrage oder die Einarbeitung in GLQL.</p><p>Data Analyst Agent schließt diese Lücke. Eine Frage in natürlicher Sprache stellen – und eine sofortige Visualisierung im Agentic Chat erhalten. Keine Abfragesprache, keine Dashboard-Anfrage, kein Warten.</p><p>Der Agent beantwortet beispielsweise folgende Fragen – je nach Rolle:</p><ul><li><strong>Engineering Manager:</strong> MR-Durchlaufzeiten, Durchsatz nach Projekt, wo Reviews stocken</li><li><strong>Entwicklungsteams:</strong> Beitragsmuster, instabile Tests, die MRs blockieren, Pipeline-Geschwindigkeit</li><li><strong>DevOps- und Plattform-Teams:</strong> Pipeline-Erfolgs- und Fehlerquoten, Runner-Auslastung, Deployment-Frequenz</li><li><strong>Engineering Leadership:</strong> Deployment-Frequenz über Portfolios hinweg, Projektgesundheitsmetriken, Lead-Time-Vergleiche</li></ul><p>Mit der allgemeinen Verfügbarkeit in GitLab 18.11 deckt der Agent MRs, Issues, Projekte, Pipelines und Jobs ab – vollständige SDLC-Abdeckung, erweitert gegenüber dem Beta-Umfang. Da Data Analyst Agent direkt auf vorhandene GitLab-Daten zugreift, ist der Kontext stets aktuell – ohne eine separate Datenpipeline pflegen oder ein Drittanbieter-Tool synchron halten zu müssen. Generierte GitLab Query Language-Abfragen lassen sich überall dort kopieren und verwenden, wo GitLab Flavored Markdown unterstützt wird; ein direkter Export zu Work Items und Dashboards ist in Planung.</p><iframe src="https://player.vimeo.com/video/1183094817?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="Data Analyst agent demo"></iframe><script src="https://player.vimeo.com/api/player.js"></script><p><br /><br /></p><p>Data Analyst Agent ist verfügbar auf GitLab.com, Self-Managed und Dedicated in den Editionen Free, Premium und Ultimate – mit aktivierter Duo Agent Platform.</p><h2 id="eine-plattform-verbundener-kontext">Eine Plattform, verbundener Kontext</h2><p>Beide Agenten laufen innerhalb von GitLab und haben Zugriff auf den Code, die Pipelines, Issues und Merge Requests, die dort bereits vorhanden sind. Das unterscheidet plattformnative KI von einem externen Assistenten: Der Kontext ist stets aktuell und wächst mit der Nutzung. CI Expert Agent und Data Analyst Agent sind zwei konkrete Erweiterungen einer Plattform, auf der KI den gesamten Entwicklungszyklus unterstützt – von der Pipeline-Konfiguration über die Auslieferung bis zur Nachverfolgung.</p><blockquote><p><a href="https://about.gitlab.com/gitlab-duo/" rel="">GitLab Duo Agent Platform kostenlos testen</a> und diese KI-Agenten direkt im Entwicklungs-Workflow einsetzen.</p></blockquote>]]></content>
        <author>
            <name>Corinne Dent</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/corinne-dent/</uri>
        </author>
        <published>2026-04-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab 18.11: KI behebt SAST-Schwachstellen – automatisch und 'ready-to-merge']]></title>
        <id>https://about.gitlab.com/de-de/blog/automate-remediation-with-ready-to-merge-ai-code-fixes/</id>
        <link href="https://about.gitlab.com/de-de/blog/automate-remediation-with-ready-to-merge-ai-code-fixes/"/>
        <updated>2026-04-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>KI generiert Code schneller, als Security-Teams ihn prüfen können. Was früher ein überschaubarer Rückstand an SAST-Befunden (Static Application Security Testing) war, wächst heute mit jedem KI-assistierten Commit weiter an. Laut <a href="https://about.gitlab.com/resources/developer-survey/" rel="">GitLab DevSecOps Report 2025</a> verbringen Entwicklungsteams bereits 11 Stunden pro Monat damit, Schwachstellen nach dem Release zu beheben – also Probleme zu korrigieren, die bereits in der Produktion ausnutzbar sind, statt neue Funktionen zu liefern. Mehr manuelle Remediierung löst dieses Problem grundsätzlich nicht. <a href="https://docs.gitlab.com/user/application_security/vulnerabilities/agentic_vulnerability_resolution/" rel="">Agentic SAST Vulnerability Resolution</a> innerhalb der GitLab Duo Agent Platform ist für genau dieses Problem entwickelt worden.</p><p>Mit der allgemeinen Verfügbarkeit in GitLab 18.11 generiert Agentic SAST Vulnerability Resolution automatisch zusammenführungsbereite Code-Fixes zur Behebung von SAST-Schwachstellen:</p><ul><li>Entwicklungsteams bleiben im Arbeitsfluss</li><li>Schwachstellen werden behoben, bevor sie die Produktion erreichen</li><li>AppSec-Teams verbringen weniger Zeit mit Triage und der Nachverfolgung offener Findings</li></ul><p>GitLab 18.11 liefert darüber hinaus schnelleres SAST-Scanning, evidenzbasierte Priorisierung und klar abgegrenzte Governance-Kontrollen.</p><h2 id="auto-remediierung-ohne-unterbrechung-des-arbeitsflusses">Auto-Remediierung ohne Unterbrechung des Arbeitsflusses</h2><p>Wenn KI Code in großem Umfang generiert, verändert sich die Ausgangslage grundlegend. Ein Security-Rückstand, der früher linear wuchs, nimmt heute mit jedem modellgestützten Commit weiter zu. Mehr manuelle Kontextwechsel von Entwicklungsteams zu fordern löst dieses Problem nicht – die Mengen sind schlicht zu groß.</p><p>Agentic SAST Vulnerability Resolution verändert die Dynamik dieses Zyklus. Sobald ein SAST-Scan abgeschlossen ist, starten die Findings automatisch den <a href="https://docs.gitlab.com/user/application_security/vulnerabilities/false_positive_detection/" rel="">Erkennungsfluss für Fehlalarme (SAST False Positive Detection)</a>. Bestätigte True Positives werden direkt in den Agentic SAST Vulnerability Resolution Flow übergeben, wo GitLab Duo Agent Platform:</p><ul><li>die Schwachstelle im Kontext analysiert</li><li>einen Fix erstellt, der die Grundursache behebt</li><li>den Fix durch automatisierte Tests validiert</li></ul><p>Entwicklungsteams erhalten einen zusammenführungsbereiten MR mit einem Confidence-Score, auf dessen Basis eine fundierte Entscheidung zur Behebung getroffen werden kann. Der Sprint bleibt auf Kurs, Schwachstellen werden behoben, bevor sie die Produktion erreichen.</p><p>Zum Thema Scan-Geschwindigkeit: GitLab 18.11 führt <a href="https://docs.gitlab.com/user/application_security/sast/gitlab_advanced_sast/#incremental-scanning" rel="">inkrementelles Scanning für Advanced SAST</a> ein. Entwicklungsteams erhalten Schwachstellenergebnisse, ohne auf den Abschluss eines vollständigen Scans warten zu müssen – Pipelines bleiben durchgehend in Bewegung.</p><iframe src="https://player.vimeo.com/video/1183195999?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479%2Fembed" allow="autoplay; fullscreen; picture-in-picture" allowFullScreen frameBorder="0" style="position:absolute;top:0;left:0;width:100%;height:100%;"></iframe><h2 id="remediierung-nach-geschäftsrisiko-nicht-nach-score">Remediierung nach Geschäftsrisiko – nicht nach Score</h2><p>Eine automatisierte Remediierungspipeline funktioniert nur so gut wie das Signal, das sie antreibt. Wenn Schwachstellenscores die tatsächliche Ausnutzbarkeit nicht widerspiegeln, verlieren Entwicklungsteams das Vertrauen in das Signal – und beginnen, es zu ignorieren.</p><p>GitLab 18.11 adressiert dieses Problem auf vier Ebenen. Erstens sind <a href="https://docs.gitlab.com/user/application_security/vulnerabilities/severities/#critical-severity" rel="">Schwachstellenscores</a> jetzt im Common Vulnerability Scoring System (CVSS) 4.0 verankert – dem aktuellen Industriestandard mit differenzierteren Metriken zur Erfassung realer Ausnutzbarkeit. Der Score, den Entwicklungsteams in GitLab sehen, entspricht damit dem Stand der Technik für die Bewertung realer Risiken.</p><p>Darüber hinaus können AppSec-Teams <a href="https://docs.gitlab.com/user/application_security/policies/vulnerability_management_policy/#severity-override-policies" rel="">richtlinienbasierte Regeln</a> definieren, die Schwachstellenscores automatisch anpassen – basierend auf Signalen wie Common Vulnerabilities and Exposures (CVE), Common Weakness Enumeration (CWE) sowie Dateipfad oder Verzeichnis. Einmal konfiguriert, greifen die Schweregrad-Anpassungen sofort, sodass Entwicklungsteams an einem Rückstand arbeiten, der das tatsächliche Geschäftsrisiko widerspiegelt und nicht den unbereinigten Scanner-Output.</p><p>Die risikobasierte Steuerung endet nicht beim Rückstand. AppSec-Teams können jetzt <a href="https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/#vulnerability_attributes-object" rel="">Freigaberichtlinien konfigurieren</a>, die Merges blockieren oder warnen – basierend auf dem Known Exploited Vulnerabilities (KEV)-Status oder dem Exploit Prediction Scoring System (EPSS)-Score. Wird ein Merge blockiert, wissen Entwicklungsteams, dass dies auf realen Ausnutzbarkeitsdaten beruht.</p><p>Das <a href="https://docs.gitlab.com/user/application_security/security_dashboard/#top-10-cwes" rel="">neue Top-CWEs-Diagramm im Security-Dashboard</a> gibt Teams abschließend Einblick, welche Schwachstellenklassen in ihren Projekten am häufigsten auftreten. Statt einzelnen Findings nachzujagen, lassen sich Muster erkennen, Grundursachen priorisieren und systemische Risiken adressieren, bevor sie sich auswachsen.</p><h2 id="stärkere-security-kontrollen-bei-geringerem-operativem-aufwand">Stärkere Security-Kontrollen bei geringerem operativem Aufwand</h2><p>Eine automatisierte Remediierungspipeline ist nur so gut wie die darunterliegende Scanner-Abdeckung. Inkonsistente Scanner-Konfigurationen führen zu unvollständigen Findings – und damit zu unvollständigen Fixes.</p><p>GitLab 18.11 führt den <a href="https://docs.gitlab.com/user/permissions/#default-roles" rel="">Security Manager</a> ein – eine neue Standardrolle, die speziell für Security-Professionals entwickelt wurde. Mit dieser Rolle lassen sich Security-Scanner durchsetzen, Security-Richtlinien definieren und konfigurieren, Triage- und Remediierungs-Workflows für Schwachstellen verwalten sowie Compliance-Frameworks und Audit-Streams pflegen – ohne Code-Änderungs- oder Deployment-Berechtigungen zu benötigen. Security-Teams erhalten genau die Zugriffsrechte, die ihre Aufgaben erfordern, und keine weiteren.</p><p>Für AppSec-Teams vereinfachen <a href="https://docs.gitlab.com/user/application_security/configuration/security_configuration_profiles/" rel="">SAST-Konfigurationsprofile</a> die konsistente Scanner-Abdeckung über mehrere Projekte und Gruppen hinweg erheblich. Das Scanning wird einmalig definiert und mit einer Aktion auf alle Projekte einer Gruppe angewendet. Das manuelle Pflegen von YAML-Policy-Dateien, die Abhängigkeit von Entwicklungsteams bei der Scanner-Konfiguration und das Prüfen einzelner Projekte auf Abdeckungslücken entfällt damit.</p><h2 id="automatisierte-vulnerability-remediierung-jetzt-starten">Automatisierte Vulnerability-Remediierung – jetzt starten</h2><p>GitLab 18.11 liefert den vollständigen Vulnerability-Workflow auf einer Plattform: KI, die Schwachstellen automatisch behebt, CVSS-4.0-basierte Priorisierung, die Vulnerability-Rauschen reduziert, und Governance-Kontrollen, die Security-Teams den erforderlichen Zugriff und vollständige Abdeckung ermöglichen.</p><blockquote><p><a href="https://about.gitlab.com/free-trial/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_global_x_inbound-request_security_en_" rel="">GitLab Ultimate kostenlos testen</a> und erleben, wie GitLab Duo Agent Platform die automatisierte Remediierung direkt in den Entwicklungs-Workflow integriert.</p></blockquote><p>Für konkrete Compliance-Anforderungen empfiehlt sich die Rücksprache mit entsprechender Fachberatung.</p>]]></content>
        <author>
            <name>Alisa Ho</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/alisa-ho/</uri>
        </author>
        <published>2026-04-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Ein Leitfaden zu den Breaking Changes in GitLab 19.0]]></title>
        <id>https://about.gitlab.com/de-de/blog/a-guide-to-the-breaking-changes-in-gitlab-19-0/</id>
        <link href="https://about.gitlab.com/de-de/blog/a-guide-to-the-breaking-changes-in-gitlab-19-0/"/>
        <updated>2026-04-15T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab 17.0 enthielt 80 Breaking Changes – also inkompatible Änderungen, die beim Upgrade manuellen Anpassungsbedarf erzeugen. GitLab 18.0 hatte 27. Das bevorstehende Release GitLab 19.0 wird voraussichtlich 15 enthalten.</p><p>Wir wissen, dass die Verwaltung von Breaking Changes bei einem Major-Upgrade aufwändig ist: Es erfordert Analyse und Koordination im gesamten Unternehmen. Als Reaktion darauf haben wir eine <a href="https://docs.gitlab.com/development/deprecation_guidelines/#how-do-i-get-approval-to-move-forward-with-a-breaking-change" rel="">Genehmigungspflicht für Breaking Changes</a> eingeführt, die eine Folgenabschätzung und die Freigabe durch die Führungsebene vorschreibt, bevor ein Breaking Change umgesetzt werden kann. Dieser Prozess zeigt Wirkung, und wir sind entschlossen, die Zahl weiter zu senken.</p><p>Im Folgenden sind alle Breaking Changes in GitLab 19.0 aufgeführt, geordnet nach Deployment-Typ und Auswirkung, zusammen mit den Migrationsschritten für ein reibungsloses Upgrade.</p><h2 id="deployment-fenster">Deployment-Fenster</h2><p>Folgende Deployment-Fenster sind relevant.</p><h3 id="gitlabcom">GitLab.com</h3><p>Inkompatible Änderungen für GitLab.com sind auf diese zwei Fenster begrenzt:</p><ul><li><strong>4.–6. Mai 2026</strong> (09:00–22:00 UTC) — primäres Fenster</li><li><strong>11.–13. Mai 2026</strong> (09:00–22:00 UTC) — Ausweichfenster</li></ul><p>Viele weitere Änderungen werden im Laufe des Monats ausgerollt. Mehr zu den Breaking Changes innerhalb dieser Fenster in der <a href="https://docs.gitlab.com/update/breaking_windows/" rel="">Dokumentation zu Breaking-Change-Fenstern</a>.</p><p><strong>Hinweis:</strong> In Ausnahmefällen können Breaking Changes geringfügig außerhalb dieser Fenster fallen.</p><h3 id="gitlab-self-managed">GitLab Self-Managed</h3><p>GitLab 19.0 wird ab dem 21. Mai 2026 verfügbar sein.</p><blockquote><p>Mehr zum <a href="https://about.gitlab.com/releases/" rel="">Release-Zeitplan</a>.</p></blockquote><h3 id="gitlab-dedicated">GitLab Dedicated</h3><p>Das Upgrade auf GitLab 19.0 findet im zugewiesenen Wartungsfenster statt. Das Wartungsfenster ist im Switchboard-Portal einsehbar. GitLab Dedicated-Instanzen werden auf Release N-1 gehalten, das Upgrade auf GitLab 19.0 erfolgt daher im Wartungsfenster in der Woche ab dem 22. Juni 2026.</p><p>Auf der <a href="https://docs.gitlab.com/update/deprecations/?removal_milestone=19.0&amp;breaking_only=true" rel="">Deprecations-Seite</a> ist die vollständige Liste der für GitLab 19.0 geplanten Entfernungen zu finden. Im Folgenden wird erläutert, was kommt und wie man sich je nach Deployment darauf vorbereitet.</p><h2 id="breaking-changes">Breaking Changes</h2><p>Folgende Breaking Changes haben hohe Auswirkungen.</p><h3 id="hohe-auswirkung">Hohe Auswirkung</h3><p><strong>1. NGINX Ingress-Unterstützung durch Gateway API mit Envoy Gateway ersetzt</strong></p><p><em>GitLab Self-Managed (Helm chart)</em></p><p>Der GitLab Helm chart hat NGINX Ingress als Standard-Netzwerkkomponente gebündelt. NGINX Ingress hat im März 2026 das End-of-Life erreicht. GitLab wechselt nun zu Gateway API mit Envoy Gateway als neuem Standard.</p><p>Ab GitLab 19.0 werden Gateway API und das gebündelte Envoy Gateway zur Standard-Netzwerkkonfiguration. Falls eine Migration zu Envoy Gateway für das eigene Deployment nicht sofort möglich ist, kann das gebündelte NGINX Ingress explizit wieder aktiviert werden — es bleibt bis zur geplanten Entfernung in GitLab 20.0 verfügbar.</p><p>Diese Änderung betrifft nicht:</p><ul><li>Das im Linux-Paket enthaltene NGINX</li><li>GitLab Helm chart- und GitLab Operator-Instanzen, die einen extern verwalteten Ingress- oder Gateway-API-Controller verwenden</li></ul><p>GitLab stellt bis zur vollständigen Entfernung Best-Effort-Sicherheitswartung für den geforkten NGINX Ingress chart und die zugehörigen Builds bereit. Für einen reibungslosen Übergang empfiehlt sich eine frühzeitige Migration zur bereitgestellten Gateway-API-Lösung oder zu einem extern verwalteten Ingress-Controller.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/590800" rel="">Deprecation notice</a></p><p><strong>2. Gebündelte PostgreSQL-, Redis- und MinIO-Komponenten aus dem GitLab Helm chart entfernt</strong></p><p><em>GitLab Self-Managed (Helm chart)</em></p><p>Der GitLab Helm chart hat Bitnami PostgreSQL, Bitnami Redis und einen Fork des offiziellen MinIO-Charts gebündelt, um die Einrichtung von GitLab in Proof-of-Concept- und Testumgebungen zu erleichtern. Aufgrund von Änderungen bei Lizenzierung, Projektpflege und Verfügbarkeit öffentlicher Images werden diese Komponenten ohne Ersatz aus dem GitLab Helm chart und dem GitLab Operator entfernt.</p><p>Diese Charts sind ausdrücklich als nicht für den Produktionseinsatz geeignet dokumentiert. Ihr einziger Zweck war die Bereitstellung schneller Testumgebungen.</p><p>Wer eine Instanz mit gebündeltem PostgreSQL, Redis oder MinIO betreibt, muss vor dem Upgrade auf GitLab 19.0 der <a href="https://docs.gitlab.com/charts/installation/migration/bundled_chart_migration/" rel="">Migrationsanleitung</a> folgen, um externe Dienste zu konfigurieren. Redis und PostgreSQL aus dem Linux-Paket sind von dieser Änderung nicht betroffen.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/590797" rel="">Deprecation notice</a></p><p><strong>3. Resource Owner Password Credentials (ROPC) OAuth Grant entfernt</strong></p><p><em>GitLab.com | Self-Managed | Dedicated</em></p><p>Die Unterstützung für den Resource Owner Password Credentials (ROPC) Grant als OAuth-Flow wird in GitLab 19.0 vollständig entfernt. Dies entspricht dem OAuth RFC Version 2.1-Standard, der ROPC aufgrund seiner inhärenten Sicherheitsschwächen entfernt.</p><p>GitLab hat seit dem 8. April 2025 bereits eine Client-Authentifizierung für ROPC auf GitLab.com vorgeschrieben. In Version 18.0 wurde eine Administrator-Einstellung hinzugefügt, die einen kontrollierten Opt-out vor der Entfernung ermöglicht.</p><p>Nach dem Upgrade auf 19.0 kann ROPC unter keinen Umständen mehr verwendet werden, auch nicht mit Client-Credentials. Alle Anwendungen oder Integrationen, die diesen Grant-Typ verwenden, müssen vor dem Upgrade auf einen unterstützten OAuth-Flow migrieren — beispielsweise den Authorization Code Flow.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/457353" rel="">Deprecation notice</a></p><p><strong>4. PostgreSQL 16 nicht mehr unterstützt — PostgreSQL 17 ist das neue Minimum</strong></p><p><em>GitLab Self-Managed</em></p><p>GitLab folgt einem <a href="https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/data-access/database-framework/postgresql-upgrade-cadence/" rel="">jährlichen Upgrade-Rhythmus für PostgreSQL</a>. In GitLab 19.0 wird PostgreSQL 17 zur Mindestanforderung, die Unterstützung für PostgreSQL 16 wird eingestellt.</p><p>PostgreSQL 17 ist ab GitLab 18.9 verfügbar und kann jederzeit vor dem 19.0-Release upgradet werden.</p><p>Bei Instanzen mit einer einzelnen, über das Linux-Paket installierten PostgreSQL-Instanz wird beim Upgrade auf 18.11 möglicherweise ein automatisches Upgrade auf PostgreSQL 17 durchgeführt. Für das Upgrade ist ausreichend freier Speicherplatz einzuplanen.</p><p>Bei Instanzen mit PostgreSQL Cluster oder solchen, die das automatische Upgrade deaktivieren, ist vor dem Upgrade auf GitLab 19.0 ein manuelles Upgrade auf PostgreSQL 17 erforderlich.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/589774" rel="">Deprecation notice</a> | <a href="https://docs.gitlab.com/omnibus/settings/database/#upgrade-packaged-postgresql-server" rel="">Upgrade-Anleitung</a></p><h3 id="mittlere-auswirkung">Mittlere Auswirkung</h3><p>Folgende Breaking Changes haben mittlere Auswirkungen.</p><p><strong>1. Linux-Paket-Unterstützung für Ubuntu 20.04 eingestellt</strong></p><p><em>GitLab Self-Managed</em></p><p>Der Standard-Support für Ubuntu 20.04 endete im Mai 2025. Gemäß der <a href="https://docs.gitlab.com/install/package/#supported-platforms" rel="">Richtlinie für unterstützte Plattformen im Linux-Paket</a> werden Pakete eingestellt, sobald ein Anbieter den Support für das Betriebssystem beendet.</p><p>Ab GitLab 19.0 werden keine Pakete mehr für Ubuntu 20.04 bereitgestellt. GitLab 18.11 ist das letzte Release mit Linux-Paketen für diese Distribution.</p><p>Wer GitLab derzeit auf Ubuntu 20.04 betreibt, muss vor dem Upgrade auf GitLab 19.0 auf Ubuntu 22.04 oder ein anderes <a href="https://docs.gitlab.com/install/package/#supported-platforms" rel="">unterstütztes Betriebssystem</a> wechseln. Canonical stellt eine <a href="https://documentation.ubuntu.com/server/how-to/software/upgrade-your-release/" rel="">Upgrade-Anleitung</a> für die Migration bereit.</p><p><a href="https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/8915" rel="">Deprecation notice</a></p><p><strong>2. Unterstützung für Redis 6 entfernt</strong></p><p><em>GitLab Self-Managed</em></p><p>In GitLab 19.0 wird die Unterstützung für Redis 6 entfernt. Instanzen mit einem externen Redis-6-Deployment müssen vor dem Upgrade auf Redis 7.2 oder Valkey 7.2 migrieren; Valkey 7.2 ist ab GitLab 18.9 in der Beta verfügbar, die allgemeine Verfügbarkeit ist für GitLab 19.0 geplant.</p><p>Das im Linux-Paket enthaltene Redis verwendet seit GitLab 16.2 Redis 7 und ist nicht betroffen. Handlungsbedarf besteht nur bei Instanzen mit einem externen Redis-6-Deployment.</p><p>Migrationsressourcen für gängige Plattformen:</p><ul><li><strong>AWS ElastiCache:</strong> Upgrade auf <a href="https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/supported-engine-versions.html" rel="">Redis 7.2 oder Valkey 7.2</a></li><li><strong>GCP Memorystore:</strong> Upgrade auf <a href="https://cloud.google.com/memorystore/docs/redis/supported-versions" rel="">Redis 7.2 oder Valkey 7.2</a></li><li><strong>Azure Cache for Redis:</strong> Managed Redis 7.2 oder Valkey 7.2 ist auf Azure noch nicht verfügbar. Als Alternative kann ein selbstgehostetes Deployment auf Azure VMs oder AKS genutzt werden, oder die Linux-Paket-Installation, die Valkey 7.2 mit GitLab 19.0 GA unterstützen wird.</li><li><strong>Self-hosted:</strong> Upgrade der Redis-6-Instanz auf Redis 7.2 oder Valkey 7.2.</li></ul><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/585839" rel="">Deprecation notice</a> | <a href="https://docs.gitlab.com/install/requirements/" rel="">Anforderungsdokumentation</a></p><p><strong>3. <code className="">heroku/builder:22</code>-Image durch <code className="">heroku/builder:24</code> ersetzt</strong></p><p><em>GitLab.com | Self-Managed | Dedicated</em></p><p>Das Cloud-Native-Buildpack (CNB) Builder-Image in Auto DevOps wurde auf <code className="">heroku/builder:24</code> aktualisiert. Betroffen sind Pipelines, die das <a href="https://gitlab.com/gitlab-org/cluster-integration/auto-build-image" rel=""><code className="">auto-build-image</code></a> der <a href="https://docs.gitlab.com/topics/autodevops/stages/#auto-build" rel="">Auto Build-Stage von Auto DevOps</a> verwenden.</p><p>Die meisten Workloads sind nicht betroffen. Für einige Nutzende kann dies jedoch ein Breaking Change sein. Vor dem Upgrade sollten die <a href="https://devcenter.heroku.com/articles/heroku-24-stack#what-s-new" rel="">Heroku-24-Stack-Release-Notes</a> und <a href="https://devcenter.heroku.com/articles/heroku-24-stack#upgrade-notes" rel="">Upgrade-Hinweise</a> geprüft werden.</p><p>Wer nach GitLab 19.0 weiterhin <code className="">heroku/builder:22</code> verwenden möchte, setzt die CI/CD-Variable <code className="">AUTO_DEVOPS_BUILD_IMAGE_CNB_BUILDER</code> auf <code className="">heroku/builder:22</code>.</p><p><a href="https://gitlab.com/gitlab-org/cluster-integration/auto-build-image/-/issues/79" rel="">Deprecation notice</a></p><p><strong>4. Mattermost aus dem Linux-Paket entfernt</strong></p><p><em>GitLab Self-Managed</em></p><p>In GitLab 19.0 wird das gebündelte Mattermost aus dem Linux-Paket entfernt. Mattermost wurde seit 2015 mit GitLab gebündelt, verfügt inzwischen aber über ausgereifte eigenständige Deployment-Optionen. Mit Mattermost v11 wurde zudem <a href="https://forum.mattermost.com/t/mattermost-v11-changes-in-free-offerings/25126" rel="">GitLab SSO aus dem kostenlosen Angebot entfernt</a>, was den Mehrwert der gebündelten Integration verringert.</p><p>Wer das gebündelte Mattermost nicht verwendet, ist nicht betroffen. Bei Bedarf steht in der Mattermost-Dokumentation eine Anleitung zur <a href="https://docs.mattermost.com/administration-guide/onboard/migrate-gitlab-omnibus.html" rel="">Migration von GitLab Omnibus zu Mattermost Standalone</a> zur Verfügung.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/590798" rel="">Deprecation notice</a></p><p><strong>5. Linux-Paket-Unterstützung für SUSE-Distributionen eingestellt</strong></p><p><em>GitLab Self-Managed</em></p><p>In GitLab 19.0 wird die Linux-Paket-Unterstützung für SUSE-Distributionen eingestellt. Betroffen sind:</p><ul><li>openSUSE Leap 15.6</li><li>SUSE Linux Enterprise Server 12.5</li><li>SUSE Linux Enterprise Server 15.6</li></ul><p>GitLab 18.11 ist das letzte Release mit Linux-Paketen für diese Distributionen. Der empfohlene Weg ist eine Migration zu einem <a href="https://docs.gitlab.com/install/docker/installation/" rel="">Docker-Deployment von GitLab</a> auf der bestehenden Distribution — so ist kein Wechsel des Betriebssystems nötig, um weiterhin Upgrades zu erhalten.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/590801" rel="">Deprecation notice</a></p><h3 id="geringe-auswirkung">Geringe Auswirkung</h3><p>Folgende Breaking Changes haben geringe Auswirkungen.</p><p><strong>1. Spamcheck aus Linux-Paket und GitLab Helm chart entfernt</strong></p><p><em>GitLab Self-Managed</em></p><p>In GitLab 19.0 wird <a href="https://docs.gitlab.com/administration/reporting/spamcheck/" rel="">Spamcheck</a> aus dem Linux-Paket und dem GitLab Helm chart entfernt. Es ist in erster Linie für große öffentliche Instanzen relevant — ein Sonderfall in der GitLab-Kundenbasis. Die Entfernung reduziert die Paketgröße und den Abhängigkeits-Footprint für die Mehrheit der Nutzenden.</p><p>Wer Spamcheck nicht verwendet, ist nicht betroffen. Wer das gebündelte Spamcheck nutzt, kann es separat über <a href="https://gitlab.com/gitlab-org/gl-security/security-engineering/security-automation/spam/spamcheck" rel="">Docker</a> bereitstellen. Eine Datenmigration ist nicht erforderlich.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/590796" rel="">Deprecation notice</a></p><p><strong>2. Slack-Slash-Commands-Integration entfernt</strong></p><p><em>GitLab Self-Managed | Dedicated</em></p><p>Die <a href="https://docs.gitlab.com/user/project/integrations/slack_slash_commands/" rel="">Slack-Slash-Commands-Integration</a> wird zugunsten der <a href="https://docs.gitlab.com/user/project/integrations/gitlab_slack_application/" rel="">GitLab for Slack-App</a> eingestellt, die eine sicherere Integration mit denselben Funktionen bietet.</p><p>Ab GitLab 19.0 können Slack Slash Commands nicht mehr konfiguriert oder verwendet werden. Diese Integration existiert nur in GitLab Self-Managed und GitLab Dedicated — GitLab.com-Nutzende sind nicht betroffen.</p><p>Ob die eigene Instanz betroffen ist, lässt sich mit der <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/569345#am-i-impacted" rel="">Betroffenheitsprüfung</a> feststellen.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/569345" rel="">Deprecation notice</a></p><p><strong>3. Bitbucket-Cloud-Import über API unterstützt keine App-Passwörter mehr</strong></p><p><em>GitLab.com | Self-Managed | Dedicated</em></p><p>Atlassian hat App-Passwörter (Benutzername-Passwort-Authentifizierung) für Bitbucket Cloud eingestellt und angekündigt, dass diese Authentifizierungsmethode ab dem 9. Juni 2026 nicht mehr funktioniert.</p><p>Ab GitLab 19.0 erfordert der Import von Repositories aus Bitbucket Cloud über die GitLab API <a href="https://support.atlassian.com/organization-administration/docs/understand-user-api-tokens/" rel="">User-API-Tokens</a> anstelle von App-Passwörtern. Nutzende, die aus Bitbucket Server oder über die GitLab-Benutzeroberfläche aus Bitbucket Cloud importieren, sind nicht betroffen.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/588961" rel="">Deprecation notice</a> | <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/588961#am-i-impacted" rel="">Betroffenheitsprüfung</a></p><p><strong>4. Trending-Tab auf der Seite „Projekte erkunden&quot; entfernt</strong></p><p><em>GitLab.com | Self-Managed | Dedicated</em></p><p>Der Tab <strong>Trending</strong> unter <strong>Erkunden &gt; Projekte</strong> und die zugehörigen GraphQL-Argumente werden in GitLab 19.0 entfernt. Der Trending-Algorithmus berücksichtigt nur öffentliche Projekte und ist daher für Self-Managed-Instanzen, die hauptsächlich interne oder private Projektsichtbarkeit verwenden, nicht zielführend.</p><p>Im Monat vor dem GitLab-19.0-Release wird der Tab <strong>Trending</strong> auf GitLab.com auf den Tab <strong>Aktiv</strong>, sortiert nach Sternen in absteigender Reihenfolge, weitergeleitet.</p><p>Ebenfalls entfernt: das <code className="">trending</code>-Argument in den GraphQL-Typen <code className="">Query.adminProjects</code>, <code className="">Query.projects</code> und <code className="">Organization.projects</code>.</p><p><a href="https://gitlab.com/groups/gitlab-org/-/work_items/18493" rel="">Deprecation notice</a></p><p><strong>5. Container-Registry-Speichertreiber-Updates</strong></p><p><em>GitLab Self-Managed</em></p><p>Zwei ältere Container-Registry-Speichertreiber werden in GitLab 19.0 ersetzt:</p><ul><li><strong>Azure-Speichertreiber:</strong> Der ältere <code className="">azure</code>-Treiber wird zu einem Alias für den neuen <code className="">azure_v2</code>-Treiber. Es ist keine manuelle Aktion erforderlich, eine proaktive Migration wird jedoch für verbesserte Zuverlässigkeit und Leistung empfohlen. Migrationsschritte sind in der <a href="https://docs.gitlab.com/administration/packages/container_registry/#use-object-storage" rel="">Object-Storage-Dokumentation</a> beschrieben. <a href="https://gitlab.com/gitlab-org/gitlab/-/issues/523096" rel="">Deprecation notice</a></li><li><strong>S3-Speichertreiber (AWS SDK v1):</strong> Der ältere <code className="">s3</code>-Treiber wird zu einem Alias für den neuen <code className="">s3_v2</code>-Treiber. Der <code className="">s3_v2</code>-Treiber unterstützt Signature Version 2 nicht — eine vorhandene <code className="">v4auth: false</code>-Konfiguration wird transparent ignoriert. Vor dem Upgrade ist eine Migration auf Signature Version 4 erforderlich. <a href="https://gitlab.com/gitlab-org/gitlab/-/issues/523095" rel="">Deprecation notice</a></li></ul><p><strong>6. <code className="">ciJobTokenScopeAddProject</code>-GraphQL-Mutation entfernt</strong></p><p><em>GitLab.com | Self-Managed | Dedicated</em></p><p>Die <code className="">ciJobTokenScopeAddProject</code>-GraphQL-Mutation wird zugunsten von <code className="">ciJobTokenScopeAddGroupOrProject</code> eingestellt, das zusammen mit den CI/CD-Job-Token-Scope-Änderungen in GitLab 18.0 eingeführt wurde. Automatisierungen oder Tools, die die veraltete Mutation verwenden, müssen vor dem Upgrade aktualisiert werden.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/474175" rel="">Deprecation notice</a></p><p><strong>7. <code className="">ci_job_token_scope_enabled</code>-Attribut der Projects API entfernt</strong></p><p><em>GitLab.com | Self-Managed | Dedicated</em></p><p>Das Attribut <code className="">ci_job_token_scope_enabled</code> in der <a href="https://docs.gitlab.com/api/projects/" rel="">Projects REST API</a> wird in GitLab 19.0 entfernt. Das Attribut wurde in GitLab 18.0 eingestellt, als die zugrundeliegende Einstellung entfernt wurde, und hat seitdem stets <code className="">false</code> zurückgegeben.</p><p>Zur Steuerung des CI/CD-Job-Token-Zugriffs werden die <a href="https://docs.gitlab.com/ci/jobs/ci_job_token/#control-job-token-access-to-your-project" rel="">CI/CD-Job-Token-Projekteinstellungen</a> verwendet.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/423091" rel="">Deprecation notice</a></p><p><strong>8. Paginierungslimit für nicht authentifizierte Projects-API auf GitLab.com eingeführt</strong></p><p><em>GitLab.com</em></p><p>Zur Sicherstellung der Plattformstabilität und konsistenten Leistung wird für alle nicht authentifizierten Anfragen an die Projects-List-REST-API auf GitLab.com ein maximales Offset-Limit von 50.000 eingeführt. Beispielsweise ist der <code className="">page</code>-Parameter bei 20 Ergebnissen pro Seite auf 2.500 Seiten begrenzt.</p><p>Workflows, die Zugriff auf mehr Daten benötigen, müssen keyset-basierte Paginierungsparameter verwenden. Dieses Limit gilt nur für GitLab.com. In GitLab Self-Managed und GitLab Dedicated ist das Offset-Limit standardmäßig deaktiviert und hinter einem Feature-Flag verfügbar.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/585176" rel="">Deprecation notice</a></p><h2 id="ressourcen-zur-folgenabschätzung">Ressourcen zur Folgenabschätzung</h2><p>GitLab stellt spezifische Tools bereit, mit denen sich die Auswirkungen der geplanten Änderungen auf die eigene GitLab-Instanz analysieren lassen. Nach der Folgenabschätzung empfiehlt sich die Prüfung der Migrationsschritte in der jeweiligen Dokumentation für einen reibungslosen Übergang zu GitLab 19.0.</p><p><strong><a href="https://gitlab.com/gitlab-com/support/toolbox/gitlab-detective" rel="">GitLab Detective</a> (nur Self-Managed):</strong> Dieses experimentelle Tool prüft eine GitLab-Installation automatisch auf bekannte Probleme, indem es Konfigurationsdateien und Datenbankwerte analysiert. Hinweis: Es muss direkt auf den GitLab-Nodes ausgeführt werden.</p><p>Nutzende mit einem kostenpflichtigen Plan, die Fragen haben oder Unterstützung bei diesen Änderungen benötigen, können ein Support-Ticket im <a href="https://support.gitlab.com/" rel="">GitLab Support-Portal</a> eröffnen.</p><p>Kostenlose GitLab.com-Nutzende können zusätzlichen Support über Community-Ressourcen wie die <a href="https://docs.gitlab.com/" rel="">GitLab-Dokumentation</a>, das <a href="https://forum.gitlab.com/" rel="">GitLab Community Forum</a> und <a href="https://stackoverflow.com/questions/tagged/gitlab" rel="">Stack Overflow</a> erhalten.</p>]]></content>
        <author>
            <name>Martin Brümmer</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/martin-brmmer/</uri>
        </author>
        <published>2026-04-15T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab und Vertex AI auf Google Cloud: Agentenbasierte Softwareentwicklung]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-and-vertex-ai-on-google-cloud/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-and-vertex-ai-on-google-cloud/"/>
        <updated>2026-04-14T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab Duo Agent Platform verändert die Art und Weise, wie Unternehmen Software entwickeln, absichern und bereitstellen. Seit der allgemeinen Verfügbarkeit im Januar 2026 bringt die Plattform agentenbasierte KI in jede Phase des Software Development Lifecycle. Duo Agent Platform ist eine intelligente Orchestrierungsebene, auf der Softwareteams und ihre spezialisierten Agenten gemeinsam planen, programmieren, Reviews durchführen und Sicherheitslücken beheben.</p><p>Im Rahmen dieser Partnerschaft automatisiert <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> die Orchestrierung und den Lifecycle-Kontext der Softwareentwicklung – über die Integration mit Vertex AI auf Google Cloud, das die Modellebene für Agent-Aufrufe bereitstellt. Softwareteams arbeiten weiterhin mit Issues, Merge Requests, Pipelines und Security-Workflows, während die Inferenz der Google Cloud-Konfiguration folgt, die bereits definiert wurde.</p><p>Fortschritte bei den Vertex AI-Modellen von Google Cloud erweitern die Einsatzmöglichkeiten von GitLab Duo Agent Platform. Kunden erhalten eine KI-gestützte DevSecOps-Steuerungsebene in GitLab, gestützt auf eine leistungsfähige KI-Infrastruktur in Vertex AI und die flexiblen Deployment- und Integrationsoptionen von Duo Agent Platform. In Kombination ermöglicht das leistungsfähigere, kontrollierte agentenbasierte Workflows im Enterprise-Maßstab.</p><p><img alt="Konzeptionelle Darstellung der GitLab Duo Agent Platform, integriert mit Google Clouds Vertex AI, für agentenbasierte Softwareentwicklung und kontrollierte KI-Workflows" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1776165990/b7jlux9kydafncwy8spc.png" /></p><h2 id="agenten-über-den-gesamten-lifecycle-hinweg">Agenten über den gesamten Lifecycle hinweg</h2><p>Viele KI-Tools konzentrieren sich auf eine einzelne Aufgabe: Code schneller generieren. GitLab Duo Agent Platform geht weiter. Die Plattform orchestriert KI-Agenten über den gesamten Software Development Lifecycle (SDLC) – von der Planung über das Security-Review bis zur Auslieferung, teamübergreifend und über viele Projekte und Releases hinweg. In diesem Maßstab sind KI-Coding-Assistenten zwar notwendig für kontinuierliche Innovation, aber nicht ausreichend.</p><p>Einzelne Coding-Assistenten erfassen selten den vollständigen Zustand eines Projekts. Backlog-Strukturen, offene Merge Requests, fehlgeschlagene Jobs und Sicherheitsbefunde befinden sich in GitLab – aber ein separates Chat-Fenster in einem Coding-Assistenten übernimmt dieses Gesamtbild des SDLC nicht. Die Lücke zeigt sich in manuellen Übergaben, wiederholten Erklärungen an eine KI ohne Kontext und Governance-Teams, die Datenflüsse über Tools hinweg nachvollziehen müssen, die nie als einheitliches System konzipiert wurden.</p><p>GitLab Duo Agent Platform schließt diese Lücke, indem Agenten und Flows auf denselben Objekten arbeiten, die Entwicklungsteams täglich nutzen. Vertex AI liefert dabei die Modelle und Services, die diese Agenten aufrufen, wenn Google Cloud als Inferenz-Umgebung gewählt wird – wobei GitLabs AI Gateway den Zugriff vermittelt, sodass Administratoren jederzeit nachvollziehen können, was womit verbunden ist. So analysiert beispielsweise der GitLab Duo Planner Agent Backlogs, gliedert Epics in strukturierte Aufgaben und wendet Priorisierungs-Frameworks an, um Teams bei der Entscheidung zu unterstützen, was als Nächstes umgesetzt werden soll. Der Security Analyst Agent priorisiert Schwachstellen, beschreibt Risiken in verständlicher Sprache und empfiehlt Behebungsmaßnahmen in priorisierter Reihenfolge. Integrierte Flows verbinden diese Agenten zu durchgängigen Prozessen, ohne dass Entwicklungsteams jeden Übergabeschritt manuell steuern müssen.</p><p>Agentic Chat in GitLab Duo Agent Platform verbindet das Gesamterlebnis für Entwicklungsteams. Abfragen in natürlicher Sprache liefern kontextbezogene Antworten mit mehrstufigem Reasoning, das auf den vollständigen Projektzustand zugreift: Issues, Merge Requests, Pipelines, Sicherheitsbefunde und Codebase. Da GitLab als System of Record für den SDLC mit einem einheitlichen Datenmodell dient, arbeiten GitLab Duo-Agenten mit Lifecycle-Kontext, der über die Reichweite eigenständiger, toolspezifischer KI-Assistenten hinausgeht.</p><h3 id="verstärkt-durch-vertex-ai">Verstärkt durch Vertex AI</h3><p>GitLab Duo Agent Platform ist modellflexibel konzipiert und leitet verschiedene Aufgaben an verschiedene Modelle weiter – je nachdem, welches Modell für die jeweilige Aufgabe am besten geeignet ist. Diese Architekturentscheidung zahlt sich auf Google Cloud aus, wo Vertex AI als verwaltete Umgebung für Foundation Models und zugehörige Services fungiert und ein breites Modell-Ökosystem sowie verwaltete Infrastruktur bereitstellt, die die Plattformfähigkeiten erweitert.</p><p>Die neuesten Generationen von KI-Modellen, die über Vertex AI verfügbar sind, bieten deutliche Verbesserungen bei Reasoning, Tool-Nutzung und Long-Context-Verständnis gegenüber früheren Versionen – genau die Eigenschaften, auf die GitLabs Agenten bei der Arbeit mit vielen Projekten und Teams mit großen, komplexen Codebases angewiesen sind. Längere Kontextfenster und umfangreichere Tool-Integration in den zugrunde liegenden Modellen erweitern das, was Agenten in einem einzigen Durchlauf erreichen können – besonders relevant bei Aufgaben wie einer umfassenden Backlog-Analyse oder dem Security-Review von Monorepos.</p><p><a href="https://cloud.google.com/model-garden" rel="">Vertex AI Model Garden</a> bietet mit Zugang zu einer breiten Palette von Foundation Models die nötige Auswahl, um Entscheidungen auf Basis von Leistung, Kosten und regulatorischen Anforderungen zu treffen – statt an einen einzelnen Anbieter gebunden zu sein.</p><p>Darüber hinaus können GitLab-Kunden Bring Your Own Model (BYOM) für Duo Agent Platform nutzen, sodass zugelassene Anbieter und Gateways dort eingebunden werden, wo das eigene Sicherheitsmodell es vorsieht. In GitLabs <a href="https://about.gitlab.com/de-de/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/" rel="">Beitrag zum 18.9-Release über Self-Hosted Duo Agent Platform und BYOM</a> wird beschrieben, wie diese Anbindung funktioniert. Mit dieser Deployment-Option erhalten Kunden Zugang zu einem breiteren Spektrum an Modelloptionen, die sich auf den eigenen Entwicklungsprozess zuschneiden lassen: das richtige Modell für den richtigen Workflow mit den richtigen Leitplanken.</p><p>Für GitLab war die Entscheidung, auf Vertex AI zu bauen, von der Anforderung an Enterprise-taugliche Zuverlässigkeit und breite Modellverfügbarkeit getrieben. Vertex AI und Model Garden abstrahieren das LLM-Hosting vollständig – das bedeutet schnelle Versionsbereitstellung, robuste Sicherheit und strikte Governance sind in die Integration eingebaut. Über Gemini-Modelle hinaus bietet Vertex AI globalen, latenzarmen Zugang zu einem umfangreichen Katalog von Drittanbieter- und Open-Source-Modellen.</p><p>In Kombination mit Google Clouds Ansatz für Datenschutz und Modellschutz war Vertex AI die passende Wahl, um GitLabs Developer Experience der nächsten Generation zu unterstützen.</p><p>Durch die Integration von Vertex AI Model Garden in das Backend erweitert GitLab seine DevSecOps-Plattform, ohne den Nutzenden zusätzliche Komplexität aufzubürden. Entwicklungsteams müssen die zugrunde liegenden LLMs weder evaluieren noch verwalten – stattdessen nutzen sie einen optimierten, KI-gestützten Workflow für die Entwicklung ihrer Anwendungen.</p><p>GitLab abstrahiert die Cloud-Orchestrierung vollständig, sodass sich Entwicklungsteams ganz auf das Schreiben von Code konzentrieren können, während Vertex AI die unterstützenden Features und Funktionen bereitstellt.</p><h2 id="was-das-für-kunden-auf-google-cloud-bedeutet">Was das für Kunden auf Google Cloud bedeutet</h2><p>GitLab Duo Agent Platform liefert bereits heute KI-Agenten, die über den gesamten Software-Lifecycle hinweg innerhalb eines einzigen, kontrollierten System of Record arbeiten. Auf Google Cloud ermöglicht das schnelle Innovation, während Vertex AI die Modell- und Infrastrukturebene kontinuierlich weiterentwickelt.</p><p>Für Google Cloud-Kunden bedeutet diese Integration eine optimierte Softwarebereitstellung bei gleichzeitig strikter Enterprise-Governance. Für Platform-Engineering-Teams bedeutet es, zu standardisieren, welche Vertex-gestützten Modelle Vorschläge, Analysen und Behebungen innerhalb von GitLab bereitstellen – statt Dutzende clientseitiger Tools zu katalogisieren. Sicherheitsprogramme profitieren, wenn Agenten Fixes dort vorschlagen und validieren, wo Entwicklungsteams bereits Befunde bearbeiten, was Kontextwechsel reduziert und Arbeit vermeidet, die sonst in nicht verwaltete Kanäle abfließen würde.</p><p>Aus Sicht der Cloud-Ökonomie und -Governance sorgt die Steuerung der Agent-Inferenz über Vertex innerhalb von GitLab dafür, dass die Nutzung näher an den bestehenden Vereinbarungen und Kontrollen auf Google Cloud bleibt – das hilft, doppelte Ausgaben und Schattenpfade zu vermeiden, die am Einkauf vorbeilaufen.</p><p>Da Vertex AI als zugrunde liegender Infrastrukturanbieter für GitLab Duo Agent Platform dient, können Unternehmen die Produktivität ihrer Entwicklungsteams deutlich steigern – ohne den Overhead und das Risiko fragmentierter KI-Toolchains. Teams bleiben innerhalb eines einzigen, sicheren System of Record abgestimmt und können Anwendungen schneller entwickeln und mit Zuversicht ausliefern.</p><p>Die Zusammenarbeit zwischen GitLab und Google Cloud besteht seit 2018. Heute stellt sie einen der umfassendsten Wege dar, um von KI-Experimenten zu vollständig kontrollierter, agentenbasierter Softwareentwicklung auf Google Cloud zu gelangen. Da sich beide Plattformen kontinuierlich weiterentwickeln – GitLab mit erweiterter Agent-Orchestrierung und Developer-Kontext, Vertex AI mit weiter steigender Modellleistung und Agent-Infrastruktur – wird der Mehrwert für gemeinsame Kunden weiter wachsen.</p><blockquote><p><a href="https://about.gitlab.com/de-de/free-trial/" rel="">Starte eine kostenlose Testversion von GitLab Duo Agent Platform</a>, um GitLab und Vertex AI auf Google Cloud kennenzulernen.</p></blockquote>]]></content>
        <author>
            <name>Regnard Raquedan</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/regnard-raquedan/</uri>
        </author>
        <author>
            <name>Rajesh Agadi</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/rajesh-agadi/</uri>
        </author>
        <published>2026-04-14T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab als Leader im Omdia Universe 2026 ausgezeichnet]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-named-a-2026-omdia-universe-leader/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-named-a-2026-omdia-universe-leader/"/>
        <updated>2026-04-13T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab wurde als Leader im Omdia Universe 2026 für KI-gestützte Softwareentwicklung (IDE-basierte Tools) ausgezeichnet. Von den neunzehn Anbietern, die das unabhängige Analystenhaus bewertet hat, erzielte GitLab Spitzenwerte in drei Kategorien: Solution Breadth (100 %), Strategy and Innovation (88 %) und Core Features (82 %). Für Extended Features und Vendor Execution folgen ebenfalls erstklassige Bewertungen.</p><p>Die diesjährige Bewertung ist aus einem konkreten Grund bemerkenswert: Omdia hat die Bewertungskriterien erweitert und erstmals KI-Entwicklungstools nach ihrer Abdeckung des gesamten Software-Lifecycles bewertet – nicht nur nach Programmierfähigkeiten. Dieser Wandel spiegelt die aktuelle Entwicklung im KI-Bereich wider und hat die Rangfolge der Anbieter neu geordnet.</p><p><img alt="Omdia Universe chart" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775848262/asyd6bpbtwlhicqonhit.png" title="Source: Omdia, Universe: AI-assisted Software Development, Part 1: IDE-based Tools, 2026" /></p><blockquote><p><a href="https://learn.gitlab.com/c/analyst-omdia-ai?x=fRC1cQ" rel="">Den vollständigen Omdia Universe Report herunterladen.</a></p></blockquote><h2 id="über-omdia-universe">Über Omdia Universe</h2><p>Das Omdia Universe ordnet Anbieter nach Solution Capability sowie Strategy and Execution in drei Kategorien ein: Leaders (stärkste Positionierung auf beiden Achsen, für jede Shortlist empfohlen), Challengers (geringerer Funktionsumfang oder geringere Reife) und Prospects (frühe Phase oder angrenzende Anwendungsbereiche).</p><h2 id="was-ist-in-der-diesjährigen-bewertung-anders">Was ist in der diesjährigen Bewertung anders?</h2><p>Die Erweiterung der Omdia-Kriterien spiegelt wider, was Entwicklungsteams in der Praxis bereits erleben. KI-Programmierwerkzeuge haben die Entwicklerleistung deutlich gesteigert, und Anwendungen, deren Entwicklung früher Wochen dauerte, lassen sich heute in einem Bruchteil der Zeit als Prototyp umsetzen. Beschleunigung beim Programmieren führt jedoch nicht automatisch zu schnellerer Auslieferung. Review-Backlogs wachsen. Sicherheitsbefunde häufen sich an. Deployments erfordern weiterhin die Koordination zwischen Teams, die mit Tools arbeiten, die nicht aufeinander abgestimmt wurden.</p><p>Omdia hat diese Dynamik direkt erfasst: Die Plattformen, die sich absetzen, decken Testing, Security, Deployment und Orchestrierung ab – nicht nur Code-Generierung. Dieser Befund war ausschlaggebend für die Erweiterung der Bewertungskriterien und hat Leaders von Challengers unterschieden.</p><p>Eine weitere wesentliche Neuerung in diesem Jahr betrifft die Behandlung von agentischer KI. Die Bewertung 2026 gewichtet agentische Fähigkeiten als aktuelle Bewertungsdimension – nicht als Zukunftsperspektive. Berücksichtigt wird dabei, ob eine Plattform mehrere Aufgaben autonom koordinieren, Übergaben zwischen spezialisierten Agenten orchestrieren und Teams in unterschiedlichen Phasen der Agentenadoption unterstützen kann.</p><h2 id="gitlabs-bewertungen-im-überblick">GitLabs Bewertungen im Überblick</h2><p>GitLab erzielte Spitzenwerte in drei Kategorien:</p><p><strong>Solution Breadth: 100 %.</strong> Diese Kategorie bewertet, wie viele Phasen des Software-Lifecycles eine Plattform abdeckt. GitLab erzielt hier den Höchstwert: Die Plattform deckt den gesamten SDLC ab – von Planung und Anforderungen bis zu Deployment und Issue-Management, einschließlich Lifecycle-Phasen, die die meisten KI-Programmierwerkzeuge nicht erreichen. Vorgefertigte Agenten wie <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/planner/" rel="">Planner Agent</a> und <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/security_analyst_agent/" rel="">Security Analyst Agent</a> erweitern die KI-Unterstützung auf Sprint-Planung, Vulnerability-Triage und Behebungsempfehlungen – genau die Bereiche des Lifecycles, in denen Auslieferungen ins Stocken geraten.</p><p><strong>Strategy and Innovation: 88 %.</strong> Hier bewertet Omdia, wie Anbieter ihre Plattform langfristig positionieren und weiterentwickeln. GitLab differenziert durch End-to-End-Orchestrierung, Privacy-first-Architektur ohne Training auf privaten Daten und Multi-Modell-Unterstützung durch Partnerschaften mit Anthropic, Google und AWS. Teams können Modelle je nach Workload und Datenanforderungen auswählen. Der Ansatz der Plattform für einheitlichen Kontext – bei dem Agenten übergreifend an Issues, Merge Requests, Pipelines und Security-Findings zusammenarbeiten, ohne den Zustand zu verlieren – steht beispielhaft für die architektonische Innovation, die Omdia in dieser Kategorie bewertet hat.</p><p><strong>Core Features: 82 %.</strong> Diese Kategorie erfasst die Tiefe der Kernfunktionen, auf die Entwicklungsteams im Tagesgeschäft angewiesen sind. Code wird mit Echtzeit-Kontext aus IDE und Codebase generiert, über Unit-, Integrations- und Security-Dimensionen getestet und mit integrierter Priorisierung reviewt. Die DevOps-Automatisierung übernimmt CI/CD, GitOps und <a href="https://docs.gitlab.com/user/gitlab_duo_chat/examples/#troubleshoot-failed-cicd-jobs-with-root-cause-analysis" rel="">Root-Cause-Analyse</a> bei Pipeline-Fehlern. Das <a href="https://docs.gitlab.com/user/analytics/duo_and_sdlc_trends/" rel="">AI Impact Dashboard</a> bietet Teams messbare Transparenz über Cycle Times, Deployment-Frequenz und die tatsächlichen Auswirkungen von KI auf die Produktivität.</p><p>Für Extended Features (80 %) und Vendor Execution (88 %) erhielt GitLab ebenfalls erstklassige Bewertungen.</p><h2 id="die-veränderte-rolle-von-entwicklungsteams-und-ki-agenten">Die veränderte Rolle von Entwicklungsteams und KI-Agenten</h2><p>Zu den substanziellen Erkenntnissen des Omdia-Berichts gehört die sich verändernde Rolle der Softwareentwicklung neben diesen Werkzeugen. Entwicklungsteams bestehen zunehmend aus KI-Ingenieuren und ihren KI-Agenten, wobei die Ingenieure die agentische KI überwachen und steuern. Da KI-Codierung den Großteil des Codes generiert, verlagert sich die menschliche Arbeit darauf, sicherzustellen, dass technologische Anforderungen tatsächlich erfüllt werden, Qualität zu überwachen, geeignete Schutzmechanismen zu etablieren, autonome Produktionspipelines zu gestalten und zwischen Geschäftszielen und dem Einsatz agentischer KI im gesamten Software-Lifecycle zu vermitteln.</p><p>Dieser Wandel hat Auswirkungen darauf, wie Unternehmen ihre KI-Investitionen bewerten. Ein Team, das die Code-Generierung automatisiert hat, Review, Testing und Deployment aber weiterhin manuell abwickelt, hat die Softwareentwicklung noch nicht grundlegend beschleunigt. Der Produktivitätsgewinn durch schnelleres Programmieren verstärkt sich, wenn der übrige Lifecycle mithalten kann – und er schwindet, wenn er es nicht kann, da sich die Engpässe nur nachgelagert verschieben.</p><h2 id="enterprise-anforderungen-als-grundvoraussetzung">Enterprise-Anforderungen als Grundvoraussetzung</h2><p>Bemerkenswert an der Struktur der diesjährigen Omdia-Bewertung: Enterprise-Kontrollen und Schutzmechanismen sind keine Bonuskategorie mehr. Compliance-Zertifizierungen, Deployment-Flexibilität und Datenschutzarchitektur gelten als Grundvoraussetzungen für Plattformen auf Leader-Niveau – nicht als Differenzierungsmerkmale. Unternehmen in regulierten Branchen und solche mit Datensouveränitätsanforderungen gewichten diese Faktoren bereits als Einstiegskriterien.</p><p>GitLabs Positionierung in diesen Bereichen hebt sich im Markt ab: SOC 2- und ISO 27001-zertifizierte Plattform, <a href="https://about.gitlab.com/de-de/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops/" rel="">Privacy-first-Design</a> ohne Training auf privaten Kundendaten für die agentischen KI-Fähigkeiten, Self-Managed-Deployment-Unterstützung für Cloud und On-Premises (einschließlich Air-Gapped-Umgebungen) sowie Unterstützung für selbstgehostete KI-Modelle. Die Nutzung als Single-Tenant-SaaS-Anwendung über GitLab Dedicated – mit FedRAMP Moderate Authorization über GitLab Dedicated for Government – ergänzt die Deployment-Flexibilität.</p><p>Der Omdia-Bericht hat diese Eigenschaften nicht als Funktionsliste bewertet, sondern als Nachweis der Plattformreife für Unternehmen mit den höchsten Compliance-Anforderungen: Finanzdienstleistungen, öffentlicher Sektor, Gesundheitswesen und weitere regulierte Branchen, für die Datenhoheit und Auditierbarkeit nicht verhandelbar sind.</p><h2 id="reifegrad-in-der-softwareentwicklung-einordnen">Reifegrad in der Softwareentwicklung einordnen</h2><p>Für Teams, die ihren KI-Entwicklungsansatz aktiv evaluieren, ist die Empfehlung von Omdia eindeutig: GitLab gehört auf jede Shortlist.</p><p>Die entscheidendere Frage für Engineering-Verantwortliche ist nicht, welches KI-Werkzeug den besten Code generiert. Ausschlaggebend ist, ob der generierte Code mit dem erforderlichen Qualitäts-, Sicherheits- und Leistungsniveau in Produktion gebracht werden kann. Er muss von den verantwortlichen Teams verstanden, gesteuert und gewartet werden können. Mit GitLab überträgt sich die Geschwindigkeit beim Programmieren auf den gesamten Entwicklungsprozess.</p><p>Wer den Reifegrad der eigenen Organisation in der Softwareentwicklung einordnen möchte, erhält in den Assessments für <a href="https://about.gitlab.com/de-de/assessments/ai-modernization-assessment/" rel="">KI-Modernisierung</a>, <a href="https://about.gitlab.com/de-de/assessments/devops-modernization-assessment/" rel="">DevOps-Modernisierung</a> und <a href="https://about.gitlab.com/de-de/assessments/security-modernization-assessment/" rel="">Security-Modernisierung</a> eine personalisierte Bewertung und konkrete nächste Schritte.</p><p><a href="https://learn.gitlab.com/c/analyst-omdia-ai?x=fRC1cQ" rel="">Den vollständigen Omdia Universe Report herunterladen.</a></p>]]></content>
        <author>
            <name>Rebecca Carter</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/rebecca-carter/</uri>
        </author>
        <published>2026-04-13T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[5 GitLab-Pipeline-Muster für komplexe Engineering-Herausforderungen]]></title>
        <id>https://about.gitlab.com/de-de/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/</id>
        <link href="https://about.gitlab.com/de-de/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/"/>
        <updated>2026-04-09T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<h2 id="abschnitt-1-das-modell-verstehen">Abschnitt 1: Das Modell verstehen</h2><p><em>Für Engineering-Leads und Entscheidungsträger: Konzept, Anwendungsfälle und Architekturprinzipien. Konfigurationsdetails folgen in Abschnitt 2.</em></p><p>Die meisten CI/CD-Werkzeuge können einen Build ausführen und ein Deployment anstoßen. Der Unterschied zeigt sich erst dann, wenn die Delivery-Anforderungen komplexer werden: ein Monorepo mit einem Dutzend Services, Microservices über mehrere Repositories verteilt, Deployments in Dutzende von Umgebungen gleichzeitig – oder ein Platform-Team, das organisationsweite Standards durchsetzen will, ohne dabei zum Engpass zu werden.</p><p>GitLabs Pipeline-Modell wurde für genau diese Komplexität entwickelt. Parent-Child-Pipelines, DAG-Execution, dynamische Pipeline-Generierung, Multi-Project-Trigger, Merge-Request-Pipelines mit Merged-Results-Verarbeitung und CI/CD Components lösen jeweils eine eigene Klasse von Problemen. Da sich diese Bausteine kombinieren lassen, erschließt das vollständige Modell mehr als nur kürzere Pipeline-Laufzeiten.</p><p>Dieser Artikel beschreibt die fünf Muster, bei denen das Modell seine Stärken deutlich zeigt – jeweils zugeordnet zu einem konkreten Engineering-Szenario. Konfigurationen und Implementierungsdetails folgen in Abschnitt 2.</p><h3 id="_1-monorepos-parent-child-pipelines-und-dag-execution">1. Monorepos: Parent-Child-Pipelines und DAG-Execution</h3><p><strong>Das Problem:</strong> Ein Monorepo enthält Frontend, Backend und Dokumentation. Jeder Commit löst einen vollständigen Rebuild aller Komponenten aus – auch wenn sich nur eine README-Datei geändert hat.</p><p>GitLab kombiniert zwei sich ergänzende Mechanismen: <a href="https://docs.gitlab.com/ci/pipelines/downstream_pipelines/#parent-child-pipelines" rel="">Parent-Child-Pipelines</a> ermöglichen es einer übergeordneten Pipeline, isolierte Child-Pipelines zu starten. <a href="https://docs.gitlab.com/ci/yaml/#needs" rel="">DAG-Execution via <code className="">needs</code></a> bricht die starre Stage-Reihenfolge auf und startet Jobs, sobald ihre Abhängigkeiten abgeschlossen sind – nicht erst, wenn alle Jobs einer Stage fertig sind.</p><p>Eine Parent-Pipeline erkennt, welche Teile des Repos sich geändert haben, und löst ausschließlich die betroffenen Child-Pipelines aus. Jeder Service verwaltet seine eigene Pipeline-Konfiguration; Änderungen in einem Service können keine anderen beeinflussen. Damit bleibt die Komplexität beherrschbar, während das Repository und das Team wachsen.</p><p>Einen technischen Aspekt gilt es dabei zu kennen: Wenn mehrere Dateien an einen einzelnen <code className="">trigger: include:</code>-Block übergeben werden, fusioniert GitLab sie zu einer einzigen Child-Pipeline-Konfiguration. Jobs aus diesen Dateien teilen denselben Pipeline-Kontext und können sich gegenseitig per <code className="">needs:</code> referenzieren – das ist die Voraussetzung für die DAG-Optimierung. Werden die Dateien stattdessen auf separate Trigger-Jobs aufgeteilt, entsteht jeweils eine isolierte Pipeline, und dateiübergreifende <code className="">needs:</code>-Referenzen funktionieren nicht.</p><p>In großen Monorepos lassen sich Pipeline-Laufzeiten durch DAG-Execution deutlich reduzieren, da Jobs nicht mehr auf unabhängige Arbeitsschritte in derselben Stage warten.</p><h3 id="_2-microservices-cross-repo-pipelines-über-mehrere-projekte">2. Microservices: Cross-Repo-Pipelines über mehrere Projekte</h3><p><strong>Das Problem:</strong> Frontend und Backend leben in separaten Repositories. Wenn das Frontend-Team eine Änderung ausliefert, ist nicht erkennbar, ob sie die Backend-Integration beeinträchtigt – und umgekehrt.</p><p><a href="https://docs.gitlab.com/ci/pipelines/downstream_pipelines/#multi-project-pipelines" rel="">Multi-Project-Pipelines</a> ermöglichen es, aus einem Projekt heraus eine Pipeline in einem anderen Projekt auszulösen und auf das Ergebnis zu warten. Das auslösende Projekt sieht die verknüpfte Downstream-Pipeline direkt in seiner eigenen Pipeline-Ansicht.</p><p>In der Praxis erstellt die Frontend-Pipeline ein API-Contract-Artifact und veröffentlicht es, bevor die Backend-Pipeline ausgelöst wird. Das Backend ruft dieses Artifact über die <a href="https://docs.gitlab.com/api/jobs/#download-a-single-artifact-file-from-specific-tag-or-branch" rel="">Jobs API</a> ab und validiert es, bevor weitere Schritte erlaubt sind. Wird eine Breaking Change erkannt, schlägt die Backend-Pipeline fehl – und mit ihr die Frontend-Pipeline. Probleme, die bisher erst in der Produktion sichtbar wurden, werden damit im Pipeline-Prozess abgefangen. Die Abhängigkeit zwischen Services wird sichtbar, nachvollziehbar und aktiv verwaltbar.</p><p><img alt="Cross-project pipelines" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738762/Blog/Imported/hackathon-fake-blog-post-s/image4_h6mfsb.png" title="Cross-project pipelines" /> <em>Cross-project pipelines</em></p><h3 id="_3-multi-tenantmatrix-deployments-dynamische-child-pipelines">3. Multi-Tenant/Matrix-Deployments: Dynamische Child-Pipelines</h3><p><strong>Das Problem:</strong> Dieselbe Anwendung wird in 15 Kundenumgebungen, drei Cloud-Regionen oder den Stages Dev/Staging/Prod deployed. Manuelle Anpassungen je Umgebung führen zu Konfigurationsdrift. Eine separate Pipeline pro Umgebung ist von Anfang an nicht wartbar.</p><p><a href="https://docs.gitlab.com/ci/pipelines/downstream_pipelines/#dynamic-child-pipelines" rel="">Dynamische Child-Pipelines</a> generieren die Pipeline-Struktur zur Laufzeit. Ein Job führt ein Skript aus, das eine YAML-Datei erzeugt – und diese YAML-Datei wird zur Pipeline für den nächsten Schritt. Die Pipeline-Struktur selbst wird damit zu Daten.</p><p>Das Generierungsskript iteriert über eine <code className="">ENVIRONMENTS</code>-Variable, statt jede Umgebung fest zu kodieren. Eine neue Umgebung lässt sich durch Anpassen der Variable hinzufügen – ohne Änderungen an der Pipeline-Konfiguration selbst. Trigger-Jobs erben mit <code className="">extends:</code> eine gemeinsame Template-Konfiguration, sodass <code className="">strategy: depend</code> einmal definiert und nicht für jeden Trigger-Job wiederholt wird. Ein <code className="">when: manual</code>-Gate für das Produktions-Deployment ist direkt in den Pipeline-Graph integriert.</p><p>Platform-Teams nutzen dieses Muster, um Dutzende von Umgebungen zu verwalten, ohne Pipeline-Logik zu duplizieren.</p><p><img alt="Dynamic pipeline" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738765/Blog/Imported/hackathon-fake-blog-post-s/image7_wr0kx2.png" title="Dynamic pipeline" /></p><h3 id="_4-mr-first-delivery-merge-request-pipelines-merged-results-und-workflow-routing">4. MR-First-Delivery: Merge-Request-Pipelines, Merged-Results und Workflow-Routing</h3><p><strong>Das Problem:</strong> Die Pipeline läuft bei jedem Push auf jeden Branch. Aufwändige Tests werden auf Feature-Branches ausgeführt, die nie gemergt werden. Gleichzeitig gibt es keine Garantie, dass das Getestete dem entspricht, was nach dem Merge auf <code className="">main</code> tatsächlich landet.</p><p>GitLab kombiniert drei ineinandergreifende Mechanismen: <a href="https://docs.gitlab.com/ci/pipelines/merge_request_pipelines/" rel="">Merge-Request-Pipelines</a> laufen ausschließlich dann, wenn ein Merge Request existiert – nicht bei jedem Branch-Push. Allein dadurch entfällt ein erheblicher Anteil unnötiger Compute-Ausführungen. <a href="https://docs.gitlab.com/ci/pipelines/merged_results_pipelines/" rel="">Merged-Results-Pipelines</a> gehen einen Schritt weiter: GitLab erstellt einen temporären Merge-Commit aus dem Branch und dem aktuellen Ziel-Branch und führt die Pipeline dagegen aus. Getestet wird damit das tatsächliche Ergebnis des Merges – nicht der Branch in Isolation. <a href="https://docs.gitlab.com/ci/yaml/workflow/" rel="">Workflow-Rules</a> definieren schließlich, welcher Pipeline-Typ unter welchen Bedingungen ausgeführt wird. Die <code className="">$CI_OPEN_MERGE_REQUESTS</code>-Guard verhindert dabei, dass für einen Branch mit offenem MR doppelte Pipelines ausgelöst werden.</p><p>Das Ergebnis ist ein Pipeline-Verhalten, das sich je nach Kontext unterscheidet: Ein Push auf einen Feature-Branch ohne offenen MR führt nur Lint und Unit-Tests aus. Sobald ein MR geöffnet wird, wechseln die Workflow-Rules auf eine MR-Pipeline mit der vollständigen Test-Suite gegen das Merged-Result. Ein Merge auf <code className="">main</code> stellt ein manuelles Produktions-Deployment in die Warteschlange. Der Nightly-Scan läuft einmalig als geplante Pipeline – nicht bei jedem Commit.</p><p>Merged-Results-Pipelines fangen dabei die Klasse von Fehlern ab, die erst nach einem Merge sichtbar werden – bevor sie <code className="">main</code> erreichen.</p><h3 id="_5-governed-pipelines-cicd-components">5. Governed Pipelines: CI/CD Components</h3><p><strong>Das Problem:</strong> Das Platform-Team hat den richtigen Weg für Build, Test und Deploy definiert. Jedes Anwendungsteam pflegt jedoch eine eigene <code className="">.gitlab-ci.yml</code> mit subtilen Abweichungen. Security-Scanning wird übersprungen. Deployment-Standards driften. Audits werden aufwändig.</p><p><a href="https://docs.gitlab.com/ci/components/" rel="">CI/CD Components</a> ermöglichen es Platform-Teams, versionierte, wiederverwendbare Pipeline-Bausteine zu veröffentlichen. Anwendungsteams binden sie mit einer einzigen <code className="">include:</code>-Zeile ein – kein Copy-Paste, kein Drift. Components sind über den <a href="https://docs.gitlab.com/ci/components/#cicd-catalog" rel="">CI/CD Catalog</a> auffindbar, sodass Teams bewährte Bausteine finden und übernehmen können, ohne das Platform-Team direkt einschalten zu müssen.</p><p>Drei Zeilen <code className="">include:</code> ersetzen hunderte von duplizierten YAML-Zeilen. Das Platform-Team kann einen Security-Fix in einer neuen Komponentenversion veröffentlichen – Teams steigen auf ihrem eigenen Zeitplan um, oder das Platform-Team fixiert alle auf eine Mindestversion. In beiden Fällen propagiert eine Änderung organisationsweit, statt repo-für-repo angewendet zu werden.</p><p>Kombiniert mit <a href="https://docs.gitlab.com/ci/resource_groups/" rel="">Resource Groups</a> zur Vermeidung konkurrierender Deployments und <a href="https://docs.gitlab.com/ci/environments/protected_environments/" rel="">Protected Environments</a> für Freigabe-Gates entsteht eine governed Delivery-Plattform, auf der <strong>Compliance der Standard ist, nicht die Ausnahme</strong>. Platform-Teams setzen Vorgaben durch, ohne zum Engpass zu werden.</p><p><img alt="Component pipeline (imported jobs)" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738776/Blog/Imported/hackathon-fake-blog-post-s/image2_pizuxd.png" title="Component pipeline (imported jobs)" /></p><h2 id="das-modell-als-ganzes">Das Modell als Ganzes</h2><p>Keines dieser Muster existiert isoliert. Der Wert von GitLabs Pipeline-Modell liegt in der Kombinierbarkeit seiner Bausteine:</p><ul><li>Ein Monorepo nutzt Parent-Child-Pipelines, und jede Child-Pipeline nutzt DAG-Execution.</li><li>Eine Microservices-Plattform nutzt Multi-Project-Pipelines, und jedes Projekt nutzt MR-Pipelines mit Merged-Results.</li><li>Eine governed Plattform nutzt CI/CD Components, um die obigen Muster organisationsweit zu standardisieren.</li></ul><p>Die meisten Teams entdecken eines dieser Muster, wenn sie auf ein konkretes Problem stoßen. Teams, die das vollständige Modell verstehen, entwickeln daraus eine Delivery-Infrastruktur, die tatsächlich abbildet, wie ihre Engineering-Organisation arbeitet – und mit ihr wächst.</p><h2 id="weitere-muster">Weitere Muster</h2><p>Das Pipeline-Modell geht über die fünf vorgestellten Muster hinaus:</p><ul><li><a href="https://docs.gitlab.com/ci/environments/" rel="">Review Apps mit dynamischen Umgebungen</a> erstellen für jeden Feature-Branch eine Live-Vorschau und räumen sie automatisch auf, wenn der MR geschlossen wird.</li><li><a href="https://docs.gitlab.com/ci/caching/" rel="">Caching- und Artifact-Strategien</a> sind nach der strukturellen Arbeit häufig der direkteste Weg zur weiteren Laufzeitoptimierung – ohne die Pipeline-Struktur zu verändern.</li><li><a href="https://docs.gitlab.com/ci/pipelines/schedules/" rel="">Geplante und API-ausgelöste Pipelines</a> eignen sich für Workloads, die nicht bei jedem Code-Push laufen sollten: Nightly-Security-Scans, Compliance-Reports und Release-Automatisierung lassen sich als geplante oder <a href="https://docs.gitlab.com/ci/triggers/" rel="">API-ausgelöste</a> Pipelines mit <code className="">$CI_PIPELINE_SOURCE</code>-Routing modellieren.</li></ul><blockquote><p><a href="https://about.gitlab.com/de-de/free-trial/" rel="">GitLab Ultimate kostenlos testen</a> und Pipeline-Logik ab heute einsetzen.</p></blockquote><h2 id="für-deutsche-unternehmen-regulatorischer-kontext">Für deutsche Unternehmen: Regulatorischer Kontext</h2><p>Teams, die Pipeline-Governance nach Muster 5 einführen, adressieren dabei möglicherweise auch Anforderungen, die regulatorische Frameworks an sichere Softwareentwicklungsprozesse stellen.</p><p>CI/CD Components mit erzwungenen Security-Gates könnten Anforderungen an sichere Entwicklungsprozesse betreffen – beispielsweise in Bereichen, die Frameworks wie NIS2, ISO 27001 oder BSI IT-Grundschutz an den Software-Entwicklungslebenszyklus adressieren. Protected Environments und Resource Groups betreffen ähnliche Themen im Bereich Änderungskontrolle und Umgebungstrennung, wie sie in Governance-Frameworks typischerweise explizit formuliert sind.</p><p>Multi-Project-Pipelines mit API-Contract-Validierung (Muster 2) schaffen Sichtbarkeit über Service-Abhängigkeiten hinweg – ein Aspekt, den Frameworks zur Lieferkettensicherheit adressieren.</p><p>Merged-Results-Pipelines (Muster 4) dokumentieren automatisch, dass das tatsächliche Merge-Ergebnis getestet wurde, nicht nur der Feature-Branch in Isolation. Dies könnte Anforderungen an nachvollziehbare Änderungsprozesse betreffen, wie sie in Change-Management-Kontrollen verschiedener Sicherheitsframeworks formuliert sind.</p><p>Für konkrete Compliance-Anforderungen im eigenen regulatorischen Umfeld empfiehlt sich Rücksprache mit entsprechender Fachberatung.</p><h2 id="abschnitt-2-konfiguration-und-implementierung">Abschnitt 2: Konfiguration und Implementierung</h2><p><em>Für Entwicklungsteams und DevOps-Praktiker: ausgewählte Konfigurationsbeispiele zu den Mustern 1, 4 und 5. Für vollständige Konfigurationen aller Muster: <a href="https://about.gitlab.com/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/" rel="">englischer Originalartikel</a>.</em></p><p>Die folgenden Konfigurationen sind illustrativ aufgebaut. Die Skripte verwenden <code className="">echo</code>-Befehle, um das Wesentliche sichtbar zu halten. Für den produktiven Einsatz werden die <code className="">echo</code>-Befehle durch die tatsächlichen Build-, Test- und Deploy-Schritte ersetzt.</p><h3 id="muster-1-parent-child-pipelines-und-dag-execution">Muster 1: Parent-Child-Pipelines und DAG-Execution</h3><p>Eine Parent-Pipeline erkennt Änderungen und löst nur die betroffenen Child-Pipelines aus:</p><pre className="language-yaml shiki shiki-themes github-light" code="  - trigger

trigger-services:
  stage: trigger
  trigger:
    include:
      - local: &#39;.gitlab/ci/api-service.yml&#39;
      - local: &#39;.gitlab/ci/web-service.yml&#39;
      - local: &#39;.gitlab/ci/worker-service.yml&#39;
    strategy: depend
" language="yaml" meta="# .gitlab-ci.yml stages:" style=""><code><span class="line" line="1"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">trigger
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">trigger-services</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">trigger
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">  trigger</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#22863A">    include</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">local</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&#39;.gitlab/ci/api-service.yml&#39;
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">local</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&#39;.gitlab/ci/web-service.yml&#39;
</span></span><span class="line" line="9"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">local</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&#39;.gitlab/ci/worker-service.yml&#39;
</span></span><span class="line" line="10"><span style="--shiki-default:#22863A">    strategy</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">depend
</span></span></code></pre><p>Innerhalb der Child-Pipeline ermöglicht <code className="">needs:</code> DAG-Execution – der Test startet, sobald der Build abgeschlossen ist, ohne auf andere Jobs in derselben Stage zu warten:</p><pre className="language-yaml shiki shiki-themes github-light" code="  - build
  - test

build-api:
  stage: build
  script:
    - echo &quot;Building API service&quot;

test-api:
  stage: test
  needs: [build-api]
  script:
    - echo &quot;Running API tests&quot;
" language="yaml" meta="# .gitlab/ci/api-service.yml stages:" style=""><code><span class="line" line="1"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">build
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">build-api</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">build
</span></span><span class="line" line="6"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Building API service&quot;
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">test-api</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="10"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">  needs</span><span style="--shiki-default:#24292E">: [</span><span style="--shiki-default:#032F62">build-api</span><span style="--shiki-default:#24292E">]
</span></span><span class="line" line="12"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="13"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Running API tests&quot;
</span></span></code></pre><p><img alt="Local downstream pipelines" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738759/Blog/Imported/hackathon-fake-blog-post-s/image3_vwj3rz.png" title="Local downstream pipelines" /></p><h3 id="muster-4-mr-first-delivery">Muster 4: MR-First-Delivery</h3><p>Workflow-Rules, MR-Pipelines und Merged-Results zusammen ergeben ein kontextabhängiges Pipeline-Verhalten:</p><pre className="language-yaml shiki shiki-themes github-light" code="  rules:
    - if: $CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
    - if: $CI_COMMIT_BRANCH &amp;&amp; $CI_OPEN_MERGE_REQUESTS
      when: never
    - if: $CI_COMMIT_BRANCH
    - if: $CI_PIPELINE_SOURCE == &quot;schedule&quot;

stages:
  - fast-checks
  - expensive-tests
  - deploy

lint-code:
  stage: fast-checks
  script:
    - echo &quot;Running linter&quot;
  rules:
    - if: $CI_PIPELINE_SOURCE == &quot;push&quot;
    - if: $CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;

unit-tests:
  stage: fast-checks
  script:
    - echo &quot;Running unit tests&quot;
  rules:
    - if: $CI_PIPELINE_SOURCE == &quot;push&quot;
    - if: $CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;

integration-tests:
  stage: expensive-tests
  script:
    - echo &quot;Running integration tests (15 min)&quot;
  rules:
    - if: $CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;

e2e-tests:
  stage: expensive-tests
  script:
    - echo &quot;Running E2E tests (30 min)&quot;
  rules:
    - if: $CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;

nightly-comprehensive-scan:
  stage: expensive-tests
  script:
    - echo &quot;Running full nightly suite (2 hours)&quot;
  rules:
    - if: $CI_PIPELINE_SOURCE == &quot;schedule&quot;

deploy-production:
  stage: deploy
  script:
    - echo &quot;Deploying to production&quot;
  rules:
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;
      when: manual
" language="yaml" meta="# .gitlab-ci.yml workflow:" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH &amp;&amp; $CI_OPEN_MERGE_REQUESTS
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">      when</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">never
</span></span><span class="line" line="5"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;schedule&quot;
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span style="--shiki-default:#22863A">stages</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="9"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">fast-checks
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">expensive-tests
</span></span><span class="line" line="11"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">deploy
</span></span><span class="line" line="12"><span emptyLinePlaceholder>
</span></span><span class="line" line="13"><span style="--shiki-default:#22863A">lint-code</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="14"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">fast-checks
</span></span><span class="line" line="15"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="16"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Running linter&quot;
</span></span><span class="line" line="17"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="18"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;push&quot;
</span></span><span class="line" line="19"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
</span></span><span class="line" line="20"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH == &quot;main&quot;
</span></span><span class="line" line="21"><span emptyLinePlaceholder>
</span></span><span class="line" line="22"><span style="--shiki-default:#22863A">unit-tests</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="23"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">fast-checks
</span></span><span class="line" line="24"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="25"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Running unit tests&quot;
</span></span><span class="line" line="26"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="27"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;push&quot;
</span></span><span class="line" line="28"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
</span></span><span class="line" line="29"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH == &quot;main&quot;
</span></span><span class="line" line="30"><span emptyLinePlaceholder>
</span></span><span class="line" line="31"><span style="--shiki-default:#22863A">integration-tests</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="32"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">expensive-tests
</span></span><span class="line" line="33"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="34"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Running integration tests (15 min)&quot;
</span></span><span class="line" line="35"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="36"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
</span></span><span class="line" line="37"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH == &quot;main&quot;
</span></span><span class="line" line="38"><span emptyLinePlaceholder>
</span></span><span class="line" line="39"><span style="--shiki-default:#22863A">e2e-tests</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="40"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">expensive-tests
</span></span><span class="line" line="41"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="42"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Running E2E tests (30 min)&quot;
</span></span><span class="line" line="43"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="44"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;merge_request_event&quot;
</span></span><span class="line" line="45"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH == &quot;main&quot;
</span></span><span class="line" line="46"><span emptyLinePlaceholder>
</span></span><span class="line" line="47"><span style="--shiki-default:#22863A">nightly-comprehensive-scan</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="48"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">expensive-tests
</span></span><span class="line" line="49"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="50"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Running full nightly suite (2 hours)&quot;
</span></span><span class="line" line="51"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="52"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_PIPELINE_SOURCE == &quot;schedule&quot;
</span></span><span class="line" line="53"><span emptyLinePlaceholder>
</span></span><span class="line" line="54"><span style="--shiki-default:#22863A">deploy-production</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="55"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">deploy
</span></span><span class="line" line="56"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="57"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Deploying to production&quot;
</span></span><span class="line" line="58"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="59"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH == &quot;main&quot;
</span></span><span class="line" line="60"><span style="--shiki-default:#22863A">      when</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">manual
</span></span></code></pre><p><img alt="Conditional pipelines (within a branch with no MR)" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738768/Blog/Imported/hackathon-fake-blog-post-s/image6_dnfcny.png" title="Conditional pipelines (within a branch with no MR)" /></p><p><img alt="Conditional pipelines (within an MR)" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738772/Blog/Imported/hackathon-fake-blog-post-s/image1_wyiafu.png" title="Conditional pipelines (within an MR)" /></p><p><img alt="Conditional pipelines (on the main branch)" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738774/Blog/Imported/hackathon-fake-blog-post-s/image5_r6lkfd.png" title="Conditional pipelines (on the main branch)" /></p><h3 id="muster-5-cicd-components">Muster 5: CI/CD Components</h3><p>Eine Komponentendefinition aus einer gemeinsamen Bibliothek:</p><pre className="language-yaml shiki shiki-themes github-light" code="  inputs:
    stage:
      default: deploy
    environment:
      default: production
--- deploy-job:
  stage: $[[ inputs.stage ]]
  script:
    - echo &quot;Deploying $APP_NAME to $[[ inputs.environment ]]&quot;
    - echo &quot;Deploy URL: $DEPLOY_URL&quot;
  environment:
    name: $[[ inputs.environment ]]
" language="yaml" meta="# templates/deploy.yml spec:" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">  inputs</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#22863A">    stage</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">      default</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">deploy
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">    environment</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">      default</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">production
</span></span><span class="line" line="6"><span style="--shiki-default:#6F42C1">---</span><span style="--shiki-default:#22863A"> deploy-job</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$[[ inputs.stage ]]
</span></span><span class="line" line="8"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="9"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">echo &quot;Deploying $APP_NAME to $[[ inputs.environment ]]&quot;
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">echo &quot;Deploy URL</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$DEPLOY_URL&quot;
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">  environment</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#22863A">    name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$[[ inputs.environment ]]
</span></span></code></pre><p>So bindet ein Anwendungsteam die Komponenten ein:</p><pre className="language-yaml shiki shiki-themes github-light" code="  APP_NAME: &quot;my-awesome-app&quot;
  DEPLOY_URL: &quot;https://api.example.com&quot;

include:
  - component: gitlab.com/my-org/component-library/build@v1.0.6
  - component: gitlab.com/my-org/component-library/test@v1.0.6
  - component: gitlab.com/my-org/component-library/deploy@v1.0.6
    inputs:
      environment: staging

stages:
  - build
  - test
  - deploy
" language="yaml" meta="# Application repo: .gitlab-ci.yml variables:" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">  APP_NAME</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;my-awesome-app&quot;
</span></span><span class="line" line="2"><span style="--shiki-default:#22863A">  DEPLOY_URL</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;https://api.example.com&quot;
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">include</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="5"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">component</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">gitlab.com/my-org/component-library/build@v1.0.6
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">component</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">gitlab.com/my-org/component-library/test@v1.0.6
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">component</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">gitlab.com/my-org/component-library/deploy@v1.0.6
</span></span><span class="line" line="8"><span style="--shiki-default:#22863A">    inputs</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">      environment</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">staging
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">stages</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">build
</span></span><span class="line" line="13"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="14"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">deploy
</span></span></code></pre><h3 id="orientierung-zu-den-mustern-2-und-3">Orientierung zu den Mustern 2 und 3</h3><p><strong>Muster 2 (Multi-Project-Pipelines):</strong> Das Frontend-Repository publiziert ein API-Contract-Artifact und löst anschließend die Backend-Pipeline aus. Das Backend ruft das Artifact über die GitLab Jobs API ab und validiert es. Der <code className="">integration-test</code>-Job läuft dabei nur dann, wenn er von einer Upstream-Pipeline ausgelöst wurde (<code className="">$CI_PIPELINE_SOURCE == &quot;pipeline&quot;</code>), nicht bei einem eigenständigen Push. Die Frontend-Projekt-ID wird als CI/CD-Variable gesetzt, um Hardcoding zu vermeiden. Vollständige Konfigurationen beider Repositories: <a href="https://about.gitlab.com/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/#2-microservices-cross-repo-multi-project-pipelines" rel="">englischer Originalartikel</a>.</p><p><strong>Muster 3 (Dynamische Child-Pipelines):</strong> Ein <code className="">generate-config</code>-Job erzeugt zur Laufzeit environment-spezifische YAML-Dateien. Trigger-Jobs nutzen <code className="">extends:</code> für gemeinsam genutzte Konfiguration und <code className="">needs:</code> für sequenzielle Promotion (dev → staging → prod mit manuellem Gate). Vollständige Konfiguration: <a href="https://about.gitlab.com/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/#3-multi-tenant--matrix-deployments-dynamic-child-pipelines" rel="">englischer Originalartikel</a>.</p><h2 id="weiterführende-artikel">Weiterführende Artikel</h2><ul><li><a href="https://about.gitlab.com/blog/variable-and-artifact-sharing-in-gitlab-parent-child-pipelines/" rel="">Variable and artifact sharing in GitLab parent-child pipelines</a></li><li><a href="https://about.gitlab.com/blog/ci-cd-inputs-secure-and-preferred-method-to-pass-parameters-to-a-pipeline/" rel="">CI/CD inputs: Secure and preferred method to pass parameters to a pipeline</a></li><li><a href="https://about.gitlab.com/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component/" rel="">Tutorial: How to set up your first GitLab CI/CD component</a></li><li><a href="https://about.gitlab.com/blog/how-to-include-file-references-in-your-ci-cd-components/" rel="">How to include file references in your CI/CD components</a></li><li><a href="https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/" rel="">FAQ: GitLab CI/CD Catalog</a></li><li><a href="https://about.gitlab.com/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way/" rel="">Building a GitLab CI/CD pipeline for a monorepo the easy way</a></li><li><a href="https://about.gitlab.com/blog/a-ci-component-builders-journey/" rel="">A CI/CD component builder&#39;s journey</a></li><li><a href="https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/" rel="">CI/CD Catalog goes GA: No more building pipelines from scratch</a></li></ul><style>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>Omid Khan</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/omid-khan/</uri>
        </author>
        <published>2026-04-09T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Testergebnisse aus GitLab-Pipelines automatisch in QMetry übertragen]]></title>
        <id>https://about.gitlab.com/de-de/blog/streamline-test-management-with-the-smartbear-qmetry-gitlab-component/</id>
        <link href="https://about.gitlab.com/de-de/blog/streamline-test-management-with-the-smartbear-qmetry-gitlab-component/"/>
        <updated>2026-04-07T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>In modernen Entwicklungsumgebungen müssen DevSecOps-Teams Testergebnisse aus CI/CD-Pipelines konsistent in Testmanagement-Plattformen übertragen, um Transparenz, Nachvollziehbarkeit und Compliance über den gesamten Entwicklungszyklus zu gewährleisten.
Teams, die GitLab für CI/CD und SmartBear QMetry für das Testmanagement einsetzen, verbringen Zeit mit manuellem Export und Import von Testergebnissen – das verzögert Feedback und erschwert eine zuverlässige, zentrale Testsicht.
Der <strong>QMetry GitLab Component</strong> automatisiert diesen Prozess. Die wiederverwendbare CI/CD-Komponente, verfügbar im <a href="https://gitlab.com/explore/catalog" rel="">GitLab CI/CD Catalog</a>, überträgt Testausführungsdaten nach jeder Pipeline-Ausführung automatisch nach QMetry – einer KI-gestützten, unternehmenstauglichen Testmanagement-Plattform, die Testplanung, -ausführung, -nachverfolgung und -reporting in einer Lösung vereint.
Als zentrales System der Aufzeichnung für Tests hilft QMetry Teams dabei, Abdeckung und Ausführung nachzuverfolgen und fundiertere Release-Entscheidungen zu treffen.
<img alt="SmartBear QMetry GitLab integration" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775488045/ojt707rzxnm2yr3vqxdh.png" /></p><h2 id="vorteile-der-integration">Vorteile der Integration</h2><h3 id="manuelle-uploads-entfallen-nachvollziehbarkeit-steigt">Manuelle Uploads entfallen, Nachvollziehbarkeit steigt</h3><p>DevSecOps-Engineers und QA-Teams müssen Testergebnisse nicht mehr manuell exportieren und importieren – die Komponente übernimmt das automatisch nach jeder Pipeline-Ausführung. Zugleich erhalten Teams vollständige Nachvollziehbarkeit von Anforderungen über Testfälle bis hin zu tatsächlichen Ausführungsergebnissen.</p><p><img alt="Test results with SmartBear QMetry GitLab integration" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775488045/ajx64sihup2nursdpnxz.png" /></p><h3 id="compliance-und-audit-anforderungen-erfüllen">Compliance- und Audit-Anforderungen erfüllen</h3><p>Für Organisationen in regulierten Branchen ist lückenlose Testdokumentation nicht verhandelbar. Die Integration stellt sicher, dass jede Testausführung in QMetry mit Verknüpfungen zur jeweiligen GitLab-Pipeline, zum Commit und zum Build dokumentiert wird – ohne zusätzlichen manuellen Aufwand.
<img alt="Audit-ready record of testing with SmartBear QMetry GitLab integration" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775488045/q2tbaw5otgdywjkcquqx.png" /></p><h3 id="ki-gestützte-test-insights-nutzen">KI-gestützte Test-Insights nutzen</h3><p>QMetry analysiert mithilfe von KI Testausführungsmuster, identifiziert instabile Tests, prognostiziert Testfehler und empfiehlt Optimierungsmöglichkeiten. Echtzeit-Daten aus GitLab-Pipelines maximieren den Wert dieser Funktionen.
<img alt="Genaue Insights mit SmartBear QMetry GitLab integration" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1775488045/pl7ru4wx8ixnheedfyrs.png" /></p><h2 id="über-die-gitlab-smartbear-partnerschaft">Über die GitLab-SmartBear-Partnerschaft</h2><p>Diese Komponente steht für die wachsende Partnerschaft zwischen GitLab und SmartBear, CI/CD-Ausführung und Testmanagement in einem Workflow zu verbinden. Gemeinsam helfen sie Teams, Testing in den Entwicklungszyklus zu integrieren und dabei die Qualitäts-, Sicherheits- und Compliance-Standards ihrer Branchen einzuhalten.</p><h2 id="praxisbeispiele">Praxisbeispiele</h2><h3 id="finanzdienstleistungen-enterprise-banking-plattformen">Finanzdienstleistungen: Enterprise-Banking-Plattformen</h3><p>Führende Finanzinstitute stehen vor besonderen Herausforderungen beim Skalieren von Testautomatisierung:</p><ul><li><strong>Regulatorische Compliance</strong>: Detaillierte Audit-Trails für alle Testaktivitäten erforderlich</li><li><strong>Mehrere Compliance-Frameworks</strong>: BaFin BAIT, PSD2, DSGVO und interne Risikomanagement-Richtlinien</li><li><strong>Hochfrequente Deployments</strong>: Mehrere Produktions-Deployments täglich über Microservices</li><li><strong>Verteilte Teams</strong>: Echtzeit-Transparenz über globale Engineering-Teams hinweg erforderlich
Finanzdienstleister, die den QMetry GitLab Component einsetzen, automatisieren Testergebnis-Uploads für Unit-Tests, API-Contract-Tests, End-to-End-Tests für Transaktionsabläufe sowie Security- und Performance-Testergebnisse.</li></ul><p><strong>Mögliche Ergebnisse</strong>:</p><ul><li><strong>Deutliche Reduzierung</strong> des manuellen Test-Reporting-Aufwands</li><li><strong>Vollständige Audit-Trail-Abdeckung</strong> für Regulierungsprüfungen</li><li><strong>Echtzeit-Transparenz</strong> für verteilte QA-Teams</li><li><strong>Verbesserte Compliance-Position</strong> durch vollständige Nachvollziehbarkeit von Anforderungen bis zur Testausführung</li></ul><h3 id="flugregelungssoftware-in-der-luft-und-raumfahrt">Flugregelungssoftware in der Luft- und Raumfahrt</h3><p>Die Softwareentwicklung in der Luft- und Raumfahrt unterliegt besonderen Anforderungen:</p><ul><li><strong>DO-178C-Compliance</strong>: Avioniksoftware muss strikte Zertifizierungsstandards erfüllen</li><li><strong>Vollständige Nachvollziehbarkeit</strong>: Jede Anforderung verknüpft mit Testfällen und Ausführungsergebnissen</li><li><strong>Audit-Trails</strong>: Zertifizierungsbehörden verlangen detaillierte Aufzeichnungen aller Testaktivitäten</li><li><strong>Mehrere Teststufen</strong>: Unit-, Integrations-, System- und Zertifizierungstests
Durch die Integration von GitLab CI/CD mit QMetry automatisiert das Aerospace-Engineering-Team Testausführung und Reporting über alle Teststufen hinweg.</li></ul><p><strong>Vor der Integration</strong>:</p><ul><li>Manueller Export aus GitLab, Import in QMetry über UI-Uploads</li><li>Prozess dauerte 2–3 Stunden pro Testzyklus</li><li>Fehlerrisiko bei der Dateneingabe, verzögerte Rückmeldung an Stakeholder</li></ul><p><strong>Nach der Integration</strong>:</p><ul><li>Testergebnisse fließen automatisch von GitLab nach QMetry</li><li>Vollständiger Audit-Trail vom Commit über den Test bis zum Ergebnis</li><li>Kein manueller Eingriff, Echtzeit-Transparenz für Zertifizierungsprüfer</li><li>Compliance-Reports werden automatisch erstellt</li></ul><p><strong>Beispiel-Dashboard in QMetry nach der Integration</strong>:</p><pre className="language-none shiki shiki-themes github-light" code="    ╔════════════════════════════════════════════════════════════╗
    ║  Flight Control System v2.4 - Test Execution Dashboard     ║
    ╠════════════════════════════════════════════════════════════╣
    ║                                                            ║
    ║  📊 Test Execution Summary (Last 7 Days)                   ║
    ║  ───────────────────────────────────────────────────────── ║
    ║  ✓ Total Tests Executed: 1,247                             ║
    ║  ✓ Passed: 1,241 (99.5%)                                   ║
    ║  ✗ Failed: 6 (0.5%)                                        ║
    ║  ⏸ Skipped: 0                                              ║
    ║                                                            ║
    ║  📁 Test Suite Organization                                ║
    ║  ───────────────────────────────────────────────────────── ║
    ║  └─ Certification/                                         ║
    ║     └─ DO-178C/                                            ║
    ║        ├─ Unit/ (487 tests, 100% pass)                     ║
    ║        ├─ Integration/ (623 tests, 99.2% pass)             ║
    ║        └─ System/ (137 tests, 100% pass)                   ║
    ║                                                            ║
    ║  🔗 Traceability                                           ║
    ║  ───────────────────────────────────────────────────────── ║
    ║  Requirements Covered: 342/342 (100%)                      ║
    ║  Test Cases Linked: 1,247/1,247 (100%)                     ║
    ║  GitLab Pipeline Executions: 47 (automated)                ║
    ║                                                            ║
    ║  ⚠️  Action Items                                          ║
    ║  ───────────────────────────────────────────────────────── ║
    ║  • 6 failed tests require investigation                    ║
    ║  • Last execution: 2 minutes ago (Pipeline #1543)          ║
    ║  • GitLab Commit: a7f8c23 &quot;Fix altitude hold logic&quot;        ║
    ║                                                            ║
    ╚════════════════════════════════════════════════════════════╝
    
" language="none" meta="" style=""><code><span class="line" line="1"><span>    ╔════════════════════════════════════════════════════════════╗
</span></span><span class="line" line="2"><span>    ║  Flight Control System v2.4 - Test Execution Dashboard     ║
</span></span><span class="line" line="3"><span>    ╠════════════════════════════════════════════════════════════╣
</span></span><span class="line" line="4"><span>    ║                                                            ║
</span></span><span class="line" line="5"><span>    ║  📊 Test Execution Summary (Last 7 Days)                   ║
</span></span><span class="line" line="6"><span>    ║  ───────────────────────────────────────────────────────── ║
</span></span><span class="line" line="7"><span>    ║  ✓ Total Tests Executed: 1,247                             ║
</span></span><span class="line" line="8"><span>    ║  ✓ Passed: 1,241 (99.5%)                                   ║
</span></span><span class="line" line="9"><span>    ║  ✗ Failed: 6 (0.5%)                                        ║
</span></span><span class="line" line="10"><span>    ║  ⏸ Skipped: 0                                              ║
</span></span><span class="line" line="11"><span>    ║                                                            ║
</span></span><span class="line" line="12"><span>    ║  📁 Test Suite Organization                                ║
</span></span><span class="line" line="13"><span>    ║  ───────────────────────────────────────────────────────── ║
</span></span><span class="line" line="14"><span>    ║  └─ Certification/                                         ║
</span></span><span class="line" line="15"><span>    ║     └─ DO-178C/                                            ║
</span></span><span class="line" line="16"><span>    ║        ├─ Unit/ (487 tests, 100% pass)                     ║
</span></span><span class="line" line="17"><span>    ║        ├─ Integration/ (623 tests, 99.2% pass)             ║
</span></span><span class="line" line="18"><span>    ║        └─ System/ (137 tests, 100% pass)                   ║
</span></span><span class="line" line="19"><span>    ║                                                            ║
</span></span><span class="line" line="20"><span>    ║  🔗 Traceability                                           ║
</span></span><span class="line" line="21"><span>    ║  ───────────────────────────────────────────────────────── ║
</span></span><span class="line" line="22"><span>    ║  Requirements Covered: 342/342 (100%)                      ║
</span></span><span class="line" line="23"><span>    ║  Test Cases Linked: 1,247/1,247 (100%)                     ║
</span></span><span class="line" line="24"><span>    ║  GitLab Pipeline Executions: 47 (automated)                ║
</span></span><span class="line" line="25"><span>    ║                                                            ║
</span></span><span class="line" line="26"><span>    ║  ⚠️  Action Items                                          ║
</span></span><span class="line" line="27"><span>    ║  ───────────────────────────────────────────────────────── ║
</span></span><span class="line" line="28"><span>    ║  • 6 failed tests require investigation                    ║
</span></span><span class="line" line="29"><span>    ║  • Last execution: 2 minutes ago (Pipeline #1543)          ║
</span></span><span class="line" line="30"><span>    ║  • GitLab Commit: a7f8c23 &quot;Fix altitude hold logic&quot;        ║
</span></span><span class="line" line="31"><span>    ║                                                            ║
</span></span><span class="line" line="32"><span>    ╚════════════════════════════════════════════════════════════╝
</span></span></code></pre><h3 id="compliance-und-audit-vorteile">Compliance- und Audit-Vorteile</h3><p><strong>Für Finanzdienstleister (BaFin BAIT, PSD2, SOX)</strong>:</p><ol><li><strong>Automatische Nachvollziehbarkeit</strong>: Regulatorische Anforderungen → Testfälle → Ausführungsergebnisse → GitLab-Commits verknüpft</li><li><strong>Auditfähige Dokumentation</strong>: Vollständige Testausführungshistorie mit Zeitstempeln und Pipeline-Referenzen</li><li><strong>Regulatorisches Reporting</strong>: Compliance-Reports direkt aus QMetry-Testdaten generieren</li></ol><p><strong>Für die Luft- und Raumfahrt-Zertifizierung (DO-178C, DO-254)</strong>:</p><ol><li><strong>Automatische Nachverfolgbarkeitsmatrix</strong>: Anforderungen → Testfälle → Ausführungsergebnisse → GitLab-Commits</li><li><strong>Unveränderlicher Audit-Trail</strong>: Pipeline-ID, Commit-SHA und Ausführer für jede Testausführung gestempelt</li><li><strong>Zertifizierungspaket-Generierung</strong>: Konforme Dokumentation aus GitLab-Pipeline-Daten</li></ol><hr /><h2 id="technische-umsetzung">Technische Umsetzung</h2><p><em>Dieser Abschnitt orientiert Teams, die die Integration einrichten möchten. Die vollständige Schritt-für-Schritt-Anleitung mit allen Konfigurationsdetails – API-Credentials, CI/CD-Variablen, Testformate, erweiterte Optionen und Fehlerbehebung – ist im <a href="https://about.gitlab.com/blog/streamline-test-management-with-the-smartbear-qmetry-gitlab-component/" rel="">englischen Originalbeitrag</a> verfügbar.</em></p><h2 id="voraussetzungen">Voraussetzungen</h2><ul><li><strong>GitLab-Account</strong> mit einem Projekt, das automatisierte Tests enthält und Testergebnisdateien erzeugt (JUnit XML, TestNG XML usw.)</li><li><strong>QMetry Test Management Enterprise</strong>-Account mit aktiviertem API-Zugriff und generiertem API-Key</li><li><strong>QMetry-Projekt</strong>, bereits angelegt, in das Testergebnisse hochgeladen werden sollen</li><li><strong>Kenntnisse in GitLab CI/CD</strong>, einschließlich grundlegender <code className="">.gitlab-ci.yml</code>-Syntax</li></ul><h3 id="ablauf-der-testergebnis-übertragung">Ablauf der Testergebnis-Übertragung</h3><ol><li><strong>Testausführung</strong>: Die GitLab CI/CD-Pipeline führt automatisierte Tests aus.</li><li><strong>Ergebnisgenerierung</strong>: Tests erzeugen Ausgabedateien (JUnit XML, TestNG XML usw.).</li><li><strong>Komponentenaufruf</strong>: Die QMetry-Komponente wird als Job in der Pipeline ausgeführt.</li><li><strong>Automatischer Upload</strong>: Die Komponente liest die Testergebnisdateien und lädt sie via API nach QMetry hoch.</li><li><strong>QMetry-Verarbeitung</strong>: QMetry empfängt die Ergebnisse und stellt sie für Reporting und Analyse bereit.</li></ol><h2 id="basisintegration">Basisintegration</h2><p>Die Komponente in der <code className="">.gitlab-ci.yml</code>-Datei einbinden. Die Komponente sollte <strong>nach</strong> dem Abschluss der Tests ausgeführt werden:</p><pre className="language-yaml shiki shiki-themes github-light" code="    include:
      - component: gitlab.com/sb9945614/qtm-gitlab-component/qmetry-import@1.0.5
        inputs:
          stage: test
          project: &quot;Aerospace Flight Control System&quot;
          file_name: &quot;results.xml&quot;
          testing_type: &quot;JUNIT&quot;
          instance_url: ${INSTANCE_URL}
          api_key: ${QMETRY_API_KEY}
" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">    include</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">component</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">gitlab.com/sb9945614/qtm-gitlab-component/qmetry-import@1.0.5
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">        inputs</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">          stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">          project</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Aerospace Flight Control System&quot;
</span></span><span class="line" line="6"><span style="--shiki-default:#22863A">          file_name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;results.xml&quot;
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">          testing_type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;JUNIT&quot;
</span></span><span class="line" line="8"><span style="--shiki-default:#22863A">          instance_url</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">${INSTANCE_URL}
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">          api_key</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">${QMETRY_API_KEY}
</span></span></code></pre><table><thead><tr><th>Parameter</th><th>Beschreibung</th><th>Beispiel</th></tr></thead><tbody><tr><td><code className="">stage</code></td><td>CI/CD-Stage für den Upload-Job</td><td><code className="">test</code></td></tr><tr><td><code className="">project</code></td><td>QMetry-Projektname oder -Schlüssel</td><td><code className="">&quot;Aerospace Flight Control System&quot;</code></td></tr><tr><td><code className="">file_name</code></td><td>Pfad zur Testergebnisdatei</td><td><code className="">&quot;results.xml&quot;</code></td></tr><tr><td><code className="">testing_type</code></td><td>Format der Testergebnisse</td><td><code className="">&quot;JUNIT&quot;</code> (auch: <code className="">TESTNG</code>, <code className="">NUNIT</code> usw.)</td></tr><tr><td><code className="">instance_url</code></td><td>QMetry-Instanz-URL</td><td><code className="">${INSTANCE_URL}</code> (aus CI/CD-Variablen)</td></tr><tr><td><code className="">api_key</code></td><td>QMetry API-Key zur Authentifizierung</td><td><code className="">${QMETRY_API_KEY}</code> (aus CI/CD-Variablen)</td></tr></tbody></table><h2 id="vollständiges-pipeline-beispiel">Vollständiges Pipeline-Beispiel</h2><pre className="language-yaml shiki shiki-themes github-light" code="    stages:
      - test
      - report

    variables:
      NODE_VERSION: &quot;18&quot;

    unit-tests:
      stage: test
      image: node:${NODE_VERSION}
      script:
        - npm ci
        - npm run test:unit -- --reporter=junit --reporter-options=output=results.xml
      artifacts:
        reports:
          junit: results.xml
        paths:
          - results.xml
        when: always
      tags:
        - docker

    include:
      - component: gitlab.com/sb9945614/qtm-gitlab-component/qmetry-import@1.0.5
        inputs:
          stage: test
          project: &quot;Aerospace Flight Control System&quot;
          file_name: &quot;results.xml&quot;
          testing_type: &quot;JUNIT&quot;
          instance_url: ${INSTANCE_URL}
          api_key: ${QMETRY_API_KEY}
" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">    stages</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#032F62">report
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">    variables</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#22863A">      NODE_VERSION</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;18&quot;
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span style="--shiki-default:#22863A">    unit-tests</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">      stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="10"><span style="--shiki-default:#22863A">      image</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">node:${NODE_VERSION}
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">      script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">        - </span><span style="--shiki-default:#032F62">npm ci
</span></span><span class="line" line="13"><span style="--shiki-default:#24292E">        - </span><span style="--shiki-default:#032F62">npm run test:unit -- --reporter=junit --reporter-options=output=results.xml
</span></span><span class="line" line="14"><span style="--shiki-default:#22863A">      artifacts</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="15"><span style="--shiki-default:#22863A">        reports</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="16"><span style="--shiki-default:#22863A">          junit</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">results.xml
</span></span><span class="line" line="17"><span style="--shiki-default:#22863A">        paths</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="18"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#032F62">results.xml
</span></span><span class="line" line="19"><span style="--shiki-default:#22863A">        when</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">always
</span></span><span class="line" line="20"><span style="--shiki-default:#22863A">      tags</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="21"><span style="--shiki-default:#24292E">        - </span><span style="--shiki-default:#032F62">docker
</span></span><span class="line" line="22"><span emptyLinePlaceholder>
</span></span><span class="line" line="23"><span style="--shiki-default:#22863A">    include</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="24"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">component</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">gitlab.com/sb9945614/qtm-gitlab-component/qmetry-import@1.0.5
</span></span><span class="line" line="25"><span style="--shiki-default:#22863A">        inputs</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="26"><span style="--shiki-default:#22863A">          stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="27"><span style="--shiki-default:#22863A">          project</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Aerospace Flight Control System&quot;
</span></span><span class="line" line="28"><span style="--shiki-default:#22863A">          file_name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;results.xml&quot;
</span></span><span class="line" line="29"><span style="--shiki-default:#22863A">          testing_type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;JUNIT&quot;
</span></span><span class="line" line="30"><span style="--shiki-default:#22863A">          instance_url</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">${INSTANCE_URL}
</span></span><span class="line" line="31"><span style="--shiki-default:#22863A">          api_key</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">${QMETRY_API_KEY}
</span></span></code></pre><h2 id="vollständige-konfigurationsreferenz">Vollständige Konfigurationsreferenz</h2><table><thead><tr><th>Eingabeparameter</th><th>Pflichtfeld</th><th>Standard</th><th>Beschreibung</th></tr></thead><tbody><tr><td><code className="">stage</code></td><td>Nein</td><td><code className="">test</code></td><td>GitLab CI/CD-Stage für den Upload-Job</td></tr><tr><td><code className="">runner_tag</code></td><td>Nein</td><td><code className="">&quot;&quot;</code></td><td>Spezifischer Runner-Tag (leer = beliebiger verfügbarer Runner)</td></tr><tr><td><code className="">project</code></td><td>Ja</td><td>–</td><td>QMetry-Projektname oder -Schlüssel</td></tr><tr><td><code className="">file_name</code></td><td>Ja</td><td>–</td><td>Pfad zur Testergebnisdatei (relativ zum Projektstamm)</td></tr><tr><td><code className="">testing_type</code></td><td>Ja</td><td>–</td><td>Testergebnisformat: <code className="">JUNIT</code>, <code className="">TESTNG</code>, <code className="">NUNIT</code> usw.</td></tr><tr><td><code className="">skip_warning</code></td><td>Nein</td><td><code className="">&quot;1&quot;</code></td><td>Warnungen beim Import überspringen (<code className="">&quot;1&quot;</code> = überspringen, <code className="">&quot;0&quot;</code> = anzeigen)</td></tr><tr><td><code className="">is_matching_required</code></td><td>Nein</td><td><code className="">&quot;false&quot;</code></td><td>Bestehende Testfälle nach Name abgleichen (<code className="">&quot;true&quot;</code> oder <code className="">&quot;false&quot;</code>)</td></tr><tr><td><code className="">testsuite_name</code></td><td>Nein</td><td><code className="">&quot;&quot;</code></td><td>Name für die Test-Suite in QMetry</td></tr><tr><td><code className="">testsuite_id</code></td><td>Nein</td><td><code className="">&quot;&quot;</code></td><td>Bestehende Test-Suite-ID, an die Ergebnisse angehängt werden</td></tr><tr><td><code className="">testsuite_folder_path</code></td><td>Nein</td><td><code className="">&quot;&quot;</code></td><td>Ordnerpfad für die Test-Suite-Organisation (z. B. <code className="">/Regression/Sprint-23</code>)</td></tr><tr><td><code className="">automation_hierarchy</code></td><td>Nein</td><td><code className="">&quot;&quot;</code></td><td>Hierarchieebene für die Testorganisation (<code className="">&quot;1&quot;</code>, <code className="">&quot;2&quot;</code>, <code className="">&quot;3&quot;</code> usw.)</td></tr><tr><td><code className="">testcase_fields</code></td><td>Nein</td><td><code className="">&quot;&quot;</code></td><td>Benutzerdefinierte Felder für Testfälle (kommagetrennt: <code className="">field1=value1,field2=value2</code>)</td></tr><tr><td><code className="">testsuite_fields</code></td><td>Nein</td><td><code className="">&quot;&quot;</code></td><td>Benutzerdefinierte Felder für Test-Suites (kommagetrennt: <code className="">field1=value1,field2=value2</code>)</td></tr><tr><td><code className="">instance_url</code></td><td>Ja</td><td>–</td><td>QMetry-Instanz-URL (in CI/CD-Variablen speichern)</td></tr><tr><td><code className="">api_key</code></td><td>Ja</td><td>–</td><td>QMetry API-Key (in CI/CD-Variablen speichern, maskiert)</td></tr></tbody></table><h2 id="dokumentation-und-support">Dokumentation und Support</h2><ul><li><strong>Komponentendokumentation</strong>: <a href="https://gitlab.com/explore/catalog" rel="">GitLab CI/CD Catalog</a></li><li><strong>Komponenten-Repository</strong>: <a href="https://gitlab.com/sb9945614/qtm-gitlab-component" rel="">gitlab.com/sb9945614/qtm-gitlab-component</a></li><li><strong>QMetry-Dokumentation</strong>: <a href="https://qmetrysupport.atlassian.net/wiki/spaces/QPro/overview" rel="">QMetry Support Portal</a></li><li><strong>SmartBear-Ressourcen</strong>: <a href="https://smartbear.com/resources/" rel="">SmartBear Academy</a></li><li><strong>GitLab CI/CD-Dokumentation</strong>: <a href="https://docs.gitlab.com/ci/" rel="">GitLab CI/CD Documentation</a></li><li><strong>QMetry-Support</strong>: <a href="mailto:support@smartbear.com">support@smartbear.com</a> – <a href="https://community.smartbear.com/" rel="">QMetry Community Forum</a></li></ul><style>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>Matt Genelin</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/matt-genelin/</uri>
        </author>
        <author>
            <name>Matt Bonner</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/matt-bonner/</uri>
        </author>
        <published>2026-04-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Pipeline-Sicherheit: Lehren aus den Supply-Chain-Angriffen im März]]></title>
        <id>https://about.gitlab.com/de-de/blog/pipeline-security-lessons-from-march-supply-chain-incidents/</id>
        <link href="https://about.gitlab.com/de-de/blog/pipeline-security-lessons-from-march-supply-chain-incidents/"/>
        <updated>2026-04-07T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p><em><strong>Hinweis: Das GitLab-Produkt hat keine der in diesem Beitrag genannten kompromittierten Paketversionen verwendet.</strong></em></p><p>Innerhalb von 12 Tagen haben vier separate Supply-Chain-Angriffe gezeigt, dass CI/CD-Pipelines zu einem bevorzugten Ziel für versierte Bedrohungsakteure geworden sind.</p><p>Zwischen dem 19. und 31. März 2026 kompromittierten Angreifer:</p><ul><li>einen Open-Source-Security-Scanner (Trivy)</li><li>einen Infrastructure-as-Code-Scanner (Checkmarx KICS)</li><li>ein AI-Model-Gateway (LiteLLM)</li><li>einen JavaScript-HTTP-Client (axios)</li></ul><p>Alle Angriffe teilten dieselbe Angriffsfläche: die Build-Pipeline.</p><p>Dieser Artikel zeigt, <a href="#trusted-by-millions-compromised-in-minutes">was passiert ist</a>, <a href="#the-patterns-behind-these-attacks">warum Pipelines besonders anfällig sein können</a> und wie zentrale Policy-Durchsetzung mit GitLab – mithilfe der unten beschriebenen Policies – diese Angriffsklassen <a href="#how-gitlab-pipeline-execution-policies-address-each-attack-pattern">blockieren, erkennen und eindämmen</a> kann, bevor sie die Produktion erreichen.</p><h2 id="millionenfach-vertraut-in-minuten-kompromittiert">Millionenfach vertraut, in Minuten kompromittiert</h2><p>Hier die Zeitleiste der Supply-Chain-Angriffe:</p><h3 id="_19-märz-trivy-security-scanner-wird-zum-angriffsvektor">19. März: Trivy-Security-Scanner wird zum Angriffsvektor</h3><p><a href="https://github.com/aquasecurity/trivy" rel="">Trivy</a> ist einer der weltweit am häufigsten eingesetzten Open-Source-Vulnerability-Scanner. Es ist das Tool, das Teams <em>innerhalb ihrer Pipelines</em> ausführen, um Schwachstellen zu finden.</p><p>Am 19. März nutzte eine Bedrohungsgruppe namens <a href="https://www.aquasec.com/blog/trivy-supply-chain-attack-what-you-need-to-know/" rel="">TeamPCP kompromittierte Zugangsdaten</a>, um Schadcode per Force-Push in 76 von 77 Versions-Tags der GitHub Action <code className="">aquasecurity/trivy-action</code> sowie alle 7 Tags von <code className="">aquasecurity/setup-trivy</code> einzuschleusen. Gleichzeitig veröffentlichten sie ein trojanisiertes Trivy-Binary (v0.69.4) über offizielle Distributionskanäle. Die Payload war eine Credential-Stealing-Malware, die Umgebungsvariablen, Cloud-Tokens, SSH-Schlüssel und CI/CD-Secrets aus jeder Pipeline exfiltrierte, die einen Trivy-Scan ausführte.</p><p>Dem Vorfall wurde <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-33634" rel="">CVE-2026-33634</a> mit einem CVSS-Score von 9,4 zugewiesen. Die Cybersecurity and Infrastructure Security Agency (CISA) nahm ihn innerhalb weniger Tage in den Katalog der bekannten ausgenutzten Schwachstellen auf.</p><h3 id="_23-märz-checkmarx-kics-als-nächstes-ziel">23. März: Checkmarx KICS als nächstes Ziel</h3><p>Mit gestohlenen Zugangsdaten wandte sich TeamPCP dem Open-Source-Projekt KICS (Keeping Infrastructure as Code Secure) von Checkmarx zu. Sie kompromittierten die GitHub Actions <code className="">ast-github-action</code> und <code className="">kics-github-action</code> und <a href="https://thehackernews.com/2026/03/teampcp-hacks-checkmarx-github-actions.html" rel="">schleusten dieselbe Credential-Stealing-Malware ein</a>. Zwischen 12:58 und 16:50 UTC am 23. März exfiltrierte jede CI/CD-Pipeline, die diese Actions referenzierte, im Hintergrund sensible Daten – darunter API-Schlüssel, Datenbankpasswörter, Cloud-Access-Tokens, SSH-Schlüssel und Service-Account-Zugangsdaten.</p><h3 id="_24-märz-litellm-über-gestohlene-trivy-zugangsdaten-kompromittiert">24. März: LiteLLM über gestohlene Trivy-Zugangsdaten kompromittiert</h3><p>LiteLLM, ein LLM-API-Proxy mit 95 Millionen monatlichen Downloads, war das nächste Ziel. TeamPCP <a href="https://thehackernews.com/2026/03/teampcp-backdoors-litellm-versions.html" rel="">veröffentlichte kompromittierte Versionen</a> (1.82.7 und 1.82.8) auf PyPI – mithilfe von Zugangsdaten, die aus LiteLLMs eigener CI/CD-Pipeline erbeutet wurden, in der Trivy zum Scannen eingesetzt wurde.</p><p>Die Malware in Version 1.82.7 nutzte eine Base64-kodierte Payload, die direkt in <code className="">litellm/proxy/proxy_server.py</code> injiziert wurde und beim Import ausgeführt wurde. Die Version für 1.82.8 verwendete eine <code className="">.pth</code>-Datei – ein Python-Mechanismus, der automatisch beim Interpreter-Start ausgeführt wird. Allein die Installation von LiteLLM reichte aus, um die Payload auszulösen. Die Angreifer verschlüsselten die erbeuteten Daten (SSH-Schlüssel, Cloud-Tokens, .env-Dateien, Kryptowährungs-Wallets) und exfiltrierten sie an <code className="">models.litellm.cloud</code>, eine Lookalike-Domain.</p><h3 id="_31-märz-quellcode-eines-ai-coding-assistenten-durch-einfachen-packaging-fehler-geleakt">31. März: Quellcode eines AI-Coding-Assistenten durch einfachen Packaging-Fehler geleakt</h3><p>Während die TeamPCP-Kampagne noch andauerte, lieferte ein Softwareunternehmen ein npm-Paket mit einer 59,8 MB großen Source-Map-Datei aus – die den vollständigen, unminifizierten TypeScript-Quellcode seines AI-Coding-Assistenten referenzierte, gehostet im eigenen Cloudflare-R2-Bucket des Unternehmens.</p><p>Das Leak legte 1.900 TypeScript-Dateien, über 512.000 Codezeilen, 44 versteckte Feature-Flags, unveröffentlichte Modell-Codenamen und den vollständigen System-Prompt offen – für jeden, der wusste, wo er suchen musste. Wie der Entwickler <a href="https://dev.to/gabrielanhaia/claude-codes-entire-source-code-was-just-leaked-via-npm-source-maps-heres-whats-inside-cjo" rel="">Gabriel Anhaia erklärte</a>: „Eine einzige falsch konfigurierte .npmignore- oder files-Angabe in der package.json kann alles offenlegen.&quot;</p><h3 id="_31-märz-axios-und-ein-weiterer-trojaner-in-der-supply-chain">31. März: axios und ein weiterer Trojaner in der Supply Chain</h3><p>Am selben Tag zielte eine weitere Kampagne <a href="https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html" rel="">auf das npm-Paket axios</a> – einen JavaScript-HTTP-Client mit über 100 Millionen wöchentlichen Downloads.</p><p>Über ein kompromittiertes Maintainer-Konto wurden manipulierte Versionen (1.14.1 und 0.30.4) veröffentlicht. Eine eingeschleuste Dependency (<code className="">plain-crypto-js@4.2.1</code>) installierte einen Remote-Access-Trojaner, der unter macOS, Windows und Linux lauffähig war. Beide Release-Branches wurden innerhalb von 39 Minuten getroffen, und die Malware war so konzipiert, dass sie sich nach der Ausführung selbst löschte.</p><h2 id="die-muster-hinter-diesen-angriffen">Die Muster hinter diesen Angriffen</h2><p>Über alle fünf Vorfälle hinweg zeichnen sich drei Angriffsmuster ab – und alle nutzen das implizite Vertrauen aus, das CI/CD-Pipelines ihren Eingaben entgegenbringen.</p><h3 id="muster-1-vergiftete-tools-und-actions">Muster 1: Vergiftete Tools und Actions</h3><p>Die TeamPCP-Kampagne nutzte eine grundlegende Annahme aus: dass die Sicherheitstools, die <em>innerhalb</em> der Pipeline laufen, selbst vertrauenswürdig sind. Wenn ein GitHub-Action-Tag oder eine PyPI-Paketversion auf Schadcode verweist, führt die Pipeline diesen mit vollem Zugriff auf Umgebungs-Secrets, Cloud-Zugangsdaten und Deployment-Tokens aus. Es gibt keinen Verifizierungsschritt, weil die Pipeline dem Tag vertraut.</p><p><strong>Empfohlene Pipeline-Kontrolle:</strong> Tools und Actions an unveränderliche Referenzen (Commit-SHAs oder Image-Digests) pinnen statt an veränderliche Versions-Tags. Wo Pinning nicht praktikabel ist, die Integrität von Tools und Dependencies gegen bekannte Prüfsummen oder Signaturen verifizieren. Die Ausführung blockieren, wenn die Verifizierung fehlschlägt.</p><h3 id="muster-2-packaging-fehlkonfigurationen-die-ip-leaken">Muster 2: Packaging-Fehlkonfigurationen, die IP leaken</h3><p>Eine fehlkonfigurierte Build-Pipeline lieferte Debugging-Artefakte direkt im Produktionspaket aus. Eine falsch konfigurierte <code className="">.npmignore</code>- oder files-Angabe in der package.json reicht dafür aus. Ein Validierungsschritt vor der Veröffentlichung sollte das jedes Mal abfangen.</p><p><strong>Empfohlene Pipeline-Kontrolle:</strong> Vor jeder Paketveröffentlichung automatisierte Prüfungen ausführen, die den Paketinhalt gegen eine Allowlist validieren, unerwartete Dateien (Source Maps, interne Konfigurationen, .env-Dateien) kennzeichnen und den Publish-Schritt blockieren, wenn die Prüfungen fehlschlagen.</p><h3 id="muster-3-schwachstellen-in-transitiven-dependencies">Muster 3: Schwachstellen in transitiven Dependencies</h3><p>Der axios-Angriff zielte nicht nur auf direkte axios-Nutzer, sondern auf jeden, dessen Dependency-Tree auf die kompromittierte Version auflöste. Eine einzige vergiftete Dependency in einem Lockfile kann sich so über die gesamte Build-Infrastruktur einer Organisation ausbreiten.</p><p><strong>Empfohlene Pipeline-Kontrolle:</strong> Dependency-Prüfsummen gegen den bekannten Lockfile-Stand vergleichen. Unerwartete neue Dependencies oder Versionsänderungen erkennen. Builds blockieren, die nicht verifizierte Pakete einführen.</p><h2 id="wie-gitlab-pipeline-execution-policies-jedes-angriffsmuster-adressieren">Wie GitLab Pipeline Execution Policies jedes Angriffsmuster adressieren</h2><p>GitLab Pipeline Execution Policies (<a href="https://docs.gitlab.com/user/application_security/policies/pipeline_execution_policies/" rel="">PEPs</a>) ermöglichen es Security- und Plattformteams, verpflichtende CI/CD-Jobs in jede Pipeline einer Organisation einzufügen – unabhängig davon, was in der <code className="">.gitlab-ci.yml</code> definiert ist. Durch PEPs definierte Jobs können nicht übersprungen werden, auch nicht mit den Direktiven <code className="">[skip ci]</code> oder <code className="">[no_pipeline]</code>. Jobs können in <em>reservierten</em> Stages (<code className="">.pipeline-policy-pre</code> und <code className="">.pipeline-policy-post</code>) ausgeführt werden, die die Pipeline des Entwicklungsteams einrahmen.</p><p>Wir haben einsatzbereite Pipeline Execution Policies für alle drei Muster als Open-Source-Projekt veröffentlicht: <a href="https://gitlab.com/gitlab-org/security-risk-management/security-policies/projects/supply-chain-policies" rel="">Supply Chain Policies</a>. Diese Policies sind unabhängig voneinander deploybar, und jede wird mit Testdaten für Verstöße ausgeliefert, um sie vorab zu testen. So funktioniert jede einzelne.</p><h3 id="use-case-1-versehentliche-offenlegung-beim-package-publishing-verhindern">Use Case 1: Versehentliche Offenlegung beim Package-Publishing verhindern</h3><p><strong>Problem:</strong> Eine Source-Map-Datei landete im npm-Paket eines AI-Coding-Tools, weil die Build-Pipeline die Validierung beim Publishing übersprungen hatte.</p><p><strong>PEP-Ansatz:</strong> Wir haben eine Open-Source Pipeline Execution Policy für genau diese Fehlerklasse erstellt: <a href="https://gitlab.com/gitlab-org/security-risk-management/security-policies/projects/supply-chain-policies/-/blob/main/artifact-hygiene.gitlab-ci.yml?ref_type=heads" rel="">Artifact Hygiene</a>.</p><p>Die Policy injiziert <code className="">.pipeline-policy-pre</code>-Jobs, die den Artefakttyp (npm-Paket, Docker-Image oder Helm-Chart) automatisch erkennen und den Inhalt prüfen, bevor ein Publish-Schritt ausgeführt wird. Für npm-Pakete führt sie drei Prüfungen durch:</p><ol><li><strong>File-Pattern-Blocklist.</strong> Scannt die npm-pack-Ausgabe nach Source Maps (.map), Testverzeichnissen, Build-Konfigurationen, IDE-Einstellungen und src/-Verzeichnissen.</li><li><strong>Package-Size-Gate.</strong> Blockiert Pakete über 50 MB – wie das 59,8-MB-Paket, das den AI-Tool-Quellcode leakte.</li><li><strong>sourceMappingURL-Scan.</strong> Erkennt externe URLs (das R2-Bucket-Muster, das den Quellcode eines großen AI-Unternehmens offenlegte), Inline-data:-URIs und lokale Dateireferenzen in JavaScript-Bundles.</li></ol><p>Wenn Verstöße gefunden werden, schlägt die Pipeline mit einem klaren Bericht in den CI-Job-Logs fehl:</p><pre className="language-text" code="=============================================
FAILED: 3 violation(s) found
=============================================
BLOCKED: dist/index.js.map (matched: \.map$)
BLOCKED: dist/index.js contains external sourceMappingURL
BLOCKED: dist/utils.js contains inline sourceMappingURL

This check is enforced by a Pipeline Execution Policy.
If this is a false positive, contact the security team to update the policy project or exclude this project.
" language="text" meta=""><code>=============================================
FAILED: 3 violation(s) found
=============================================
BLOCKED: dist/index.js.map (matched: \.map$)
BLOCKED: dist/index.js contains external sourceMappingURL
BLOCKED: dist/utils.js contains inline sourceMappingURL

This check is enforced by a Pipeline Execution Policy.
If this is a false positive, contact the security team to update the policy project or exclude this project.
</code></pre><p>Die Policy hat keine vom Nutzer konfigurierbaren CI-Variablen. Das Entwicklungsteam kann sie weder deaktivieren noch umgehen. Ausnahmen werden vom Security-Team auf Policy-Ebene verwaltet – das gewährleistet einen bewussten Prozess und einen lückenlosen Audit-Trail.</p><p>Das Repository enthält ein Testprojekt mit absichtlichen Verstößen (examples/leaky-npm-package/), um die Policy in Aktion zu sehen, bevor sie in der Organisation ausgerollt wird. Die <a href="https://gitlab.com/gitlab-org/security-risk-management/security-policies/projects/supply-chain-policies/-/blob/main/README.md" rel="">README</a> enthält eine vollständige Schnellstart-Anleitung für Einrichtung und Deployment.</p><p><strong>Was das abfängt:</strong> Jede einzelne dieser Kontrollen hätte das Source-Code-Leak des AI-Unternehmens wahrscheinlich verhindert:</p><ul><li>Die Source-Map-Datei löst die File-Pattern-Blocklist aus.</li><li>Die Größe von 59,8 MB löst das Size-Gate aus.</li><li>Die sourceMappingURL mit Verweis auf einen externen R2-Bucket löst den URL-Scan aus.</li></ul><h3 id="use-case-2-dependency-tampering-und-lockfile-manipulation-erkennen">Use Case 2: Dependency-Tampering und Lockfile-Manipulation erkennen</h3><p><strong>Problem:</strong> Der axios-Angriff führte eine bösartige transitive Dependency (<code className="">plain-crypto-js</code>) ein, die bei der Installation einen RAT ausführte. Jeder, der während des Kompromittierungsfensters <code className="">npm install</code> ausführte, zog den Trojaner mit.</p><p><strong>PEP-Ansatz:</strong> Die <a href="https://gitlab.com/gitlab-org/security-risk-management/security-policies/projects/supply-chain-policies/-/blob/main/dependency-integrity.gitlab-ci.yml" rel="">Dependency Integrity Policy</a> injiziert .pipeline-policy-pre-Jobs, die das Paket-Ökosystem (npm oder Python) automatisch erkennen und drei Prüfungen durchführen:</p><p><strong>Für npm-Projekte</strong> (ausgelöst durch <code className="">package-lock.json</code>, <code className="">yarn.lock</code> oder <code className="">pnpm-lock.yaml</code>):</p><ol><li><strong>Lockfile-Integrität.</strong> Führt <code className="">npm ci --ignore-scripts</code> aus, was fehlschlägt, wenn sich <code className="">node_modules</code> vom Lockfile-Stand unterscheiden würden. Dies erkennt Fälle, in denen die package.json aktualisiert, aber das Lockfile nicht neu generiert wurde, und verifiziert gleichzeitig SRI-Integritäts-Hashes.</li><li><strong>Blocked-Package-Scan.</strong> Gleicht den vollständigen Dependency-Tree des Lockfiles mit <code className="">blocked-packages.yml</code> ab – einer von GitLab gepflegten Liste bekannter kompromittierter Paketversionen. Die mitgelieferte Blocklist enthält <code className="">axios@1.14.1</code>, <code className="">axios@0.30.4</code> und <code className="">plain-crypto-js@4.2.1</code>.</li><li><strong>Erkennung nicht deklarierter Dependencies.</strong> Vergleicht nach der Installation den Inhalt von node_modules mit dem Lockfile. Jedes Paket, das auf der Festplatte vorhanden, aber nicht im Lockfile aufgeführt ist, deutet auf Manipulation hin (z. B. ein kompromittiertes postinstall-Skript, das zusätzliche Pakete nachlädt).</li></ol><p><strong>Für Python-Projekte</strong> (ausgelöst durch <code className="">requirements.txt</code>, <code className="">Pipfile.lock</code>, <code className="">poetry.lock</code> oder <code className="">uv.lock</code>):</p><ol><li><strong>Lockfile-Integrität.</strong> Installation in einer isolierten virtuellen Umgebung mit Verifizierung, dass die Installation aus dem Lockfile erfolgreich ist.</li><li><strong>Blocked-Package-Scan.</strong> Derselbe Blocklist-Ansatz. Die mitgelieferte Liste enthält <code className="">litellm==1.82.7</code> und <code className="">litellm==1.82.8</code>.</li><li><strong>.pth-Datei-Erkennung.</strong> Scannt site-packages nach <code className="">.pth</code>-Dateien, die ausführbare Code-Muster enthalten (<code className="">import os</code>, <code className="">exec(</code>, <code className="">eval(</code>, <code className="">__import__</code>, <code className="">subprocess</code>, <code className="">socket</code>). Genau diesen Mechanismus nutzte die LiteLLM-Backdoor.</li></ol><p>Bei einem erkannten Verstoß:</p><pre className="language-text" code="=============================================
FAILED: 1 violation(s) found
=============================================
BLOCKED: axios@1.14.1 is a known-compromised package

This check is enforced by a Pipeline Execution Policy.
" language="text" meta=""><code>=============================================
FAILED: 1 violation(s) found
=============================================
BLOCKED: axios@1.14.1 is a known-compromised package

This check is enforced by a Pipeline Execution Policy.
</code></pre><p>Die Policy läuft im <em>Strict Mode</em>: Jede Dependency, die nicht im committeten Lockfile vorhanden ist, blockiert die Pipeline. Wenn eine neue Dependency hinzugefügt werden soll, wird das aktualisierte Lockfile committet. Die Policy verifiziert, dass die installierte Version mit der committeten Version übereinstimmt. Wenn etwas auftaucht, das nicht committet wurde (z. B. eine transitive Dependency, die über ein kompromittiertes Upstream-Paket injiziert wurde), blockiert die Pipeline.</p><p><strong>Was das abfängt:</strong> Die Einführung von <code className="">plain-crypto-js</code> als neue, bisher unbekannte Dependency würde durch die Erkennung nicht deklarierter Dependencies gemeldet. Die Version <code className="">axios@1.14.1</code> wird durch den Blocked-Package-Scan erkannt. Die <code className="">.pth</code>-Datei von LiteLLM wird durch die .pth-Erkennung gefunden. Jeder Angriff hat mindestens ein – und oft zwei – unabhängige Erkennungssignale.</p><h3 id="use-case-3-kompromittierte-tools-vor-der-ausführung-erkennen-und-blockieren">Use Case 3: Kompromittierte Tools vor der Ausführung erkennen und blockieren</h3><p><strong>Problem:</strong> TeamPCP ersetzte vertrauenswürdige Trivy- und Checkmarx-GitHub-Action-Tags durch bösartige Versionen. Jede Pipeline, die diese Tags referenzierte, führte Credential-Stealing-Malware aus.</p><p><strong>PEP-Ansatz:</strong> Die <a href="https://gitlab.com/gitlab-org/security-risk-management/security-policies/projects/supply-chain-policies/-/blob/main/tool-integrity.gitlab-ci.yml" rel="">Tool Integrity Policy</a> injiziert einen <code className="">.pipeline-policy-pre</code>-Job, der die GitLab CI Lint API abfragt (oder als Fallback die <code className="">.gitlab-ci.yml</code> auswertet), die Container-Image-Referenzen extrahiert und mit einer vom Security-Team gepflegten Allowlist genehmigter Images abgleicht.</p><p>Die Allowlist (<code className="">approved-images.yml</code>) unterstützt drei Kontrollen pro Image:</p><p><strong>Genehmigte Repositories:</strong> Nur Images aus gelisteten Repositories sind zulässig. Ein unbekanntes Repository blockiert die Pipeline.</p><p><strong>Erlaubte Tags:</strong> Innerhalb eines genehmigten Repositorys sind nur bestimmte Tags zulässig. Das verhindert den Drift zu ungetesteten Versionen.</p><p><strong>Blockierte Tags:</strong> Bekannte kompromittierte Versionen können explizit blockiert werden, selbst wenn das Repository genehmigt ist. Die mitgelieferte Allowlist blockiert <code className="">aquasec/trivy:0.69.4</code> bis <code className="">0.69.6</code> – genau die Versionen, die TeamPCP trojanisiert hatte.</p><p>Bei einem erkannten Verstoß schlägt die Pipeline fehl, bevor ein anderer Job ausgeführt wird:</p><pre className="language-text" code="=============================================
FAILED: 1 violation(s) found
=============================================
BLOCKED: aquasec/trivy:0.69.4 (job: trivy-scan)
 - tag &#39;0.69.4&#39; is known-compromised
This check is enforced by a Pipeline Execution Policy.
" language="text" meta=""><code>=============================================
FAILED: 1 violation(s) found
=============================================
BLOCKED: aquasec/trivy:0.69.4 (job: trivy-scan)
 - tag &#39;0.69.4&#39; is known-compromised
This check is enforced by a Pipeline Execution Policy.
</code></pre><p>Die Allowlist wird über Merge Requests gegen das Policy-Projekt gepflegt. Um ein neues genehmigtes Image hinzuzufügen, öffnet das Security-Team einen MR. Um auf eine neue Kompromittierung zu reagieren, wird ein blockierter Tag hinzugefügt. Keine Code-Änderungen nötig – nur YAML.</p><p><strong>Was das abfängt:</strong> Wenn Images mit nicht genehmigten Tags erkannt werden, vergleicht die Policy die Image-Repository-Namen und Tags mit der Allowlist. Ein fehlgeschlagener Abgleich blockiert die Pipeline, bevor ein Scanner ausgeführt wird – und verhindert so die Exfiltration von Zugangsdaten.</p><p><em>Hinweis: Durch Erweiterung des obigen Beispiels können PEPs auch das Pinning auf Digests statt Tags erzwingen, was gegen Force-Pushes immun ist. Dieses Beispiel demonstriert ein einfacheres Tag-basiertes Enforcement-Muster.</em></p><h2 id="über-peps-hinaus-gitlabs-supply-chain-schutzmaßnahmen">Über PEPs hinaus: GitLabs Supply-Chain-Schutzmaßnahmen</h2><p>Pipeline Execution Policies sind die Enforcement-Schicht – sie funktionieren aber am besten als Teil einer breiteren Defense-in-Depth-Strategie. GitLab bietet mehrere Funktionen, die PEPs beim Supply-Chain-Schutz ergänzen:</p><h3 id="secret-detection">Secret Detection</h3><p><a href="https://docs.gitlab.com/user/application_security/secret_detection/" rel="">GitLab Secret Detection</a> verhindert, dass Zugangsdaten überhaupt im Repository landen, und reduziert so erheblich, was ein kompromittiertes Pipeline-Tool abgreifen kann. Im Kontext der Angriffe vom März 2026:</p><ul><li>In Repositories gespeicherte Zugangsdaten sind sowohl leichter für Angreifer auffindbar als auch langsamer zu rotieren. Der Trivy-Vorfall zeigte, dass selbst der Rotationsprozess ausgenutzt werden kann: Die Rotation von Aqua Security war nicht atomar, und der Angreifer erbeutete neu ausgestellte Tokens, bevor die alten vollständig widerrufen waren. GitLab Secret Detection umfasst die automatische Revokation geleakter GitLab-Tokens sowie eine Partner-API, die Drittanbieter benachrichtigt, damit diese ihre Zugangsdaten widerrufen – das beschleunigt die Reaktion im Falle eines Sicherheitsvorfalls.</li><li>Secret Detection in Kombination mit ordnungsgemäßem Secret-Management (kurzlebige Tokens, Vault-gestützte Zugangsdaten, minimale Pipeline-Secret-Exposition) begrenzt, was ein Angreifer erreichen kann – selbst wenn ein vertrauenswürdiges Tool kompromittiert wird.</li></ul><h3 id="dependency-scanning-via-software-composition-analysis-sca">Dependency Scanning via Software Composition Analysis (SCA)</h3><p><a href="https://docs.gitlab.com/user/application_security/dependency_scanning/" rel="">GitLab Dependency Scanning</a> identifiziert bekannte Schwachstellen in Projektabhängigkeiten durch Analyse von Lockfiles und Manifests. Im Kontext der Angriffe vom März 2026:</p><ul><li>Für LiteLLM werden die kompromittierten Versionen (1.82.7, 1.82.8) in GitLabs Advisory-Datenbank geführt und betroffene Python-Projekte automatisch gemeldet.</li><li>Für axios identifiziert Dependency Scanning die kompromittierten Versionen (1.14.1, 0.30.4) über alle Projekte der Organisation hinweg – das gibt Security-Teams eine zentrale Ansicht zur Bewertung des Blast-Radius und zur Priorisierung der Credential-Rotation.</li><li>Ebenso werden alle npm-Pakete, die durch die CanisterWorm-Propagation von TeamPCP kompromittiert wurden, gemeldet, wenn sie in Verwendung sind.</li></ul><p><a href="https://docs.gitlab.com/user/application_security/container_scanning/" rel="">GitLab Container Scanning</a> erkennt verwundbare Container-Images in den Deployments. Für den Trivy-Vorfall meldet Container Scanning die trojanisierten Trivy-Docker-Images (0.69.4 bis 0.69.6), wenn sie in der Container Registry oder in Deployment-Manifests auftauchen.</p><h3 id="merge-request-approval-policies">Merge-Request-Approval-Policies</h3><p><a href="https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/" rel="">Merge-Request-Approval-Policies</a> können die Genehmigung durch das Security-Team erfordern, bevor Änderungen an Dependency-Lockfiles oder CI/CD-Konfigurationen gemergt werden. Das stellt einen menschlichen Kontrollpunkt für genau die Art von Änderungen sicher, die Supply-Chain-Angriffe typischerweise einführen.</p><h3 id="demnächst-dependency-firewall-artifact-registry-und-slsa-level-3-attestation-verification">Demnächst: Dependency Firewall, Artifact Registry und SLSA Level 3 Attestation &amp; Verification</h3><p>Kommende Supply-Chain-Sicherheitsfunktionen in GitLab härten die Policy-Durchsetzung an zwei kritischen Kontrollpunkten: der Registry und der Pipeline. Die Dependency Firewall und Artifact Registry werden nicht-konforme Pakete blockieren, während die SLSA-Level-3-Attestation kryptografischen Nachweis liefert, dass Artefakte von genehmigten Pipelines erzeugt wurden und unverändert geblieben sind. Zusammen geben sie Security-Teams verifizierbare Kontrolle darüber, was in die Software-Supply-Chain eingeht und diese verlässt.</p><h2 id="was-das-für-deine-organisation-bedeutet">Was das für deine Organisation bedeutet</h2><p>Inmitten zunehmender AI-gestützter Bedrohungen werden Angriffe auf CI/CD-Pipelines alltäglich. Die TeamPCP-Kampagne zeigt, wie ein einziges kompromittiertes Zugangsdaten-Set über ein Ökosystem vertrauenswürdiger Tools kaskadieren kann.</p><p>Wenn deine Organisation eine der betroffenen Komponenten eingesetzt hat, gehe davon aus, dass alle Pipeline-Secrets kompromittiert wurden: Rotiere sie umgehend und überprüfe Systeme auf persistente Backdoors. Unabhängig davon begrenzt die regelmäßige Rotation von Zugangsdaten und die Verwendung kurzlebiger Tokens den Blast-Radius jeder zukünftigen Kompromittierung.</p><p>Folgendes empfehlen wir:</p><ol><li><strong>Dependencies wenn möglich an Prüfsummen pinnen.</strong> Veränderliche Versions-Tags (wie die, die TeamPCP gekapert hat) sind keine Sicherheitsgrenze. SHA-gepinnte Referenzen für alle <a href="https://docs.gitlab.com/ci/components/#manage-dependencies" rel="">CI/CD-Komponenten</a> oder Actions und Container-Images verwenden.</li><li><strong>Pre-Execution-Integritätsprüfungen ausführen.</strong> Pipeline Execution Policies nutzen, um die Integrität von Tools und Dependencies <em>vor</em> der Ausführung jedes Pipeline-Jobs zu verifizieren. Das ist die <code className="">.pipeline-policy-pre</code>-Stage.</li><li><strong>Prüfen, was veröffentlicht wird.</strong> Jeder Package-Publish-Schritt sollte eine automatisierte Validierung des Artefaktinhalts umfassen. Source Maps, Environment-Dateien und interne Konfigurationen sollten die Build-Umgebung niemals verlassen. Das <a href="https://gitlab.com/gitlab-org/security-risk-management/security-policies/projects/supply-chain-policies" rel="">Supply Chain Policy</a>-Projekt bietet einen sofort einsetzbaren Ausgangspunkt für npm-, Docker- und Helm-Artefakte.</li><li><strong>Dependency-Drift erkennen.</strong> Dependency-Auflösungen bei jedem Pipeline-Lauf gegen committete Lockfiles vergleichen. Auf unerwartete neue Dependencies achten.</li><li><strong>Policy-Management zentralisieren.</strong> Sich nicht darauf verlassen, dass Entwicklungsteams daran denken, Security-Checks einzubinden. Diese auf Gruppen- oder Instanzebene über Policies durchsetzen, die nicht entfernt oder übersprungen werden können.</li><li><strong>Davon ausgehen, dass Security-Tools selbst Ziele sind.</strong> Wenn dein Vulnerability-Scanner, SAST-Tool oder AI-Gateway kompromittiert werden kann, wird es das auch. Jedes Tool auf die minimal notwendigen Berechtigungen beschränken und sicherstellen, dass es auf nichts anderes zugreifen kann.</li></ol><h2 id="schütze-deine-pipelines-mit-gitlab">Schütze deine Pipelines mit GitLab</h2><p>Innerhalb von zwei Wochen kompromittierten Angreifer Produktions-Pipelines bei Organisationen, die einige der am weitesten verbreiteten Tools im Software-Entwicklungs-Ökosystem einsetzten.</p><p>Die Lektion ist klar: Build-Pipelines brauchen denselben Grad an zentralem, Policy-gesteuertem Schutz, den wir auf Netzwerke und Cloud-Infrastruktur anwenden.</p><p>GitLab Pipeline Execution Policies bieten diese Enforcement-Schicht. Sie stellen sicher, dass Security-Checks in jeder Pipeline und in jedem Projekt ausgeführt werden – unabhängig von den einzelnen Projektkonfigurationen. In Kombination mit Dependency Scanning, Secret Detection und Merge-Request-Approval-Policies können sie die Angriffsklassen, die wir im März 2026 erlebt haben, blockieren, erkennen und eindämmen.</p><p>Das <a href="https://gitlab.com/gitlab-org/security-risk-management/security-policies/projects/supply-chain-policies" rel="">Supply Chain Policies</a>-Projekt bietet eine funktionsfähige Pipeline Execution Policy, die genau die Fehlerklasse abfängt, die hinter dem Leak des großen AI-Unternehmens steckt – mit Abdeckung für npm-Pakete, Docker-Images und Helm-Charts. Klone es, deploye es in deiner Gruppe und stelle sicher, dass alle deine Pipelines für kommende Supply-Chain-Angriffe gewappnet sind.</p><p>Um mit zentralen Pipeline-Policies zu starten, registriere dich für eine <a href="https://about.gitlab.com/de-de/free-trial/devsecops/" rel="">kostenlose Testversion von GitLab Ultimate</a>.</p><p><em>Dieser Blogbeitrag enthält „zukunftsgerichtete Aussagen&quot; im Sinne von Abschnitt 27A des Securities Act von 1933 in der jeweils gültigen Fassung und Abschnitt 21E des Securities Exchange Act von 1934. Obwohl wir davon ausgehen, dass die in diesen Aussagen wiedergegebenen Erwartungen angemessen sind, unterliegen sie bekannten und unbekannten Risiken, Unsicherheiten, Annahmen und anderen Faktoren, die dazu führen können, dass die tatsächlichen Ergebnisse wesentlich abweichen. Weitere Informationen zu diesen Risiken und anderen Faktoren finden sich unter der Überschrift „Risk Factors&quot; in unseren Einreichungen bei der SEC. Wir übernehmen keine Verpflichtung, diese Aussagen nach dem Datum dieses Blogbeitrags zu aktualisieren oder zu revidieren, sofern dies nicht gesetzlich vorgeschrieben ist.</em></p>]]></content>
        <author>
            <name>Grant Hickman</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/grant-hickman/</uri>
        </author>
        <published>2026-04-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Duo CLI: Agentenbasierte KI jetzt auch im Terminal]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-duo-cli/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-duo-cli/"/>
        <updated>2026-04-07T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Wer Pipelines debuggt oder KI in automatisierte CI/CD-Workflows integriert, ohne dass jemand dabei zusieht, kommt mit bisherigen KI-Assistenten schnell an Grenzen: Diese konzentrieren sich auf Code-Erstellung und decken damit nur einen Teil des Software-Lebenszyklus ab. GitLab Duo CLI, jetzt in der öffentlichen Beta, schließt diese Lücke.</p><p>GitLab Duo CLI bringt die agentenbasierte KI der <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">Duo Agent Platform</a> ins Terminal – mit vollständiger Unterstützung für automatisierte Workflows und einem interaktiven Chat-Modus, wenn ein Mensch im Loop bleiben soll. Dieser Artikel beschreibt, was Duo CLI leistet, wie die beiden Betriebsmodi funktionieren und welches Sicherheitsmodell dahintersteht.</p><h2 id="gitlab-duo-cli-installieren">GitLab Duo CLI installieren</h2><p>Wer GLab (die GitLab CLI) bereits installiert hat, führt folgenden Befehl aus:</p><pre className="language-text" code="glab duo cli
" language="text"><code>glab duo cli
</code></pre><p>Anschließend einfach den Anweisungen folgen.</p><p>Ohne GLab: <a href="https://gitlab.com/gitlab-org/cli/#installation" rel="">Hier installieren</a> oder <a href="https://docs.gitlab.com/user/gitlab_duo_cli/#without-the-gitlab-cli" rel="">Duo CLI als eigenständiges Tool verwenden</a>.</p><h2 id="warum-das-terminal-und-warum-jetzt">Warum das Terminal – und warum jetzt</h2><p>Die erste Generation von KI-Assistenten für die Softwareentwicklung war auf die IDE ausgerichtet und konzentrierte sich ausschließlich auf Code-Erstellung. Das war sinnvoll, solange Autovervollständigung im Vordergrund stand. Sobald KI-Agenten jedoch eigenständig handeln – Tests ausführen, Pipelines auslösen, Vulnerability-Scans überwachen und mehr – reicht die IDE als einzige Abstraktionsebene nicht mehr aus.</p><p>Die besten Entwickler-Tools funktionieren sowohl für Menschen als auch für Maschinen. CLIs haben sich über Jahrzehnte in genau diese Richtung entwickelt. Sie sind komponierbar: Output lässt sich weiterleiten, Befehle verketten, Skripte einbetten. Sie sind nachvollziehbar: Wenn etwas schiefläuft, führt man denselben Befehl aus und sieht genau, was der Agent gesehen hat. Und sie sind transparent: keine Hintergrundprozesse, kein Initialisierungsaufwand, kein Protokoll, das beim Fehlerfall erst entschlüsselt werden muss.</p><p>Terminal-Interfaces eignen sich besser für Automatisierung, Scripting und portable Umgebungen. IDE-Interfaces bieten sich für interaktive, kontextreiche Entwicklung an. GitLab Duo CLI ist für ersteres ausgelegt – Duo Agentic Chat in IDE und UI deckt letzteres ab.</p><h2 id="was-gitlab-duo-cli-kann">Was GitLab Duo CLI kann</h2><p>Mit GitLab Duo CLI lässt sich Code erstellen, anpassen, refaktorieren und modernisieren – vergleichbar mit anderen KI-gestützten Coding-Assistenten für das Terminal. Darüber hinaus sind alle Agenten und Flows der GitLab Duo Agent Platform über Duo CLI zugänglich: von der Automatisierung von CI/CD-Konfigurationen und Pipeline-Optimierungen bis hin zur autonomen Ausführung mehrstufiger Entwicklungsaufgaben über den gesamten Software-Lebenszyklus.</p><p>GitLab Duo CLI läuft in zwei Modi:</p><ul><li><strong>Interaktiver Modus</strong> – eine editor-unabhängige Terminal-Chat-Umgebung mit menschlicher Freigabe vor jeder Aktion. Geeignet für das Verstehen von Codebase-Strukturen, das Erstellen von Code, die Fehlersuche oder das Troubleshooting von Pipelines.</li><li><strong>Headless-Modus</strong> – nicht-interaktiv, ausgelegt für Runner, Skripte und automatisierte Workflows. Direkt in CI/CD einbinden, ohne manuelle Eingriffe.</li></ul><h2 id="ki-mit-leitplanken">KI mit Leitplanken</h2><p>Agentenbasierte KI, die eigenständig Aktionen ausführen kann, birgt reale Sicherheitsrisiken. GitLab Duo CLI adressiert diese auf Plattformebene – nicht nachträglich:</p><ul><li><strong>Human-in-the-Loop standardmäßig</strong> im interaktiven Modus: Keine Aktion wird ohne Freigabe ausgeführt.</li><li><strong>Prompt-Injection-Erkennung</strong> ist in der GitLab Duo Agent Platform integriert, nicht nachgerüstet.</li><li><strong>Composite Identity</strong> – eine kombinierte Identität, die sowohl den Nutzenden als auch den Agenten repräsentiert – begrenzt die Zugriffsrechte des Agenten und macht jede KI-gesteuerte Aktion nachvollziehbar.</li></ul><p>GitLab Duo CLI unterstützt darüber hinaus <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/" rel="">benutzerdefinierte Instruktionsdateien</a> – z. B. <code className="">chat-rules.md</code>, <code className="">AGENTS.md</code> und <code className="">SKILL.md</code> – die festlegen, welche Aufgaben, Ressourcen, Kontexte und Aktionen ein Agent ausführen darf. <strong>Das ist das Prinzip der minimalen Rechtevergabe auf KI angewendet: Der Agent tut genau das, wozu er autorisiert wurde – und nichts darüber hinaus.</strong></p><p>GitLab Duo CLI in Aktion:</p><iframe src="https://player.vimeo.com/video/1179964611?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="GitLab Duo CLI Beta Demo V1"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="gitlab-duo-cli-ausprobieren">GitLab Duo CLI ausprobieren</h2><p>Den Einstieg bietet ein <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">kostenloser Test der GitLab Duo Agent Platform</a>.</p><p>Wer GitLab bereits im Free Tier nutzt, kann GitLab Duo Agent Platform durch <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">wenige einfache Schritte</a> aktivieren.</p><p>Bestehende GitLab-Premium- oder -Ultimate-Abonnenten können Duo CLI nutzen, indem sie <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platform aktivieren</a> – die benötigten GitLab Credits sind im jeweiligen Abonnement <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">bereits enthalten</a>.</p>]]></content>
        <author>
            <name>John Coghlan</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/john-coghlan/</uri>
        </author>
        <published>2026-04-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Feature Flags in Python einrichten]]></title>
        <id>https://about.gitlab.com/de-de/blog/getting-started-with-gitlab-feature-flags-in-python/</id>
        <link href="https://about.gitlab.com/de-de/blog/getting-started-with-gitlab-feature-flags-in-python/"/>
        <updated>2026-03-26T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<h2 id="feature-flags-als-methode-zur-deployment-risikominimierung">Feature Flags als Methode zur Deployment-Risikominimierung</h2><p>Wochen Entwicklungsarbeit, abgeschlossenes Code-Review, alle Tests grün. Das Feature gelangt in die Produktion – und innerhalb einer Stunde treffen Fehlerberichte ein. Der Code verhält sich für die meisten Nutzenden korrekt, aber bestimmte Produktions-Szenarien, die im Staging nicht aufgetreten sind, führen bei einem Teil der Nutzenden zu Ausfällen. Das Ergebnis: ungeplanter Rollback, Incident-Dokumentation, Ursachenanalyse.</p><p>Feature Flags verhindern genau das. Das Prinzip: Deployment und Release werden entkoppelt. Code gelangt in die Produktion, sobald er bereit ist – wer das neue Feature tatsächlich sieht, wird unabhängig davon über einen Schalter in GitLab gesteuert. Kein Redeployment, kein Hotfix, keine ungeplante Rollback-Prozedur.</p><h3 id="systematisch-gesteuerte-rollouts">Systematisch gesteuerte Rollouts</h3><p>Der eigentliche Wert von Feature Flags liegt in der schrittweisen Freigabe. Ein typischer Ablauf:</p><ol><li><strong>QA-Team (User-IDs-Strategie):</strong> Das Feature ist nur für interne Tester sichtbar. Probleme werden erkannt, bevor externe Nutzende betroffen sind.</li><li><strong>Prozentualer Rollout (z. B. 10 %):</strong> Das Feature wird für einen definierten Anteil der Nutzenden aktiviert. Metriken und Fehlerraten lassen sich unter realen Bedingungen beobachten.</li><li><strong>Vollständige Freigabe:</strong> Erst wenn das Verhalten in der Produktion validiert ist, wird das Feature für alle aktiviert.</li></ol><p>Tritt auf einer Stufe ein Problem auf, reicht ein Klick in der GitLab-Oberfläche, um das Feature zu deaktivieren – ohne Code-Änderung, ohne Pipeline.</p><h3 id="skalierung-und-produktionsbetrieb">Skalierung und Produktionsbetrieb</h3><p>GitLab stellt für jedes Projekt eine Unleash-kompatible API bereit. Der Unleash-SDK pollt die Flag-Definitionen beim Start und danach in einem konfigurierbaren Intervall (im Demo-Projekt: 15 Sekunden). Die Auswertung erfolgt lokal aus dem Cache – kein Netzwerkaufruf pro Flag-Abfrage, kein Latenzeinfluss auf den Request.</p><p>Für kleinere Deployments ist das 15-Sekunden-Intervall gut geeignet. Bei Deployments mit vielen App-Instanzen von derselben IP-Adresse gilt: GitLab.com unterstützt bei diesem Intervall rund 125 Clients, bevor Rate-Limits greifen. Für größere Produktionsumgebungen empfiehlt sich ein vorgelagerter Unleash Proxy, der Anfragen mehrerer Instanzen bündelt.</p><h3 id="sicherheitsrelevante-aspekte">Sicherheitsrelevante Aspekte</h3><ul><li><strong>Keine Credentials im Quellcode:</strong> Instance ID und alle Tokens gehören in Umgebungsvariablen, nicht in den Code.</li><li><strong>Instance ID ist read-only:</strong> Sie erlaubt ausschließlich das Abrufen von Flag-Zuständen, keine Änderungen. Trotzdem als Secret behandeln.</li><li><strong>Debug-Modus deaktiviert lassen:</strong> Flasks Debug-Modus ermöglicht Remote Code Execution – in der Produktion zwingend deaktiviert.</li><li><strong>Abhängigkeiten aktuell halten:</strong> <a href="https://docs.gitlab.com/user/application_security/dependency_scanning/" rel="">Dependency Scanning</a> in der CI/CD-Pipeline aktivieren, um Schwachstellen in gepinnten Versionen zu erkennen.</li></ul><h2 id="schritt-für-schritt-integration-in-eine-python-flask-app">Schritt-für-Schritt: Integration in eine Python-Flask-App</h2><p>Dieser Abschnitt gibt einen Überblick über die technische Integration. Die vollständige Implementierung – alle Schritte, der komplette Code und ein lauffähiges Demo-Projekt – ist im <a href="https://about.gitlab.com/blog/getting-started-with-gitlab-feature-flags-in-python/" rel="">englischen Originalartikel</a> beschrieben. Das Demo-Repository steht unter <a href="https://gitlab.com/omid-blogs/gitlab-feature-flags-demo" rel="">gitlab.com/omid-blogs/gitlab-feature-flags-demo</a> zum Forken bereit.</p><h3 id="sdk-vs-gitlab-rest-api">SDK vs. GitLab REST API</h3><p>Für eine App, die Flags bei jedem Request auswertet, ist der SDK die geeignete Wahl:</p><table><thead><tr><th></th><th>REST API</th><th>Unleash SDK</th></tr></thead><tbody><tr><td><strong>Authentifizierung</strong></td><td>Personal Access Token mit Projektberechtigungen</td><td>Nur Instance ID – read-only, auf Flag-Zustand beschränkt</td></tr><tr><td><strong>Flag-Auswertung</strong></td><td>Netzwerkaufruf pro Abfrage</td><td>Lokal aus dem Cache</td></tr><tr><td><strong>Latenz</strong></td><td>Netzwerk-Round-Trip</td><td>Nahezu null (In-Memory)</td></tr><tr><td><strong>Strategie-Unterstützung</strong></td><td>Manuelle Auswertung erforderlich</td><td>Integriert: Prozentualer Rollout, User-ID-Targeting</td></tr><tr><td><strong>Rate-Limits</strong></td><td>GitLab.com API-Limits</td><td>Eine Poll-Verbindung pro App-Instanz</td></tr></tbody></table><h3 id="kernmuster-der-integration">Kernmuster der Integration</h3><p>Die gesamte Integration besteht aus einer Abhängigkeit (<code className="">UnleashClient</code>), drei Umgebungsvariablen und einem Methodenaufruf.</p><p><strong>SDK initialisieren:</strong></p><pre className="language-python shiki shiki-themes github-light" code="    url=UNLEASH_URL,
    app_name=UNLEASH_APP_NAME,
    instance_id=UNLEASH_INSTANCE_ID,
    refresh_interval=15,
    metrics_interval=60,
)
unleash_client.initialize_client() ```

**Flag abfragen:**

```python def is_flag_enabled(flag_name):
    return unleash_client.is_enabled(flag_name)
" language="python" meta="unleash_client = UnleashClient(" style=""><code><span class="line" line="1"><span style="--shiki-default:#24292E">    url</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#005CC5">UNLEASH_URL</span><span style="--shiki-default:#24292E">,
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">    app_name</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#005CC5">UNLEASH_APP_NAME</span><span style="--shiki-default:#24292E">,
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">    instance_id</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#005CC5">UNLEASH_INSTANCE_ID</span><span style="--shiki-default:#24292E">,
</span></span><span class="line" line="4"><span style="--shiki-default:#24292E">    refresh_interval</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#005CC5">15</span><span style="--shiki-default:#24292E">,
</span></span><span class="line" line="5"><span style="--shiki-default:#24292E">    metrics_interval</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#005CC5">60</span><span style="--shiki-default:#24292E">,
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">)
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">unleash_client.initialize_client() </span><span style="--shiki-default:#B31D28;--shiki-default-font-style:italic">```
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span style="--shiki-default:#D73A49">**</span><span style="--shiki-default:#24292E">Flag abfragen:</span><span style="--shiki-default:#D73A49">**
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span style="--shiki-default:#B31D28;--shiki-default-font-style:italic">```python </span><span style="--shiki-default:#D73A49;--shiki-default-font-style:italic">def</span><span style="--shiki-default:#B31D28;--shiki-default-font-style:italic"> is_flag_enabled(flag_name):
</span></span><span class="line" line="12"><span style="--shiki-default:#D73A49">    return</span><span style="--shiki-default:#24292E"> unleash_client.is_enabled(flag_name)
</span></span></code></pre><p><code className="">is_enabled()</code> wertet lokal aus dem Cache aus – kein Netzwerkaufruf, kein Latenzeinfluss auf den Request.</p><p><strong>Nutzerkontext für gezieltes Targeting übergeben:</strong></p><pre className="language-python shiki shiki-themes github-light" code="    &#39;new_layout&#39;,
    context={&#39;userId&#39;: current_user.id}
) ```

Der SDK übernimmt das konsistente Hashing für prozentuale Rollouts. Für die vollständige Einrichtung – Flags in GitLab anlegen, Unleash-Credentials abrufen, App lokal ausführen und Flags in Echtzeit umschalten – siehe den [englischen Originalartikel](https://about.gitlab.com/blog/getting-started-with-gitlab-feature-flags-in-python/).

### Ressourcen

* [Demo-Projekt auf GitLab](https://gitlab.com/omid-blogs/gitlab-feature-flags-demo)
* [GitLab Feature-Flags-Dokumentation](https://docs.gitlab.com/operations/feature_flags/)
* [Unleash Python SDK auf GitHub](https://github.com/Unleash/unleash-python-sdk)
" language="python" meta="unleash_client.is_enabled(" style=""><code><span class="line" line="1"><span style="--shiki-default:#032F62">    &#39;new_layout&#39;</span><span style="--shiki-default:#24292E">,
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">    context</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#24292E">{</span><span style="--shiki-default:#032F62">&#39;userId&#39;</span><span style="--shiki-default:#24292E">: current_user.id}
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">) </span><span style="--shiki-default:#B31D28;--shiki-default-font-style:italic">```
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span style="--shiki-default:#24292E">Der </span><span style="--shiki-default:#005CC5">SDK</span><span style="--shiki-default:#24292E"> übernimmt das konsistente Hashing für prozentuale Rollouts. Für die vollständige Einrichtung – Flags </span><span style="--shiki-default:#D73A49">in</span><span style="--shiki-default:#24292E"> GitLab anlegen, Unleash</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">Credentials abrufen, App lokal ausführen und Flags </span><span style="--shiki-default:#D73A49">in</span><span style="--shiki-default:#24292E"> Echtzeit umschalten – siehe den [englischen Originalartikel](https:</span><span style="--shiki-default:#D73A49">//</span><span style="--shiki-default:#24292E">about.gitlab.com</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">blog</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">getting</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">started</span><span style="--shiki-default:#D73A49">-with-</span><span style="--shiki-default:#24292E">gitlab</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">feature</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">flags</span><span style="--shiki-default:#D73A49">-in-</span><span style="--shiki-default:#24292E">python</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">).
</span></span><span class="line" line="6"><span emptyLinePlaceholder>
</span></span><span class="line" line="7"><span style="--shiki-default:#6A737D">### Ressourcen
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span style="--shiki-default:#D73A49">*</span><span style="--shiki-default:#24292E"> [Demo</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">Projekt auf GitLab](https:</span><span style="--shiki-default:#D73A49">//</span><span style="--shiki-default:#24292E">gitlab.com</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">omid</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">blogs</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">gitlab</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">feature</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">flags</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">demo)
</span></span><span class="line" line="10"><span style="--shiki-default:#D73A49">*</span><span style="--shiki-default:#24292E"> [GitLab Feature</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">Flags</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">Dokumentation](https:</span><span style="--shiki-default:#D73A49">//</span><span style="--shiki-default:#24292E">docs.gitlab.com</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">operations</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">feature_flags</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">)
</span></span><span class="line" line="11"><span style="--shiki-default:#D73A49">*</span><span style="--shiki-default:#24292E"> [Unleash Python </span><span style="--shiki-default:#005CC5">SDK</span><span style="--shiki-default:#24292E"> auf GitHub](https:</span><span style="--shiki-default:#D73A49">//</span><span style="--shiki-default:#24292E">github.com</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">Unleash</span><span style="--shiki-default:#D73A49">/</span><span style="--shiki-default:#24292E">unleash</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">python</span><span style="--shiki-default:#D73A49">-</span><span style="--shiki-default:#24292E">sdk)
</span></span></code></pre><style>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>Omid Khan</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/omid-khan/</uri>
        </author>
        <published>2026-03-26T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Schwachstellen-Rauschen mit Auto-Dismiss-Richtlinien gezielt reduzieren]]></title>
        <id>https://about.gitlab.com/de-de/blog/auto-dismiss-vulnerability-management-policy/</id>
        <link href="https://about.gitlab.com/de-de/blog/auto-dismiss-vulnerability-management-policy/"/>
        <updated>2026-03-25T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Security-Scanner sind unverzichtbar – doch nicht jeder Fund erfordert eine Reaktion. Testcode, eingebettete Abhängigkeiten, generierte Dateien und bekannte False Positives erzeugen Rauschen, das die tatsächlich relevanten Schwachstellen überlagert. Durch das manuelle Schließen immer gleicher, irrelevanter Findings über Projekte und Pipelines hinweg entsteht repetitiver Aufwand im Security-Team. Die Folge: langsameres Triage, Alert-Fatigue und Reibung mit Entwicklungsteams – bis hin zu sinkender Akzeptanz des Security-Scannings selbst.</p><p>Mit den Auto-Dismiss-Richtlinien für Schwachstellen lassen sich Triage-Entscheidungen einmalig in Richtlinien festlegen und automatisch auf jede Pipeline des Standard-Branches anwenden. Kriterien werden anhand von Dateipfad, Verzeichnis oder Schwachstellen-Kennung (CVE, CWE) definiert, ein Abweisungsgrund festgelegt – und GitLab übernimmt den Rest.</p><h2 id="warum-auto-dismiss">Warum Auto-Dismiss?</h2><p>Auto-Dismiss-Richtlinien ermöglichen Security-Teams:</p><ul><li><strong>Triage-Aufwand reduzieren</strong>: Findings in Testcode, eingebetteten Abhängigkeiten und generierten Dateien werden automatisch abgewiesen.</li><li><strong>Entscheidungen organisationsweit durchsetzen</strong>: Bekannte False Positives lassen sich zentral über die gesamte Organisation hinweg abweisen.</li><li><strong>Prüfnachweise sicherstellen</strong>: Jeder automatisch abgewiesene Fund enthält einen dokumentierten Abweisungsgrund mit Verweis auf die auslösende Richtlinie.</li><li><strong>Datenbasis erhalten</strong>: Im Gegensatz zu Scanner-Ausschlüssen verbleiben abgewiesene Schwachstellen im Report – Entscheidungen lassen sich bei veränderten Bedingungen jederzeit überprüfen.</li></ul><h2 id="so-funktionieren-auto-dismiss-richtlinien">So funktionieren Auto-Dismiss-Richtlinien</h2><ol><li><strong>Richtlinie definieren</strong>: In einer YAML-Richtliniendatei Abgleichkriterien (Dateipfad, Verzeichnis oder Kennung) und einen Abweisungsgrund festlegen.</li><li><strong>Zusammenführen und aktivieren</strong>: Richtlinie über <strong>Secure &gt; Policies &gt; New policy &gt; Vulnerability management policy</strong> erstellen. Nach dem Merge des MR ist sie aktiv.</li><li><strong>Pipeline ausführen</strong>: Bei jeder Pipeline des Standard-Branches werden übereinstimmende Schwachstellen automatisch auf „Dismissed&quot; gesetzt und mit dem festgelegten Grund versehen. Pro Ausführung werden bis zu 1.000 Schwachstellen verarbeitet.</li><li><strong>Ergebnis prüfen</strong>: Den Vulnerability-Report nach Status „Dismissed&quot; filtern – so lässt sich nachvollziehen, welche Findings bereinigt wurden und ob die richtigen Einträge erfasst werden.</li></ol><h2 id="anwendungsfälle-mit-einsatzbereiten-konfigurationen">Anwendungsfälle mit einsatzbereiten Konfigurationen</h2><p>Jedes Beispiel enthält eine Richtlinienkonfiguration, die direkt kopiert, angepasst und eingesetzt werden kann.</p><h3 id="_1-schwachstellen-in-testcode-abweisen">1. Schwachstellen in Testcode abweisen</h3><p>SAST- und Dependency-Scanner melden hartcodierte Zugangsdaten, unsichere Fixtures und entwicklungsspezifische Abhängigkeiten in Testverzeichnissen. Diese stellen kein Produktionsrisiko dar.</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Dismiss test code vulnerabilities&quot;
    description: &quot;Auto-dismiss findings in test directories&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: file_path
            value: &quot;test/**/*&quot;
      - type: detected
        criteria:
          - type: file_path
            value: &quot;tests/**/*&quot;
      - type: detected
        criteria:
          - type: file_path
            value: &quot;spec/**/*&quot;
      - type: detected
        criteria:
          - type: directory
            value: &quot;__tests__/*&quot;
    actions:
      - type: auto_dismiss
        dismissal_reason: used_in_tests

" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">vulnerability_management_policy</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Dismiss test code vulnerabilities&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">    description</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Auto-dismiss findings in test directories&quot;
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">    enabled</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#005CC5">true
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">    rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">file_path
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;test/**/*&quot;
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">file_path
</span></span><span class="line" line="13"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;tests/**/*&quot;
</span></span><span class="line" line="14"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="15"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="16"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">file_path
</span></span><span class="line" line="17"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;spec/**/*&quot;
</span></span><span class="line" line="18"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="19"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="20"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">directory
</span></span><span class="line" line="21"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;__tests__/*&quot;
</span></span><span class="line" line="22"><span style="--shiki-default:#22863A">    actions</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="23"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">auto_dismiss
</span></span><span class="line" line="24"><span style="--shiki-default:#22863A">        dismissal_reason</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">used_in_tests
</span></span></code></pre><h3 id="_2-eingebetteten-und-drittanbieter-code-abweisen">2. Eingebetteten und Drittanbieter-Code abweisen</h3><p>Schwachstellen in <code className="">vendor/</code>, <code className="">third_party/</code> oder eingecheckten <code className="">node_modules</code> werden upstream verwaltet und sind für das eigene Team nicht direkt behebbar.</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Dismiss vendored dependency findings&quot;
    description: &quot;Findings in vendored code are managed upstream&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: directory
            value: &quot;vendor/*&quot;
      - type: detected
        criteria:
          - type: directory
            value: &quot;third_party/*&quot;
      - type: detected
        criteria:
          - type: directory
            value: &quot;vendored/*&quot;
    actions:
      - type: auto_dismiss
        dismissal_reason: not_applicable

" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">vulnerability_management_policy</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Dismiss vendored dependency findings&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">    description</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Findings in vendored code are managed upstream&quot;
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">    enabled</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#005CC5">true
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">    rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">directory
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;vendor/*&quot;
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">directory
</span></span><span class="line" line="13"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;third_party/*&quot;
</span></span><span class="line" line="14"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="15"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="16"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">directory
</span></span><span class="line" line="17"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;vendored/*&quot;
</span></span><span class="line" line="18"><span style="--shiki-default:#22863A">    actions</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="19"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">auto_dismiss
</span></span><span class="line" line="20"><span style="--shiki-default:#22863A">        dismissal_reason</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">not_applicable
</span></span></code></pre><h3 id="_3-falsch-positiv-cves-abweisen">3. Falsch-Positiv-CVEs abweisen</h3><p>Bestimmte CVEs werden wiederholt gemeldet, gelten im eigenen Nutzungskontext aber als nicht zutreffend. Bisher wurden diese bei jedem Auftreten manuell abgewiesen. Die Beispiel-CVEs unten durch eigene ersetzen.</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Dismiss known false positive CVEs&quot;
    description: &quot;CVEs confirmed as false positives for our environment&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: identifier
            value: &quot;CVE-2023-44487&quot;
      - type: detected
        criteria:
          - type: identifier
            value: &quot;CVE-2024-29041&quot;
      - type: detected
        criteria:
          - type: identifier
            value: &quot;CVE-2023-26136&quot;
    actions:
      - type: auto_dismiss
        dismissal_reason: false_positive

" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">vulnerability_management_policy</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Dismiss known false positive CVEs&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">    description</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;CVEs confirmed as false positives for our environment&quot;
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">    enabled</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#005CC5">true
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">    rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">identifier
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;CVE-2023-44487&quot;
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">identifier
</span></span><span class="line" line="13"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;CVE-2024-29041&quot;
</span></span><span class="line" line="14"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="15"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="16"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">identifier
</span></span><span class="line" line="17"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;CVE-2023-26136&quot;
</span></span><span class="line" line="18"><span style="--shiki-default:#22863A">    actions</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="19"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">auto_dismiss
</span></span><span class="line" line="20"><span style="--shiki-default:#22863A">        dismissal_reason</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">false_positive
</span></span></code></pre><h3 id="_4-generierten-und-automatisch-erstellten-code-abweisen">4. Generierten und automatisch erstellten Code abweisen</h3><p>Protobuf-, gRPC-, OpenAPI-Generatoren und ORM-Scaffolding-Tools erzeugen Dateien mit gemeldeten Mustern, die vom eigenen Team nicht gepatcht werden können.</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Dismiss generated code findings&quot;
    description: &quot;Generated files are not authored by us&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: directory
            value: &quot;generated/*&quot;
      - type: detected
        criteria:
          - type: file_path
            value: &quot;**/*.pb.go&quot;
      - type: detected
        criteria:
          - type: file_path
            value: &quot;**/*.generated.*&quot;
    actions:
      - type: auto_dismiss
        dismissal_reason: not_applicable

" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">vulnerability_management_policy</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Dismiss generated code findings&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">    description</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Generated files are not authored by us&quot;
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">    enabled</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#005CC5">true
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">    rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">directory
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;generated/*&quot;
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">file_path
</span></span><span class="line" line="13"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;**/*.pb.go&quot;
</span></span><span class="line" line="14"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="15"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="16"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">file_path
</span></span><span class="line" line="17"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;**/*.generated.*&quot;
</span></span><span class="line" line="18"><span style="--shiki-default:#22863A">    actions</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="19"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">auto_dismiss
</span></span><span class="line" line="20"><span style="--shiki-default:#22863A">        dismissal_reason</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">not_applicable
</span></span></code></pre><h3 id="_5-durch-infrastruktur-abgemilderte-schwachstellen-abweisen">5. Durch Infrastruktur abgemilderte Schwachstellen abweisen</h3><p>Schwachstellenklassen wie XSS (CWE-79) oder SQL-Injection (CWE-89), die durch WAF-Regeln oder Laufzeitschutz bereits adressiert sind. Diese Konfiguration nur einsetzen, wenn die abmildernden Kontrollen nachweislich vorhanden und durchgängig durchgesetzt sind – eine lückenhafte Durchsetzung macht die Abweisung ungültig.</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Dismiss CWEs mitigated by WAF&quot;
    description: &quot;XSS and SQLi mitigated by WAF rules&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: identifier
            value: &quot;CWE-79&quot;
      - type: detected
        criteria:
          - type: identifier
            value: &quot;CWE-89&quot;
    actions:
      - type: auto_dismiss
        dismissal_reason: mitigating_control

" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">vulnerability_management_policy</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Dismiss CWEs mitigated by WAF&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">    description</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;XSS and SQLi mitigated by WAF rules&quot;
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">    enabled</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#005CC5">true
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">    rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">identifier
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;CWE-79&quot;
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">identifier
</span></span><span class="line" line="13"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;CWE-89&quot;
</span></span><span class="line" line="14"><span style="--shiki-default:#22863A">    actions</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="15"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">auto_dismiss
</span></span><span class="line" line="16"><span style="--shiki-default:#22863A">        dismissal_reason</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">mitigating_control
</span></span></code></pre><h3 id="_6-cve-familien-organisationsweit-abweisen">6. CVE-Familien organisationsweit abweisen</h3><p>Bei einer Welle verwandter CVEs für eine weit verbreitete Bibliothek, die das Team bereits bewertet hat: Richtlinie auf Gruppenebene anwenden und über Dutzende Projekte hinweg abweisen. Das Wildcard-Muster (z. B. <code className="">CVE-2021-44*</code>) erfasst alle CVEs mit diesem Präfix.</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Accept risk for log4j CVE family&quot;
    description: &quot;Log4j CVEs mitigated by version pinning and WAF&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: identifier
            value: &quot;CVE-2021-44*&quot;
    actions:
      - type: auto_dismiss
        dismissal_reason: acceptable_risk

" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">vulnerability_management_policy</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">name</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Accept risk for log4j CVE family&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#22863A">    description</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Log4j CVEs mitigated by version pinning and WAF&quot;
</span></span><span class="line" line="4"><span style="--shiki-default:#22863A">    enabled</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#005CC5">true
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">    rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">detected
</span></span><span class="line" line="7"><span style="--shiki-default:#22863A">        criteria</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">          - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">identifier
</span></span><span class="line" line="9"><span style="--shiki-default:#22863A">            value</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;CVE-2021-44*&quot;
</span></span><span class="line" line="10"><span style="--shiki-default:#22863A">    actions</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="11"><span style="--shiki-default:#24292E">      - </span><span style="--shiki-default:#22863A">type</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">auto_dismiss
</span></span><span class="line" line="12"><span style="--shiki-default:#22863A">        dismissal_reason</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">acceptable_risk
</span></span></code></pre><h2 id="kurzübersicht">Kurzübersicht</h2><table><thead><tr><th>Parameter</th><th>Details</th></tr></thead><tbody><tr><td><strong>Kriterientypen</strong></td><td><code className="">file_path</code> (Glob-Muster, z. B. <code className="">test/**/*</code>), <code className="">directory</code> (z. B. <code className="">vendor/*</code>), <code className="">identifier</code> (CVE/CWE mit Wildcards, z. B. <code className="">CVE-2023-*</code>)</td></tr><tr><td><strong>Abweisungsgründe</strong></td><td><code className="">acceptable_risk</code>, <code className="">false_positive</code>, <code className="">mitigating_control</code>, <code className="">used_in_tests</code>, <code className="">not_applicable</code></td></tr><tr><td><strong>Kriterienlogik</strong></td><td>Mehrere Kriterien innerhalb einer Regel = UND (alle müssen zutreffen). Mehrere Regeln innerhalb einer Richtlinie = ODER (eine reicht).</td></tr><tr><td><strong>Limits</strong></td><td>3 Kriterien pro Regel, 5 Regeln pro Richtlinie, 5 Richtlinien pro Security-Policy-Projekt. Vulnerability-Management-Richtlinien verarbeiten pro Pipeline-Ausführung bis zu 1.000 Schwachstellen im Zielprojekt.</td></tr><tr><td><strong>Betroffene Status</strong></td><td>Needs triage, Confirmed</td></tr><tr><td><strong>Geltungsbereich</strong></td><td>Projektebene oder Gruppenebene (Gruppenebene gilt für alle enthaltenen Projekte)</td></tr></tbody></table><h2 id="erste-schritte">Erste Schritte</h2><p>So lassen sich Auto-Dismiss-Richtlinien einrichten:</p><ol><li><strong>Rauschen identifizieren</strong>: Den Vulnerability-Report öffnen und nach „Needs triage&quot; sortieren. Nach Mustern suchen: Testdateien, eingebetteter Code, CVEs, die in mehreren Projekten wiederholt auftauchen.</li><li><strong>Anwendungsfall auswählen</strong>: Mit dem Anwendungsfall beginnen, der die meisten Findings abdeckt.</li><li><strong>Ausgangslage festhalten</strong>: Anzahl der Schwachstellen mit Status „Needs triage&quot; vor Erstellung der Richtlinie notieren.</li><li><strong>Erstellen und aktivieren</strong>: Über <strong>Secure &gt; Policies &gt; New policy &gt; Vulnerability management policy</strong> navigieren. Konfiguration aus dem gewählten Anwendungsfall einfügen, dann MR mergen.</li><li><strong>Ergebnis validieren</strong>: Nach der nächsten Pipeline des Standard-Branches den Report nach Status „Dismissed&quot; filtern und prüfen, ob die erwarteten Findings erfasst wurden.</li></ol><p>Vollständige Konfigurationsdetails in der <a href="https://docs.gitlab.com/user/application_security/policies/vulnerability_management_policy/#auto-dismiss-policies" rel="">Dokumentation zu Vulnerability-Management-Richtlinien</a>.</p><blockquote><p><a href="https://about.gitlab.com/de-de/free-trial/" rel="">GitLab Ultimate kostenlos testen</a> und erste Auto-Dismiss-Richtlinie konfigurieren.</p></blockquote><style>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>Grant Hickman</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/grant-hickman/</uri>
        </author>
        <published>2026-03-25T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab 18.10: Agile Planung mit Work-Items-Liste und gespeicherten Ansichten]]></title>
        <id>https://about.gitlab.com/de-de/blog/agile-planning-gets-a-boost-from-new-features-in-gitlab-18-10/</id>
        <link href="https://about.gitlab.com/de-de/blog/agile-planning-gets-a-boost-from-new-features-in-gitlab-18-10/"/>
        <updated>2026-03-21T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Mit GitLab 18.10 kommen zwei seit Langem angefragte Funktionen für die Agile-Planung: die Work-Items-Liste und gespeicherte Ansichten. Die Work-Items-Liste zeigt alle Work-Item-Typen in einer gemeinsamen Übersicht. Gespeicherte Ansichten ermöglichen es, benutzerdefinierte Listenkonfigurationen zu speichern und später wieder aufzurufen.</p><p>Die Funktionen bieten Teams konkrete Vorteile:</p><ul><li>Kein wiederholtes Einrichten von Filtern für häufige Arbeitsabläufe</li><li>Konsistente Ansichten für die gemeinsame Bewertung von Arbeit im Team</li><li>Einheitliche Grundlage für Berichte und Statusübersichten</li></ul><h2 id="was-sind-work-items">Was sind Work Items?</h2><p>Bisher befinden sich Epics und Issues auf getrennten Listenseiten, was das Navigieren zwischen ihnen erfordert. Die Work-Items-Liste fasst Epics, Issues und andere Work Items in einer einheitlichen Listenansicht zusammen und macht das Wechseln zwischen getrennten Seiten überflüssig.</p><p>Dies ist zugleich die Grundlage für tiefergehende Planungsfunktionen. Die Zusammenführung aller Work-Item-Typen schafft die Voraussetzung für Hierarchieansichten – zum Beispiel eine Tabellenansicht –, die Beziehungen und Strukturen über Epics, Issues und andere Elemente hinweg auf einen Blick sichtbar machen.</p><p>Über Listen- und Hierarchieansichten hinaus ist geplant, weitere häufige Arbeitsabläufe – etwa Boards – in diese einheitliche Erfahrung zu integrieren. Das Ziel: alle wesentlichen Planungsansichten an einem Ort, über gespeicherte Ansichten mit dem Team teilbar, ohne durch verschiedene Produktbereiche navigieren zu müssen.</p><p>Vielleicht fragst du dich, warum wir von „Work Items&quot; sprechen und nicht von Issues. Die kurze Antwort: „Issue&quot; skaliert nicht dorthin, wo wir hinwollen. Bald lassen sich Work-Item-Typen vollständig konfigurieren – einschließlich ihrer Bezeichnungen –, um die Planungshierarchie der eigenen Organisation abzubilden. An der bestehenden Terminologie festzuhalten würde diese Flexibilität entgegenwirken. „Work Items&quot; ist die Grundlage für ein Modell, das sich individuell anpassen lässt.</p><p><img alt="Work items list view" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1774028606/ae9ugijwjsyv3ktiks0n.png" /></p><h2 id="was-hat-zur-änderung-geführt">Was hat zur Änderung geführt?</h2><p>2024 haben wir unsere Vision für eine neue Agile-Planungserfahrung in GitLab vorgestellt, die auf dem Work-Items-Framework basiert. Darin beschrieben wir das zentrale Problem: Epics und Issues existierten als getrennte Erfahrungen und erzeugten Reibung für Teams, die konsistente Funktionalität über Planungsobjekte hinweg erwarteten. Das Work-Items-Framework war unsere Antwort darauf – eine einheitliche Architektur für Konsistenz und neue Möglichkeiten in GitLabs Planungswerkzeugen. Work-Items-Liste und gespeicherte Ansichten sind ein Schritt auf diesem Weg.</p><h2 id="was-sind-gespeicherte-ansichten">Was sind gespeicherte Ansichten?</h2><p>Gespeicherte Ansichten ermöglichen es, benutzerdefinierte Listenkonfigurationen – einschließlich Filter, Sortierung und Anzeigeoptionen – zu speichern und später aufzurufen. Damit lassen sich wiederkehrende Prüfungen strukturierter durchführen und einheitliche Arbeitsweisen im Team etablieren.</p><p><img alt="Saved view" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1774028606/izmg27ckskpkdofgvonr.png" /></p><h2 id="wie-geht-es-weiter">Wie geht es weiter?</h2><p>Um zu verstehen, warum wir diese Änderungen vornehmen, lohnt sich ein Blick auf das Ziel.</p><p>Das Ziel ist nicht nur eine Work-Items-Liste, sondern eine Planungserfahrung, die es erlaubt, zwischen verschiedenen Ansichtstypen – Liste, Board, Tabelle und mehr – zu wechseln und dabei den aktuellen Filterbereich beizubehalten.</p><p>In Kombination mit gespeicherten Ansichten lässt sich für jeden Arbeitsablauf eine eigene Ansicht anlegen: Iterationsplanung, Backlog-Pflege, Portfolio-Planung mit verschachtelten Tabellenansichten und mehr.</p><p>Jede Ansicht ist sofort einsatzbereit, filtert und zeigt Arbeit konsistent an und lässt sich mit dem Team teilen. Das Framework ermöglicht künftig weitere Funktionen, darunter vollständige Swimlane-Unterstützung für beliebige Work-Item-Attribute in Boards.</p><p>Wir wissen, dass Änderungen an täglich genutzten Werkzeugen störend sein können. Wer Arbeitsabläufe rund um die bestehenden Epic- und Issue-Listenseiten aufgebaut hat, wird Unterschiede bemerken. Das nehmen wir nicht auf die leichte Schulter.</p><p>Diese Richtung war keine schnelle Entscheidung. Sie spiegelt jahrelanges Feedback, eine erhebliche Investition in die Architektur des Work-Items-Frameworks und die Überzeugung wider, dass eine einheitliche Erfahrung Teams langfristig besser dient. Wir rechnen damit, dass die Umstellung Anpassungen erfordert, und werden auf Basis eures Feedbacks nachjustieren.</p><h2 id="teilt-euer-feedback">Teilt euer Feedback</h2><p>Probiert die neuen Funktionen aus und teilt eure Erfahrungen mit der Work-Items-Liste und gespeicherten Ansichten in unserem <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/590689" rel="">Feedback-Issue</a>. Eure Kommentare helfen dabei, diese Funktionen weiterzuentwickeln.</p>]]></content>
        <author>
            <name>Matthew Macfarlane</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/matthew-macfarlane/</uri>
        </author>
        <published>2026-03-21T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab 18.10 bringt KI-native Triage und Behebung]]></title>
        <id>https://about.gitlab.com/de-de/blog/gitlab-18-10-brings-ai-native-triage-and-remediation/</id>
        <link href="https://about.gitlab.com/de-de/blog/gitlab-18-10-brings-ai-native-triage-and-remediation/"/>
        <updated>2026-03-19T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab 18.10 führt neue KI-basierte Sicherheitsfunktionen ein, die auf die Verbesserung der Qualität und Geschwindigkeit des Schwachstellenmanagements ausgerichtet sind. Zusammen tragen diese Funktionen dazu bei, den Zeitaufwand für die Untersuchung von False Positives zu reduzieren und automatisierte Abhilfe direkt in den Workflow zu integrieren – so lassen sich Schwachstellen auch ohne tiefgreifende Sicherheitsexpertise beheben.</p><p>Das ist neu:</p><ul><li><a href="https://docs.gitlab.com/user/application_security/vulnerabilities/false_positive_detection/" rel=""><strong>Erkennung von False Positives bei statischen Anwendungssicherheitstests (SAST)</strong></a> <strong>ist jetzt allgemein verfügbar.</strong> Dieser Flow nutzt ein LLM für agentisches Reasoning, um die Wahrscheinlichkeit zu bestimmen, ob eine Schwachstelle ein False Positive ist oder nicht. So können sich Sicherheits- und Entwicklungsteams zuerst auf die Behebung kritischer Schwachstellen konzentrieren.</li><li><a href="https://docs.gitlab.com/user/application_security/vulnerabilities/agentic_vulnerability_resolution/" rel=""><strong>Agentische SAST-Schwachstellenbehebung</strong></a> <strong>ist jetzt als Beta verfügbar.</strong> Die agentische SAST-Schwachstellenbehebung erstellt automatisch einen Merge Request mit einem Lösungsvorschlag für verifizierte SAST-Schwachstellen. Das verkürzt die Zeit bis zur Behebung und reduziert den Bedarf an tiefgreifender Sicherheitsexpertise.</li><li><a href="https://docs.gitlab.com/user/application_security/vulnerabilities/secret_false_positive_detection/" rel=""><strong>Erkennung von False Positives bei Geheimnissen</strong></a> <strong>ist jetzt als Beta verfügbar.</strong> Dieser Flow bringt die gleiche KI-basierte Rauschreduzierung in die Erkennung von Geheimnissen und kennzeichnet Dummy- und Test-Geheimnisse, um den Prüfaufwand zu verringern.</li></ul><p>Diese Flows stehen Kund(inn)en von GitLab Ultimate zur Verfügung, die GitLab Duo Agent Platform nutzen.</p><h2 id="triage-zeit-mit-sast-false-positive-erkennung-verkürzen">Triage-Zeit mit SAST-False-Positive-Erkennung verkürzen</h2><p>Herkömmliche SAST-Scanner kennzeichnen jedes verdächtige Codemuster, das sie finden – unabhängig davon, ob Codepfade erreichbar sind oder Frameworks das Risiko bereits abfangen. Ohne Laufzeitkontext können sie eine echte Schwachstelle nicht von sicherem Code unterscheiden, der lediglich gefährlich aussieht.</p><p>Das bedeutet, dass Entwickler(innen) möglicherweise Stunden damit verbringen, Ergebnisse zu untersuchen, die sich als False Positives herausstellen. Mit der Zeit kann das das Vertrauen in den Bericht untergraben und die Teams verlangsamen, die für die Behebung echter Risiken verantwortlich sind.</p><p>Nach jedem SAST-Scan analysiert GitLab Duo Agent Platform automatisch neue kritische und hochgradig schwerwiegende Ergebnisse und fügt Folgendes hinzu:</p><ul><li>Einen Konfidenzwert, der angibt, wie wahrscheinlich es ist, dass das Ergebnis ein False Positive ist</li><li>Eine KI-generierte Erklärung mit der Begründung</li><li>Ein visuelles Badge, das „Wahrscheinlich False Positive“ und „Wahrscheinlich echt“ in der UI leicht erkennbar macht</li></ul><p>Diese Ergebnisse erscheinen im <a href="https://docs.gitlab.com/user/application_security/vulnerability_report/" rel="">Sicherheitslückenbericht</a>, wie unten dargestellt. Der Bericht lässt sich filtern, um sich auf Ergebnisse zu konzentrieren, die als „Kein False Positive“ markiert sind. So können Teams ihre Zeit für die Behebung echter Schwachstellen nutzen, anstatt Rauschen zu sichten.</p><p><img alt="Sicherheitslückenbericht" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1773844787/i0eod01p7gawflllkgsr.png" /></p><p>Die Bewertung von GitLab Duo Agent Platform ist eine Empfehlung. Die Kontrolle über jedes False Positive bleibt erhalten, und die Begründung des Agenten kann jederzeit überprüft werden, um Vertrauen in das Modell aufzubauen.</p><h2 id="schwachstellen-in-automatisierte-fixes-umwandeln">Schwachstellen in automatisierte Fixes umwandeln</h2><p>Zu wissen, dass eine Schwachstelle echt ist, ist nur die halbe Arbeit. Die Behebung erfordert weiterhin das Verständnis des Codepfads, das Schreiben eines sicheren Patches und die Sicherstellung, dass nichts anderes beeinträchtigt wird.</p><p>Wenn die Schwachstelle durch den SAST-False-Positive-Erkennungsflow als wahrscheinlich kein False Positive identifiziert wird, führt der agentische SAST-Schwachstellenbehebungsflow automatisch folgende Schritte aus:</p><ol><li>Liest den anfälligen Code und den umgebenden Kontext aus dem Repository</li><li>Generiert hochwertige Lösungsvorschläge</li><li>Validiert die Fixes durch automatisierte Tests</li><li>Öffnet einen Merge Request mit einem Lösungsvorschlag, der Folgendes enthält:
<ul><li>Konkrete Codeänderungen</li><li>Einen Konfidenzwert</li><li>Eine Erklärung, was geändert wurde und warum</li></ul></li></ol><p>In dieser Demo siehst du, wie GitLab eine SAST-Schwachstelle automatisch vom Erkennen bis hin zu einem prüfbereiten Merge Request verarbeiten kann. Beobachte, wie der Agent den Code liest, einen Fix generiert und validiert und einen MR mit klaren, nachvollziehbaren Änderungen öffnet – damit Entwickler(innen) schneller beheben können, ohne Sicherheitsexpert(inn)en sein zu müssen.</p><iframe src="https://player.vimeo.com/video/1174573325?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="GitLab 18.10 AI SAST False Positive Auto Remediation"></iframe><script src="https://player.vimeo.com/api/player.js"></script><p>Wie bei jedem KI-generierten Vorschlag sollte der vorgeschlagene Merge Request vor dem Zusammenführen sorgfältig geprüft werden.</p><h2 id="echte-geheimnisse-identifizieren">Echte Geheimnisse identifizieren</h2><p>Die Erkennung von Geheimnissen ist nur dann nützlich, wenn Teams den Ergebnissen vertrauen. Wenn Berichte voller Test-Zugangsdaten, Platzhalterwerte und Beispiel-Token sind, verschwenden Entwickler(innen) möglicherweise Zeit mit der Überprüfung von Rauschen, anstatt echte Sicherheitslücken zu beheben. Das kann die Behebung verlangsamen und das Vertrauen in den Scan verringern.</p><p>Die False-Positive-Erkennung bei Geheimnissen hilft Teams, sich auf die relevanten Geheimnisse zu konzentrieren und Risiken schneller zu reduzieren. Bei der Ausführung auf dem Standard-Branch werden automatisch folgende Schritte durchgeführt:</p><ol><li>Jedes Ergebnis wird analysiert, um wahrscheinliche Test-Zugangsdaten, Beispielwerte und Dummy-Geheimnisse zu identifizieren</li><li>Ein Konfidenzwert wird zugewiesen, ob das Ergebnis ein echtes Risiko oder wahrscheinlich ein False Positive ist</li><li>Eine Erklärung wird generiert, warum das Geheimnis als echt oder als Rauschen eingestuft wird</li><li>Ein Badge wird im Sicherheitslückenbericht hinzugefügt, damit Entwickler(innen) den Status auf einen Blick erkennen können</li></ol><p>Entwickler(innen) können diese Analyse auch manuell über den Sicherheitslückenbericht auslösen, indem sie bei einem Ergebnis der Geheimniserkennung <strong>„Auf False Positive prüfen“</strong> auswählen. So lassen sich Ergebnisse ohne Risiko aussortieren und echte Geheimnisse schneller adressieren.</p><h2 id="ki-basierte-sicherheit-jetzt-testen">KI-basierte Sicherheit jetzt testen</h2><p>GitLab 18.10 führt Funktionen ein, die den gesamten Schwachstellen-Workflow abdecken – von der Reduzierung von False-Positive-Rauschen bei SAST und der Erkennung von Geheimnissen bis hin zur automatischen Generierung von Merge Requests mit Lösungsvorschlägen.</p><p>Um zu erfahren, wie KI-basierte Sicherheit die Prüfzeit verkürzen und Ergebnisse in zusammenführbare Fixes umwandeln kann, <a href="https://about.gitlab.com/de-de/gitlab-duo-agent-platform/" rel="">starte jetzt eine kostenlose Testversion von GitLab Duo Agent Platform</a>.</p>]]></content>
        <author>
            <name>Alisa Ho</name>
            <uri>https://about.gitlab.com/de-de/blog/authors/alisa-ho/</uri>
        </author>
        <published>2026-03-19T00:00:00.000Z</published>
    </entry>
</feed>