LERNPFADE & KURSE

Deployment & Version Control

Autor

Qlik Doktor

Oktober 27, 2025 · 8 Min. Lesezeit

📚 Qlik Sense Kurs – Artikel 27 von 28

Vorheriger Artikel: Performance Tuning
Nächster Artikel: Data Governance

Was ist Deployment? Professionelles Ausrollen von Qlik-Apps über Environments (DEV/TEST/PROD) mit Version Control, Testing und rollback-fähigem Change Management!

Was kannst Du über Deployment & Version Control lernen?

Nach diesem Guide kannst Du:

  1. Multi-Environment-Setup (DEV/TEST/PROD) aufbauen
  2. Git für Qlik Scripts nutzen
  3. Deployment-Pipeline mit Testing implementieren

Zeitinvestment: 30 Min Lesen + 4 Std Hands-on
Quick Win: In 1 Stunde hast Du Git für Deine Scripts eingerichtet

Was ist das Prinzip von Controlled Change Management?

Das Problem: Script-Änderungen direkt in Production, keine Versionierung, kein Rollback möglich – Production-Outages!

Die Lösung: Structured Deployment Pipeline – DEV → TEST → PROD mit Version Control und automatisierten Tests!

Was sind die drei Environments in Deployment & Version Control?

Environment Zweck Wer nutzt?
DEV Entwicklung, Experimente, Breaking Changes OK Entwickler
TEST Integration Testing, UAT, Pre-Production QA, Business User
PROD Live System, stabil, nur getestete Changes End Users

Wie konfiguriert man umgebungsspezifische Einstellungen?

Wie wird die Datei Environment.qvs (NICHT in Git!) für Deployment & Version Control verwendet?

//============================================
// Environment.qvs
// Manually created on each server
// DO NOT commit to Git!
//============================================

SET vEnvironment = 'PROD';  // DEV, TEST oder PROD

Wie verwalte ich Deployment & Version Control für die Datei Config_DEV.qvs?

//============================================
// DEV Configuration
//============================================

TRACE >>> Loading DEV Configuration;

// Paths
SET vDataPath = 'C:QlikDevData';
SET vQVDPath = 'C:QlikDevQVD';
SET vLogPath = 'C:QlikDevLogs';

// Database
SET vDBServer = 'DEV-SQL-01';
SET vDBName = 'SalesDB_Dev';
SET vDBUser = 'qlik_dev_user';

// Settings
SET vDebugMode = 1;
SET vRowLimit = 10000;  // Limit für schnellere DEV-Reloads
SET vLogLevel = 'DEBUG';  // Verbose logging

TRACE >>> DEV Configuration loaded;

Wie verwalte ich Deployment & Version Control für die Datei Config_TEST.qvs?

//============================================
// TEST Configuration
//============================================

TRACE >>> Loading TEST Configuration;

// Paths
SET vDataPath = 'test-nasQlikData';
SET vQVDPath = 'test-nasQlikQVD';
SET vLogPath = 'test-nasQlikLogs';

// Database
SET vDBServer = 'TEST-SQL-01';
SET vDBName = 'SalesDB_Test';
SET vDBUser = 'qlik_test_user';

// Settings
SET vDebugMode = 0;
SET vRowLimit = 0;  // Full data in TEST
SET vLogLevel = 'INFO';

TRACE >>> TEST Configuration loaded;

Wie verwalte ich Deployment und Version Control für die Datei Config_PROD.qvs?

//============================================
// PROD Configuration
//============================================

TRACE >>> Loading PROD Configuration;

// Paths
SET vDataPath = 'prod-nasQlikData';
SET vQVDPath = 'prod-nasQlikQVD';
SET vLogPath = 'prod-nasQlikLogs';

// Database
SET vDBServer = 'PROD-SQL-CLUSTER';
SET vDBName = 'SalesDB';
SET vDBUser = 'qlik_prod_user';

// Settings
SET vDebugMode = 0;
SET vRowLimit = 0;
SET vLogLevel = 'WARNING';  // Nur Warnings und Errors

TRACE >>> PROD Configuration loaded;

Wie funktioniert der Main Script mit Environment Detection?

//============================================
// MAIN SCRIPT
//============================================

// Load environment (not in Git!)
$(Must_Include=lib://Scripts/Environment.qvs)

// Load environment-specific config
$(Must_Include=lib://Scripts/Config_$(vEnvironment).qvs)

TRACE ======================================;
TRACE Running in: $(vEnvironment);
TRACE Data Path: $(vDataPath);
TRACE DB Server: $(vDBServer);
TRACE ======================================;

// ... Rest of script uses config variables

Wichtig: Environment.qvs ist das EINZIGE File das nicht in Git kommt – wird manuell auf jedem Server erstellt!

Wie richte ich Git Version Control ein?

Wie ist die Repository-Struktur für Deployment & Version Control?

qlik-sales-analytics/
├── .git/
├── .gitignore
├── README.md
├── CHANGELOG.md
├── scripts/
│   ├── 01_Config_DEV.qvs
│   ├── 01_Config_TEST.qvs
│   ├── 01_Config_PROD.qvs
│   ├── 02_Functions.qvs
│   ├── 03_Subroutines.qvs
│   ├── 10_Load_Staging.qvs
│   ├── 20_Transform.qvs
│   └── 30_Model.qvs
├── docs/
│   ├── Architecture.md
│   └── DataDictionary.xlsx
└── tests/
    └── validation_tests.qvs

Was ist eine .gitignore-Datei?

# Environment-specific (not in Git!)
Environment.qvs
**/Environment.qvs

# Credentials
**/credentials.txt
**/passwords.txt

# QVD Files (binary, zu groß)
*.qvd

# Logs
*.log
logs/

# Temp files
*.tmp
*.bak
~$*

# OS files
.DS_Store
Thumbs.db

Was ist die Branch-Strategie im Deployment & Version Control?

# Branch-Struktur
main           # Production-ready code
  ├── dev      # Integration branch
  │   ├── feature/new-customer-dimension
  │   ├── feature/sales-forecast
  │   └── bugfix/null-handling

# Workflow:
# 1. Feature entwickeln
git checkout -b feature/new-dimension dev

# 2. Committen
git add scripts/20_Transform.qvs
git commit -m "feat: Add customer segmentation dimension"

# 3. Push
git push origin feature/new-dimension

# 4. Merge zu dev
git checkout dev
git merge feature/new-dimension

# 5. Testen in TEST environment

# 6. Deploy zu PROD
git checkout main
git merge dev
git tag v1.2.0
git push origin main --tags

Was ist die Commit-Message Convention?

# Format: : 

# Types:
feat:     # Neue Funktionalität
fix:      # Bug Fix
refactor: # Code-Umstrukturierung
docs:     # Dokumentations-Änderung
test:     # Test-Ergänzungen
perf:     # Performance-Verbesserung

# Beispiele:
git commit -m "feat: Add incremental loading for sales data"
git commit -m "fix: Correct date parsing for German locale"
git commit -m "perf: Optimize QVD loads with WHERE EXISTS"
git commit -m "docs: Update README with deployment instructions"

Wie erfolgt die Pre-Deployment Validation?

Was sind Validation Subroutines im Deployment & Version Control?

//============================================
// File: 99_Validation.qvs
//============================================

SUB ValidateDeployment
    TRACE ======================================;
    TRACE PRE-DEPLOYMENT VALIDATION;
    TRACE ======================================;

    // 1. Row Count Validation
    CALL CheckMinRows('Facts_Sales', 1000);
    CALL CheckMinRows('Dim_Customer', 100);

    // 2. Data Quality Validation
    LET vQualityScore = GetQualityScore('TRF_Sales');
    IF $(vQualityScore) < 0.95 THEN
        TRACE [ERROR] Quality score too low: $(vQualityScore);
        EXIT SCRIPT;
    END IF

    // 3. Model Validation
    CALL CheckSyntheticKeys();
    CALL CheckCircularReferences();

    // 4. Date Range Validation
    LET vMaxDate = Date(Max(OrderDate), 'DD/MM/YYYY');
    LET vToday = Date(Today(), 'DD/MM/YYYY');

    IF $(vMaxDate) < $(vToday) - 7 THEN
        TRACE [WARNING] Data is older than 7 days!;
    END IF

    TRACE ======================================;
    TRACE VALIDATION PASSED;
    TRACE ======================================;
END SUB

// Execute validation
CALL ValidateDeployment;

Wie überprüfe ich die Zeilenanzahl?

SUB CheckMinRows(pTable, pMinRows)
    LET vActualRows = NoOfRows('$(pTable)');

    TRACE [CHECK] $(pTable): $(vActualRows) rows (min: $(pMinRows));

    IF $(vActualRows) < $(pMinRows) THEN
        TRACE [ERROR] Table $(pTable) has too few rows!;
        EXIT SCRIPT;
    END IF
END SUB

Was ist die Deployment Checklist?

✓ Pre-Deployment (1-2 Tage vor Deployment):

  • [ ] Code Review durchgeführt
  • [ ] Alle Tests in DEV bestanden
  • [ ] Merge zu dev-Branch
  • [ ] Deployment in TEST-Environment
  • [ ] UAT (User Acceptance Testing) erfolgreich
  • [ ] Performance-Tests OK
  • [ ] Dokumentation aktualisiert
  • [ ] CHANGELOG.md aktualisiert

✓ Deployment Day:

  • [ ] Backup von PROD-App erstellen
  • [ ] Downtime kommunizieren (wenn nötig)
  • [ ] Merge zu main-Branch
  • [ ] Tag erstellen (v1.2.0)
  • [ ] Scripts zu PROD kopieren
  • [ ] Test-Reload in PROD durchführen
  • [ ] Validation-Tests ausführen
  • [ ] Smoke Tests (kritische Charts)

✓ Post-Deployment:

  • [ ] Monitoring prüfen (keine Errors?)
  • [ ] Performance-Metriken vergleichen
  • [ ] User-Feedback sammeln (erste Stunden)
  • [ ] Team informieren (Deployment erfolgreich)

Was ist eine Rollback-Strategie im Deployment & Version Control?

Wie mache ich ein Backup vor dem Deployment?

# 1. Backup erstellen
# QMC → Apps → Sales Analytics → More Actions → Export
# Speichern als: SalesAnalytics_v1.1.0_backup_20250107.qvf

# 2. Scripts sichern
cd /qlik/scripts/SalesAnalytics
cp -r . ../SalesAnalytics_backup_20250107/

# 3. Git Tag für Rollback
git tag v1.1.0-pre-deployment

Wie führe ich einen Rollback durch?

# Option 1: Git Revert
git revert 
git push origin main

# Option 2: Git Reset (wenn noch nicht gepusht)
git reset --hard v1.1.0
git push origin main --force

# Option 3: Backup-App wiederherstellen
# QMC → Apps → Import → SalesAnalytics_backup.qvf

Wichtig: Rollback-Plan VORHER definieren und testen! Im Notfall keine Zeit für Troubleshooting.

Wie funktioniert Automated Testing im Deployment & Version Control?

Was ist eine Test Suite Datei?

//============================================
// File: tests/ValidationTests.qvs
//============================================

// Test 1: Data Completeness
SUB TestDataCompleteness
    TRACE [TEST] Data Completeness;

    LET vExpectedTables = 5;
    LET vActualTables = NoOfTables();

    IF $(vActualTables) <> $(vExpectedTables) THEN
        TRACE [FAIL] Expected $(vExpectedTables) tables, got $(vActualTables);
        LET vTestsFailed = $(vTestsFailed) + 1;
    ELSE
        TRACE [PASS] All tables loaded;
    END IF
END SUB

// Test 2: Date Ranges
SUB TestDateRanges
    TRACE [TEST] Date Ranges;

    LET vMinDate = Num(Min(OrderDate));
    LET vMaxDate = Num(Max(OrderDate));
    LET vExpectedMin = Num(MakeDate(2020, 1, 1));

    IF $(vMinDate) < $(vExpectedMin) THEN
        TRACE [FAIL] Data too old: $(vMinDate);
        LET vTestsFailed = $(vTestsFailed) + 1;
    ELSE
        TRACE [PASS] Date ranges valid;
    END IF
END SUB

// Test 3: No Synthetic Keys
SUB TestNoSyntheticKeys
    TRACE [TEST] No Synthetic Keys;

    FOR i = 0 TO NoOfTables() - 1
        LET vTableName = TableName($(i));
        IF Left('$(vTableName)', 4) = '$Syn' THEN
            TRACE [FAIL] Synthetic key found: $(vTableName);
            LET vTestsFailed = $(vTestsFailed) + 1;
        END IF
    NEXT i

    TRACE [PASS] No synthetic keys;
END SUB

// Execute all tests
LET vTestsFailed = 0;

CALL TestDataCompleteness;
CALL TestDateRanges;
CALL TestNoSyntheticKeys;

IF $(vTestsFailed) > 0 THEN
    TRACE ======================================;
    TRACE [ERROR] $(vTestsFailed) tests failed!;
    TRACE ======================================;
    EXIT SCRIPT;
ELSE
    TRACE ======================================;
    TRACE [SUCCESS] All tests passed!;
    TRACE ======================================;
END IF

Welche Dokumentationsanforderungen gibt es für Deployment & Version Control?

Wie erstelle ich ein README.md Template für Deployment & Version Control?

# Sales Analytics Qlik App

## Overview
Sales analytics application with incremental loading and customer segmentation.

## Architecture
- **Staging Layer**: Raw extracts from source systems
- **Transform Layer**: Business logic and data quality
- **Model Layer**: Star schema with Facts_Sales + Dimensions

## Environments
- **DEV**: Development server (qlik-dev-01)
- **TEST**: Testing server (qlik-test-01)
- **PROD**: Production server (qlik-prod-cluster)

## Deployment
See [Deployment Guide](docs/Deployment.md)

## Configuration
Environment-specific configs in `scripts/Config_[ENV].qvs`

## Data Sources
- SQL Server: Sales transactions (daily)
- Excel: Product catalog (weekly)
- REST API: Customer data (hourly)

## Reload Schedule
- Staging: Every hour
- Transform + Model: Every 4 hours

## Contacts
- Owner: John Doe (john.doe@company.com)
- Team: BI Team

## Version
Current: v1.2.0

Was steht im CHANGELOG.md zu Deployment & Version Control?

# Changelog

## [1.2.0] - 2025-01-10
### Added
- Customer segmentation dimension (RFM analysis)
- Incremental loading for sales data
- Data quality dashboard

### Changed
- Optimized QVD loads (+50% faster)
- Updated customer hierarchy

### Fixed
- Date parsing for international formats
- NULL handling in product mapping

## [1.1.0] - 2024-12-15
### Added
- Initial version with basic star schema

Was sind die Best Practices für Deployment & Version Control?

✓ Version Control:

  • [ ] Git für alle Scripts
  • [ ] .gitignore konfiguriert
  • [ ] Branch-Strategy definiert (main/dev/feature)
  • [ ] Commit-Conventions festgelegt

✓ Environments:

  • [ ] DEV/TEST/PROD getrennt
  • [ ] Environment-spezifische Configs
  • [ ] Environment.qvs auf jedem Server

✓ Deployment:

  • [ ] Deployment-Checklist
  • [ ] Pre-Deployment Validation
  • [ ] Backup vor Deployment
  • [ ] Rollback-Plan
  • [ ] Post-Deployment Monitoring

✓ Documentation:

  • [ ] README.md
  • [ ] CHANGELOG.md
  • [ ] Architecture Diagram
  • [ ] Deployment Guide

Wie kann ich bei Deployment & Version Control Probleme beheben?

⚠️ Problem: Script funktioniert nicht nach Deployment in TEST

Ursache: Environment.qvs nicht erstellt oder falsche Config geladen

Lösung:

// 1. Prüfe: Environment.qvs existiert?
// lib://Scripts/Environment.qvs mit SET vEnvironment = 'TEST'

// 2. Prüfe: Welche Config wird geladen?
TRACE Environment: $(vEnvironment);
TRACE Data Path: $(vDataPath);

// 3. Prüfe: Config-File existiert?
// Config_TEST.qvs muss existieren
⚠️ Problem: Git Merge Conflicts in Scripts

Lösung: Conflicts manuell auflösen

# 1. Merge versuchen
git merge dev

# 2. Conflicts anschauen
git status
# Conflicts in: scripts/20_Transform.qvs

# 3. File öffnen, Conflicts suchen
# <<<<<<< HEAD
# ... dein Code
# =======
# ... anderer Code
# >>>>>>> dev

# 4. Manuell auflösen, Markers entfernen

# 5. Committen
git add scripts/20_Transform.qvs
git commit -m "fix: Resolve merge conflicts in transform layer"
⚠️ Problem: Rollback nach fehlgeschlagenem Deployment

Sofort-Maßnahmen:

  1. Backup-App aus QMC importieren
  2. Alte Scripts aus Backup-Ordner zurückkopieren
  3. Test-Reload durchführen
  4. Git auf alten Stand zurücksetzen

Post-Mortem:

  • Was ist schief gelaufen?
  • Warum haben Tests nicht gefangen?
  • Wie verhindern wir das?

Was sind die nächsten Schritte für Deployment & Version Control?

Du kannst jetzt professionelles Deployment durchführen! Als nächstes:

1. Data Governance: Standards und Prozesse etablieren. Data Governance zeigt wie.

2. Monitoring: Post-Deployment Monitoring aufsetzen.

Welche verwandten Themen gibt es im Kurs zu Deployment & Version Control?

Slug: qlik-deployment
Keywords: Qlik Deployment, Qlik Version Control, Git for Qlik, DEV TEST PROD Qlik, Qlik Environment Management, Deployment Pipeline Qlik, Rollback Strategy Qlik, Qlik CI CD