[{"data":1,"prerenderedAt":1011},["ShallowReactive",2],{"/de-de/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake":3,"navigation-de-de":227,"banner-de-de":659,"footer-de-de":667,"blog-post-authors-de-de-Radovan Bacovic":908,"blog-related-posts-de-de-how-we-built-a-structured-streamlit-application-framework-in-snowflake":923,"blog-promotions-de-de":949,"next-steps-de-de":1001},{"id":4,"title":5,"authors":6,"body":8,"category":205,"date":206,"description":207,"extension":208,"externalUrl":209,"faq":209,"featured":210,"heroImage":211,"meta":212,"navigation":213,"path":214,"seo":215,"slug":218,"stem":219,"tags":220,"template":225,"updatedDate":209,"__hash__":226},"blogPosts/de-de/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake.md","Streamlit-Framework: Systematische Infrastruktur-Governance",[7],"Radovan Bacovic",{"type":9,"value":10,"toc":201},"minimark",[11,22,27,30,37,43,48,53],[12,13,14,15,21],"p",{},"Das GitLab Data Team hat dutzende isolierte ",[16,17,20],"a",{"href":18,"rel":19},"https://streamlit.io/",[],"Streamlit","-Anwendungen in eine einheitliche, sichere und skalierbare Lösung für die Snowflake-Umgebung überführt. Die Kombination von Python, Snowflake, Streamlit und GitLab ermöglicht systematische Infrastrukturkontrolle. Dieser Beitrag beschreibt den methodischen Ansatz und die erzielten Ergebnisse.",[23,24,26],"h2",{"id":25},"die-ausgangssituation","Die Ausgangssituation",[12,28,29],{},"Dutzende Streamlit-Anwendungen in verschiedenen Umgebungen, unterschiedliche Python-Versionen, inkonsistente Sicherheitspraktiken beim Zugriff auf sensible Daten. Manche Anwendungen funktionieren, andere versagen ohne nachvollziehbaren Grund. Niemand weiß, wer welche Anwendung erstellt hat oder wie sie zu warten ist.\nGenau vor dieser Situation stand unser Data Team. Anwendungen entstanden isoliert, ohne Standardisierung, ohne Security-Oversight, ohne klaren Deployment-Prozess. Das Ergebnis: ein Compliance-Risiko und eine Wartungslast, die exponentiell wuchs.",[12,31,32],{},[33,34],"img",{"alt":35,"src":36},"Funktionale Architektur (High-Level-Übersicht)","https://res.cloudinary.com/about-gitlab-com/image/upload/v1760035999/i50lpkrwy9bok056rdak.png",[38,39,40],"center",{},[41,42,35],"i",{},[38,44,45],{},[41,46,47],{},"Framework-Architektur (Gesamtübersicht)",[38,49,50],{},[41,51,52],{},"Rollen-Übersicht und ihre Funktionen",[54,55,56,57],"your_apps",{},"/  # Eigene Anwendungen │   │   └── ",[58,59,60,61,62,67,68,71,78,81,94,97,131,134,160,163,190],"your_apps2",{},"/ # Weitere Anwendungen │   ├── templates/        # Anwendungs- und Page-Templates │   ├── compliance/       # Compliance-Regeln und -Checks │   └── setup/            # Setup- und Konfigurations-Utilities ├── tests/                # Test-Dateien ├── config.yml            # Umgebungskonfiguration ├── Makefile              # Build- und Deployment-Automatisierung └── README.md             # Haupt-README-Datei ```\n- **Optimierter Workflow:** Von lokaler Entwicklung über Test-Schema bis Production, vollständig automatisiert durch GitLab CI/CD-Pipelines.\n![GitLab CI/CD-Pipelines für vollständige Prozessautomatisierung](https://res.cloudinary.com/about-gitlab-com/image/upload/v1760035998/usyma2jkgiazu9iay1au.png)\n"," ",[38,63,64],{},[41,65,66],{},"GitLab CI/CD-Pipelines für vollständige Prozessautomatisierung","\n## Security und Compliance by Design\nStatt Security nachträglich hinzuzufügen, baut das Streamlit Application Framework sie von Grund auf ein. Jede Anwendung folgt denselben Security-Standards, Compliance-Anforderungen werden automatisch durchgesetzt. Audit-Trails werden über den gesamten Development-Lifecycle gepflegt.\nCompliance-Regeln werden mit einem einzigen Kommando eingeführt und verifiziert. Beispielsweise lassen sich definieren, welche Klassen und Methoden verpflichtend sind, welche Dateien vorhanden sein müssen und welche Rollen für das Teilen der Anwendung erlaubt oder verboten sind. Die Regeln sind flexibel und beschreibend – Definition erfolgt in einer YAML-Datei:\n```yaml class_rules:\n  - name: \"Inherit code for the page from GitLabDataStreamlitInit\"\n    description: \"All Streamlit apps must inherit from GitLabDataStreamlitInit\"\n    severity: \"error\"\n    required: true\n    class_name: \"*\"\n    required_base_classes:\n      - \"GitLabDataStreamlitInit\"\n    required_methods:\n      - \"__init__\"\n      - \"set_page_layout\"\n      - \"setup_ui\"\n      - \"run\"\n",[12,69,70],{},"function_rules:",[72,73,74],"ul",{},[75,76,77],"li",{},"name: \"Main function required\"\ndescription: \"Must have a main() function\"\nseverity: \"error\"\nrequired: true\nfunction_name: \"main\"",[12,79,80],{},"import_rules:",[72,82,83,91],{},[75,84,85,86],{},"name: \"Import GitLabDataStreamlitInit\"\ndescription: \"Must import the mandatory base class\"\nseverity: \"error\"\nrequired: true\nmodule_name: \"gitlab_data_streamlit_init\"\nrequired_items:\n",[72,87,88],{},[75,89,90],{},"\"GitLabDataStreamlitInit\"",[75,92,93],{},"name: \"Import streamlit\"\ndescription: \"Must import streamlit library\"\nseverity: \"error\"\nrequired: true\nmodule_name: \"streamlit\"",[12,95,96],{},"file_rules:",[72,98,99,107,113,119,125],{},[75,100,101,102,106],{},"name: \"Snowflake configuration required (snowflake.yml)\"\ndescription: \"Each application must have a snowflake.yml configuration file\"\nseverity: \"error\"\nrequired: true\nfile_pattern: \"",[103,104,105],"strong",{},"/applications/","/snowflake.yml\"\nbase_path: \"\"",[75,108,109,110,112],{},"name: \"Snowflake environment required (environment.yml)\"\ndescription: \"Each application must have a environment.yml configuration file\"\nseverity: \"error\"\nrequired: true\nfile_pattern: \"",[103,111,105],{},"/environment.yml\"\nbase_path: \"\"",[75,114,115,116,118],{},"name: \"Share specification required (share.yml)\"\ndescription: \"Each application must have a share.yml file\"\nseverity: \"warning\"\nrequired: true\nfile_pattern: \"",[103,117,105],{},"/share.yml\"\nbase_path: \"\"",[75,120,121,122,124],{},"name: \"README.md required (README.md)\"\ndescription: \"Each application should have a README.md file with a proper documentation\"\nseverity: \"error\"\nrequired: true\nfile_pattern: \"",[103,123,105],{},"/README.md\"\nbase_path: \"\"",[75,126,127,128,130],{},"name: \"Starting point recommended (dashboard.py)\"\ndescription: \"Each application must have a dashboard.py as a starting point\"\nseverity: \"warning\"\nrequired: true\nfile_pattern: \"",[103,129,105],{},"/dashboard.py\"\nbase_path: \"\"",[12,132,133],{},"sql_rules:",[72,135,136,149],{},[75,137,138,139,143,144],{},"name: \"SQL files must contain only SELECT statements\"\ndescription: \"SQL files and SQL code in other files should only contain SELECT statements for data safety\"\nseverity: \"error\"\nrequired: true\nfile_extensions: ",[140,141,142],"span",{},"\".sql\", \".py\"","\nselect_only: true\nforbidden_statements:\n",[72,145,146],{},[75,147,148],{},"....\ncase_sensitive: false",[75,150,151,152,154,155],{},"name: \"SQL queries should include proper SELECT statements\"\ndescription: \"When SQL is present, it should contain proper SELECT statements\"\nseverity: \"warning\"\nrequired: false\nfile_extensions: ",[140,153,142],{},"\nrequired_statements:\n",[72,156,157],{},[75,158,159],{},"\"SELECT\"\ncase_sensitive: false",[12,161,162],{},"share_rules:",[72,164,165,179],{},[75,166,167,168,170,171],{},"name: \"Valid functional roles in share.yml\"\ndescription: \"Share.yml files must contain only valid functional roles from the approved list\"\nseverity: \"error\"\nrequired: true\nfile_pattern: \"",[103,169,105],{},"/share.yml\"\nvalid_roles:\n",[72,172,173,176],{},[75,174,175],{},"...\nsafe_data_roles:",[75,177,178],{},"...",[75,180,181,182,184,185],{},"name: \"Share.yml file format validation\"\ndescription: \"Share.yml files must follow the correct YAML format structure\"\nseverity: \"error\"\nrequired: true\nfile_pattern: \"",[103,183,105],{},"/share.yml\"\nrequired_keys:\n",[72,186,187],{},[75,188,189],{},"\"share\"\nmin_roles: 1\nmax_roles: 10",[191,192,197],"pre",{"className":193,"code":195,"language":196},[194],"language-text","Mit einem einzigen Kommando:\n```bash ╰─$ make streamlit-rules ```\nlassen sich alle erstellten Regeln verifizieren und validieren, dass Entwicklungsteams (die eine Streamlit-Anwendung erstellen) die von den Creators (die Policies und Building Blocks des Frameworks festlegen) spezifizierten Richtlinien befolgen und alle Building Blocks an der richtigen Stelle sind. Dies gewährleistet konsistentes Verhalten über alle Streamlit-Anwendungen hinweg.\n```yaml 🔍 Running Streamlit compliance check... ================================================================================ CODE COMPLIANCE REPORT ================================================================================ Generated: 2025-08-18 17:05:12 Files checked: 4\nSUMMARY: ✅ Passed: 4 ❌ Failed: 0 Success Rate: 100.0%\nAPPLICATION COMPLIANCE SUMMARY: 📱 Total Applications Checked: 1 ⚠️ Applications with Issues: 0 📊 File Compliance Rate: 100.0%\nDETAILED RESULTS BY APPLICATION: ================================================================================ ✅ PASS APPLICATION: main_app ------------------------------------------------------------ 📁 FILES ANALYZED (4): ✅ dashboard.py 📦 Classes: SnowflakeConnectionTester 🔧 Functions: main 📥 Imports: os, pwd, gitlab_data_streamlit_init, snowflake.snowpark.exceptions, streamlit\n✅ show_streamlit_apps.py 📦 Classes: ShowStreamlitApps 🔧 Functions: main 📥 Imports: pandas, gitlab_data_streamlit_init, snowflake_session, streamlit\n✅ available_packages.py 📦 Classes: AvailablePackages 🔧 Functions: main 📥 Imports: pandas, gitlab_data_streamlit_init, streamlit\n✅ share.yml 👥 Share Roles: snowflake_analyst_safe\n📄 FILE COMPLIANCE FOR MAIN_APP: ✅ Required files found: ✓ snowflake.yml ✓ environment.yml ✓ share.yml ✓ README.md ✓ dashboard.py\nRULES CHECKED: ---------------------------------------- Class Rules (1): - Inherit code for the page from GitLabDataStreamlitInit (error)\nFunction Rules (1): - Main function required (error)\nImport Rules (2): - Import GitLabDataStreamlitInit (error) - Import streamlit (error)\nFile Rules (5): - Snowflake configuration required (snowflake.yml) (error) - Snowflake environment required (environment.yml) (error) - Share specification required (share.yml) (warning) - README.md required (README.md) (error) - Starting point recommended (dashboard.py) (warning)\nSQL Rules (2): - SQL files must contain only SELECT statements (error) 🗄 SELECT-only mode enabled 🚨 Forbidden: INSERT, UPDATE, DELETE, DROP, ALTER... - SQL queries should include proper SELECT statements (warning)\nShare Rules (2): - Valid functional roles in share.yml (error) 👥 Valid roles: 15 roles defined 🔒 Safe data roles: 11 roles - Share.yml file format validation (error) ------------------------------------------------------------ ✅ Compliance check passed ----------------------------------------------------------- ```\n## Developer Experience\nOb bevorzugte IDE, webbasierte Entwicklungsumgebung oder Snowflake Snowsight – die Experience bleibt konsistent. Das Framework bietet:\n- **Template-basierte Entwicklung:** Neue Anwendungen und Pages werden über standardisierte Templates erstellt, was Konsistenz und Best Practices von Tag eins sicherstellt. Keine verstreuten Designs und Elemente mehr.\n```yaml ╰─$ make streamlit-new-app NAME=sales_dashboard 🔧 Configuration Environment: TEST 📝 Configuration File: config.yml 📜 Config Loader Script: ./setup/get_config.sh 🐍 Python Version: 3.12 📁 Applications Directory: ./src/applications 🗄 Database: ... 📊 Schema: ... 🏗 Stage: ... 🏭 Warehouse: ... 🆕 Creating new Streamlit app: sales_dashboard Initialized the new project in ./src/applications/sales_dashboard ```\n- **Poetry Package Management:** Alle Dependencies werden über Poetry verwaltet, was isolierte Umgebungen schafft, die bestehende Python-Setups nicht stören.\n```toml [tool.poetry] name = \"GitLab Data Streamlit\" version = \"0.1.1\" description = \"GitLab Data Team Streamlit project\" authors = [\"GitLab Data Team \u003C*****@gitlab.com>\"] readme = \"README.md\"\n[tool.poetry.dependencies] python = \"\u003C3.13,>=3.12\" snowflake-snowpark-python = \"==1.32.0\" snowflake-connector-python = {extras = [\"development\", \"pandas\", \"secure-local-storage\"], version = \"^3.15.0\"} streamlit = \"==1.22.0\" watchdog = \"^6.0.0\" types-toml = \"^0.10.8.20240310\" pytest = \"==7.0.0\" black = \"==25.1.0\" importlib-metadata = \"==4.13.0\" pyyaml = \"==6.0.2\" python-qualiter = \"*\" ruff = \"^0.1.0\" types-pyyaml = \"^6.0.12.20250516\" jinja2 = \"==3.1.6\"\n[build-system] requires = [\"poetry-core\"] build-backend = \"poetry.core.masonry.api\" ```\n- **Multi-Page-Application-Support:** Teams können problemlos komplexe Anwendungen mit mehreren Pages erstellen und neue Libraries nach Bedarf hinzufügen. Multi-Page-Anwendungen sind Teil des Frameworks – Fokus liegt auf der Logik, nicht auf Design und Strukturierung.\n![Multi-Page-Anwendungsbeispiel (in Snowflake)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1760035999/at1q2xgmjthkrgju4okm.png)\n\u003Cp>\u003C/p>\n\u003Ccenter>\u003Ci>Multi-Page-Anwendungsbeispiel (in Snowflake)\u003C/i>\u003C/center>\n\u003Cp>\u003C/p>\n- **Nahtlose Snowflake-Integration:** Integrierte Konnektoren und Authentication-Handling für sicheren Datenzugriff bieten dieselbe Experience in lokaler Entwicklung und direkt in Snowflake.\n```yaml make streamlit-push-test APPLICATION_NAME=sales_dashboard 📤 Deploying Streamlit app to test environment: sales_dashboard ... ------------------------------------------------------------------------------------------------------------ 🔗 Running share command for application: sales_dashboard Running commands to grant shares 🚀 Executing: snow streamlit share sales_dashboard with SOME_NICE_ROLE ✅ Command executed successfully 📊 Execution Summary: 1/1 commands succeeded ```\n- **Umfassendes Makefile:** Alle gängigen Kommandos sind in einfache Makefile-Befehle verpackt, von lokaler Entwicklung über Testing bis Deployment, inklusive CI/CD-Pipelines.\n- **Sichere lokale Entwicklung:** Alles läuft in isolierten Poetry-Umgebungen, schützt das System und bietet Production-ähnliche Experiences.\n![Konsistente Experience unabhängig von der Umgebung (Beispiel lokale Entwicklung)](https://res.cloudinary.com/about-gitlab-com/image/upload/v1760035999/phmubsb34hn2mfefjvqh.png)\n\u003Cp>\u003C/p>\n\u003Ccenter>\u003Ci>Konsistente Experience unabhängig von der Umgebung (Beispiel lokale Entwicklung)\u003C/i>\u003C/center>\n\u003Cp>\u003C/p>\n- **Collaboration via Code:** Alle Anwendungen und Komponenten sind in einem Repository zusammengefasst, was der gesamten Organisation ermöglicht, an denselben Ressourcen zu kollaborieren und doppelte Arbeit sowie redundante Setups zu vermeiden.\n## Implementierungsschritte\nBei ähnlichen Herausforderungen mit verstreuten Streamlit-Anwendungen:\n1. **Bestandsaufnahme:** Bestehende Anwendungen inventarisieren und Problembereiche identifizieren.\n2. **Rollen definieren:** Maintainer-Verantwortlichkeiten von Creator- und Endnutzer-Anforderungen trennen.\n3. **Mit Templates beginnen:** Standardisierte Anwendungs-Templates erstellen, die Security- und Compliance-Anforderungen durchsetzen.\n4. **CI/CD implementieren:** Deployment-Pipeline automatisieren, um manuelle Fehler zu reduzieren und Konsistenz sicherzustellen.\n![Die in Snowflake deployte Anwendung](https://res.cloudinary.com/about-gitlab-com/image/upload/v1760036003/mzge9s1fhkhnx38y1a3i.png)\n\u003Cp>\u003C/p>\n\u003Ccenter>\u003Ci>Die in Snowflake deployte Anwendung\u003C/i>\u003C/center>\n## Einordnung\nDieses Framework behandelt Daten-Anwendungen als vollwertige Komponenten der Enterprise-Architektur.\nDurch die Bereitstellung von Struktur ohne Flexibilitätsverlust hat das GitLab Data Team eine Umgebung geschaffen, in der Teams mit minimalen technischen Vorkenntnissen schnell innovieren können, während höchste Security- und Compliance-Standards gewahrt bleiben.\n### Ausblick\nWir entwickeln das Framework basierend auf User-Feedback und entstehenden Anforderungen kontinuierlich weiter. Zukünftige Verbesserungen umfassen erweiterte Template-Libraries, verbesserte Monitoring-Funktionen, mehr Flexibilität und eine optimierte User Experience.\n**Das Ziel: ein Foundation schaffen, das mit den wachsenden Data-Application-Anforderungen der Organisation skaliert.**\nWeitere technische Details zur Implementierung im [englischen Original](https://about.gitlab.com/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake/).\n## Zusammenfassung\nDas [GitLab Data Team](https://handbook.gitlab.com/handbook/enterprise-data/) hat dutzende verstreute, unsichere Streamlit-Anwendungen ohne Standardisierung in ein einheitliches, Enterprise-taugliches Framework mit klarer Rollentrennung überführt:\n1. **Maintainers** verwalten Infrastruktur und Security.\n2. **Creators** konzentrieren sich auf Anwendungsentwicklung ohne Deployment-Overhead.\n3. **Viewers** greifen auf fertige, compliance-konforme Apps zu.\nDie verwendeten Building Blocks:\n1. Automatisierte **CI/CD**-Pipelines\n2. Vollständig kollaborativer und versionierter Code in **git**\n3. **Template-basierte** Entwicklung\n4. Integrierte **Security**-Compliance und Testing\n5. **Poetry-verwaltete** Umgebungen\nWir haben den Wartungs-Overhead eliminiert und gleichzeitig schnelle Innovation ermöglicht – der Beweis, dass Struktur und Flexibilität vereinbar sind, wenn Data Applications als vollwertige Enterprise-Assets behandelt werden, nicht als Wegwerf-Prototypen.\n","text",[198,199,195],"code",{"__ignoreMap":200},"",{"title":200,"searchDepth":202,"depth":202,"links":203},2,[204],{"id":25,"depth":202,"text":26},"engineering","2025-10-20","Das GitLab Data Team zeigt, wie frühzeitige Infrastruktur-Governance exponentiell steigende Wartungskosten verhindert. Ein systematischer Ansatz für Streamlit-Anwendungen in regulierten Umgebungen.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097447/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%284%29_3LZkiDjHLjhqEkvOvBsVKp_1750097447404.png",{},true,"/de-de/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake",{"config":216,"title":5,"ogTitle":5,"description":217},{"noIndex":210},"Das GitLab Data Team zeigt, wie frühzeitige Infrastruktur-Governance Wartungskosten verhindert. Systematischer Ansatz für Streamlit in regulierten Umgebungen.","how-we-built-a-structured-streamlit-application-framework-in-snowflake","de-de/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake",[221,222,223,224],"product","features","security","tutorial","BlogPost","zxwTKi30mo7iTluaJK7nsfIRpmB0cT0SuQLLHit8Z8M",{"logo":228,"freeTrial":233,"sales":238,"login":243,"items":248,"search":577,"minimal":611,"duo":629,"switchNav":638,"pricingDeployment":649},{"config":229},{"href":230,"dataGaName":231,"dataGaLocation":232},"/de-de/","gitlab logo","header",{"text":234,"config":235},"Kostenlose Testversion anfordern",{"href":236,"dataGaName":237,"dataGaLocation":232},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":239,"config":240},"Demo anfordern",{"href":241,"dataGaName":242,"dataGaLocation":232},"/de-de/sales/?contact-topic=request-demo","sales",{"text":244,"config":245},"Anmelden",{"href":246,"dataGaName":247,"dataGaLocation":232},"https://gitlab.com/users/sign_in/","sign in",[249,278,380,385,499,555],{"text":250,"config":251,"menu":253},"Plattform",{"dataNavLevelOne":252},"platform",{"type":254,"columns":255},"cards",[256,262,270],{"title":250,"description":257,"link":258},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":259,"config":260},"Die Plattform erkunden",{"href":261,"dataGaName":252,"dataGaLocation":232},"/de-de/platform/",{"title":263,"description":264,"link":265},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":266,"config":267},"Lerne GitLab Duo kennen",{"href":268,"dataGaName":269,"dataGaLocation":232},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":271,"description":272,"link":273},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":274,"config":275},"Mehr erfahren",{"href":276,"dataGaName":277,"dataGaLocation":232},"/de-de/why-gitlab/","why gitlab",{"text":279,"left":213,"config":280,"menu":282},"Produkt",{"dataNavLevelOne":281},"solutions",{"type":283,"link":284,"columns":288,"feature":359},"lists",{"text":285,"config":286},"Alle Lösungen anzeigen",{"href":287,"dataGaName":281,"dataGaLocation":232},"/de-de/solutions/",[289,314,337],{"title":290,"description":291,"link":292,"items":297},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":293},{"icon":294,"href":295,"dataGaName":296,"dataGaLocation":232},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[298,302,305,310],{"text":299,"config":300},"CI/CD",{"href":301,"dataGaLocation":232,"dataGaName":299},"/de-de/solutions/continuous-integration/",{"text":263,"config":303},{"href":268,"dataGaLocation":232,"dataGaName":304},"gitlab duo agent platform - product menu",{"text":306,"config":307},"Quellcodeverwaltung",{"href":308,"dataGaLocation":232,"dataGaName":309},"/de-de/solutions/source-code-management/","Source Code Management",{"text":311,"config":312},"Automatische Softwarebereitstellung",{"href":295,"dataGaLocation":232,"dataGaName":313},"Automated software delivery",{"title":315,"description":316,"link":317,"items":322},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":318},{"href":319,"dataGaName":320,"dataGaLocation":232,"icon":321},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[323,327,332],{"text":324,"config":325},"Anwendungssicherheitstests",{"href":319,"dataGaName":326,"dataGaLocation":232},"Application security testing",{"text":328,"config":329},"Schutz der Software-Lieferkette",{"href":330,"dataGaLocation":232,"dataGaName":331},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":333,"config":334},"Software-Compliance",{"href":335,"dataGaName":336,"dataGaLocation":232},"/de-de/solutions/software-compliance/","software compliance",{"title":338,"link":339,"items":344},"Messung",{"config":340},{"icon":341,"href":342,"dataGaName":343,"dataGaLocation":232},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[345,349,354],{"text":346,"config":347},"Sichtbarkeit und Messung",{"href":342,"dataGaLocation":232,"dataGaName":348},"Visibility and Measurement",{"text":350,"config":351},"Wertstrommanagement",{"href":352,"dataGaLocation":232,"dataGaName":353},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":355,"config":356},"Analysen und Einblicke",{"href":357,"dataGaLocation":232,"dataGaName":358},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":360,"type":283,"items":361},"GitLab für",[362,368,374],{"text":363,"config":364},"Enterprise",{"icon":365,"href":366,"dataGaLocation":232,"dataGaName":367},"Building","/de-de/enterprise/","enterprise",{"text":369,"config":370},"Kleinunternehmen",{"icon":371,"href":372,"dataGaLocation":232,"dataGaName":373},"Work","/de-de/small-business/","small business",{"text":375,"config":376},"Öffentlicher Sektor",{"icon":377,"href":378,"dataGaLocation":232,"dataGaName":379},"Organization","/de-de/solutions/public-sector/","public sector",{"text":381,"config":382},"Preise",{"href":383,"dataGaName":384,"dataGaLocation":232,"dataNavLevelOne":384},"/de-de/pricing/","pricing",{"text":386,"config":387,"menu":389},"Ressourcen",{"dataNavLevelOne":388},"resources",{"type":283,"link":390,"columns":394,"feature":488},{"text":391,"config":392},"Alle Ressourcen anzeigen",{"href":393,"dataGaName":388,"dataGaLocation":232},"/de-de/resources/",[395,428,455],{"title":396,"items":397},"Erste Schritte",[398,403,408,413,418,423],{"text":399,"config":400},"Installieren",{"href":401,"dataGaName":402,"dataGaLocation":232},"/de-de/install/","install",{"text":404,"config":405},"Kurzanleitungen",{"href":406,"dataGaName":407,"dataGaLocation":232},"/de-de/get-started/","quick setup checklists",{"text":409,"config":410},"Lernen",{"href":411,"dataGaLocation":232,"dataGaName":412},"https://university.gitlab.com/","learn",{"text":414,"config":415},"Produktdokumentation",{"href":416,"dataGaName":417,"dataGaLocation":232},"https://docs.gitlab.com/","product documentation",{"text":419,"config":420},"Best-Practice-Videos",{"href":421,"dataGaName":422,"dataGaLocation":232},"/de-de/getting-started-videos/","best practice videos",{"text":424,"config":425},"Integrationen",{"href":426,"dataGaName":427,"dataGaLocation":232},"/de-de/integrations/","integrations",{"title":429,"items":430},"Entdecken",[431,436,441,446,450],{"text":432,"config":433},"Kundenerfolge",{"href":434,"dataGaName":435,"dataGaLocation":232},"/de-de/customers/","customer success stories",{"text":437,"config":438},"Blog",{"href":439,"dataGaName":440,"dataGaLocation":232},"/de-de/blog/","blog",{"text":442,"config":443},"Demo-Hub",{"href":444,"dataGaName":445,"dataGaLocation":232},"/de-de/demo-hub/","demo hub",{"text":447,"config":448},"The Source",{"href":449,"dataGaName":440,"dataGaLocation":232},"/de-de/the-source/",{"text":451,"config":452},"Remote",{"href":453,"dataGaName":454,"dataGaLocation":232},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":456,"items":457},"Vernetzen",[458,463,468,473,478,483],{"text":459,"config":460},"GitLab-Services",{"href":461,"dataGaName":462,"dataGaLocation":232},"/de-de/services/","services",{"text":464,"config":465},"Beitragen",{"href":466,"dataGaName":467,"dataGaLocation":232},"https://contributors.gitlab.com","contribute",{"text":469,"config":470},"Community",{"href":471,"dataGaName":472,"dataGaLocation":232},"/community/","community",{"text":474,"config":475},"Forum",{"href":476,"dataGaName":477,"dataGaLocation":232},"https://forum.gitlab.com/","forum",{"text":479,"config":480},"Veranstaltungen",{"href":481,"dataGaName":482,"dataGaLocation":232},"/events/","events",{"text":484,"config":485},"Partner",{"href":486,"dataGaName":487,"dataGaLocation":232},"/de-de/partners/","partners",{"config":489,"title":492,"text":493,"link":494},{"background":490,"textColor":491},"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":495,"config":496},"Aktuelle Nachrichten",{"href":497,"dataGaName":498,"dataGaLocation":232},"/de-de/whats-new/","whats new",{"text":500,"config":501,"menu":503},"Unternehmen",{"dataNavLevelOne":502},"company",{"type":283,"columns":504},[505],{"items":506},[507,512,518,520,525,530,535,540,545,550],{"text":508,"config":509},"Über",{"href":510,"dataGaName":511,"dataGaLocation":232},"/de-de/company/","about",{"text":513,"config":514,"footerGa":517},"Karriere",{"href":515,"dataGaName":516,"dataGaLocation":232},"/jobs/","jobs",{"dataGaName":516},{"text":479,"config":519},{"href":481,"dataGaName":482,"dataGaLocation":232},{"text":521,"config":522},"Geschäftsführung",{"href":523,"dataGaName":524,"dataGaLocation":232},"/company/team/e-group/","leadership",{"text":526,"config":527},"Handbuch",{"href":528,"dataGaName":529,"dataGaLocation":232},"https://handbook.gitlab.com/","handbook",{"text":531,"config":532},"Investor Relations",{"href":533,"dataGaName":534,"dataGaLocation":232},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":536,"config":537},"Trust Center",{"href":538,"dataGaName":539,"dataGaLocation":232},"/de-de/security/","trust center",{"text":541,"config":542},"AI Transparency Center",{"href":543,"dataGaName":544,"dataGaLocation":232},"/de-de/ai-transparency-center/","ai transparency center",{"text":546,"config":547},"Newsletter",{"href":548,"dataGaName":549,"dataGaLocation":232},"/company/contact/#contact-forms","newsletter",{"text":551,"config":552},"Presse",{"href":553,"dataGaName":554,"dataGaLocation":232},"/press/","press",{"text":556,"config":557,"menu":558},"Kontakt",{"dataNavLevelOne":502},{"type":283,"columns":559},[560],{"items":561},[562,567,572],{"text":563,"config":564},"Vertrieb kontaktieren",{"href":565,"dataGaName":566,"dataGaLocation":232},"/de-de/sales/","talk to sales",{"text":568,"config":569},"Support-Portal",{"href":570,"dataGaName":571,"dataGaLocation":232},"https://support.gitlab.com/hc/en-us","support portal",{"text":573,"config":574},"Kundenportal",{"href":575,"dataGaName":576,"dataGaLocation":232},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":578,"login":579,"suggestions":586},"Schließen",{"text":580,"link":581},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":582,"config":583},"gitlab.com",{"href":246,"dataGaName":584,"dataGaLocation":585},"search login","search",{"text":587,"default":588},"Vorschläge",[589,591,596,598,603,608],{"text":263,"config":590},{"href":268,"dataGaName":263,"dataGaLocation":585},{"text":592,"config":593},"Codevorschläge (KI)",{"href":594,"dataGaName":595,"dataGaLocation":585},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":299,"config":597},{"href":301,"dataGaName":299,"dataGaLocation":585},{"text":599,"config":600},"GitLab auf AWS",{"href":601,"dataGaName":602,"dataGaLocation":585},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":604,"config":605},"GitLab auf Google Cloud",{"href":606,"dataGaName":607,"dataGaLocation":585},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":271,"config":609},{"href":276,"dataGaName":610,"dataGaLocation":585},"Why GitLab?",{"freeTrial":612,"mobileIcon":617,"desktopIcon":622,"secondaryButton":625},{"text":613,"config":614},"Kostenlos testen",{"href":615,"dataGaName":237,"dataGaLocation":616},"https://gitlab.com/-/trials/new/","nav",{"altText":618,"config":619},"GitLab-Symbol",{"src":620,"dataGaName":621,"dataGaLocation":616},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":618,"config":623},{"src":624,"dataGaName":621,"dataGaLocation":616},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":396,"config":626},{"href":627,"dataGaName":628,"dataGaLocation":616},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":630,"mobileIcon":634,"desktopIcon":636},{"text":631,"config":632},"Mehr über GitLab Duo erfahren",{"href":268,"dataGaName":633,"dataGaLocation":616},"gitlab duo",{"altText":618,"config":635},{"src":620,"dataGaName":621,"dataGaLocation":616},{"altText":618,"config":637},{"src":624,"dataGaName":621,"dataGaLocation":616},{"button":639,"mobileIcon":644,"desktopIcon":646},{"text":640,"config":641},"/Option",{"href":642,"dataGaName":643,"dataGaLocation":616},"#contact","switch",{"altText":618,"config":645},{"src":620,"dataGaName":621,"dataGaLocation":616},{"altText":618,"config":647},{"src":648,"dataGaName":621,"dataGaLocation":616},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":650,"mobileIcon":655,"desktopIcon":657},{"text":651,"config":652},"Zurück zur Preisübersicht",{"href":383,"dataGaName":653,"dataGaLocation":616,"icon":654},"back to pricing","GoBack",{"altText":618,"config":656},{"src":620,"dataGaName":621,"dataGaLocation":616},{"altText":618,"config":658},{"src":624,"dataGaName":621,"dataGaLocation":616},{"title":660,"button":661,"config":665},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":274,"config":662},{"href":663,"dataGaName":664,"dataGaLocation":232},"/de-de/gitlab-orbit/","orbit",{"layout":666,"disabled":210},"release",{"data":668},{"text":669,"source":670,"edit":676,"contribute":681,"config":686,"items":691,"minimal":897},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":671,"config":672},"Quelltext der Seite anzeigen",{"href":673,"dataGaName":674,"dataGaLocation":675},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":677,"config":678},"Diese Seite bearbeiten",{"href":679,"dataGaName":680,"dataGaLocation":675},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":682,"config":683},"Beteilige dich",{"href":684,"dataGaName":685,"dataGaLocation":675},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":687,"facebook":688,"youtube":689,"linkedin":690},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[692,737,790,832,864],{"title":381,"links":693,"subMenu":708},[694,698,703],{"text":695,"config":696},"Tarife anzeigen",{"href":383,"dataGaName":697,"dataGaLocation":675},"view plans",{"text":699,"config":700},"Vorteile von Premium",{"href":701,"dataGaName":702,"dataGaLocation":675},"/de-de/pricing/premium/","why premium",{"text":704,"config":705},"Vorteile von Ultimate",{"href":706,"dataGaName":707,"dataGaLocation":675},"/de-de/pricing/ultimate/","why ultimate",[709],{"title":556,"links":710},[711,713,715,717,722,727,732],{"text":563,"config":712},{"href":565,"dataGaName":242,"dataGaLocation":675},{"text":568,"config":714},{"href":570,"dataGaName":571,"dataGaLocation":675},{"text":573,"config":716},{"href":575,"dataGaName":576,"dataGaLocation":675},{"text":718,"config":719},"Status",{"href":720,"dataGaName":721,"dataGaLocation":675},"https://status.gitlab.com/","status",{"text":723,"config":724},"Nutzungsbedingungen",{"href":725,"dataGaName":726,"dataGaLocation":675},"/terms/","terms of use",{"text":728,"config":729},"Datenschutzerklärung",{"href":730,"dataGaName":731,"dataGaLocation":675},"/de-de/privacy/","privacy statement",{"text":733,"config":734},"Cookie-Einstellungen",{"dataGaName":735,"dataGaLocation":675,"id":736,"isOneTrustButton":213},"cookie preferences","ot-sdk-btn",{"title":279,"links":738,"subMenu":747},[739,743],{"text":740,"config":741},"DevSecOps-Plattform",{"href":261,"dataGaName":742,"dataGaLocation":675},"devsecops platform",{"text":744,"config":745},"KI-unterstützte Entwicklung",{"href":268,"dataGaName":746,"dataGaLocation":675},"ai-assisted development",[748],{"title":749,"links":750},"Themen",[751,755,760,765,770,775,780,785],{"text":299,"config":752},{"href":753,"dataGaName":754,"dataGaLocation":675},"/de-de/topics/ci-cd/","cicd",{"text":756,"config":757},"GitOps",{"href":758,"dataGaName":759,"dataGaLocation":675},"/de-de/topics/gitops/","gitops",{"text":761,"config":762},"DevOps",{"href":763,"dataGaName":764,"dataGaLocation":675},"/de-de/topics/devops/","devops",{"text":766,"config":767},"Versionskontrolle",{"href":768,"dataGaName":769,"dataGaLocation":675},"/de-de/topics/version-control/","version control",{"text":771,"config":772},"DevSecOps",{"href":773,"dataGaName":774,"dataGaLocation":675},"/de-de/topics/devsecops/","devsecops",{"text":776,"config":777},"Cloud-nativ",{"href":778,"dataGaName":779,"dataGaLocation":675},"/de-de/topics/cloud-native/","cloud native",{"text":781,"config":782},"KI für das Programmieren",{"href":783,"dataGaName":784,"dataGaLocation":675},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":786,"config":787},"Agentische KI",{"href":788,"dataGaName":789,"dataGaLocation":675},"/de-de/topics/agentic-ai/","agentic ai",{"title":791,"links":792},"Lösungen",[793,796,798,803,807,810,813,816,818,820,822,827],{"text":324,"config":794},{"href":319,"dataGaName":795,"dataGaLocation":675},"Application Security Testing",{"text":311,"config":797},{"href":295,"dataGaName":296,"dataGaLocation":675},{"text":799,"config":800},"Agile Entwicklung",{"href":801,"dataGaName":802,"dataGaLocation":675},"/de-de/solutions/agile-delivery/","agile delivery",{"text":804,"config":805},"SCM",{"href":308,"dataGaName":806,"dataGaLocation":675},"source code management",{"text":299,"config":808},{"href":301,"dataGaName":809,"dataGaLocation":675},"continuous integration & delivery",{"text":350,"config":811},{"href":352,"dataGaName":812,"dataGaLocation":675},"value stream management",{"text":756,"config":814},{"href":815,"dataGaName":759,"dataGaLocation":675},"/de-de/solutions/gitops/",{"text":363,"config":817},{"href":366,"dataGaName":367,"dataGaLocation":675},{"text":369,"config":819},{"href":372,"dataGaName":373,"dataGaLocation":675},{"text":375,"config":821},{"href":378,"dataGaName":379,"dataGaLocation":675},{"text":823,"config":824},"Bildungswesen",{"href":825,"dataGaName":826,"dataGaLocation":675},"/de-de/solutions/education/","education",{"text":828,"config":829},"Finanzdienstleistungen",{"href":830,"dataGaName":831,"dataGaLocation":675},"/de-de/solutions/finance/","financial services",{"title":386,"links":833},[834,836,838,840,843,845,848,850,852,854,856,858,860,862],{"text":399,"config":835},{"href":401,"dataGaName":402,"dataGaLocation":675},{"text":404,"config":837},{"href":406,"dataGaName":407,"dataGaLocation":675},{"text":409,"config":839},{"href":411,"dataGaName":412,"dataGaLocation":675},{"text":414,"config":841},{"href":416,"dataGaName":842,"dataGaLocation":675},"docs",{"text":437,"config":844},{"href":439,"dataGaName":440,"dataGaLocation":675},{"text":846,"config":847},"Neuerungen",{"href":497,"dataGaName":498,"dataGaLocation":675},{"text":432,"config":849},{"href":434,"dataGaName":435,"dataGaLocation":675},{"text":451,"config":851},{"href":453,"dataGaName":454,"dataGaLocation":675},{"text":459,"config":853},{"href":461,"dataGaName":462,"dataGaLocation":675},{"text":464,"config":855},{"href":466,"dataGaName":467,"dataGaLocation":675},{"text":469,"config":857},{"href":471,"dataGaName":472,"dataGaLocation":675},{"text":474,"config":859},{"href":476,"dataGaName":477,"dataGaLocation":675},{"text":479,"config":861},{"href":481,"dataGaName":482,"dataGaLocation":675},{"text":484,"config":863},{"href":486,"dataGaName":487,"dataGaLocation":675},{"title":500,"links":865},[866,868,870,872,874,876,881,886,888,890,892],{"text":508,"config":867},{"href":510,"dataGaName":502,"dataGaLocation":675},{"text":513,"config":869},{"href":515,"dataGaName":516,"dataGaLocation":675},{"text":521,"config":871},{"href":523,"dataGaName":524,"dataGaLocation":675},{"text":526,"config":873},{"href":528,"dataGaName":529,"dataGaLocation":675},{"text":531,"config":875},{"href":533,"dataGaName":534,"dataGaLocation":675},{"text":877,"config":878},"Nachhaltigkeit",{"href":879,"dataGaName":880,"dataGaLocation":675},"/sustainability/","Sustainability",{"text":882,"config":883},"Vielfalt, Inklusion und Zugehörigkeit",{"href":884,"dataGaName":885,"dataGaLocation":675},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":536,"config":887},{"href":538,"dataGaName":539,"dataGaLocation":675},{"text":546,"config":889},{"href":548,"dataGaName":549,"dataGaLocation":675},{"text":551,"config":891},{"href":553,"dataGaName":554,"dataGaLocation":675},{"text":893,"config":894},"Transparenzerklärung zu moderner Sklaverei",{"href":895,"dataGaName":896,"dataGaLocation":675},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":898},[899,902,905],{"text":900,"config":901},"Terms",{"href":725,"dataGaName":726,"dataGaLocation":675},{"text":903,"config":904},"Cookies",{"dataGaName":735,"dataGaLocation":675,"id":736,"isOneTrustButton":213},{"text":906,"config":907},"Datenschutz",{"href":730,"dataGaName":731,"dataGaLocation":675},[909],{"id":910,"title":7,"body":209,"config":911,"content":914,"description":209,"extension":917,"meta":918,"navigation":213,"path":919,"seo":920,"stem":921,"__hash__":922},"blogAuthors/en-us/blog/authors/radovan-bacovic.yml",{"template":912,"gitlabHandle":913},"BlogAuthor","rbacovic",{"name":7,"config":915},{"headshot":916},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1760036179/vvj2tiujit6kopuz8mqp.png","yml",{},"/en-us/blog/authors/radovan-bacovic",{},"en-us/blog/authors/radovan-bacovic","7j6OYSuOOZuQmPOFNSQVXMc_aFk4xFi30am_VXHBytg",[924,933,941],{"title":925,"description":926,"heroImage":927,"category":205,"date":928,"authors":929,"slug":932,"externalUrl":209},"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",[930,931],"Mathias Ewald","Martin Paloncy","confidential-ai-for-gitlab-self-hosted",{"title":934,"description":935,"heroImage":936,"category":205,"date":937,"authors":938,"slug":940,"externalUrl":209},"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",[939],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":942,"description":943,"heroImage":944,"category":205,"date":945,"authors":946,"slug":948,"externalUrl":209},"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",[947],"GitLab","what-is-ci-cd",{"promotions":950},[951,965,976,987],{"id":952,"categories":953,"header":955,"text":956,"button":957,"image":962},"ai-modernization",[954],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":958,"config":959},"Ermittle deinen KI-Reifegrad",{"href":960,"dataGaName":961,"dataGaLocation":440},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":963},{"src":964},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":966,"categories":967,"header":968,"text":956,"button":969,"image":973},"devops-modernization",[221,774],"Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":970,"config":971},"Ermittle deinen DevOps-Reifegrad",{"href":972,"dataGaName":961,"dataGaLocation":440},"/de-de/assessments/devops-modernization-assessment/",{"config":974},{"src":975},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":977,"categories":978,"header":979,"text":956,"button":980,"image":984},"security-modernization",[223],"Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":981,"config":982},"Ermittle deinen Sicherheitsreifegrad",{"href":983,"dataGaName":961,"dataGaLocation":440},"/de-de/assessments/security-modernization-assessment/",{"config":985},{"src":986},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":988,"paths":989,"header":992,"text":993,"button":994,"image":999},"github-azure-migration",[990,991],"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":995,"config":996},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":997,"dataGaName":998,"dataGaLocation":440},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1000},{"src":975},{"header":1002,"blurb":1003,"button":1004,"secondaryButton":1009},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":1005,"config":1006},"Kostenlosen Test starten",{"href":1007,"dataGaName":237,"dataGaLocation":1008},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":563,"config":1010},{"href":565,"dataGaName":242,"dataGaLocation":1008},1786803758482]