[{"data":1,"prerenderedAt":1463},["ShallowReactive",2],{"/de-de/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab":3,"navigation-de-de":680,"banner-de-de":1110,"footer-de-de":1118,"blog-post-authors-de-de-Tim Rizzi":1359,"blog-related-posts-de-de-automating-container-image-migration-from-amazon-ecr-to-gitlab":1374,"blog-promotions-de-de":1400,"next-steps-de-de":1453},{"id":4,"title":5,"authors":6,"body":8,"category":656,"date":657,"description":658,"extension":659,"externalUrl":660,"faq":660,"featured":321,"heroImage":661,"meta":662,"navigation":321,"path":663,"seo":664,"slug":669,"stem":670,"tags":671,"template":677,"updatedDate":678,"__hash__":679},"blogPosts/de-de/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab.md","Automatisierung der Migration von Container-Images von Amazon ECR zu GitLab",[7],"Tim Rizzi",{"type":9,"value":10,"toc":645},"minimark",[11,15,18,23,33,37,40,45,48,209,213,216,279,283,286,358,361,368,371,415,420,423,462,467,470,553,557,560,575,578,582,585,603,607,610,624,627,641],[12,13,14],"p",{},"„Wir müssen Hunderte von Container-Images von Amazon Elastic Container Registry (ECR) zu GitLab migrieren. Könnt ihr uns helfen?“ Diese Frage taucht immer wieder in Gesprächen mit Platform Engineers auf. Sie modernisierten also ihre DevSecOps-Toolchain mit GitLab, kamen aber beim Verschieben ihrer Container-Images nicht weiter. Während ein einzelner Image-Transfer einfach ist, erscheint das schiere Volumen überwältigend.",[12,16,17],{},"Ein Platform Engineer brachte es auf den Punkt: „Ich weiß genau, was zu tun ist – pullen, neu kennzeichnen, pushen. Aber ich habe 200 Microservices mit jeweils mehreren Tags. Ich kann es nicht rechtfertigen, Wochen für diese Migration aufzuwenden, während wichtige Infrastrukturarbeiten anstehen.“",[19,20,22],"h2",{"id":21},"die-herausforderung","Die Herausforderung",[12,24,25,26,32],{},"Dieses Gespräch führte zu einer Idee. Was wäre, wenn wir den gesamten Prozess automatisieren könnten? Wenn Plattformteams ihre ",[27,28,31],"a",{"href":29,"rel":30},"https://about.gitlab.com/de-de/topics/ci-cd/",[],"CI/CD"," zu GitLab verschieben, sollte die Migration von Container-Images kein Engpass sein. Der manuelle Prozess ist einfach, aber repetitiv: Jedes Image pullen, neu kennzeichnen und in die Container-Registry von GitLab pushen. Angesichts dutzender Repositories und mehrerer Tags pro Image, bedeutet dies Tage oder Wochen langwieriger Arbeit.",[19,34,36],{"id":35},"die-lösung","Die Lösung",[12,38,39],{},"Wir haben uns daran gemacht, eine GitLab-Pipeline zu erstellen, die all diese schwierigen Aufgaben automatisch erledigt. Das Ziel war einfach: Wir wollten Platform Engineers ein Tool zur Verfügung stellen, das sie in wenigen Minuten einrichten und über Nacht ausführen können, sodass am nächsten Morgen alle ihre Images erfolgreich migriert wurden.",[41,42,44],"h3",{"id":43},"einrichten-des-zugriffs","Einrichten des Zugriffs",[12,46,47],{},"Das Wichtigste zuerst: die Sicherheit. Teams sollen diese Migration mit minimalen AWS-Berechtigungen durchführen können. Hier ist die schreibgeschützte Identitäts- und Zugriffsmanagement (IAM)-Richtlinie dafür:",[49,50,55],"pre",{"className":51,"code":52,"language":53,"meta":54,"style":54},"language-json shiki shiki-themes github-light","{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"ecr:GetAuthorizationToken\",\n                \"ecr:BatchCheckLayerAvailability\",\n                \"ecr:GetDownloadUrlForLayer\",\n                \"ecr:DescribeRepositories\",\n                \"ecr:ListImages\",\n                \"ecr:DescribeImages\",\n                \"ecr:BatchGetImage\"\n            ],\n            \"Resource\": \"*\"\n        }\n    ]\n}\n","json","",[56,57,58,67,84,93,99,112,120,128,136,144,152,160,168,174,180,191,197,203],"code",{"__ignoreMap":54},[59,60,63],"span",{"class":61,"line":62},"line",1,[59,64,66],{"class":65},"sgsFI","{\n",[59,68,70,74,77,81],{"class":61,"line":69},2,[59,71,73],{"class":72},"sYu0t","    \"Version\"",[59,75,76],{"class":65},": ",[59,78,80],{"class":79},"sYBdl","\"2012-10-17\"",[59,82,83],{"class":65},",\n",[59,85,87,90],{"class":61,"line":86},3,[59,88,89],{"class":72},"    \"Statement\"",[59,91,92],{"class":65},": [\n",[59,94,96],{"class":61,"line":95},4,[59,97,98],{"class":65},"        {\n",[59,100,102,105,107,110],{"class":61,"line":101},5,[59,103,104],{"class":72},"            \"Effect\"",[59,106,76],{"class":65},[59,108,109],{"class":79},"\"Allow\"",[59,111,83],{"class":65},[59,113,115,118],{"class":61,"line":114},6,[59,116,117],{"class":72},"            \"Action\"",[59,119,92],{"class":65},[59,121,123,126],{"class":61,"line":122},7,[59,124,125],{"class":79},"                \"ecr:GetAuthorizationToken\"",[59,127,83],{"class":65},[59,129,131,134],{"class":61,"line":130},8,[59,132,133],{"class":79},"                \"ecr:BatchCheckLayerAvailability\"",[59,135,83],{"class":65},[59,137,139,142],{"class":61,"line":138},9,[59,140,141],{"class":79},"                \"ecr:GetDownloadUrlForLayer\"",[59,143,83],{"class":65},[59,145,147,150],{"class":61,"line":146},10,[59,148,149],{"class":79},"                \"ecr:DescribeRepositories\"",[59,151,83],{"class":65},[59,153,155,158],{"class":61,"line":154},11,[59,156,157],{"class":79},"                \"ecr:ListImages\"",[59,159,83],{"class":65},[59,161,163,166],{"class":61,"line":162},12,[59,164,165],{"class":79},"                \"ecr:DescribeImages\"",[59,167,83],{"class":65},[59,169,171],{"class":61,"line":170},13,[59,172,173],{"class":79},"                \"ecr:BatchGetImage\"\n",[59,175,177],{"class":61,"line":176},14,[59,178,179],{"class":65},"            ],\n",[59,181,183,186,188],{"class":61,"line":182},15,[59,184,185],{"class":72},"            \"Resource\"",[59,187,76],{"class":65},[59,189,190],{"class":79},"\"*\"\n",[59,192,194],{"class":61,"line":193},16,[59,195,196],{"class":65},"        }\n",[59,198,200],{"class":61,"line":199},17,[59,201,202],{"class":65},"    ]\n",[59,204,206],{"class":61,"line":205},18,[59,207,208],{"class":65},"}\n",[41,210,212],{"id":211},"gitlab-konfiguration","GitLab-Konfiguration",[12,214,215],{},"Nachdem die Sicherheit gewährleistet ist, ist der nächste Schritt die Einrichtung von GitLab. Wir haben uns auf das Wesentliche beschränkt. Du musst diese Variablen in deinen CI/CD-Einstellungen konfigurieren:",[49,217,221],{"className":218,"code":219,"language":220,"meta":54,"style":54},"language-yaml shiki shiki-themes github-light","AWS_ACCOUNT_ID: Your AWS account number\nAWS_DEFAULT_REGION: Your ECR region\nAWS_ACCESS_KEY_ID: [Masked]\nAWS_SECRET_ACCESS_KEY: [Masked]\nBULK_MIGRATE: true\n","yaml",[56,222,223,234,244,258,269],{"__ignoreMap":54},[59,224,225,229,231],{"class":61,"line":62},[59,226,228],{"class":227},"shJU0","AWS_ACCOUNT_ID",[59,230,76],{"class":65},[59,232,233],{"class":79},"Your AWS account number\n",[59,235,236,239,241],{"class":61,"line":69},[59,237,238],{"class":227},"AWS_DEFAULT_REGION",[59,240,76],{"class":65},[59,242,243],{"class":79},"Your ECR region\n",[59,245,246,249,252,255],{"class":61,"line":86},[59,247,248],{"class":227},"AWS_ACCESS_KEY_ID",[59,250,251],{"class":65},": [",[59,253,254],{"class":79},"Masked",[59,256,257],{"class":65},"]\n",[59,259,260,263,265,267],{"class":61,"line":95},[59,261,262],{"class":227},"AWS_SECRET_ACCESS_KEY",[59,264,251],{"class":65},[59,266,254],{"class":79},[59,268,257],{"class":65},[59,270,271,274,276],{"class":61,"line":101},[59,272,273],{"class":227},"BULK_MIGRATE",[59,275,76],{"class":65},[59,277,278],{"class":72},"true\n",[41,280,282],{"id":281},"die-migrationspipeline","Die Migrationspipeline",[12,284,285],{},"Jetzt wird es interessant. Wir haben die Pipeline mit Docker-in-Docker erstellt, um alle Image-Vorgänge zuverlässig zu verarbeiten:",[49,287,289],{"className":218,"code":288,"language":220,"meta":54,"style":54},"image: docker:20.10\nservices:\n  - docker:20.10-dind\n\nbefore_script:\n  - apk add --no-cache aws-cli jq\n  - aws sts get-caller-identity\n  - aws ecr get-login-password | docker login --username AWS --password-stdin\n  - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}\n",[56,290,291,301,309,317,323,330,337,344,351],{"__ignoreMap":54},[59,292,293,296,298],{"class":61,"line":62},[59,294,295],{"class":227},"image",[59,297,76],{"class":65},[59,299,300],{"class":79},"docker:20.10\n",[59,302,303,306],{"class":61,"line":69},[59,304,305],{"class":227},"services",[59,307,308],{"class":65},":\n",[59,310,311,314],{"class":61,"line":86},[59,312,313],{"class":65},"  - ",[59,315,316],{"class":79},"docker:20.10-dind\n",[59,318,319],{"class":61,"line":95},[59,320,322],{"emptyLinePlaceholder":321},true,"\n",[59,324,325,328],{"class":61,"line":101},[59,326,327],{"class":227},"before_script",[59,329,308],{"class":65},[59,331,332,334],{"class":61,"line":114},[59,333,313],{"class":65},[59,335,336],{"class":79},"apk add --no-cache aws-cli jq\n",[59,338,339,341],{"class":61,"line":122},[59,340,313],{"class":65},[59,342,343],{"class":79},"aws sts get-caller-identity\n",[59,345,346,348],{"class":61,"line":130},[59,347,313],{"class":65},[59,349,350],{"class":79},"aws ecr get-login-password | docker login --username AWS --password-stdin\n",[59,352,353,355],{"class":61,"line":138},[59,354,313],{"class":65},[59,356,357],{"class":79},"docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}\n",[12,359,360],{},"Die Pipeline hat drei Phasen, die jeweils auf der letzten aufbauen:",[362,363,364],"ol",{},[365,366,367],"li",{},"Entdeckung",[12,369,370],{},"Zuerst findet sie alle deine Repositories:",[49,372,376],{"className":373,"code":374,"language":375,"meta":54,"style":54},"language-bash shiki shiki-themes github-light","REPOS=$(aws ecr describe-repositories --query 'repositories[*].repositoryName' --output text)\n","bash",[56,377,378],{"__ignoreMap":54},[59,379,380,383,387,390,394,397,400,403,406,409,412],{"class":61,"line":62},[59,381,382],{"class":65},"REPOS",[59,384,386],{"class":385},"sD7c4","=",[59,388,389],{"class":65},"$(",[59,391,393],{"class":392},"s7eDp","aws",[59,395,396],{"class":79}," ecr",[59,398,399],{"class":79}," describe-repositories",[59,401,402],{"class":72}," --query",[59,404,405],{"class":79}," 'repositories[*].repositoryName'",[59,407,408],{"class":72}," --output",[59,410,411],{"class":79}," text",[59,413,414],{"class":65},")\n",[362,416,417],{"start":69},[365,418,419],{},"Tag-Auflistung",[12,421,422],{},"Dann ruft sie für jedes Repository alle Tags ab:",[49,424,426],{"className":373,"code":425,"language":375,"meta":54,"style":54},"TAGS=$(aws ecr describe-images --repository-name $repo --query 'imageDetails[*].imageTags[]' --output text)\n",[56,427,428],{"__ignoreMap":54},[59,429,430,433,435,437,439,441,444,447,450,453,456,458,460],{"class":61,"line":62},[59,431,432],{"class":65},"TAGS",[59,434,386],{"class":385},[59,436,389],{"class":65},[59,438,393],{"class":392},[59,440,396],{"class":79},[59,442,443],{"class":79}," describe-images",[59,445,446],{"class":72}," --repository-name",[59,448,449],{"class":65}," $repo ",[59,451,452],{"class":72},"--query",[59,454,455],{"class":79}," 'imageDetails[*].imageTags[]'",[59,457,408],{"class":72},[59,459,411],{"class":79},[59,461,414],{"class":65},[362,463,464],{"start":86},[365,465,466],{},"Übertragung",[12,468,469],{},"Schließlich übernimmt sie die eigentliche Migration:",[49,471,473],{"className":373,"code":472,"language":375,"meta":54,"style":54},"docker pull ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag}\ndocker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${repo}:${tag} ${CI_REGISTRY_IMAGE}/${repo}:${tag}\ndocker push ${CI_REGISTRY_IMAGE}/${repo}:${tag}\n",[56,474,475,504,535],{"__ignoreMap":54},[59,476,477,480,483,486,489,492,495,498,501],{"class":61,"line":62},[59,478,479],{"class":392},"docker",[59,481,482],{"class":79}," pull",[59,484,485],{"class":65}," ${AWS_ACCOUNT_ID}",[59,487,488],{"class":79},".dkr.ecr.",[59,490,491],{"class":65},"${AWS_DEFAULT_REGION}",[59,493,494],{"class":79},".amazonaws.com/",[59,496,497],{"class":65},"${repo}",[59,499,500],{"class":79},":",[59,502,503],{"class":65},"${tag}\n",[59,505,506,508,511,513,515,517,519,521,523,526,529,531,533],{"class":61,"line":69},[59,507,479],{"class":392},[59,509,510],{"class":79}," tag",[59,512,485],{"class":65},[59,514,488],{"class":79},[59,516,491],{"class":65},[59,518,494],{"class":79},[59,520,497],{"class":65},[59,522,500],{"class":79},[59,524,525],{"class":65},"${tag} ${CI_REGISTRY_IMAGE}",[59,527,528],{"class":79},"/",[59,530,497],{"class":65},[59,532,500],{"class":79},[59,534,503],{"class":65},[59,536,537,539,542,545,547,549,551],{"class":61,"line":86},[59,538,479],{"class":392},[59,540,541],{"class":79}," push",[59,543,544],{"class":65}," ${CI_REGISTRY_IMAGE}",[59,546,528],{"class":79},[59,548,497],{"class":65},[59,550,500],{"class":79},[59,552,503],{"class":65},[19,554,556],{"id":555},"das-ergebnis","Das Ergebnis",[12,558,559],{},"Erinnerst du dich an den Platform Engineer, der nicht wochenlang mit der Migration verbringen wollte? Diese Lösung bietet Folgendes:",[561,562,563,566,569,572],"ul",{},[365,564,565],{},"automatisierte Erkennung und Migration aller Repositories und Tags",[365,567,568],{},"konsistente Image-Benennung zwischen ECR und GitLab",[365,570,571],{},"Fehlerbehandlung für fehlgeschlagene Übertragungen",[365,573,574],{},"klare Protokollierung zur Verfolgung des Fortschritts",[12,576,577],{},"Anstatt Skripte zu schreiben und die Migration zu überwachen, konnte sich der Plattform Engineer auf wertvollere Arbeit konzentrieren.",[19,579,581],{"id":580},"verwendung","Verwendung",[12,583,584],{},"Die ersten Schritte sind einfach:",[362,586,587,594,597],{},[365,588,589,590,593],{},"Kopiere die Datei ",[56,591,592],{},".gitlab-ci.yml"," in dein Repository.",[365,595,596],{},"Konfiguriere die AWS- und GitLab-Variablen.",[365,598,599,600,602],{},"Setze ",[56,601,273],{}," auf „true“, um die Migration zu starten.",[19,604,606],{"id":605},"best-practices","Best Practices",[12,608,609],{},"Bei der Unterstützung von Teams bei ihren Migrationen haben wir einige Dinge gelernt:",[561,611,612,615,618,621],{},[365,613,614],{},"Der Prozess sollte außerhalb der Stoßzeiten durchgeführt werden, um die Auswirkungen auf dein Team zu minimieren.",[365,616,617],{},"Die Pipeline-Protokolle sind wichtig – darin findest du Informationen, wenn es ein Problem gibt.",[365,619,620],{},"Die Elastic Container Registry (ECR) sollte erst deaktiviert werden, wenn du überprüft hast, dass alle Images erfolgreich übertragen wurden.",[365,622,623],{},"Bei sehr großen Migrationen solltest du eine Ratenbegrenzung in Betracht ziehen, um eine Überlastung deines Netzwerks zu vermeiden.",[12,625,626],{},"Wir haben diese Pipeline in unserem öffentlichen GitLab-Repository quelloffen verfügbar gemacht, weil wir der Meinung sind, dass Plattform Engineers Zeit damit verbringen sollten, wertvolle Infrastrukturen aufzubauen, anstatt Container-Images zu kopieren. Passe sie an deine Bedürfnisse an und stelle Fragen zur Implementierung, wenn etwas unklar ist.",[628,629,630],"blockquote",{},[631,632,634,635,640],"h4",{"id":633},"informationen-dazu-und-zu-anderen-paketkomponenten-findest-du-in-unserer-cicd-katalog-dokumentation","Informationen dazu und zu anderen Paketkomponenten findest du in unserer ",[27,636,639],{"href":637,"rel":638},"https://gitlab.com/explore/catalog/components/package",[],"CI/CD-Katalog-Dokumentation",".",[642,643,644],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}",{"title":54,"searchDepth":69,"depth":69,"links":646},[647,648,653,654,655],{"id":21,"depth":69,"text":22},{"id":35,"depth":69,"text":36,"children":649},[650,651,652],{"id":43,"depth":86,"text":44},{"id":211,"depth":86,"text":212},{"id":281,"depth":86,"text":282},{"id":555,"depth":69,"text":556},{"id":580,"depth":69,"text":581},{"id":605,"depth":69,"text":606},"engineering","2025-02-13","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.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663129/Blog/Hero%20Images/blog-image-template-1800x945__28_.png",{},"/de-de/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",{"title":5,"description":658,"ogTitle":5,"ogDescription":658,"noIndex":665,"ogImage":661,"ogUrl":666,"ogSiteName":667,"ogType":668,"canonicalUrls":666},false,"https://about.gitlab.com/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab","https://about.gitlab.com","article","automating-container-image-migration-from-amazon-ecr-to-gitlab","de-de/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",[31,672,673,674,675,676],"AWS","tutorial","DevSecOps platform","product","solutions architecture","BlogPost","2025-04-10","FVDztFykzSirLt-w-6cITlfup_WrKv2jUrHYFB6kZ-4",{"logo":681,"freeTrial":686,"sales":691,"login":696,"items":701,"search":1028,"minimal":1062,"duo":1080,"switchNav":1089,"pricingDeployment":1100},{"config":682},{"href":683,"dataGaName":684,"dataGaLocation":685},"/de-de/","gitlab logo","header",{"text":687,"config":688},"Kostenlose Testversion anfordern",{"href":689,"dataGaName":690,"dataGaLocation":685},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":692,"config":693},"Demo anfordern",{"href":694,"dataGaName":695,"dataGaLocation":685},"/de-de/sales/?contact-topic=request-demo","sales",{"text":697,"config":698},"Anmelden",{"href":699,"dataGaName":700,"dataGaLocation":685},"https://gitlab.com/users/sign_in/","sign in",[702,731,832,837,950,1006],{"text":703,"config":704,"menu":706},"Plattform",{"dataNavLevelOne":705},"platform",{"type":707,"columns":708},"cards",[709,715,723],{"title":703,"description":710,"link":711},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":712,"config":713},"Die Plattform erkunden",{"href":714,"dataGaName":705,"dataGaLocation":685},"/de-de/platform/",{"title":716,"description":717,"link":718},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":719,"config":720},"Lerne GitLab Duo kennen",{"href":721,"dataGaName":722,"dataGaLocation":685},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":724,"description":725,"link":726},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":727,"config":728},"Mehr erfahren",{"href":729,"dataGaName":730,"dataGaLocation":685},"/de-de/why-gitlab/","why gitlab",{"text":732,"left":321,"config":733,"menu":735},"Produkt",{"dataNavLevelOne":734},"solutions",{"type":736,"link":737,"columns":741,"feature":811},"lists",{"text":738,"config":739},"Alle Lösungen anzeigen",{"href":740,"dataGaName":734,"dataGaLocation":685},"/de-de/solutions/",[742,766,789],{"title":743,"description":744,"link":745,"items":750},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":746},{"icon":747,"href":748,"dataGaName":749,"dataGaLocation":685},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[751,754,757,762],{"text":31,"config":752},{"href":753,"dataGaLocation":685,"dataGaName":31},"/de-de/solutions/continuous-integration/",{"text":716,"config":755},{"href":721,"dataGaLocation":685,"dataGaName":756},"gitlab duo agent platform - product menu",{"text":758,"config":759},"Quellcodeverwaltung",{"href":760,"dataGaLocation":685,"dataGaName":761},"/de-de/solutions/source-code-management/","Source Code Management",{"text":763,"config":764},"Automatische Softwarebereitstellung",{"href":748,"dataGaLocation":685,"dataGaName":765},"Automated software delivery",{"title":767,"description":768,"link":769,"items":774},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":770},{"href":771,"dataGaName":772,"dataGaLocation":685,"icon":773},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[775,779,784],{"text":776,"config":777},"Anwendungssicherheitstests",{"href":771,"dataGaName":778,"dataGaLocation":685},"Application security testing",{"text":780,"config":781},"Schutz der Software-Lieferkette",{"href":782,"dataGaLocation":685,"dataGaName":783},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":785,"config":786},"Software-Compliance",{"href":787,"dataGaName":788,"dataGaLocation":685},"/de-de/solutions/software-compliance/","software compliance",{"title":790,"link":791,"items":796},"Messung",{"config":792},{"icon":793,"href":794,"dataGaName":795,"dataGaLocation":685},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[797,801,806],{"text":798,"config":799},"Sichtbarkeit und Messung",{"href":794,"dataGaLocation":685,"dataGaName":800},"Visibility and Measurement",{"text":802,"config":803},"Wertstrommanagement",{"href":804,"dataGaLocation":685,"dataGaName":805},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":807,"config":808},"Analysen und Einblicke",{"href":809,"dataGaLocation":685,"dataGaName":810},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":812,"type":736,"items":813},"GitLab für",[814,820,826],{"text":815,"config":816},"Enterprise",{"icon":817,"href":818,"dataGaLocation":685,"dataGaName":819},"Building","/de-de/enterprise/","enterprise",{"text":821,"config":822},"Kleinunternehmen",{"icon":823,"href":824,"dataGaLocation":685,"dataGaName":825},"Work","/de-de/small-business/","small business",{"text":827,"config":828},"Öffentlicher Sektor",{"icon":829,"href":830,"dataGaLocation":685,"dataGaName":831},"Organization","/de-de/solutions/public-sector/","public sector",{"text":833,"config":834},"Preise",{"href":835,"dataGaName":836,"dataGaLocation":685,"dataNavLevelOne":836},"/de-de/pricing/","pricing",{"text":838,"config":839,"menu":841},"Ressourcen",{"dataNavLevelOne":840},"resources",{"type":736,"link":842,"columns":846,"feature":939},{"text":843,"config":844},"Alle Ressourcen anzeigen",{"href":845,"dataGaName":840,"dataGaLocation":685},"/de-de/resources/",[847,880,907],{"title":848,"items":849},"Erste Schritte",[850,855,860,865,870,875],{"text":851,"config":852},"Installieren",{"href":853,"dataGaName":854,"dataGaLocation":685},"/de-de/install/","install",{"text":856,"config":857},"Kurzanleitungen",{"href":858,"dataGaName":859,"dataGaLocation":685},"/de-de/get-started/","quick setup checklists",{"text":861,"config":862},"Lernen",{"href":863,"dataGaLocation":685,"dataGaName":864},"https://university.gitlab.com/","learn",{"text":866,"config":867},"Produktdokumentation",{"href":868,"dataGaName":869,"dataGaLocation":685},"https://docs.gitlab.com/","product documentation",{"text":871,"config":872},"Best-Practice-Videos",{"href":873,"dataGaName":874,"dataGaLocation":685},"/de-de/getting-started-videos/","best practice videos",{"text":876,"config":877},"Integrationen",{"href":878,"dataGaName":879,"dataGaLocation":685},"/de-de/integrations/","integrations",{"title":881,"items":882},"Entdecken",[883,888,893,898,902],{"text":884,"config":885},"Kundenerfolge",{"href":886,"dataGaName":887,"dataGaLocation":685},"/de-de/customers/","customer success stories",{"text":889,"config":890},"Blog",{"href":891,"dataGaName":892,"dataGaLocation":685},"/de-de/blog/","blog",{"text":894,"config":895},"Demo-Hub",{"href":896,"dataGaName":897,"dataGaLocation":685},"/de-de/demo-hub/","demo hub",{"text":899,"config":900},"The Source",{"href":901,"dataGaName":892,"dataGaLocation":685},"/de-de/the-source/",{"text":903,"config":904},"Remote",{"href":905,"dataGaName":906,"dataGaLocation":685},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":908,"items":909},"Vernetzen",[910,914,919,924,929,934],{"text":911,"config":912},"GitLab-Services",{"href":913,"dataGaName":305,"dataGaLocation":685},"/de-de/services/",{"text":915,"config":916},"Beitragen",{"href":917,"dataGaName":918,"dataGaLocation":685},"https://contributors.gitlab.com","contribute",{"text":920,"config":921},"Community",{"href":922,"dataGaName":923,"dataGaLocation":685},"/community/","community",{"text":925,"config":926},"Forum",{"href":927,"dataGaName":928,"dataGaLocation":685},"https://forum.gitlab.com/","forum",{"text":930,"config":931},"Veranstaltungen",{"href":932,"dataGaName":933,"dataGaLocation":685},"/events/","events",{"text":935,"config":936},"Partner",{"href":937,"dataGaName":938,"dataGaLocation":685},"/de-de/partners/","partners",{"config":940,"title":943,"text":944,"link":945},{"background":941,"textColor":942},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Neues bei GitLab","Über die neuesten Funktionen und Verbesserungen auf dem Laufenden bleiben.",{"text":946,"config":947},"Aktuelle Nachrichten",{"href":948,"dataGaName":949,"dataGaLocation":685},"/de-de/whats-new/","whats new",{"text":951,"config":952,"menu":954},"Unternehmen",{"dataNavLevelOne":953},"company",{"type":736,"columns":955},[956],{"items":957},[958,963,969,971,976,981,986,991,996,1001],{"text":959,"config":960},"Über",{"href":961,"dataGaName":962,"dataGaLocation":685},"/de-de/company/","about",{"text":964,"config":965,"footerGa":968},"Karriere",{"href":966,"dataGaName":967,"dataGaLocation":685},"/jobs/","jobs",{"dataGaName":967},{"text":930,"config":970},{"href":932,"dataGaName":933,"dataGaLocation":685},{"text":972,"config":973},"Geschäftsführung",{"href":974,"dataGaName":975,"dataGaLocation":685},"/company/team/e-group/","leadership",{"text":977,"config":978},"Handbuch",{"href":979,"dataGaName":980,"dataGaLocation":685},"https://handbook.gitlab.com/","handbook",{"text":982,"config":983},"Investor Relations",{"href":984,"dataGaName":985,"dataGaLocation":685},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":987,"config":988},"Trust Center",{"href":989,"dataGaName":990,"dataGaLocation":685},"/de-de/security/","trust center",{"text":992,"config":993},"AI Transparency Center",{"href":994,"dataGaName":995,"dataGaLocation":685},"/de-de/ai-transparency-center/","ai transparency center",{"text":997,"config":998},"Newsletter",{"href":999,"dataGaName":1000,"dataGaLocation":685},"/company/contact/#contact-forms","newsletter",{"text":1002,"config":1003},"Presse",{"href":1004,"dataGaName":1005,"dataGaLocation":685},"/press/","press",{"text":1007,"config":1008,"menu":1009},"Kontakt",{"dataNavLevelOne":953},{"type":736,"columns":1010},[1011],{"items":1012},[1013,1018,1023],{"text":1014,"config":1015},"Vertrieb kontaktieren",{"href":1016,"dataGaName":1017,"dataGaLocation":685},"/de-de/sales/","talk to sales",{"text":1019,"config":1020},"Support-Portal",{"href":1021,"dataGaName":1022,"dataGaLocation":685},"https://support.gitlab.com/hc/en-us","support portal",{"text":1024,"config":1025},"Kundenportal",{"href":1026,"dataGaName":1027,"dataGaLocation":685},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1029,"login":1030,"suggestions":1037},"Schließen",{"text":1031,"link":1032},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1033,"config":1034},"gitlab.com",{"href":699,"dataGaName":1035,"dataGaLocation":1036},"search login","search",{"text":1038,"default":1039},"Vorschläge",[1040,1042,1047,1049,1054,1059],{"text":716,"config":1041},{"href":721,"dataGaName":716,"dataGaLocation":1036},{"text":1043,"config":1044},"Codevorschläge (KI)",{"href":1045,"dataGaName":1046,"dataGaLocation":1036},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":31,"config":1048},{"href":753,"dataGaName":31,"dataGaLocation":1036},{"text":1050,"config":1051},"GitLab auf AWS",{"href":1052,"dataGaName":1053,"dataGaLocation":1036},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1055,"config":1056},"GitLab auf Google Cloud",{"href":1057,"dataGaName":1058,"dataGaLocation":1036},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":724,"config":1060},{"href":729,"dataGaName":1061,"dataGaLocation":1036},"Why GitLab?",{"freeTrial":1063,"mobileIcon":1068,"desktopIcon":1073,"secondaryButton":1076},{"text":1064,"config":1065},"Kostenlos testen",{"href":1066,"dataGaName":690,"dataGaLocation":1067},"https://gitlab.com/-/trials/new/","nav",{"altText":1069,"config":1070},"GitLab-Symbol",{"src":1071,"dataGaName":1072,"dataGaLocation":1067},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1069,"config":1074},{"src":1075,"dataGaName":1072,"dataGaLocation":1067},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":848,"config":1077},{"href":1078,"dataGaName":1079,"dataGaLocation":1067},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1081,"mobileIcon":1085,"desktopIcon":1087},{"text":1082,"config":1083},"Mehr über GitLab Duo erfahren",{"href":721,"dataGaName":1084,"dataGaLocation":1067},"gitlab duo",{"altText":1069,"config":1086},{"src":1071,"dataGaName":1072,"dataGaLocation":1067},{"altText":1069,"config":1088},{"src":1075,"dataGaName":1072,"dataGaLocation":1067},{"button":1090,"mobileIcon":1095,"desktopIcon":1097},{"text":1091,"config":1092},"/Option",{"href":1093,"dataGaName":1094,"dataGaLocation":1067},"#contact","switch",{"altText":1069,"config":1096},{"src":1071,"dataGaName":1072,"dataGaLocation":1067},{"altText":1069,"config":1098},{"src":1099,"dataGaName":1072,"dataGaLocation":1067},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1101,"mobileIcon":1106,"desktopIcon":1108},{"text":1102,"config":1103},"Zurück zur Preisübersicht",{"href":835,"dataGaName":1104,"dataGaLocation":1067,"icon":1105},"back to pricing","GoBack",{"altText":1069,"config":1107},{"src":1071,"dataGaName":1072,"dataGaLocation":1067},{"altText":1069,"config":1109},{"src":1075,"dataGaName":1072,"dataGaLocation":1067},{"title":1111,"button":1112,"config":1116},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":727,"config":1113},{"href":1114,"dataGaName":1115,"dataGaLocation":685},"/de-de/gitlab-orbit/","orbit",{"layout":1117,"disabled":665},"release",{"data":1119},{"text":1120,"source":1121,"edit":1127,"contribute":1132,"config":1137,"items":1142,"minimal":1348},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1122,"config":1123},"Quelltext der Seite anzeigen",{"href":1124,"dataGaName":1125,"dataGaLocation":1126},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1128,"config":1129},"Diese Seite bearbeiten",{"href":1130,"dataGaName":1131,"dataGaLocation":1126},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1133,"config":1134},"Beteilige dich",{"href":1135,"dataGaName":1136,"dataGaLocation":1126},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1138,"facebook":1139,"youtube":1140,"linkedin":1141},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1143,1188,1241,1283,1315],{"title":833,"links":1144,"subMenu":1159},[1145,1149,1154],{"text":1146,"config":1147},"Tarife anzeigen",{"href":835,"dataGaName":1148,"dataGaLocation":1126},"view plans",{"text":1150,"config":1151},"Vorteile von Premium",{"href":1152,"dataGaName":1153,"dataGaLocation":1126},"/de-de/pricing/premium/","why premium",{"text":1155,"config":1156},"Vorteile von Ultimate",{"href":1157,"dataGaName":1158,"dataGaLocation":1126},"/de-de/pricing/ultimate/","why ultimate",[1160],{"title":1007,"links":1161},[1162,1164,1166,1168,1173,1178,1183],{"text":1014,"config":1163},{"href":1016,"dataGaName":695,"dataGaLocation":1126},{"text":1019,"config":1165},{"href":1021,"dataGaName":1022,"dataGaLocation":1126},{"text":1024,"config":1167},{"href":1026,"dataGaName":1027,"dataGaLocation":1126},{"text":1169,"config":1170},"Status",{"href":1171,"dataGaName":1172,"dataGaLocation":1126},"https://status.gitlab.com/","status",{"text":1174,"config":1175},"Nutzungsbedingungen",{"href":1176,"dataGaName":1177,"dataGaLocation":1126},"/terms/","terms of use",{"text":1179,"config":1180},"Datenschutzerklärung",{"href":1181,"dataGaName":1182,"dataGaLocation":1126},"/de-de/privacy/","privacy statement",{"text":1184,"config":1185},"Cookie-Einstellungen",{"dataGaName":1186,"dataGaLocation":1126,"id":1187,"isOneTrustButton":321},"cookie preferences","ot-sdk-btn",{"title":732,"links":1189,"subMenu":1198},[1190,1194],{"text":1191,"config":1192},"DevSecOps-Plattform",{"href":714,"dataGaName":1193,"dataGaLocation":1126},"devsecops platform",{"text":1195,"config":1196},"KI-unterstützte Entwicklung",{"href":721,"dataGaName":1197,"dataGaLocation":1126},"ai-assisted development",[1199],{"title":1200,"links":1201},"Themen",[1202,1206,1211,1216,1221,1226,1231,1236],{"text":31,"config":1203},{"href":1204,"dataGaName":1205,"dataGaLocation":1126},"/de-de/topics/ci-cd/","cicd",{"text":1207,"config":1208},"GitOps",{"href":1209,"dataGaName":1210,"dataGaLocation":1126},"/de-de/topics/gitops/","gitops",{"text":1212,"config":1213},"DevOps",{"href":1214,"dataGaName":1215,"dataGaLocation":1126},"/de-de/topics/devops/","devops",{"text":1217,"config":1218},"Versionskontrolle",{"href":1219,"dataGaName":1220,"dataGaLocation":1126},"/de-de/topics/version-control/","version control",{"text":1222,"config":1223},"DevSecOps",{"href":1224,"dataGaName":1225,"dataGaLocation":1126},"/de-de/topics/devsecops/","devsecops",{"text":1227,"config":1228},"Cloud-nativ",{"href":1229,"dataGaName":1230,"dataGaLocation":1126},"/de-de/topics/cloud-native/","cloud native",{"text":1232,"config":1233},"KI für das Programmieren",{"href":1234,"dataGaName":1235,"dataGaLocation":1126},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1237,"config":1238},"Agentische KI",{"href":1239,"dataGaName":1240,"dataGaLocation":1126},"/de-de/topics/agentic-ai/","agentic ai",{"title":1242,"links":1243},"Lösungen",[1244,1247,1249,1254,1258,1261,1264,1267,1269,1271,1273,1278],{"text":776,"config":1245},{"href":771,"dataGaName":1246,"dataGaLocation":1126},"Application Security Testing",{"text":763,"config":1248},{"href":748,"dataGaName":749,"dataGaLocation":1126},{"text":1250,"config":1251},"Agile Entwicklung",{"href":1252,"dataGaName":1253,"dataGaLocation":1126},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1255,"config":1256},"SCM",{"href":760,"dataGaName":1257,"dataGaLocation":1126},"source code management",{"text":31,"config":1259},{"href":753,"dataGaName":1260,"dataGaLocation":1126},"continuous integration & delivery",{"text":802,"config":1262},{"href":804,"dataGaName":1263,"dataGaLocation":1126},"value stream management",{"text":1207,"config":1265},{"href":1266,"dataGaName":1210,"dataGaLocation":1126},"/de-de/solutions/gitops/",{"text":815,"config":1268},{"href":818,"dataGaName":819,"dataGaLocation":1126},{"text":821,"config":1270},{"href":824,"dataGaName":825,"dataGaLocation":1126},{"text":827,"config":1272},{"href":830,"dataGaName":831,"dataGaLocation":1126},{"text":1274,"config":1275},"Bildungswesen",{"href":1276,"dataGaName":1277,"dataGaLocation":1126},"/de-de/solutions/education/","education",{"text":1279,"config":1280},"Finanzdienstleistungen",{"href":1281,"dataGaName":1282,"dataGaLocation":1126},"/de-de/solutions/finance/","financial services",{"title":838,"links":1284},[1285,1287,1289,1291,1294,1296,1299,1301,1303,1305,1307,1309,1311,1313],{"text":851,"config":1286},{"href":853,"dataGaName":854,"dataGaLocation":1126},{"text":856,"config":1288},{"href":858,"dataGaName":859,"dataGaLocation":1126},{"text":861,"config":1290},{"href":863,"dataGaName":864,"dataGaLocation":1126},{"text":866,"config":1292},{"href":868,"dataGaName":1293,"dataGaLocation":1126},"docs",{"text":889,"config":1295},{"href":891,"dataGaName":892,"dataGaLocation":1126},{"text":1297,"config":1298},"Neuerungen",{"href":948,"dataGaName":949,"dataGaLocation":1126},{"text":884,"config":1300},{"href":886,"dataGaName":887,"dataGaLocation":1126},{"text":903,"config":1302},{"href":905,"dataGaName":906,"dataGaLocation":1126},{"text":911,"config":1304},{"href":913,"dataGaName":305,"dataGaLocation":1126},{"text":915,"config":1306},{"href":917,"dataGaName":918,"dataGaLocation":1126},{"text":920,"config":1308},{"href":922,"dataGaName":923,"dataGaLocation":1126},{"text":925,"config":1310},{"href":927,"dataGaName":928,"dataGaLocation":1126},{"text":930,"config":1312},{"href":932,"dataGaName":933,"dataGaLocation":1126},{"text":935,"config":1314},{"href":937,"dataGaName":938,"dataGaLocation":1126},{"title":951,"links":1316},[1317,1319,1321,1323,1325,1327,1332,1337,1339,1341,1343],{"text":959,"config":1318},{"href":961,"dataGaName":953,"dataGaLocation":1126},{"text":964,"config":1320},{"href":966,"dataGaName":967,"dataGaLocation":1126},{"text":972,"config":1322},{"href":974,"dataGaName":975,"dataGaLocation":1126},{"text":977,"config":1324},{"href":979,"dataGaName":980,"dataGaLocation":1126},{"text":982,"config":1326},{"href":984,"dataGaName":985,"dataGaLocation":1126},{"text":1328,"config":1329},"Nachhaltigkeit",{"href":1330,"dataGaName":1331,"dataGaLocation":1126},"/sustainability/","Sustainability",{"text":1333,"config":1334},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1335,"dataGaName":1336,"dataGaLocation":1126},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":987,"config":1338},{"href":989,"dataGaName":990,"dataGaLocation":1126},{"text":997,"config":1340},{"href":999,"dataGaName":1000,"dataGaLocation":1126},{"text":1002,"config":1342},{"href":1004,"dataGaName":1005,"dataGaLocation":1126},{"text":1344,"config":1345},"Transparenzerklärung zu moderner Sklaverei",{"href":1346,"dataGaName":1347,"dataGaLocation":1126},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1349},[1350,1353,1356],{"text":1351,"config":1352},"Terms",{"href":1176,"dataGaName":1177,"dataGaLocation":1126},{"text":1354,"config":1355},"Cookies",{"dataGaName":1186,"dataGaLocation":1126,"id":1187,"isOneTrustButton":321},{"text":1357,"config":1358},"Datenschutz",{"href":1181,"dataGaName":1182,"dataGaLocation":1126},[1360],{"id":1361,"title":7,"body":660,"config":1362,"content":1364,"description":660,"extension":1368,"meta":1369,"navigation":321,"path":1370,"seo":1371,"stem":1372,"__hash__":1373},"blogAuthors/en-us/blog/authors/tim-rizzi.yml",{"template":1363},"BlogAuthor",{"name":7,"config":1365},{"headshot":1366,"ctfId":1367},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661866/Blog/Author%20Headshots/trizzi-headshot.jpg","trizzi","yml",{},"/en-us/blog/authors/tim-rizzi",{},"en-us/blog/authors/tim-rizzi","ADPqrpcnKveFJS0m_zFV0VLtb_h_txu59QVgz_YwKMc",[1375,1384,1392],{"title":1376,"description":1377,"heroImage":1378,"category":656,"date":1379,"authors":1380,"slug":1383,"externalUrl":660},"Confidential AI für GitLab Self-Hosted","KI-Coding-Agenten in GitLab Duo nutzen, ohne dass Quellcode eine hardwareverschlüsselte Grenze verlässt, und ohne eigene GPUs zu betreiben.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[1381,1382],"Mathias Ewald","Martin Paloncy","confidential-ai-for-gitlab-self-hosted",{"title":1385,"description":1386,"heroImage":1387,"category":656,"date":1388,"authors":1389,"slug":1391,"externalUrl":660},"Green DevOps: Warum CO2-Messung in die CI/CD-Pipeline gehört","Jeder Pipeline-Lauf verbraucht Energie, die nirgends sichtbar wird. Eco CI und Carmen machen diesen CO2-Ausstoß sichtbar, direkt in den Pipelines.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[1390],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1393,"description":1394,"heroImage":1395,"category":656,"date":1396,"authors":1397,"slug":1399,"externalUrl":660},"Was ist CI/CD? Bedeutung, Vorteile und Tool-Auswahl","Was CI/CD bedeutet, welche Vorteile die Einführung bringt und worauf bei der Tool-Auswahl zu achten ist.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663328/Blog/Hero%20Images/cicd3.jpg","2026-06-22",[1398],"GitLab","what-is-ci-cd",{"promotions":1401},[1402,1416,1427,1439],{"id":1403,"categories":1404,"header":1406,"text":1407,"button":1408,"image":1413},"ai-modernization",[1405],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":1409,"config":1410},"Ermittle deinen KI-Reifegrad",{"href":1411,"dataGaName":1412,"dataGaLocation":892},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":1414},{"src":1415},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1417,"categories":1418,"header":1419,"text":1407,"button":1420,"image":1424},"devops-modernization",[675,1225],"Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":1421,"config":1422},"Ermittle deinen DevOps-Reifegrad",{"href":1423,"dataGaName":1412,"dataGaLocation":892},"/de-de/assessments/devops-modernization-assessment/",{"config":1425},{"src":1426},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1428,"categories":1429,"header":1431,"text":1407,"button":1432,"image":1436},"security-modernization",[1430],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":1433,"config":1434},"Ermittle deinen Sicherheitsreifegrad",{"href":1435,"dataGaName":1412,"dataGaLocation":892},"/de-de/assessments/security-modernization-assessment/",{"config":1437},{"src":1438},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1440,"paths":1441,"header":1444,"text":1445,"button":1446,"image":1451},"github-azure-migration",[1442,1443],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Ist dein Team bereit für den Umzug von GitHub nach Azure?","GitHub stellt bereits auf Azure um. Finde heraus, was das für dich bedeutet.",{"text":1447,"config":1448},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":1449,"dataGaName":1450,"dataGaLocation":892},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1452},{"src":1426},{"header":1454,"blurb":1455,"button":1456,"secondaryButton":1461},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":1457,"config":1458},"Kostenlosen Test starten",{"href":1459,"dataGaName":690,"dataGaLocation":1460},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1014,"config":1462},{"href":1016,"dataGaName":695,"dataGaLocation":1460},1786803739188]