[{"data":1,"prerenderedAt":794},["ShallowReactive",2],{"/de-de/blog/categories/engineering":3,"navigation-de-de":20,"banner-de-de":434,"footer-de-de":444,"engineering-category-page-total-items-de-de":680,"engineering-category-page-featured-de-de":681,"engineering-category-page-2-de-de":711},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":11,"description":6,"extension":12,"meta":13,"navigation":14,"path":15,"seo":16,"slug":6,"stem":18,"testContent":6,"type":6,"__hash__":19},"blogCategories/de-de/blog/categories/engineering.yml","Engineering",null,{"template":8,"slug":9,"hide":10},"BlogCategory","engineering",false,{"name":5},"yml",{},true,"/de-de/blog/categories/engineering",{"title":5,"description":17},"Browse articles related to Engineering on the GitLab Blog","de-de/blog/categories/engineering","2aDT2ddISb3_jPr0pKFELw8NlkxcUsQZ7Dd93XB3ya8",{"data":21},{"logo":22,"freeTrial":27,"sales":32,"login":37,"items":42,"search":352,"minimal":386,"duo":404,"switchNav":413,"pricingDeployment":424},{"config":23},{"href":24,"dataGaName":25,"dataGaLocation":26},"/de-de/","gitlab logo","header",{"text":28,"config":29},"Kostenlose Testversion anfordern",{"href":30,"dataGaName":31,"dataGaLocation":26},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":33,"config":34},"Vertrieb kontaktieren",{"href":35,"dataGaName":36,"dataGaLocation":26},"/de-de/sales/","sales",{"text":38,"config":39},"Anmelden",{"href":40,"dataGaName":41,"dataGaLocation":26},"https://gitlab.com/users/sign_in/","sign in",[43,70,167,172,273,333],{"text":44,"config":45,"cards":47},"Plattform",{"dataNavLevelOne":46},"platform",[48,54,62],{"title":44,"description":49,"link":50},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":51,"config":52},"Die Plattform erkunden",{"href":53,"dataGaName":46,"dataGaLocation":26},"/de-de/platform/",{"title":55,"description":56,"link":57},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":58,"config":59},"Lerne GitLab Duo kennen",{"href":60,"dataGaName":61,"dataGaLocation":26},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":63,"description":64,"link":65},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":66,"config":67},"Mehr erfahren",{"href":68,"dataGaName":69,"dataGaLocation":26},"/de-de/why-gitlab/","why gitlab",{"text":71,"left":14,"config":72,"link":74,"lists":78,"footer":149},"Produkt",{"dataNavLevelOne":73},"solutions",{"text":75,"config":76},"Alle Lösungen anzeigen",{"href":77,"dataGaName":73,"dataGaLocation":26},"/de-de/solutions/",[79,104,127],{"title":80,"description":81,"link":82,"items":87},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":83},{"icon":84,"href":85,"dataGaName":86,"dataGaLocation":26},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[88,92,95,100],{"text":89,"config":90},"CI/CD",{"href":91,"dataGaLocation":26,"dataGaName":89},"/de-de/solutions/continuous-integration/",{"text":55,"config":93},{"href":60,"dataGaLocation":26,"dataGaName":94},"gitlab duo agent platform - product menu",{"text":96,"config":97},"Quellcodeverwaltung",{"href":98,"dataGaLocation":26,"dataGaName":99},"/de-de/solutions/source-code-management/","Source Code Management",{"text":101,"config":102},"Automatische Softwarebereitstellung",{"href":85,"dataGaLocation":26,"dataGaName":103},"Automated software delivery",{"title":105,"description":106,"link":107,"items":112},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":108},{"href":109,"dataGaName":110,"dataGaLocation":26,"icon":111},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[113,117,122],{"text":114,"config":115},"Anwendungssicherheitstests",{"href":109,"dataGaName":116,"dataGaLocation":26},"Application security testing",{"text":118,"config":119},"Schutz der Software-Lieferkette",{"href":120,"dataGaLocation":26,"dataGaName":121},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":123,"config":124},"Software-Compliance",{"href":125,"dataGaName":126,"dataGaLocation":26},"/de-de/solutions/software-compliance/","software compliance",{"title":128,"link":129,"items":134},"Auswertung",{"config":130},{"icon":131,"href":132,"dataGaName":133,"dataGaLocation":26},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[135,139,144],{"text":136,"config":137},"Sichtbarkeit und Auswertung",{"href":132,"dataGaLocation":26,"dataGaName":138},"Visibility and Measurement",{"text":140,"config":141},"Wertstrommanagement",{"href":142,"dataGaLocation":26,"dataGaName":143},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":145,"config":146},"Analysen und Einblicke",{"href":147,"dataGaLocation":26,"dataGaName":148},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":150,"items":151},"GitLab für",[152,157,162],{"text":153,"config":154},"Enterprise",{"href":155,"dataGaLocation":26,"dataGaName":156},"/de-de/enterprise/","enterprise",{"text":158,"config":159},"Kleinunternehmen",{"href":160,"dataGaLocation":26,"dataGaName":161},"/de-de/small-business/","small business",{"text":163,"config":164},"Öffentlicher Sektor",{"href":165,"dataGaLocation":26,"dataGaName":166},"/de-de/solutions/public-sector/","public sector",{"text":168,"config":169},"Preise",{"href":170,"dataGaName":171,"dataGaLocation":26,"dataNavLevelOne":171},"/de-de/pricing/","pricing",{"text":173,"config":174,"link":176,"lists":180,"feature":260},"Ressourcen",{"dataNavLevelOne":175},"resources",{"text":177,"config":178},"Alle Ressourcen anzeigen",{"href":179,"dataGaName":175,"dataGaLocation":26},"/de-de/resources/",[181,214,232],{"title":182,"items":183},"Erste Schritte",[184,189,194,199,204,209],{"text":185,"config":186},"Installieren",{"href":187,"dataGaName":188,"dataGaLocation":26},"/de-de/install/","install",{"text":190,"config":191},"Kurzanleitungen",{"href":192,"dataGaName":193,"dataGaLocation":26},"/de-de/get-started/","quick setup checklists",{"text":195,"config":196},"Lernen",{"href":197,"dataGaLocation":26,"dataGaName":198},"https://university.gitlab.com/","learn",{"text":200,"config":201},"Produktdokumentation",{"href":202,"dataGaName":203,"dataGaLocation":26},"https://docs.gitlab.com/","product documentation",{"text":205,"config":206},"Best-Practice-Videos",{"href":207,"dataGaName":208,"dataGaLocation":26},"/de-de/getting-started-videos/","best practice videos",{"text":210,"config":211},"Integrationen",{"href":212,"dataGaName":213,"dataGaLocation":26},"/de-de/integrations/","integrations",{"title":215,"items":216},"Entdecken",[217,222,227],{"text":218,"config":219},"Kundenerfolge",{"href":220,"dataGaName":221,"dataGaLocation":26},"/de-de/customers/","customer success stories",{"text":223,"config":224},"Blog",{"href":225,"dataGaName":226,"dataGaLocation":26},"/de-de/blog/","blog",{"text":228,"config":229},"Remote",{"href":230,"dataGaName":231,"dataGaLocation":26},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":233,"items":234},"Vernetzen",[235,240,245,250,255],{"text":236,"config":237},"GitLab Services",{"href":238,"dataGaName":239,"dataGaLocation":26},"/de-de/services/","services",{"text":241,"config":242},"Community",{"href":243,"dataGaName":244,"dataGaLocation":26},"/community/","community",{"text":246,"config":247},"Forum",{"href":248,"dataGaName":249,"dataGaLocation":26},"https://forum.gitlab.com/","forum",{"text":251,"config":252},"Veranstaltungen",{"href":253,"dataGaName":254,"dataGaLocation":26},"/events/","events",{"text":256,"config":257},"Partner",{"href":258,"dataGaName":259,"dataGaLocation":26},"/de-de/partners/","partners",{"backgroundColor":261,"textColor":262,"text":263,"image":264,"link":268},"#2f2a6b","#fff","Perspektiven für die Softwareentwicklung der Zukunft",{"altText":265,"config":266},"The Source Promo-Karte",{"src":267},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":269,"config":270},"Aktuelles",{"href":271,"dataGaName":272,"dataGaLocation":26},"/de-de/the-source/","the source",{"text":274,"config":275,"lists":277},"Unternehmen",{"dataNavLevelOne":276},"company",[278],{"items":279},[280,285,291,293,298,303,308,313,318,323,328],{"text":281,"config":282},"Über",{"href":283,"dataGaName":284,"dataGaLocation":26},"/de-de/company/","about",{"text":286,"config":287,"footerGa":290},"Karriere",{"href":288,"dataGaName":289,"dataGaLocation":26},"/jobs/","jobs",{"dataGaName":289},{"text":251,"config":292},{"href":253,"dataGaName":254,"dataGaLocation":26},{"text":294,"config":295},"Geschäftsführung",{"href":296,"dataGaName":297,"dataGaLocation":26},"/company/team/e-group/","leadership",{"text":299,"config":300},"Team",{"href":301,"dataGaName":302,"dataGaLocation":26},"/company/team/","team",{"text":304,"config":305},"Handbuch",{"href":306,"dataGaName":307,"dataGaLocation":26},"https://handbook.gitlab.com/","handbook",{"text":309,"config":310},"Investor Relations",{"href":311,"dataGaName":312,"dataGaLocation":26},"https://ir.gitlab.com/","investor relations",{"text":314,"config":315},"Trust Center",{"href":316,"dataGaName":317,"dataGaLocation":26},"/de-de/security/","trust center",{"text":319,"config":320},"AI Transparency Center",{"href":321,"dataGaName":322,"dataGaLocation":26},"/de-de/ai-transparency-center/","ai transparency center",{"text":324,"config":325},"Newsletter",{"href":326,"dataGaName":327,"dataGaLocation":26},"/company/contact/#contact-forms","newsletter",{"text":329,"config":330},"Presse",{"href":331,"dataGaName":332,"dataGaLocation":26},"/press/","press",{"text":334,"config":335,"lists":336},"Kontakt",{"dataNavLevelOne":276},[337],{"items":338},[339,342,347],{"text":33,"config":340},{"href":35,"dataGaName":341,"dataGaLocation":26},"talk to sales",{"text":343,"config":344},"Support-Portal",{"href":345,"dataGaName":346,"dataGaLocation":26},"https://support.gitlab.com","support portal",{"text":348,"config":349},"Kundenportal",{"href":350,"dataGaName":351,"dataGaLocation":26},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":353,"login":354,"suggestions":361},"Schließen",{"text":355,"link":356},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":357,"config":358},"gitlab.com",{"href":40,"dataGaName":359,"dataGaLocation":360},"search login","search",{"text":362,"default":363},"Vorschläge",[364,366,371,373,378,383],{"text":55,"config":365},{"href":60,"dataGaName":55,"dataGaLocation":360},{"text":367,"config":368},"Codevorschläge (KI)",{"href":369,"dataGaName":370,"dataGaLocation":360},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":89,"config":372},{"href":91,"dataGaName":89,"dataGaLocation":360},{"text":374,"config":375},"GitLab auf AWS",{"href":376,"dataGaName":377,"dataGaLocation":360},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":379,"config":380},"GitLab auf Google Cloud",{"href":381,"dataGaName":382,"dataGaLocation":360},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":63,"config":384},{"href":68,"dataGaName":385,"dataGaLocation":360},"Why GitLab?",{"freeTrial":387,"mobileIcon":392,"desktopIcon":397,"secondaryButton":400},{"text":388,"config":389},"Kostenlos testen",{"href":390,"dataGaName":31,"dataGaLocation":391},"https://gitlab.com/-/trials/new/","nav",{"altText":393,"config":394},"GitLab-Symbol",{"src":395,"dataGaName":396,"dataGaLocation":391},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":393,"config":398},{"src":399,"dataGaName":396,"dataGaLocation":391},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":182,"config":401},{"href":402,"dataGaName":403,"dataGaLocation":391},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":405,"mobileIcon":409,"desktopIcon":411},{"text":406,"config":407},"Mehr über GitLab Duo erfahren",{"href":60,"dataGaName":408,"dataGaLocation":391},"gitlab duo",{"altText":393,"config":410},{"src":395,"dataGaName":396,"dataGaLocation":391},{"altText":393,"config":412},{"src":399,"dataGaName":396,"dataGaLocation":391},{"button":414,"mobileIcon":419,"desktopIcon":421},{"text":415,"config":416},"/Option",{"href":417,"dataGaName":418,"dataGaLocation":391},"#contact","switch",{"altText":393,"config":420},{"src":395,"dataGaName":396,"dataGaLocation":391},{"altText":393,"config":422},{"src":423,"dataGaName":396,"dataGaLocation":391},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":425,"mobileIcon":430,"desktopIcon":432},{"text":426,"config":427},"Zurück zur Preisübersicht",{"href":170,"dataGaName":428,"dataGaLocation":391,"icon":429},"back to pricing","GoBack",{"altText":393,"config":431},{"src":395,"dataGaName":396,"dataGaLocation":391},{"altText":393,"config":433},{"src":399,"dataGaName":396,"dataGaLocation":391},{"title":435,"button":436,"config":441},"Sieh dir an, wie agentische KI die Softwarebereitstellung transformiert",{"text":437,"config":438},"GitLab Transcend jetzt ansehen",{"href":439,"dataGaName":440,"dataGaLocation":26},"/de-de/events/transcend/virtual/","transcend event",{"layout":442,"icon":443,"disabled":14},"release","AiStar",{"data":445},{"text":446,"source":447,"edit":453,"contribute":458,"config":463,"items":468,"minimal":671},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":448,"config":449},"Quelltext der Seite anzeigen",{"href":450,"dataGaName":451,"dataGaLocation":452},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":454,"config":455},"Diese Seite bearbeiten",{"href":456,"dataGaName":457,"dataGaLocation":452},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":459,"config":460},"Beteilige dich",{"href":461,"dataGaName":462,"dataGaLocation":452},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":464,"facebook":465,"youtube":466,"linkedin":467},"https://x.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[469,514,567,609,636],{"title":168,"links":470,"subMenu":485},[471,475,480],{"text":472,"config":473},"Tarife anzeigen",{"href":170,"dataGaName":474,"dataGaLocation":452},"view plans",{"text":476,"config":477},"Vorteile von Premium",{"href":478,"dataGaName":479,"dataGaLocation":452},"/de-de/pricing/premium/","why premium",{"text":481,"config":482},"Vorteile von Ultimate",{"href":483,"dataGaName":484,"dataGaLocation":452},"/de-de/pricing/ultimate/","why ultimate",[486],{"title":334,"links":487},[488,490,492,494,499,504,509],{"text":33,"config":489},{"href":35,"dataGaName":36,"dataGaLocation":452},{"text":343,"config":491},{"href":345,"dataGaName":346,"dataGaLocation":452},{"text":348,"config":493},{"href":350,"dataGaName":351,"dataGaLocation":452},{"text":495,"config":496},"Status",{"href":497,"dataGaName":498,"dataGaLocation":452},"https://status.gitlab.com/","status",{"text":500,"config":501},"Nutzungsbedingungen",{"href":502,"dataGaName":503,"dataGaLocation":452},"/terms/","terms of use",{"text":505,"config":506},"Datenschutzerklärung",{"href":507,"dataGaName":508,"dataGaLocation":452},"/de-de/privacy/","privacy statement",{"text":510,"config":511},"Cookie-Einstellungen",{"dataGaName":512,"dataGaLocation":452,"id":513,"isOneTrustButton":14},"cookie preferences","ot-sdk-btn",{"title":71,"links":515,"subMenu":524},[516,520],{"text":517,"config":518},"DevSecOps-Plattform",{"href":53,"dataGaName":519,"dataGaLocation":452},"devsecops platform",{"text":521,"config":522},"KI-unterstützte Entwicklung",{"href":60,"dataGaName":523,"dataGaLocation":452},"ai-assisted development",[525],{"title":526,"links":527},"Themen",[528,532,537,542,547,552,557,562],{"text":89,"config":529},{"href":530,"dataGaName":531,"dataGaLocation":452},"/de-de/topics/ci-cd/","cicd",{"text":533,"config":534},"GitOps",{"href":535,"dataGaName":536,"dataGaLocation":452},"/de-de/topics/gitops/","gitops",{"text":538,"config":539},"DevOps",{"href":540,"dataGaName":541,"dataGaLocation":452},"/de-de/topics/devops/","devops",{"text":543,"config":544},"Versionskontrolle",{"href":545,"dataGaName":546,"dataGaLocation":452},"/de-de/topics/version-control/","version control",{"text":548,"config":549},"DevSecOps",{"href":550,"dataGaName":551,"dataGaLocation":452},"/de-de/topics/devsecops/","devsecops",{"text":553,"config":554},"Cloud-nativ",{"href":555,"dataGaName":556,"dataGaLocation":452},"/de-de/topics/cloud-native/","cloud native",{"text":558,"config":559},"KI für das Programmieren",{"href":560,"dataGaName":561,"dataGaLocation":452},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":563,"config":564},"Agentische KI",{"href":565,"dataGaName":566,"dataGaLocation":452},"/de-de/topics/agentic-ai/","agentic ai",{"title":568,"links":569},"Lösungen",[570,573,575,580,584,587,590,593,595,597,599,604],{"text":114,"config":571},{"href":109,"dataGaName":572,"dataGaLocation":452},"Application Security Testing",{"text":101,"config":574},{"href":85,"dataGaName":86,"dataGaLocation":452},{"text":576,"config":577},"Agile Entwicklung",{"href":578,"dataGaName":579,"dataGaLocation":452},"/de-de/solutions/agile-delivery/","agile delivery",{"text":581,"config":582},"SCM",{"href":98,"dataGaName":583,"dataGaLocation":452},"source code management",{"text":89,"config":585},{"href":91,"dataGaName":586,"dataGaLocation":452},"continuous integration & delivery",{"text":140,"config":588},{"href":142,"dataGaName":589,"dataGaLocation":452},"value stream management",{"text":533,"config":591},{"href":592,"dataGaName":536,"dataGaLocation":452},"/de-de/solutions/gitops/",{"text":153,"config":594},{"href":155,"dataGaName":156,"dataGaLocation":452},{"text":158,"config":596},{"href":160,"dataGaName":161,"dataGaLocation":452},{"text":163,"config":598},{"href":165,"dataGaName":166,"dataGaLocation":452},{"text":600,"config":601},"Bildungswesen",{"href":602,"dataGaName":603,"dataGaLocation":452},"/de-de/solutions/education/","education",{"text":605,"config":606},"Finanzdienstleistungen",{"href":607,"dataGaName":608,"dataGaLocation":452},"/de-de/solutions/finance/","financial services",{"title":173,"links":610},[611,613,615,617,620,622,624,626,628,630,632,634],{"text":185,"config":612},{"href":187,"dataGaName":188,"dataGaLocation":452},{"text":190,"config":614},{"href":192,"dataGaName":193,"dataGaLocation":452},{"text":195,"config":616},{"href":197,"dataGaName":198,"dataGaLocation":452},{"text":200,"config":618},{"href":202,"dataGaName":619,"dataGaLocation":452},"docs",{"text":223,"config":621},{"href":225,"dataGaName":226,"dataGaLocation":452},{"text":218,"config":623},{"href":220,"dataGaName":221,"dataGaLocation":452},{"text":228,"config":625},{"href":230,"dataGaName":231,"dataGaLocation":452},{"text":236,"config":627},{"href":238,"dataGaName":239,"dataGaLocation":452},{"text":241,"config":629},{"href":243,"dataGaName":244,"dataGaLocation":452},{"text":246,"config":631},{"href":248,"dataGaName":249,"dataGaLocation":452},{"text":251,"config":633},{"href":253,"dataGaName":254,"dataGaLocation":452},{"text":256,"config":635},{"href":258,"dataGaName":259,"dataGaLocation":452},{"title":274,"links":637},[638,640,642,644,646,648,650,655,660,662,664,666],{"text":281,"config":639},{"href":283,"dataGaName":276,"dataGaLocation":452},{"text":286,"config":641},{"href":288,"dataGaName":289,"dataGaLocation":452},{"text":294,"config":643},{"href":296,"dataGaName":297,"dataGaLocation":452},{"text":299,"config":645},{"href":301,"dataGaName":302,"dataGaLocation":452},{"text":304,"config":647},{"href":306,"dataGaName":307,"dataGaLocation":452},{"text":309,"config":649},{"href":311,"dataGaName":312,"dataGaLocation":452},{"text":651,"config":652},"Nachhaltigkeit",{"href":653,"dataGaName":654,"dataGaLocation":452},"/sustainability/","Sustainability",{"text":656,"config":657},"Vielfalt, Inklusion und Zugehörigkeit",{"href":658,"dataGaName":659,"dataGaLocation":452},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":314,"config":661},{"href":316,"dataGaName":317,"dataGaLocation":452},{"text":324,"config":663},{"href":326,"dataGaName":327,"dataGaLocation":452},{"text":329,"config":665},{"href":331,"dataGaName":332,"dataGaLocation":452},{"text":667,"config":668},"Transparenzerklärung zu moderner Sklaverei",{"href":669,"dataGaName":670,"dataGaLocation":452},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":672},[673,675,678],{"text":500,"config":674},{"href":502,"dataGaName":503,"dataGaLocation":452},{"text":676,"config":677},"Cookies",{"dataGaName":512,"dataGaLocation":452,"id":513,"isOneTrustButton":14},{"text":505,"config":679},{"href":507,"dataGaName":508,"dataGaLocation":452},30,{"id":682,"title":683,"authorSlugs":684,"body":6,"categorySlug":9,"config":686,"content":689,"description":6,"extension":12,"isFeatured":14,"meta":701,"navigation":14,"path":702,"publishedDate":696,"seo":703,"stem":707,"tagSlugs":708,"__hash__":710},"blogPosts/de-de/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems.yml","5 Ways Gitlab Pipeline Logic Solves Real Engineering Problems",[685],"omid-khan",{"featured":14,"template":687,"slug":688},"BlogPost","5-ways-gitlab-pipeline-logic-solves-real-engineering-problems",{"body":690,"title":691,"description":692,"authors":693,"heroImage":695,"date":696,"category":9,"tags":697},"## Abschnitt 1: Das Modell verstehen\n*Für Engineering-Leads und Entscheidungsträger: Konzept, Anwendungsfälle und Architekturprinzipien. Konfigurationsdetails folgen in Abschnitt 2.*\n\nDie 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.\n\nGitLabs 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.\n\nDieser 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.\n\n### 1. Monorepos: Parent-Child-Pipelines und DAG-Execution\n\n**Das Problem:** 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.\n\nGitLab kombiniert zwei sich ergänzende Mechanismen: [Parent-Child-Pipelines](https://docs.gitlab.com/ci/pipelines/downstream_pipelines/#parent-child-pipelines) ermöglichen es einer übergeordneten Pipeline, isolierte Child-Pipelines zu starten. [DAG-Execution via `needs`](https://docs.gitlab.com/ci/yaml/#needs) bricht die starre Stage-Reihenfolge auf und startet Jobs, sobald ihre Abhängigkeiten abgeschlossen sind – nicht erst, wenn alle Jobs einer Stage fertig sind.\n\nEine 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.\n\nEinen technischen Aspekt gilt es dabei zu kennen: Wenn mehrere Dateien an einen einzelnen `trigger: include:`-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 `needs:` 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 `needs:`-Referenzen funktionieren nicht.\n\nIn großen Monorepos lassen sich Pipeline-Laufzeiten durch DAG-Execution deutlich reduzieren, da Jobs nicht mehr auf unabhängige Arbeitsschritte in derselben Stage warten.\n\n### 2. Microservices: Cross-Repo-Pipelines über mehrere Projekte\n\n**Das Problem:** 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.\n\n[Multi-Project-Pipelines](https://docs.gitlab.com/ci/pipelines/downstream_pipelines/#multi-project-pipelines) 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.\n\nIn 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 [Jobs API](https://docs.gitlab.com/api/jobs/#download-a-single-artifact-file-from-specific-tag-or-branch) 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.\n\n![Cross-project pipelines](https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738762/Blog/Imported/hackathon-fake-blog-post-s/image4_h6mfsb.png \"Cross-project pipelines\") *Cross-project pipelines*\n\n### 3. Multi-Tenant/Matrix-Deployments: Dynamische Child-Pipelines\n\n**Das Problem:** 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.\n\n[Dynamische Child-Pipelines](https://docs.gitlab.com/ci/pipelines/downstream_pipelines/#dynamic-child-pipelines) 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.\n\nDas Generierungsskript iteriert über eine `ENVIRONMENTS`-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 `extends:` eine gemeinsame Template-Konfiguration, sodass `strategy: depend` einmal definiert und nicht für jeden Trigger-Job wiederholt wird. Ein `when: manual`-Gate für das Produktions-Deployment ist direkt in den Pipeline-Graph integriert.\n\nPlatform-Teams nutzen dieses Muster, um Dutzende von Umgebungen zu verwalten, ohne Pipeline-Logik zu duplizieren.\n\n![Dynamic pipeline](https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738765/Blog/Imported/hackathon-fake-blog-post-s/image7_wr0kx2.png \"Dynamic pipeline\")\n\n### 4. MR-First-Delivery: Merge-Request-Pipelines, Merged-Results und Workflow-Routing\n\n**Das Problem:** 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 `main` tatsächlich landet.\n\nGitLab kombiniert drei ineinandergreifende Mechanismen: [Merge-Request-Pipelines](https://docs.gitlab.com/ci/pipelines/merge_request_pipelines/) 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. [Merged-Results-Pipelines](https://docs.gitlab.com/ci/pipelines/merged_results_pipelines/) 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. [Workflow-Rules](https://docs.gitlab.com/ci/yaml/workflow/) definieren schließlich, welcher Pipeline-Typ unter welchen Bedingungen ausgeführt wird. Die `$CI_OPEN_MERGE_REQUESTS`-Guard verhindert dabei, dass für einen Branch mit offenem MR doppelte Pipelines ausgelöst werden.\n\nDas 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 `main` stellt ein manuelles Produktions-Deployment in die Warteschlange. Der Nightly-Scan läuft einmalig als geplante Pipeline – nicht bei jedem Commit.\n\nMerged-Results-Pipelines fangen dabei die Klasse von Fehlern ab, die erst nach einem Merge sichtbar werden – bevor sie `main` erreichen.\n\n### 5. Governed Pipelines: CI/CD Components\n\n**Das Problem:** Das Platform-Team hat den richtigen Weg für Build, Test und Deploy definiert. Jedes Anwendungsteam pflegt jedoch eine eigene `.gitlab-ci.yml` mit subtilen Abweichungen. Security-Scanning wird übersprungen. Deployment-Standards driften. Audits werden aufwändig.\n\n[CI/CD Components](https://docs.gitlab.com/ci/components/) ermöglichen es Platform-Teams, versionierte, wiederverwendbare Pipeline-Bausteine zu veröffentlichen. Anwendungsteams binden sie mit einer einzigen `include:`-Zeile ein – kein Copy-Paste, kein Drift. Components sind über den [CI/CD Catalog](https://docs.gitlab.com/ci/components/#cicd-catalog) auffindbar, sodass Teams bewährte Bausteine finden und übernehmen können, ohne das Platform-Team direkt einschalten zu müssen.\n\nDrei Zeilen `include:` 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.\n\nKombiniert mit [Resource Groups](https://docs.gitlab.com/ci/resource_groups/) zur Vermeidung konkurrierender Deployments und [Protected Environments](https://docs.gitlab.com/ci/environments/protected_environments/) für Freigabe-Gates entsteht eine governed Delivery-Plattform, auf der **Compliance der Standard ist, nicht die Ausnahme**. Platform-Teams setzen Vorgaben durch, ohne zum Engpass zu werden.\n\n![Component pipeline (imported jobs)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738776/Blog/Imported/hackathon-fake-blog-post-s/image2_pizuxd.png \"Component pipeline (imported jobs)\")\n\n## Das Modell als Ganzes\n\nKeines dieser Muster existiert isoliert. Der Wert von GitLabs Pipeline-Modell liegt in der Kombinierbarkeit seiner Bausteine:\n\n- Ein Monorepo nutzt Parent-Child-Pipelines, und jede Child-Pipeline nutzt DAG-Execution.\n- Eine Microservices-Plattform nutzt Multi-Project-Pipelines, und jedes Projekt nutzt MR-Pipelines mit Merged-Results.\n- Eine governed Plattform nutzt CI/CD Components, um die obigen Muster organisationsweit zu standardisieren.\n\nDie 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.\n\n## Weitere Muster\n\nDas Pipeline-Modell geht über die fünf vorgestellten Muster hinaus:\n\n- [Review Apps mit dynamischen Umgebungen](https://docs.gitlab.com/ci/environments/) erstellen für jeden Feature-Branch eine Live-Vorschau und räumen sie automatisch auf, wenn der MR geschlossen wird.\n- [Caching- und Artifact-Strategien](https://docs.gitlab.com/ci/caching/) sind nach der strukturellen Arbeit häufig der direkteste Weg zur weiteren Laufzeitoptimierung – ohne die Pipeline-Struktur zu verändern.\n- [Geplante und API-ausgelöste Pipelines](https://docs.gitlab.com/ci/pipelines/schedules/) 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 [API-ausgelöste](https://docs.gitlab.com/ci/triggers/) Pipelines mit `$CI_PIPELINE_SOURCE`-Routing modellieren.\n\n> [GitLab Ultimate kostenlos testen](https://about.gitlab.com/de-de/free-trial/) und Pipeline-Logik ab heute einsetzen.\n\n## Für deutsche Unternehmen: Regulatorischer Kontext\n\nTeams, die Pipeline-Governance nach Muster 5 einführen, adressieren dabei möglicherweise auch Anforderungen, die regulatorische Frameworks an sichere Softwareentwicklungsprozesse stellen.\n\nCI/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.\n\nMulti-Project-Pipelines mit API-Contract-Validierung (Muster 2) schaffen Sichtbarkeit über Service-Abhängigkeiten hinweg – ein Aspekt, den Frameworks zur Lieferkettensicherheit adressieren.\n\nMerged-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.\n\nFür konkrete Compliance-Anforderungen im eigenen regulatorischen Umfeld empfiehlt sich Rücksprache mit entsprechender Fachberatung.\n\n## Abschnitt 2: Konfiguration und Implementierung\n\n*Für Entwicklungsteams und DevOps-Praktiker: ausgewählte Konfigurationsbeispiele zu den Mustern 1, 4 und 5. Für vollständige Konfigurationen aller Muster: [englischer Originalartikel](https://about.gitlab.com/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/).*\n\nDie folgenden Konfigurationen sind illustrativ aufgebaut. Die Skripte verwenden `echo`-Befehle, um das Wesentliche sichtbar zu halten. Für den produktiven Einsatz werden die `echo`-Befehle durch die tatsächlichen Build-, Test- und Deploy-Schritte ersetzt.\n\n### Muster 1: Parent-Child-Pipelines und DAG-Execution\n\nEine Parent-Pipeline erkennt Änderungen und löst nur die betroffenen Child-Pipelines aus:\n\n```yaml # .gitlab-ci.yml stages:\n  - trigger\n\ntrigger-services:\n  stage: trigger\n  trigger:\n    include:\n      - local: '.gitlab/ci/api-service.yml'\n      - local: '.gitlab/ci/web-service.yml'\n      - local: '.gitlab/ci/worker-service.yml'\n    strategy: depend\n```\n\nInnerhalb der Child-Pipeline ermöglicht `needs:` DAG-Execution – der Test startet, sobald der Build abgeschlossen ist, ohne auf andere Jobs in derselben Stage zu warten:\n\n```yaml # .gitlab/ci/api-service.yml stages:\n  - build\n  - test\n\nbuild-api:\n  stage: build\n  script:\n    - echo \"Building API service\"\n\ntest-api:\n  stage: test\n  needs: [build-api]\n  script:\n    - echo \"Running API tests\"\n```\n\n![Local downstream pipelines](https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738759/Blog/Imported/hackathon-fake-blog-post-s/image3_vwj3rz.png \"Local downstream pipelines\")\n\n### Muster 4: MR-First-Delivery\n\nWorkflow-Rules, MR-Pipelines und Merged-Results zusammen ergeben ein kontextabhängiges Pipeline-Verhalten:\n\n```yaml # .gitlab-ci.yml workflow:\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n    - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS\n      when: never\n    - if: $CI_COMMIT_BRANCH\n    - if: $CI_PIPELINE_SOURCE == \"schedule\"\n\nstages:\n  - fast-checks\n  - expensive-tests\n  - deploy\n\nlint-code:\n  stage: fast-checks\n  script:\n    - echo \"Running linter\"\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"push\"\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n    - if: $CI_COMMIT_BRANCH == \"main\"\n\nunit-tests:\n  stage: fast-checks\n  script:\n    - echo \"Running unit tests\"\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"push\"\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n    - if: $CI_COMMIT_BRANCH == \"main\"\n\nintegration-tests:\n  stage: expensive-tests\n  script:\n    - echo \"Running integration tests (15 min)\"\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n    - if: $CI_COMMIT_BRANCH == \"main\"\n\ne2e-tests:\n  stage: expensive-tests\n  script:\n    - echo \"Running E2E tests (30 min)\"\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n    - if: $CI_COMMIT_BRANCH == \"main\"\n\nnightly-comprehensive-scan:\n  stage: expensive-tests\n  script:\n    - echo \"Running full nightly suite (2 hours)\"\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"schedule\"\n\ndeploy-production:\n  stage: deploy\n  script:\n    - echo \"Deploying to production\"\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\"\n      when: manual\n```\n\n![Conditional pipelines (within a branch with no MR)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738768/Blog/Imported/hackathon-fake-blog-post-s/image6_dnfcny.png \"Conditional pipelines (within a branch with no MR)\")\n\n![Conditional pipelines (within an MR)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738772/Blog/Imported/hackathon-fake-blog-post-s/image1_wyiafu.png \"Conditional pipelines (within an MR)\")\n\n![Conditional pipelines (on the main branch)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1775738774/Blog/Imported/hackathon-fake-blog-post-s/image5_r6lkfd.png \"Conditional pipelines (on the main branch)\")\n\n### Muster 5: CI/CD Components\n\nEine Komponentendefinition aus einer gemeinsamen Bibliothek:\n\n```yaml # templates/deploy.yml spec:\n  inputs:\n    stage:\n      default: deploy\n    environment:\n      default: production\n--- deploy-job:\n  stage: $[[ inputs.stage ]]\n  script:\n    - echo \"Deploying $APP_NAME to $[[ inputs.environment ]]\"\n    - echo \"Deploy URL: $DEPLOY_URL\"\n  environment:\n    name: $[[ inputs.environment ]]\n```\n\nSo bindet ein Anwendungsteam die Komponenten ein:\n\n```yaml # Application repo: .gitlab-ci.yml variables:\n  APP_NAME: \"my-awesome-app\"\n  DEPLOY_URL: \"https://api.example.com\"\n\ninclude:\n  - component: gitlab.com/my-org/component-library/build@v1.0.6\n  - component: gitlab.com/my-org/component-library/test@v1.0.6\n  - component: gitlab.com/my-org/component-library/deploy@v1.0.6\n    inputs:\n      environment: staging\n\nstages:\n  - build\n  - test\n  - deploy\n```\n\n### Orientierung zu den Mustern 2 und 3\n\n**Muster 2 (Multi-Project-Pipelines):** 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 `integration-test`-Job läuft dabei nur dann, wenn er von einer Upstream-Pipeline ausgelöst wurde (`$CI_PIPELINE_SOURCE == \"pipeline\"`), 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: [englischer Originalartikel](https://about.gitlab.com/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/#2-microservices-cross-repo-multi-project-pipelines).\n\n**Muster 3 (Dynamische Child-Pipelines):** Ein `generate-config`-Job erzeugt zur Laufzeit environment-spezifische YAML-Dateien. Trigger-Jobs nutzen `extends:` für gemeinsam genutzte Konfiguration und `needs:` für sequenzielle Promotion (dev → staging → prod mit manuellem Gate). Vollständige Konfiguration: [englischer Originalartikel](https://about.gitlab.com/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems/#3-multi-tenant--matrix-deployments-dynamic-child-pipelines).\n\n## Weiterführende Artikel\n\n- [Variable and artifact sharing in GitLab parent-child pipelines](https://about.gitlab.com/blog/variable-and-artifact-sharing-in-gitlab-parent-child-pipelines/)\n- [CI/CD inputs: Secure and preferred method to pass parameters to a pipeline](https://about.gitlab.com/blog/ci-cd-inputs-secure-and-preferred-method-to-pass-parameters-to-a-pipeline/)\n- [Tutorial: How to set up your first GitLab CI/CD component](https://about.gitlab.com/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component/)\n- [How to include file references in your CI/CD components](https://about.gitlab.com/blog/how-to-include-file-references-in-your-ci-cd-components/)\n- [FAQ: GitLab CI/CD Catalog](https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/)\n- [Building a GitLab CI/CD pipeline for a monorepo the easy way](https://about.gitlab.com/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way/)\n- [A CI/CD component builder's journey](https://about.gitlab.com/blog/a-ci-component-builders-journey/)\n- [CI/CD Catalog goes GA: No more building pipelines from scratch](https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/)","5 GitLab-Pipeline-Muster für komplexe Engineering-Herausforderungen","Wie Parent-Child-Pipelines, DAG-Execution, MR-Pipelines und CI/CD Components komplexe Delivery-Probleme lösen – von Monorepos bis zur governed Plattform.",[694],"Omid Khan","https://res.cloudinary.com/about-gitlab-com/image/upload/v1772721753/frfsm1qfscwrmsyzj1qn.png","2026-04-09",[89,698,699,700],"DevOps platform","tutorial","features",{},"/de-de/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems",{"config":704,"title":705,"description":706},{"noIndex":10},"5 GitLab-Pipeline-Muster für skalierbare CI/CD-Delivery","CI/CD in komplexen Umgebungen skalieren: fünf GitLab-Pipeline-Muster für Monorepos, Microservices, Matrix-Deployments und governed Plattformen.","de-de/blog/5-ways-gitlab-pipeline-logic-solves-real-engineering-problems",[531,709,699,700],"devops-platform","JkLexY3L4mCcTOkObOy3aOmJBiUToWpqdYnYvNE3ME4",[712,723,732,741,751,760,768,777,785],{"content":713,"config":721},{"title":714,"heroImage":715,"category":9,"description":716,"authors":717},"Wir haben die GitLab-Dokumentationsseite komplett redesigned","blog/hero%20images/workflow_1800x945.png","Erfahre mehr über die Features unserer neu gestalteten Produktdokumentationsseite, die einen einfachen Feedback-Mechanismus und den vielgewünschten Dark Mode bietet.",[718,719,720],"Suzanne Selhorn","Sarah German","Julia Miocene",{"externalUrl":-1,"slug":722},"docs-site-design-overhaul",{"content":724,"config":730},{"title":725,"heroImage":726,"category":9,"description":727,"authors":728},"Custom Rules für GitLab Duo: Höhere Entwicklungseffizienz","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","KI-Assistenten verstehen die eigene Code-Basis mit Custom Rules und generieren produktionsreifen Code mit minimalen Review-Zyklen.",[729],"Michael Friedrich",{"externalUrl":-1,"slug":731},"custom-rules-duo-agentic-chat-deep-dive",{"content":733,"config":739},{"title":734,"heroImage":735,"category":9,"description":736,"authors":737},"Hinter den Kulissen von GitLabs Healthy Backlog Initiative","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664458/Blog/Hero%20Images/Gartner_AI_Code_Assistants_Blog_Post_Cover_Image_1800x945.png","Wie GitLab 65.000 Issues in strategische Features, schnelle Entwicklung und direkte Community-Kommunikation verwandelt.",[738],"Stan Hu",{"externalUrl":-1,"slug":740},"inside-gitlabs-healthy-backlog-initiative",{"content":742,"config":749},{"title":743,"heroImage":744,"category":9,"description":745,"authors":746},"So haben wir GitLab-Backups von 48 Stunden auf 41 Minuten beschleunigt","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097166/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20display%20preview%20for%20blog%20images%20%282%29_2pKf8RsKzAaThmQfqHIaa7_1750097166565.png","Erfahre, wie GitLab einen Leistungsengpass in einer 15 Jahre alten Git-Funktion aufgespürt und behoben hat, was zu einer verbesserten Effizienz führte.",[747,748],"Karthik Nayak","Manuel Kraft",{"externalUrl":-1,"slug":750},"how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes",{"content":752,"config":758},{"title":753,"heroImage":754,"category":9,"description":755,"authors":756},"Was ist Kubernetes?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662245/Blog/Hero%20Images/blog-image-template-1800x945__16_.png","Container haben Softwareentwicklung und -Deployment revolutioniert. Wir zeigen dir hier die Vorteile von Kubernetes.",[757],"GitLab Germany Team",{"externalUrl":-1,"slug":759},"definition-what-is-kubernetes",{"content":761,"config":766},{"title":762,"heroImage":763,"category":9,"description":764,"authors":765},"Linux-Server: Warum sich die Installation lohnt","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663065/Blog/Hero%20Images/serveur-linux.jpg","Linux-Server sind weltweit führend. Wir erklären dir, warum und du selbst von den Vorteilen profitieren kannst.",[757],{"externalUrl":-1,"slug":767},"what-is-a-linux-server",{"content":769,"config":775},{"title":770,"heroImage":771,"category":9,"description":772,"authors":773},"Automatisierung der Migration von Container-Images von Amazon ECR zu GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663129/Blog/Hero%20Images/blog-image-template-1800x945__28_.png","Wenn Plattformteams ihre CI/CD zu GitLab verschieben, sollte die Migration von Container-Images kein Engpass sein. Befolge diese Schritt-für-Schritt-Anleitung, um den Pipeline-Migrationsprozess zu automatisieren.",[774],"Tim Rizzi",{"externalUrl":-1,"slug":776},"automating-container-image-migration-from-amazon-ecr-to-gitlab",{"content":778,"config":783},{"title":779,"heroImage":780,"category":9,"description":781,"authors":782},"Was ist eine integrierte Entwicklungsumgebung (IDE)?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659768/Blog/Hero%20Images/AdobeStock_271529563.jpg","Der ultimative Guide: Alles, was du über Integrierte Entwicklungsumgebungen wissen musst.",[757],{"externalUrl":-1,"slug":784},"what-is-an-ide",{"content":786,"config":792},{"title":787,"heroImage":788,"category":9,"description":789,"authors":790},"Kontinuierliche Bereitstellung in fünf Umgebungen mithilfe von untergeordneten Pipelines","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097012/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_397632156_3Ldy1urjMStQCl4qnOBvE0_1750097011626.jpg","Erfahre, wie du die kontinuierliche Bereitstellung in verschiedenen Umgebungen – darunter temporäre, sofort einsatzbereite Sandboxes – mit einem minimalistischen GitLab-Workflow verwalten kannst.",[791],"Olivier Dupré",{"externalUrl":-1,"slug":793},"using-child-pipelines-to-continuously-deploy-to-five-environments",1777576680345]