[{"data":1,"prerenderedAt":1711},["ShallowReactive",2],{"/de-de/blog/migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security":3,"navigation-de-de":930,"banner-de-de":1361,"footer-de-de":1369,"blog-post-authors-de-de-Fabio Pitino":1609,"blog-related-posts-de-de-migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security":1624,"blog-promotions-de-de":1648,"next-steps-de-de":1701},{"id":4,"title":5,"authors":6,"body":8,"category":910,"date":911,"description":912,"extension":913,"externalUrl":914,"faq":914,"featured":204,"heroImage":915,"meta":916,"navigation":204,"path":917,"seo":918,"slug":922,"stem":923,"tags":924,"template":928,"updatedDate":914,"__hash__":929},"blogPosts/de-de/blog/migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security.md","Pipeline-Inputs: Sichere Alternative zu Pipeline-Variables",[7],"Fabio Pitino",{"type":9,"value":10,"toc":898},"minimark",[11,16,20,23,28,31,43,49,55,61,66,280,290,294,297,306,309,350,363,372,376,380,389,408,411,415,418,423,557,562,746,750,771,774,870,874,877,880,883,894],[12,13,15],"h1",{"id":14},"migration-von-pipeline-variables-zu-pipeline-inputs-für-mehr-sicherheit","Migration von Pipeline-Variables zu Pipeline-Inputs – für mehr Sicherheit",[17,18,19],"p",{},"Pipeline-Variables ermöglichen die Anpassung von GitLab CI/CD-Pipelines zur Laufzeit. Mit der Entwicklung von CI/CD-Sicherheits-Best-Practices wurde jedoch deutlich, dass stärkere Kontrollen bei der Pipeline-Anpassung erforderlich sind. Uneingeschränkte Pipeline-Variables erlauben Nutzern mit Pipeline-Trigger-Berechtigungen das Überschreiben von Werten ohne Validierung oder Typ-Prüfung. Dies schafft Sicherheitsrisiken durch Variable-Injection-Angriffe.",[17,21,22],{},"Pipeline-Variables fehlt zudem eine explizite Deklaration und Dokumentation. Dadurch ist schwer nachvollziehbar, welche Eingaben erwartet werden und wie diese in der Pipeline verwendet werden. Dies erschwert die Wartung und etabliert keine klare Governance über CI/CD-Prozesse.",[24,25,27],"h2",{"id":26},"pipeline-inputs-als-sichere-alternative","Pipeline-Inputs als sichere Alternative",[17,29,30],{},"GitLab Pipeline-Inputs bieten eine systematische Lösung mit folgenden Eigenschaften:",[17,32,33,37,38,42],{},[34,35,36],"strong",{},"Explizite Deklaration:"," Inputs müssen in der ",[39,40,41],"code",{},".gitlab-ci.yml"," explizit deklariert werden und sind selbstdokumentierend.",[17,44,45,48],{},[34,46,47],{},"Typ-Sicherheit:"," Unterstützung verschiedener Input-Typen (string, boolean, number, array) mit automatischer Validierung.",[17,50,51,54],{},[34,52,53],{},"Integrierte Validierung:"," Automatische Validierung von Input-Werten gegen definierte Constraints.",[17,56,57,60],{},[34,58,59],{},"Verbesserte Sicherheit:"," Kein Risiko von Variable-Injection-Angriffen, da nur deklarierte Inputs von außen übergeben werden können.",[62,63,65],"h3",{"id":64},"grundlegendes-beispiel","Grundlegendes Beispiel",[67,68,73],"pre",{"className":69,"code":70,"language":71,"meta":72,"style":72},"language-yaml shiki shiki-themes github-light","    spec:\n      inputs:\n        deployment_env:\n          description: \"Target deployment environment\"\n          type: string\n          options: [\"staging\", \"production\"]\n          default: \"staging\"\n        enable_tests:\n          description: \"Run test suite\"\n          type: boolean\n          default: true\n\n    test:\n      script:\n        - echo \"Running tests\"\n      rules:\n        - if: $[[ inputs.enable_tests ]] == true\n\n    deploy:\n      script:\n        - echo \"Deploying to $[[ inputs.deployment_env ]]\"\n","yaml","",[39,74,75,88,96,104,117,128,149,160,168,178,188,199,206,214,222,231,239,252,257,265,272],{"__ignoreMap":72},[76,77,80,84],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"shJU0","    spec",[76,85,87],{"class":86},"sgsFI",":\n",[76,89,91,94],{"class":78,"line":90},2,[76,92,93],{"class":82},"      inputs",[76,95,87],{"class":86},[76,97,99,102],{"class":78,"line":98},3,[76,100,101],{"class":82},"        deployment_env",[76,103,87],{"class":86},[76,105,107,110,113],{"class":78,"line":106},4,[76,108,109],{"class":82},"          description",[76,111,112],{"class":86},": ",[76,114,116],{"class":115},"sYBdl","\"Target deployment environment\"\n",[76,118,120,123,125],{"class":78,"line":119},5,[76,121,122],{"class":82},"          type",[76,124,112],{"class":86},[76,126,127],{"class":115},"string\n",[76,129,131,134,137,140,143,146],{"class":78,"line":130},6,[76,132,133],{"class":82},"          options",[76,135,136],{"class":86},": [",[76,138,139],{"class":115},"\"staging\"",[76,141,142],{"class":86},", ",[76,144,145],{"class":115},"\"production\"",[76,147,148],{"class":86},"]\n",[76,150,152,155,157],{"class":78,"line":151},7,[76,153,154],{"class":82},"          default",[76,156,112],{"class":86},[76,158,159],{"class":115},"\"staging\"\n",[76,161,163,166],{"class":78,"line":162},8,[76,164,165],{"class":82},"        enable_tests",[76,167,87],{"class":86},[76,169,171,173,175],{"class":78,"line":170},9,[76,172,109],{"class":82},[76,174,112],{"class":86},[76,176,177],{"class":115},"\"Run test suite\"\n",[76,179,181,183,185],{"class":78,"line":180},10,[76,182,122],{"class":82},[76,184,112],{"class":86},[76,186,187],{"class":115},"boolean\n",[76,189,191,193,195],{"class":78,"line":190},11,[76,192,154],{"class":82},[76,194,112],{"class":86},[76,196,198],{"class":197},"sYu0t","true\n",[76,200,202],{"class":78,"line":201},12,[76,203,205],{"emptyLinePlaceholder":204},true,"\n",[76,207,209,212],{"class":78,"line":208},13,[76,210,211],{"class":82},"    test",[76,213,87],{"class":86},[76,215,217,220],{"class":78,"line":216},14,[76,218,219],{"class":82},"      script",[76,221,87],{"class":86},[76,223,225,228],{"class":78,"line":224},15,[76,226,227],{"class":86},"        - ",[76,229,230],{"class":115},"echo \"Running tests\"\n",[76,232,234,237],{"class":78,"line":233},16,[76,235,236],{"class":82},"      rules",[76,238,87],{"class":86},[76,240,242,244,247,249],{"class":78,"line":241},17,[76,243,227],{"class":86},[76,245,246],{"class":82},"if",[76,248,112],{"class":86},[76,250,251],{"class":115},"$[[ inputs.enable_tests ]] == true\n",[76,253,255],{"class":78,"line":254},18,[76,256,205],{"emptyLinePlaceholder":204},[76,258,260,263],{"class":78,"line":259},19,[76,261,262],{"class":82},"    deploy",[76,264,87],{"class":86},[76,266,268,270],{"class":78,"line":267},20,[76,269,219],{"class":82},[76,271,87],{"class":86},[76,273,275,277],{"class":78,"line":274},21,[76,276,227],{"class":86},[76,278,279],{"class":115},"echo \"Deploying to $[[ inputs.deployment_env ]]\"\n",[17,281,282,283,289],{},"Weitere Details zur typ-sicheren Parameter-Übergabe mit Validierung finden sich im ",[284,285,288],"a",{"href":286,"rel":287},"https://about.gitlab.com/blog/ci-cd-inputs-secure-and-preferred-method-to-pass-parameters-to-a-pipeline/",[],"CI/CD-Inputs-Tutorial",".",[24,291,293],{"id":292},"restriktion-von-pipeline-variables","Restriktion von Pipeline-Variables",[17,295,296],{},"Für die Migration zu Pipeline-Inputs ist die Konfiguration der Einstellung \"Minimum role to use pipeline variables\" erforderlich. Diese Einstellung ermöglicht granulare Kontrolle darüber, welche Rolle Pipeline-Variables beim Triggern von Pipelines verwenden darf.",[17,298,299,302,303,289],{},[34,300,301],{},"Auf Projekt-Ebene:"," Navigation zu ",[34,304,305],{},"Settings > CI/CD > Variables > Minimum role to use pipeline variables",[17,307,308],{},"Verfügbare Optionen:",[310,311,312,323,332,341],"ul",{},[313,314,315,318,319,322],"li",{},[34,316,317],{},"No one allowed"," (",[39,320,321],{},"no_one_allowed",") – Empfohlene und sicherste Option. Verhindert alle Variable-Overrides.",[313,324,325,318,328,331],{},[34,326,327],{},"Developer",[39,329,330],{},"developer",") – Erlaubt Developern und höheren Rollen das Überschreiben von Variables",[313,333,334,318,337,340],{},[34,335,336],{},"Maintainer",[39,338,339],{},"maintainer",") – Erfordert Maintainer-Rolle oder höher",[313,342,343,318,346,349],{},[34,344,345],{},"Owner",[39,347,348],{},"owner",") – Nur Projekt-Owner können Variables überschreiben",[17,351,352,355,356,359,360,362],{},[34,353,354],{},"Auf Group-Ebene:"," Group-Maintainer können unter ",[34,357,358],{},"Settings > CI/CD > Variables > Default role to use pipeline variables"," sichere Defaults für alle neuen Projekte innerhalb der Group festlegen. Dies gewährleistet konsistente Sicherheitsrichtlinien. Auch hier wird ",[34,361,317],{}," als Default-Wert empfohlen, sodass neue Projekte mit sicherer Standardeinstellung erstellt werden. Projekt-Owner können die Einstellung weiterhin ändern.",[17,364,365,366,371],{},"Bei vollständiger Restriktion von Pipeline-Variables (mit \"No one allowed\") erscheinen die ",[284,367,370],{"href":368,"rel":369},"https://docs.gitlab.com/ci/pipelines/#prefill-variables-in-manual-pipelines",[],"prefilled variables"," nicht im \"New Pipeline UI\"-Formular.",[24,373,375],{"id":374},"migration-von-pipeline-variables","Migration von Pipeline-Variables",[62,377,379],{"id":378},"lücken-schließen","Lücken schließen",[17,381,382,383,388],{},"Gruppen können Projekte enthalten, bei denen Pipeline-Variables standardmäßig aktiviert sind, obwohl sie nie beim Triggern einer Pipeline verwendet wurden. Diese Projekte können ohne Unterbrechungsrisiko zur sichereren Einstellung migriert werden. GitLab ",[284,384,387],{"href":385,"rel":386},"https://docs.gitlab.com/ci/variables/#enable-pipeline-variable-restriction-for-multiple-projects",[],"bietet Migrationsfunktionalität"," über Group-Einstellungen:",[310,390,391,397],{},[313,392,393,394],{},"Navigation zu ",[34,395,396],{},"Settings > CI/CD > Variables",[313,398,399,400,403,404,407],{},"In ",[34,401,402],{},"Disable pipeline variables in projects that don't use them"," auf ",[34,405,406],{},"Start migration"," klicken",[17,409,410],{},"Diese Migration ist ein Background-Job, der Pipeline-Variables über Projekt-Einstellungen für alle Projekte deaktiviert, die diese historisch nicht verwendet haben.",[62,412,414],{"id":413},"konvertierung-von-pipeline-variables-zu-inputs","Konvertierung von Pipeline-Variables zu Inputs",[17,416,417],{},"Für jede identifizierte Pipeline-Variable ist ein entsprechender Pipeline-Input zu erstellen.",[17,419,420],{},[34,421,422],{},"Vorher (mit Pipeline-Variables):",[67,424,426],{"className":69,"code":425,"language":71,"meta":72,"style":72},"    variables:\n      DEPLOY_ENV:\n        description: \"Deployment environment\"\n        value: \"staging\"\n      ENABLE_CACHE:\n        description: \"Enable deployment cache\"\n        value: \"true\"\n      VERSION:\n        description: \"Application version\"\n        value: \"1.0.0\"\n\n    deploy:\n      script:\n        - echo \"Deploying version $VERSION to $DEPLOY_ENV\"\n        - |\n          if [ \"$ENABLE_CACHE\" = \"true\" ]; then\n            echo \"Cache enabled\"\n          fi\n",[39,427,428,435,442,452,461,468,477,486,493,502,511,515,521,527,534,542,547,552],{"__ignoreMap":72},[76,429,430,433],{"class":78,"line":79},[76,431,432],{"class":82},"    variables",[76,434,87],{"class":86},[76,436,437,440],{"class":78,"line":90},[76,438,439],{"class":82},"      DEPLOY_ENV",[76,441,87],{"class":86},[76,443,444,447,449],{"class":78,"line":98},[76,445,446],{"class":82},"        description",[76,448,112],{"class":86},[76,450,451],{"class":115},"\"Deployment environment\"\n",[76,453,454,457,459],{"class":78,"line":106},[76,455,456],{"class":82},"        value",[76,458,112],{"class":86},[76,460,159],{"class":115},[76,462,463,466],{"class":78,"line":119},[76,464,465],{"class":82},"      ENABLE_CACHE",[76,467,87],{"class":86},[76,469,470,472,474],{"class":78,"line":130},[76,471,446],{"class":82},[76,473,112],{"class":86},[76,475,476],{"class":115},"\"Enable deployment cache\"\n",[76,478,479,481,483],{"class":78,"line":151},[76,480,456],{"class":82},[76,482,112],{"class":86},[76,484,485],{"class":115},"\"true\"\n",[76,487,488,491],{"class":78,"line":162},[76,489,490],{"class":82},"      VERSION",[76,492,87],{"class":86},[76,494,495,497,499],{"class":78,"line":170},[76,496,446],{"class":82},[76,498,112],{"class":86},[76,500,501],{"class":115},"\"Application version\"\n",[76,503,504,506,508],{"class":78,"line":180},[76,505,456],{"class":82},[76,507,112],{"class":86},[76,509,510],{"class":115},"\"1.0.0\"\n",[76,512,513],{"class":78,"line":190},[76,514,205],{"emptyLinePlaceholder":204},[76,516,517,519],{"class":78,"line":201},[76,518,262],{"class":82},[76,520,87],{"class":86},[76,522,523,525],{"class":78,"line":208},[76,524,219],{"class":82},[76,526,87],{"class":86},[76,528,529,531],{"class":78,"line":216},[76,530,227],{"class":86},[76,532,533],{"class":115},"echo \"Deploying version $VERSION to $DEPLOY_ENV\"\n",[76,535,536,538],{"class":78,"line":224},[76,537,227],{"class":86},[76,539,541],{"class":540},"sD7c4","|\n",[76,543,544],{"class":78,"line":233},[76,545,546],{"class":115},"          if [ \"$ENABLE_CACHE\" = \"true\" ]; then\n",[76,548,549],{"class":78,"line":241},[76,550,551],{"class":115},"            echo \"Cache enabled\"\n",[76,553,554],{"class":78,"line":254},[76,555,556],{"class":115},"          fi\n",[17,558,559],{},[34,560,561],{},"Nachher (mit Pipeline-Inputs):",[67,563,565],{"className":69,"code":564,"language":71,"meta":72,"style":72},"    spec:\n      inputs:\n        deploy_env:\n          description: \"Deployment environment\"\n          type: string\n          default: \"staging\"\n          options: [\"dev\", \"staging\", \"production\"]\n        enable_cache:\n          description: \"Enable deployment cache\"\n          type: boolean\n          default: true\n        version:\n          description: \"Application version\"\n          type: string\n          default: \"1.0.0\"\n          regex: '^[0-9]+\\.[0-9]+\\.[0-9]+$'\n\n    deploy:\n      script:\n        - echo \"Deploying version $[[ inputs.version ]] to $[[ inputs.deploy_env ]]\"\n        - |\n          if [ \"$[[ inputs.enable_cache ]]\" = \"true\" ]; then\n            echo \"Cache enabled\"\n          fi\n",[39,566,567,573,579,586,594,602,610,629,636,644,652,660,667,675,683,691,701,705,711,717,724,730,736,741],{"__ignoreMap":72},[76,568,569,571],{"class":78,"line":79},[76,570,83],{"class":82},[76,572,87],{"class":86},[76,574,575,577],{"class":78,"line":90},[76,576,93],{"class":82},[76,578,87],{"class":86},[76,580,581,584],{"class":78,"line":98},[76,582,583],{"class":82},"        deploy_env",[76,585,87],{"class":86},[76,587,588,590,592],{"class":78,"line":106},[76,589,109],{"class":82},[76,591,112],{"class":86},[76,593,451],{"class":115},[76,595,596,598,600],{"class":78,"line":119},[76,597,122],{"class":82},[76,599,112],{"class":86},[76,601,127],{"class":115},[76,603,604,606,608],{"class":78,"line":130},[76,605,154],{"class":82},[76,607,112],{"class":86},[76,609,159],{"class":115},[76,611,612,614,616,619,621,623,625,627],{"class":78,"line":151},[76,613,133],{"class":82},[76,615,136],{"class":86},[76,617,618],{"class":115},"\"dev\"",[76,620,142],{"class":86},[76,622,139],{"class":115},[76,624,142],{"class":86},[76,626,145],{"class":115},[76,628,148],{"class":86},[76,630,631,634],{"class":78,"line":162},[76,632,633],{"class":82},"        enable_cache",[76,635,87],{"class":86},[76,637,638,640,642],{"class":78,"line":170},[76,639,109],{"class":82},[76,641,112],{"class":86},[76,643,476],{"class":115},[76,645,646,648,650],{"class":78,"line":180},[76,647,122],{"class":82},[76,649,112],{"class":86},[76,651,187],{"class":115},[76,653,654,656,658],{"class":78,"line":190},[76,655,154],{"class":82},[76,657,112],{"class":86},[76,659,198],{"class":197},[76,661,662,665],{"class":78,"line":201},[76,663,664],{"class":82},"        version",[76,666,87],{"class":86},[76,668,669,671,673],{"class":78,"line":208},[76,670,109],{"class":82},[76,672,112],{"class":86},[76,674,501],{"class":115},[76,676,677,679,681],{"class":78,"line":216},[76,678,122],{"class":82},[76,680,112],{"class":86},[76,682,127],{"class":115},[76,684,685,687,689],{"class":78,"line":224},[76,686,154],{"class":82},[76,688,112],{"class":86},[76,690,510],{"class":115},[76,692,693,696,698],{"class":78,"line":233},[76,694,695],{"class":82},"          regex",[76,697,112],{"class":86},[76,699,700],{"class":115},"'^[0-9]+\\.[0-9]+\\.[0-9]+$'\n",[76,702,703],{"class":78,"line":241},[76,704,205],{"emptyLinePlaceholder":204},[76,706,707,709],{"class":78,"line":254},[76,708,262],{"class":82},[76,710,87],{"class":86},[76,712,713,715],{"class":78,"line":259},[76,714,219],{"class":82},[76,716,87],{"class":86},[76,718,719,721],{"class":78,"line":267},[76,720,227],{"class":86},[76,722,723],{"class":115},"echo \"Deploying version $[[ inputs.version ]] to $[[ inputs.deploy_env ]]\"\n",[76,725,726,728],{"class":78,"line":274},[76,727,227],{"class":86},[76,729,541],{"class":540},[76,731,733],{"class":78,"line":732},22,[76,734,735],{"class":115},"          if [ \"$[[ inputs.enable_cache ]]\" = \"true\" ]; then\n",[76,737,739],{"class":78,"line":738},23,[76,740,551],{"class":115},[76,742,744],{"class":78,"line":743},24,[76,745,556],{"class":115},[62,747,749],{"id":748},"migration-von-trigger-jobs","Migration von Trigger-Jobs",[17,751,752,753,756,757,760,761,142,763,766,767,770],{},"Bei Verwendung von Trigger-Jobs mit dem ",[39,754,755],{},"trigger","-Keyword ist sicherzustellen, dass diese keine Job-Level-",[39,758,759],{},"variables"," definieren oder das Erben von Variables von Top-Level ",[39,762,759],{},[39,764,765],{},"extends"," oder ",[39,768,769],{},"include"," deaktivieren. Variables könnten implizit als Pipeline-Variables downstream übergeben werden. Bei restriktiven Pipeline-Variables im Downstream-Projekt schlägt die Pipeline-Erstellung fehl.",[17,772,773],{},"Die CI-Konfiguration sollte auf Pipeline-Inputs statt Pipeline-Variables aktualisiert werden:",[67,775,777],{"className":69,"code":776,"language":71,"meta":72,"style":72},"    variables:\n      FOO: bar\n\n    deploy-staging:\n      inherit:\n        variables: false  # sonst würde FOO downstream als Pipeline-Variable gesendet\n      trigger:\n        project: myorg/deployer\n        inputs:\n          deployment_env: staging\n          enable_tests: true\n",[39,778,779,785,795,799,806,813,827,834,844,851,861],{"__ignoreMap":72},[76,780,781,783],{"class":78,"line":79},[76,782,432],{"class":82},[76,784,87],{"class":86},[76,786,787,790,792],{"class":78,"line":90},[76,788,789],{"class":82},"      FOO",[76,791,112],{"class":86},[76,793,794],{"class":115},"bar\n",[76,796,797],{"class":78,"line":98},[76,798,205],{"emptyLinePlaceholder":204},[76,800,801,804],{"class":78,"line":106},[76,802,803],{"class":82},"    deploy-staging",[76,805,87],{"class":86},[76,807,808,811],{"class":78,"line":119},[76,809,810],{"class":82},"      inherit",[76,812,87],{"class":86},[76,814,815,818,820,823],{"class":78,"line":130},[76,816,817],{"class":82},"        variables",[76,819,112],{"class":86},[76,821,822],{"class":197},"false",[76,824,826],{"class":825},"sAwPA","  # sonst würde FOO downstream als Pipeline-Variable gesendet\n",[76,828,829,832],{"class":78,"line":151},[76,830,831],{"class":82},"      trigger",[76,833,87],{"class":86},[76,835,836,839,841],{"class":78,"line":162},[76,837,838],{"class":82},"        project",[76,840,112],{"class":86},[76,842,843],{"class":115},"myorg/deployer\n",[76,845,846,849],{"class":78,"line":170},[76,847,848],{"class":82},"        inputs",[76,850,87],{"class":86},[76,852,853,856,858],{"class":78,"line":180},[76,854,855],{"class":82},"          deployment_env",[76,857,112],{"class":86},[76,859,860],{"class":115},"staging\n",[76,862,863,866,868],{"class":78,"line":190},[76,864,865],{"class":82},"          enable_tests",[76,867,112],{"class":86},[76,869,198],{"class":197},[24,871,873],{"id":872},"zusammenfassung","Zusammenfassung",[17,875,876],{},"Die Migration von Pipeline-Variables zu Pipeline-Inputs ist eine Sicherheitsverbesserung, die CI/CD-Infrastruktur vor Variable-Injection schützt und gleichzeitig bessere Dokumentation, Typ-Sicherheit und Validierung bietet. Die Implementierung dieser Restriktionen und Übernahme von Pipeline-Inputs verbessert nicht nur die Sicherheit, sondern macht Pipelines wartbarer, selbstdokumentierend und robuster.",[17,878,879],{},"Die Transition erfordert initialen Aufwand, die langfristigen Vorteile überwiegen jedoch die Migrationskosten. Der Einstieg erfolgt durch Restriktion von Pipeline-Variables auf Group-Ebene für neue Projekte, gefolgt von systematischer Migration bestehender Pipelines mittels der oben beschriebenen Vorgehensweise.",[17,881,882],{},"Sicherheit ist ein kontinuierlicher Prozess. Pipeline-Inputs sind ein wichtiger Schritt zur Schaffung einer sichereren CI/CD-Umgebung und ergänzen weitere GitLab-Sicherheitsfunktionen wie Protected Branches, Job-Token-Allowlists und Container-Registry-Protections.",[884,885,886],"blockquote",{},[17,887,888,889,289],{},"Für den Einstieg mit Pipeline-Inputs: ",[284,890,893],{"href":891,"rel":892},"https://about.gitlab.com/free-trial/devsecops/",[],"Kostenlose GitLab-Ultimate-Testversion anfordern",[895,896,897],"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 .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":72,"searchDepth":90,"depth":90,"links":899},[900,903,904,909],{"id":26,"depth":90,"text":27,"children":901},[902],{"id":64,"depth":98,"text":65},{"id":292,"depth":90,"text":293},{"id":374,"depth":90,"text":375,"children":905},[906,907,908],{"id":378,"depth":98,"text":379},{"id":413,"depth":98,"text":414},{"id":748,"depth":98,"text":749},{"id":872,"depth":90,"text":873},"security","2025-11-04","Migration zu Pipeline-Inputs bietet explizite Deklaration, Typ-Sicherheit und Validierung für sichere Pipeline-Anpassung.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1759320418/xjmqcozxzt4frx0hori3.png",{},"/de-de/blog/migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security",{"config":919,"title":5,"ogTitle":72,"description":921},{"noIndex":920},false,"Migration zu Pipeline-Inputs bietet explizite Deklaration, Typ-Sicherheit und Validierung. Schrittweise Anleitung für sichere CI/CD-Anpassung.","migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security","de-de/blog/migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security",[910,925,926,927],"DevSecOps","tutorial","CI/CD","BlogPost","g9SrXtdtZq6zkRXOCZ0JM1njEnCLdKy5NBuPgbx5HE0",{"logo":931,"freeTrial":936,"sales":941,"login":946,"items":951,"search":1279,"minimal":1313,"duo":1331,"switchNav":1340,"pricingDeployment":1351},{"config":932},{"href":933,"dataGaName":934,"dataGaLocation":935},"/de-de/","gitlab logo","header",{"text":937,"config":938},"Kostenlose Testversion anfordern",{"href":939,"dataGaName":940,"dataGaLocation":935},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":942,"config":943},"Demo anfordern",{"href":944,"dataGaName":945,"dataGaLocation":935},"/de-de/sales/?contact-topic=request-demo","sales",{"text":947,"config":948},"Anmelden",{"href":949,"dataGaName":950,"dataGaLocation":935},"https://gitlab.com/users/sign_in/","sign in",[952,981,1082,1087,1201,1257],{"text":953,"config":954,"menu":956},"Plattform",{"dataNavLevelOne":955},"platform",{"type":957,"columns":958},"cards",[959,965,973],{"title":953,"description":960,"link":961},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":962,"config":963},"Die Plattform erkunden",{"href":964,"dataGaName":955,"dataGaLocation":935},"/de-de/platform/",{"title":966,"description":967,"link":968},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":969,"config":970},"Lerne GitLab Duo kennen",{"href":971,"dataGaName":972,"dataGaLocation":935},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":974,"description":975,"link":976},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":977,"config":978},"Mehr erfahren",{"href":979,"dataGaName":980,"dataGaLocation":935},"/de-de/why-gitlab/","why gitlab",{"text":982,"left":204,"config":983,"menu":985},"Produkt",{"dataNavLevelOne":984},"solutions",{"type":986,"link":987,"columns":991,"feature":1061},"lists",{"text":988,"config":989},"Alle Lösungen anzeigen",{"href":990,"dataGaName":984,"dataGaLocation":935},"/de-de/solutions/",[992,1016,1039],{"title":993,"description":994,"link":995,"items":1000},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":996},{"icon":997,"href":998,"dataGaName":999,"dataGaLocation":935},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[1001,1004,1007,1012],{"text":927,"config":1002},{"href":1003,"dataGaLocation":935,"dataGaName":927},"/de-de/solutions/continuous-integration/",{"text":966,"config":1005},{"href":971,"dataGaLocation":935,"dataGaName":1006},"gitlab duo agent platform - product menu",{"text":1008,"config":1009},"Quellcodeverwaltung",{"href":1010,"dataGaLocation":935,"dataGaName":1011},"/de-de/solutions/source-code-management/","Source Code Management",{"text":1013,"config":1014},"Automatische Softwarebereitstellung",{"href":998,"dataGaLocation":935,"dataGaName":1015},"Automated software delivery",{"title":1017,"description":1018,"link":1019,"items":1024},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":1020},{"href":1021,"dataGaName":1022,"dataGaLocation":935,"icon":1023},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1025,1029,1034],{"text":1026,"config":1027},"Anwendungssicherheitstests",{"href":1021,"dataGaName":1028,"dataGaLocation":935},"Application security testing",{"text":1030,"config":1031},"Schutz der Software-Lieferkette",{"href":1032,"dataGaLocation":935,"dataGaName":1033},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":1035,"config":1036},"Software-Compliance",{"href":1037,"dataGaName":1038,"dataGaLocation":935},"/de-de/solutions/software-compliance/","software compliance",{"title":1040,"link":1041,"items":1046},"Messung",{"config":1042},{"icon":1043,"href":1044,"dataGaName":1045,"dataGaLocation":935},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[1047,1051,1056],{"text":1048,"config":1049},"Sichtbarkeit und Messung",{"href":1044,"dataGaLocation":935,"dataGaName":1050},"Visibility and Measurement",{"text":1052,"config":1053},"Wertstrommanagement",{"href":1054,"dataGaLocation":935,"dataGaName":1055},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":1057,"config":1058},"Analysen und Einblicke",{"href":1059,"dataGaLocation":935,"dataGaName":1060},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":1062,"type":986,"items":1063},"GitLab für",[1064,1070,1076],{"text":1065,"config":1066},"Enterprise",{"icon":1067,"href":1068,"dataGaLocation":935,"dataGaName":1069},"Building","/de-de/enterprise/","enterprise",{"text":1071,"config":1072},"Kleinunternehmen",{"icon":1073,"href":1074,"dataGaLocation":935,"dataGaName":1075},"Work","/de-de/small-business/","small business",{"text":1077,"config":1078},"Öffentlicher Sektor",{"icon":1079,"href":1080,"dataGaLocation":935,"dataGaName":1081},"Organization","/de-de/solutions/public-sector/","public sector",{"text":1083,"config":1084},"Preise",{"href":1085,"dataGaName":1086,"dataGaLocation":935,"dataNavLevelOne":1086},"/de-de/pricing/","pricing",{"text":1088,"config":1089,"menu":1091},"Ressourcen",{"dataNavLevelOne":1090},"resources",{"type":986,"link":1092,"columns":1096,"feature":1190},{"text":1093,"config":1094},"Alle Ressourcen anzeigen",{"href":1095,"dataGaName":1090,"dataGaLocation":935},"/de-de/resources/",[1097,1130,1157],{"title":1098,"items":1099},"Erste Schritte",[1100,1105,1110,1115,1120,1125],{"text":1101,"config":1102},"Installieren",{"href":1103,"dataGaName":1104,"dataGaLocation":935},"/de-de/install/","install",{"text":1106,"config":1107},"Kurzanleitungen",{"href":1108,"dataGaName":1109,"dataGaLocation":935},"/de-de/get-started/","quick setup checklists",{"text":1111,"config":1112},"Lernen",{"href":1113,"dataGaLocation":935,"dataGaName":1114},"https://university.gitlab.com/","learn",{"text":1116,"config":1117},"Produktdokumentation",{"href":1118,"dataGaName":1119,"dataGaLocation":935},"https://docs.gitlab.com/","product documentation",{"text":1121,"config":1122},"Best-Practice-Videos",{"href":1123,"dataGaName":1124,"dataGaLocation":935},"/de-de/getting-started-videos/","best practice videos",{"text":1126,"config":1127},"Integrationen",{"href":1128,"dataGaName":1129,"dataGaLocation":935},"/de-de/integrations/","integrations",{"title":1131,"items":1132},"Entdecken",[1133,1138,1143,1148,1152],{"text":1134,"config":1135},"Kundenerfolge",{"href":1136,"dataGaName":1137,"dataGaLocation":935},"/de-de/customers/","customer success stories",{"text":1139,"config":1140},"Blog",{"href":1141,"dataGaName":1142,"dataGaLocation":935},"/de-de/blog/","blog",{"text":1144,"config":1145},"Demo-Hub",{"href":1146,"dataGaName":1147,"dataGaLocation":935},"/de-de/demo-hub/","demo hub",{"text":1149,"config":1150},"The Source",{"href":1151,"dataGaName":1142,"dataGaLocation":935},"/de-de/the-source/",{"text":1153,"config":1154},"Remote",{"href":1155,"dataGaName":1156,"dataGaLocation":935},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1158,"items":1159},"Vernetzen",[1160,1165,1170,1175,1180,1185],{"text":1161,"config":1162},"GitLab-Services",{"href":1163,"dataGaName":1164,"dataGaLocation":935},"/de-de/services/","services",{"text":1166,"config":1167},"Beitragen",{"href":1168,"dataGaName":1169,"dataGaLocation":935},"https://contributors.gitlab.com","contribute",{"text":1171,"config":1172},"Community",{"href":1173,"dataGaName":1174,"dataGaLocation":935},"/community/","community",{"text":1176,"config":1177},"Forum",{"href":1178,"dataGaName":1179,"dataGaLocation":935},"https://forum.gitlab.com/","forum",{"text":1181,"config":1182},"Veranstaltungen",{"href":1183,"dataGaName":1184,"dataGaLocation":935},"/events/","events",{"text":1186,"config":1187},"Partner",{"href":1188,"dataGaName":1189,"dataGaLocation":935},"/de-de/partners/","partners",{"config":1191,"title":1194,"text":1195,"link":1196},{"background":1192,"textColor":1193},"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":1197,"config":1198},"Aktuelle Nachrichten",{"href":1199,"dataGaName":1200,"dataGaLocation":935},"/de-de/whats-new/","whats new",{"text":1202,"config":1203,"menu":1205},"Unternehmen",{"dataNavLevelOne":1204},"company",{"type":986,"columns":1206},[1207],{"items":1208},[1209,1214,1220,1222,1227,1232,1237,1242,1247,1252],{"text":1210,"config":1211},"Über",{"href":1212,"dataGaName":1213,"dataGaLocation":935},"/de-de/company/","about",{"text":1215,"config":1216,"footerGa":1219},"Karriere",{"href":1217,"dataGaName":1218,"dataGaLocation":935},"/jobs/","jobs",{"dataGaName":1218},{"text":1181,"config":1221},{"href":1183,"dataGaName":1184,"dataGaLocation":935},{"text":1223,"config":1224},"Geschäftsführung",{"href":1225,"dataGaName":1226,"dataGaLocation":935},"/company/team/e-group/","leadership",{"text":1228,"config":1229},"Handbuch",{"href":1230,"dataGaName":1231,"dataGaLocation":935},"https://handbook.gitlab.com/","handbook",{"text":1233,"config":1234},"Investor Relations",{"href":1235,"dataGaName":1236,"dataGaLocation":935},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1238,"config":1239},"Trust Center",{"href":1240,"dataGaName":1241,"dataGaLocation":935},"/de-de/security/","trust center",{"text":1243,"config":1244},"AI Transparency Center",{"href":1245,"dataGaName":1246,"dataGaLocation":935},"/de-de/ai-transparency-center/","ai transparency center",{"text":1248,"config":1249},"Newsletter",{"href":1250,"dataGaName":1251,"dataGaLocation":935},"/company/contact/#contact-forms","newsletter",{"text":1253,"config":1254},"Presse",{"href":1255,"dataGaName":1256,"dataGaLocation":935},"/press/","press",{"text":1258,"config":1259,"menu":1260},"Kontakt",{"dataNavLevelOne":1204},{"type":986,"columns":1261},[1262],{"items":1263},[1264,1269,1274],{"text":1265,"config":1266},"Vertrieb kontaktieren",{"href":1267,"dataGaName":1268,"dataGaLocation":935},"/de-de/sales/","talk to sales",{"text":1270,"config":1271},"Support-Portal",{"href":1272,"dataGaName":1273,"dataGaLocation":935},"https://support.gitlab.com/hc/en-us","support portal",{"text":1275,"config":1276},"Kundenportal",{"href":1277,"dataGaName":1278,"dataGaLocation":935},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1280,"login":1281,"suggestions":1288},"Schließen",{"text":1282,"link":1283},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1284,"config":1285},"gitlab.com",{"href":949,"dataGaName":1286,"dataGaLocation":1287},"search login","search",{"text":1289,"default":1290},"Vorschläge",[1291,1293,1298,1300,1305,1310],{"text":966,"config":1292},{"href":971,"dataGaName":966,"dataGaLocation":1287},{"text":1294,"config":1295},"Codevorschläge (KI)",{"href":1296,"dataGaName":1297,"dataGaLocation":1287},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":927,"config":1299},{"href":1003,"dataGaName":927,"dataGaLocation":1287},{"text":1301,"config":1302},"GitLab auf AWS",{"href":1303,"dataGaName":1304,"dataGaLocation":1287},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1306,"config":1307},"GitLab auf Google Cloud",{"href":1308,"dataGaName":1309,"dataGaLocation":1287},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":974,"config":1311},{"href":979,"dataGaName":1312,"dataGaLocation":1287},"Why GitLab?",{"freeTrial":1314,"mobileIcon":1319,"desktopIcon":1324,"secondaryButton":1327},{"text":1315,"config":1316},"Kostenlos testen",{"href":1317,"dataGaName":940,"dataGaLocation":1318},"https://gitlab.com/-/trials/new/","nav",{"altText":1320,"config":1321},"GitLab-Symbol",{"src":1322,"dataGaName":1323,"dataGaLocation":1318},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1320,"config":1325},{"src":1326,"dataGaName":1323,"dataGaLocation":1318},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1098,"config":1328},{"href":1329,"dataGaName":1330,"dataGaLocation":1318},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1332,"mobileIcon":1336,"desktopIcon":1338},{"text":1333,"config":1334},"Mehr über GitLab Duo erfahren",{"href":971,"dataGaName":1335,"dataGaLocation":1318},"gitlab duo",{"altText":1320,"config":1337},{"src":1322,"dataGaName":1323,"dataGaLocation":1318},{"altText":1320,"config":1339},{"src":1326,"dataGaName":1323,"dataGaLocation":1318},{"button":1341,"mobileIcon":1346,"desktopIcon":1348},{"text":1342,"config":1343},"/Option",{"href":1344,"dataGaName":1345,"dataGaLocation":1318},"#contact","switch",{"altText":1320,"config":1347},{"src":1322,"dataGaName":1323,"dataGaLocation":1318},{"altText":1320,"config":1349},{"src":1350,"dataGaName":1323,"dataGaLocation":1318},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1352,"mobileIcon":1357,"desktopIcon":1359},{"text":1353,"config":1354},"Zurück zur Preisübersicht",{"href":1085,"dataGaName":1355,"dataGaLocation":1318,"icon":1356},"back to pricing","GoBack",{"altText":1320,"config":1358},{"src":1322,"dataGaName":1323,"dataGaLocation":1318},{"altText":1320,"config":1360},{"src":1326,"dataGaName":1323,"dataGaLocation":1318},{"title":1362,"button":1363,"config":1367},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":977,"config":1364},{"href":1365,"dataGaName":1366,"dataGaLocation":935},"/de-de/gitlab-orbit/","orbit",{"layout":1368,"disabled":920},"release",{"data":1370},{"text":1371,"source":1372,"edit":1378,"contribute":1383,"config":1388,"items":1393,"minimal":1598},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1373,"config":1374},"Quelltext der Seite anzeigen",{"href":1375,"dataGaName":1376,"dataGaLocation":1377},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1379,"config":1380},"Diese Seite bearbeiten",{"href":1381,"dataGaName":1382,"dataGaLocation":1377},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1384,"config":1385},"Beteilige dich",{"href":1386,"dataGaName":1387,"dataGaLocation":1377},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1389,"facebook":1390,"youtube":1391,"linkedin":1392},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1394,1439,1491,1533,1565],{"title":1083,"links":1395,"subMenu":1410},[1396,1400,1405],{"text":1397,"config":1398},"Tarife anzeigen",{"href":1085,"dataGaName":1399,"dataGaLocation":1377},"view plans",{"text":1401,"config":1402},"Vorteile von Premium",{"href":1403,"dataGaName":1404,"dataGaLocation":1377},"/de-de/pricing/premium/","why premium",{"text":1406,"config":1407},"Vorteile von Ultimate",{"href":1408,"dataGaName":1409,"dataGaLocation":1377},"/de-de/pricing/ultimate/","why ultimate",[1411],{"title":1258,"links":1412},[1413,1415,1417,1419,1424,1429,1434],{"text":1265,"config":1414},{"href":1267,"dataGaName":945,"dataGaLocation":1377},{"text":1270,"config":1416},{"href":1272,"dataGaName":1273,"dataGaLocation":1377},{"text":1275,"config":1418},{"href":1277,"dataGaName":1278,"dataGaLocation":1377},{"text":1420,"config":1421},"Status",{"href":1422,"dataGaName":1423,"dataGaLocation":1377},"https://status.gitlab.com/","status",{"text":1425,"config":1426},"Nutzungsbedingungen",{"href":1427,"dataGaName":1428,"dataGaLocation":1377},"/terms/","terms of use",{"text":1430,"config":1431},"Datenschutzerklärung",{"href":1432,"dataGaName":1433,"dataGaLocation":1377},"/de-de/privacy/","privacy statement",{"text":1435,"config":1436},"Cookie-Einstellungen",{"dataGaName":1437,"dataGaLocation":1377,"id":1438,"isOneTrustButton":204},"cookie preferences","ot-sdk-btn",{"title":982,"links":1440,"subMenu":1449},[1441,1445],{"text":1442,"config":1443},"DevSecOps-Plattform",{"href":964,"dataGaName":1444,"dataGaLocation":1377},"devsecops platform",{"text":1446,"config":1447},"KI-unterstützte Entwicklung",{"href":971,"dataGaName":1448,"dataGaLocation":1377},"ai-assisted development",[1450],{"title":1451,"links":1452},"Themen",[1453,1457,1462,1467,1472,1476,1481,1486],{"text":927,"config":1454},{"href":1455,"dataGaName":1456,"dataGaLocation":1377},"/de-de/topics/ci-cd/","cicd",{"text":1458,"config":1459},"GitOps",{"href":1460,"dataGaName":1461,"dataGaLocation":1377},"/de-de/topics/gitops/","gitops",{"text":1463,"config":1464},"DevOps",{"href":1465,"dataGaName":1466,"dataGaLocation":1377},"/de-de/topics/devops/","devops",{"text":1468,"config":1469},"Versionskontrolle",{"href":1470,"dataGaName":1471,"dataGaLocation":1377},"/de-de/topics/version-control/","version control",{"text":925,"config":1473},{"href":1474,"dataGaName":1475,"dataGaLocation":1377},"/de-de/topics/devsecops/","devsecops",{"text":1477,"config":1478},"Cloud-nativ",{"href":1479,"dataGaName":1480,"dataGaLocation":1377},"/de-de/topics/cloud-native/","cloud native",{"text":1482,"config":1483},"KI für das Programmieren",{"href":1484,"dataGaName":1485,"dataGaLocation":1377},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1487,"config":1488},"Agentische KI",{"href":1489,"dataGaName":1490,"dataGaLocation":1377},"/de-de/topics/agentic-ai/","agentic ai",{"title":1492,"links":1493},"Lösungen",[1494,1497,1499,1504,1508,1511,1514,1517,1519,1521,1523,1528],{"text":1026,"config":1495},{"href":1021,"dataGaName":1496,"dataGaLocation":1377},"Application Security Testing",{"text":1013,"config":1498},{"href":998,"dataGaName":999,"dataGaLocation":1377},{"text":1500,"config":1501},"Agile Entwicklung",{"href":1502,"dataGaName":1503,"dataGaLocation":1377},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1505,"config":1506},"SCM",{"href":1010,"dataGaName":1507,"dataGaLocation":1377},"source code management",{"text":927,"config":1509},{"href":1003,"dataGaName":1510,"dataGaLocation":1377},"continuous integration & delivery",{"text":1052,"config":1512},{"href":1054,"dataGaName":1513,"dataGaLocation":1377},"value stream management",{"text":1458,"config":1515},{"href":1516,"dataGaName":1461,"dataGaLocation":1377},"/de-de/solutions/gitops/",{"text":1065,"config":1518},{"href":1068,"dataGaName":1069,"dataGaLocation":1377},{"text":1071,"config":1520},{"href":1074,"dataGaName":1075,"dataGaLocation":1377},{"text":1077,"config":1522},{"href":1080,"dataGaName":1081,"dataGaLocation":1377},{"text":1524,"config":1525},"Bildungswesen",{"href":1526,"dataGaName":1527,"dataGaLocation":1377},"/de-de/solutions/education/","education",{"text":1529,"config":1530},"Finanzdienstleistungen",{"href":1531,"dataGaName":1532,"dataGaLocation":1377},"/de-de/solutions/finance/","financial services",{"title":1088,"links":1534},[1535,1537,1539,1541,1544,1546,1549,1551,1553,1555,1557,1559,1561,1563],{"text":1101,"config":1536},{"href":1103,"dataGaName":1104,"dataGaLocation":1377},{"text":1106,"config":1538},{"href":1108,"dataGaName":1109,"dataGaLocation":1377},{"text":1111,"config":1540},{"href":1113,"dataGaName":1114,"dataGaLocation":1377},{"text":1116,"config":1542},{"href":1118,"dataGaName":1543,"dataGaLocation":1377},"docs",{"text":1139,"config":1545},{"href":1141,"dataGaName":1142,"dataGaLocation":1377},{"text":1547,"config":1548},"Neuerungen",{"href":1199,"dataGaName":1200,"dataGaLocation":1377},{"text":1134,"config":1550},{"href":1136,"dataGaName":1137,"dataGaLocation":1377},{"text":1153,"config":1552},{"href":1155,"dataGaName":1156,"dataGaLocation":1377},{"text":1161,"config":1554},{"href":1163,"dataGaName":1164,"dataGaLocation":1377},{"text":1166,"config":1556},{"href":1168,"dataGaName":1169,"dataGaLocation":1377},{"text":1171,"config":1558},{"href":1173,"dataGaName":1174,"dataGaLocation":1377},{"text":1176,"config":1560},{"href":1178,"dataGaName":1179,"dataGaLocation":1377},{"text":1181,"config":1562},{"href":1183,"dataGaName":1184,"dataGaLocation":1377},{"text":1186,"config":1564},{"href":1188,"dataGaName":1189,"dataGaLocation":1377},{"title":1202,"links":1566},[1567,1569,1571,1573,1575,1577,1582,1587,1589,1591,1593],{"text":1210,"config":1568},{"href":1212,"dataGaName":1204,"dataGaLocation":1377},{"text":1215,"config":1570},{"href":1217,"dataGaName":1218,"dataGaLocation":1377},{"text":1223,"config":1572},{"href":1225,"dataGaName":1226,"dataGaLocation":1377},{"text":1228,"config":1574},{"href":1230,"dataGaName":1231,"dataGaLocation":1377},{"text":1233,"config":1576},{"href":1235,"dataGaName":1236,"dataGaLocation":1377},{"text":1578,"config":1579},"Nachhaltigkeit",{"href":1580,"dataGaName":1581,"dataGaLocation":1377},"/sustainability/","Sustainability",{"text":1583,"config":1584},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1585,"dataGaName":1586,"dataGaLocation":1377},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1238,"config":1588},{"href":1240,"dataGaName":1241,"dataGaLocation":1377},{"text":1248,"config":1590},{"href":1250,"dataGaName":1251,"dataGaLocation":1377},{"text":1253,"config":1592},{"href":1255,"dataGaName":1256,"dataGaLocation":1377},{"text":1594,"config":1595},"Transparenzerklärung zu moderner Sklaverei",{"href":1596,"dataGaName":1597,"dataGaLocation":1377},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1599},[1600,1603,1606],{"text":1601,"config":1602},"Terms",{"href":1427,"dataGaName":1428,"dataGaLocation":1377},{"text":1604,"config":1605},"Cookies",{"dataGaName":1437,"dataGaLocation":1377,"id":1438,"isOneTrustButton":204},{"text":1607,"config":1608},"Datenschutz",{"href":1432,"dataGaName":1433,"dataGaLocation":1377},[1610],{"id":1611,"title":7,"body":914,"config":1612,"content":1614,"description":914,"extension":1618,"meta":1619,"navigation":204,"path":1620,"seo":1621,"stem":1622,"__hash__":1623},"blogAuthors/en-us/blog/authors/fabio-pitino.yml",{"template":1613},"BlogAuthor",{"name":7,"config":1615},{"headshot":1616,"ctfId":1617},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659958/Blog/Author%20Headshots/fabiopitino-headshot.jpg","fabiopitino","yml",{},"/en-us/blog/authors/fabio-pitino",{},"en-us/blog/authors/fabio-pitino","Z13_RNj1RdIE3Ac9JR_WAE9yNsZLQCBC8l-w4fInLFY",[1625,1632,1640],{"title":1626,"description":1627,"heroImage":915,"category":910,"date":1628,"authors":1629,"slug":1631,"externalUrl":914},"Wie GitLab Schwachstellen über Refactorings hinweg verfolgt","Das verbesserte Scope+Offset-Fingerprinting hält das Tracking stabil, wenn Kommentare, Leerzeilen oder Reformatierungen dazukommen.","2026-08-12",[1630],"Julian Thome","improved-scope-offset-fingerprinting",{"title":1633,"description":1634,"heroImage":915,"category":910,"date":1635,"authors":1636,"slug":1639,"externalUrl":914},"GitLab Secrets Manager unterstützt ESO, Terraform und API","GitLab Secrets Manager liefert Secrets sicher an Kubernetes, Terraform und externe Workflows, aus einer einzigen Quelle für die gesamte Toolchain.","2026-08-06",[1637,1638],"Erick Bajao","Joe Randazzo","gitlab-secrets-manager-add-eso-terraform-api-support",{"title":1641,"description":1642,"heroImage":1643,"category":910,"date":1644,"authors":1645,"slug":1647,"externalUrl":914},"Mit Claude und GitLab jeden Commit bis zur Produktion absichern","Claude Security findet Schwachstellen in der Coding-Session. GitLab übernimmt danach: Scans, Policy-Durchsetzung und Audit-Nachweise im Lebenszyklus.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756122536/akivvcnafog9c4dhhzkp.png","2026-08-03",[1646],"Alisa Ho","claude-security-and-gitlab",{"promotions":1649},[1650,1664,1676,1687],{"id":1651,"categories":1652,"header":1654,"text":1655,"button":1656,"image":1661},"ai-modernization",[1653],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":1657,"config":1658},"Ermittle deinen KI-Reifegrad",{"href":1659,"dataGaName":1660,"dataGaLocation":1142},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":1662},{"src":1663},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1665,"categories":1666,"header":1668,"text":1655,"button":1669,"image":1673},"devops-modernization",[1667,1475],"product","Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":1670,"config":1671},"Ermittle deinen DevOps-Reifegrad",{"href":1672,"dataGaName":1660,"dataGaLocation":1142},"/de-de/assessments/devops-modernization-assessment/",{"config":1674},{"src":1675},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1677,"categories":1678,"header":1679,"text":1655,"button":1680,"image":1684},"security-modernization",[910],"Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":1681,"config":1682},"Ermittle deinen Sicherheitsreifegrad",{"href":1683,"dataGaName":1660,"dataGaLocation":1142},"/de-de/assessments/security-modernization-assessment/",{"config":1685},{"src":1686},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1688,"paths":1689,"header":1692,"text":1693,"button":1694,"image":1699},"github-azure-migration",[1690,1691],"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":1695,"config":1696},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":1697,"dataGaName":1698,"dataGaLocation":1142},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1700},{"src":1675},{"header":1702,"blurb":1703,"button":1704,"secondaryButton":1709},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":1705,"config":1706},"Kostenlosen Test starten",{"href":1707,"dataGaName":940,"dataGaLocation":1708},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1265,"config":1710},{"href":1267,"dataGaName":945,"dataGaLocation":1708},1786803740309]