# CI/CD Pipeline Test Checklist **Stand:** 2025-01-XX **Zweck:** Schritt-für-Schritt Checkliste für End-to-End Pipeline-Tests --- ## Vorbereitung ### Prerequisites Check ausführen ```bash cd /home/michael/dev/michaelschiemer ./deployment/scripts/test-pipeline-prerequisites.sh ``` **Erwartet:** Alle Checks sollten grün sein (Warnings sind OK) ### Gitea Secrets verifizieren **URL:** `https://git.michaelschiemer.de/michael/michaelschiemer/settings/secrets/actions` **Erforderliche Secrets:** - [ ] `REGISTRY_USER` - Docker Registry Benutzername - [ ] `REGISTRY_PASSWORD` - Docker Registry Passwort - [ ] `SSH_PRIVATE_KEY` - SSH Private Key für Production-Server - [ ] `ANSIBLE_VAULT_PASSWORD` - Ansible Vault Password (optional, falls Vault verschlüsselt) ### Gitea Runner Status prüfen **URL:** `https://git.michaelschiemer.de/admin/actions/runners` **Erwartet:** - [ ] Runner ist sichtbar als "Idle" oder "Active" - [ ] Runner Name: `dev-runner-01` (oder ähnlich) - [ ] Runner Labels: `ubuntu-latest`, `ubuntu-22.04`, `debian-latest` **Lokal prüfen:** ```bash cd deployment/gitea-runner docker compose ps ``` **Erwartet:** - [ ] `gitea-runner`: Up - [ ] `gitea-runner-dind`: Up --- ## Staging Pipeline Test ### Schritt 1: Test-Commit erstellen ```bash # Auf staging Branch wechseln git checkout staging git pull origin staging # Kleine Änderung machen echo "# CI/CD Pipeline Test - $(date)" >> README.md git add README.md git commit -m "test: CI/CD pipeline staging test" git push origin staging ``` **Erwartet:** - [ ] Push erfolgreich - [ ] Keine Git-Fehler ### Schritt 2: Pipeline in Gitea Actions beobachten **URL:** `https://git.michaelschiemer.de/michael/michaelschiemer/actions` **Erwartete Jobs (in Reihenfolge):** 1. **changes** - Determine Build Necessity - [ ] Job startet innerhalb von 1-2 Minuten - [ ] Job läuft erfolgreich durch - [ ] Output zeigt: `needs_build=true` (oder `false` wenn nur Docs geändert) 2. **runtime-base** - Build Runtime Base Image (nur wenn `needs_runtime_build=true`) - [ ] Job startet nach `changes` - [ ] Docker Build läuft erfolgreich - [ ] Image wird zur Registry gepusht 3. **test** - Run Tests & Quality Checks (nur wenn `needs_build=true`) - [ ] Job startet nach `changes` - [ ] Composer Dependencies werden installiert - [ ] Tests laufen (oder werden übersprungen mit Warnung) - [ ] Job läuft erfolgreich durch 4. **build** - Build Docker Image (nur wenn `needs_build=true`) - [ ] Job startet nach `runtime-base` und `test` - [ ] Docker Build läuft erfolgreich - [ ] Image wird mit Tags gepusht: `latest`, `git-`, `-` - [ ] Output zeigt Image URL 5. **deploy-staging** - Auto-deploy to Staging - [ ] Job startet nach `build` - [ ] SSH-Verbindung zum Server erfolgreich - [ ] Code-Deployment (`deploy-application-code.yml`) erfolgreich - [ ] Composer Dependencies Installation erfolgreich - [ ] Image-Deployment (`deploy-image.yml`) erfolgreich - [ ] Health-Check erfolgreich **Gesamtzeit:** ~8-15 Minuten ### Schritt 3: Deployment auf Staging verifizieren **Code-Deployment:** ```bash ssh deploy@94.16.110.151 cd /home/deploy/michaelschiemer/current git log -1 # Sollte Test-Commit zeigen git branch # Sollte auf staging sein ``` **Erwartet:** - [ ] Letzter Commit ist der Test-Commit - [ ] Branch ist `staging` **Composer Dependencies:** ```bash cd ~/deployment/stacks/staging docker compose -f docker-compose.base.yml -f docker-compose.staging.yml \ exec staging-app test -f /var/www/html/vendor/autoload.php && echo "EXISTS" ``` **Erwartet:** - [ ] Output: `EXISTS` **Image-Deployment:** ```bash docker compose -f docker-compose.base.yml -f docker-compose.staging.yml ps ``` **Erwartet:** - [ ] Alle Container: Up (healthy) - [ ] Image Tag entspricht dem gebauten Image **Health-Check:** ```bash curl -f https://staging.michaelschiemer.de/health ``` **Erwartet:** - [ ] HTTP 200 OK - [ ] JSON Response mit Status **Application Test:** - [ ] Staging URL erreichbar: `https://staging.michaelschiemer.de` - [ ] Application läuft korrekt - [ ] Keine Fehler in Browser Console ### Schritt 4: Fehlerbehebung (falls notwendig) **Falls Jobs fehlschlagen:** 1. **Logs in Gitea Actions UI prüfen** - Klicke auf fehlgeschlagenen Job - Scrolle durch Logs - Suche nach Fehlermeldungen 2. **Container Logs auf Server prüfen** ```bash ssh deploy@94.16.110.151 cd ~/deployment/stacks/staging docker compose -f docker-compose.base.yml -f docker-compose.staging.yml logs ``` 3. **Bekannte Probleme:** - Siehe: `deployment/docs/troubleshooting/initial-deployment-issues.md` - Siehe: `deployment/docs/guides/pipeline-testing-guide.md` --- ## Production Pipeline Test **⚠️ WICHTIG:** Nur nach erfolgreichem Staging-Test durchführen! ### Schritt 1: Test-Commit auf main erstellen ```bash # Auf main Branch wechseln git checkout main git pull origin main # Merge staging (oder direkter Commit für Test) echo "# CI/CD Pipeline Test Production - $(date)" >> README.md git add README.md git commit -m "test: CI/CD pipeline production test" git push origin main ``` **Erwartet:** - [ ] Push erfolgreich - [ ] Keine Git-Fehler ### Schritt 2: Pipeline in Gitea Actions beobachten **URL:** `https://git.michaelschiemer.de/michael/michaelschiemer/actions` **Erwartete Jobs (in Reihenfolge):** 1. **changes** - Determine Build Necessity - [ ] Job startet innerhalb von 1-2 Minuten - [ ] Job läuft erfolgreich durch 2. **runtime-base** - Build Runtime Base Image (falls notwendig) - [ ] Job startet nach `changes` - [ ] Docker Build läuft erfolgreich 3. **test** - Run Tests & Quality Checks - [ ] Job startet nach `changes` - [ ] Tests laufen erfolgreich 4. **build** - Build Docker Image - [ ] Job startet nach `runtime-base` und `test` - [ ] Docker Build läuft erfolgreich - [ ] Image wird zur Registry gepusht 5. **deploy-production** - Auto-deploy to Production - [ ] Job startet nach `build` - [ ] SSH-Verbindung erfolgreich - [ ] Code-Deployment erfolgreich - [ ] Composer Dependencies Installation erfolgreich - [ ] Image-Deployment erfolgreich - [ ] Health-Check erfolgreich **Gesamtzeit:** ~8-15 Minuten ### Schritt 3: Deployment auf Production verifizieren **Code-Deployment:** ```bash ssh deploy@94.16.110.151 cd /home/deploy/michaelschiemer/current git log -1 # Sollte Test-Commit zeigen git branch # Sollte auf main sein ``` **Erwartet:** - [ ] Letzter Commit ist der Test-Commit - [ ] Branch ist `main` **Composer Dependencies:** ```bash cd ~/deployment/stacks/production docker compose -f docker-compose.base.yml -f docker-compose.production.yml \ exec php test -f /var/www/html/vendor/autoload.php && echo "EXISTS" ``` **Erwartet:** - [ ] Output: `EXISTS` **Image-Deployment:** ```bash docker compose -f docker-compose.base.yml -f docker-compose.production.yml ps ``` **Erwartet:** - [ ] Alle Container: Up (healthy) - [ ] Image Tag entspricht dem gebauten Image **Health-Check:** ```bash curl -f https://michaelschiemer.de/health ``` **Erwartet:** - [ ] HTTP 200 OK - [ ] JSON Response mit Status **Application Test:** - [ ] Production URL erreichbar: `https://michaelschiemer.de` - [ ] Application läuft korrekt - [ ] Keine Fehler in Browser Console ### Schritt 4: Rollback-Test (Optional) **Falls Deployment fehlschlägt oder Probleme auftreten:** ```bash cd deployment/ansible ansible-playbook -i inventory/production.yml \ playbooks/rollback.yml \ --vault-password-file secrets/.vault_pass ``` **Erwartet:** - [ ] Rollback erfolgreich - [ ] Vorherige Version läuft wieder --- ## Test-Zusammenfassung ### Staging Test - [ ] Alle Jobs erfolgreich - [ ] Code-Deployment erfolgreich - [ ] Composer Dependencies installiert - [ ] Image-Deployment erfolgreich - [ ] Health-Check erfolgreich - [ ] Application läuft korrekt ### Production Test - [ ] Alle Jobs erfolgreich - [ ] Code-Deployment erfolgreich - [ ] Composer Dependencies installiert - [ ] Image-Deployment erfolgreich - [ ] Health-Check erfolgreich - [ ] Application läuft korrekt --- ## Nächste Schritte nach erfolgreichem Test 1. **Dokumentation aktualisieren** - Status-Dokumente aktualisieren - Bekannte Probleme dokumentieren - Testergebnisse dokumentieren 2. **Backup-Playbook testen** - Siehe: `deployment/docs/guides/backup-and-rollback-guide.md` 3. **Monitoring verifizieren** - Health-Checks funktionieren - Logs sind verfügbar - Metriken werden gesammelt --- ## Troubleshooting ### Pipeline startet nicht - Prüfe Gitea Runner Status - Prüfe Workflow-Datei Syntax - Prüfe Branch-Trigger ### Registry Login fehlschlägt - Prüfe `REGISTRY_USER` und `REGISTRY_PASSWORD` Secrets - Teste Registry-Login manuell ### SSH-Verbindung fehlschlägt - Prüfe `SSH_PRIVATE_KEY` Secret - Prüfe SSH-Zugriff manuell ### Health-Check fehlschlägt - Prüfe Container Status - Prüfe Container Logs - Prüfe Application Logs **Weitere Hilfe:** - `deployment/docs/troubleshooting/initial-deployment-issues.md` - `deployment/docs/guides/pipeline-testing-guide.md`