# CI/CD Pipeline Testing Guide **Stand:** 2025-11-07 **Status:** Anleitung für End-to-End Pipeline-Tests --- ## Übersicht Dieses Dokument erklärt, wie die CI/CD Pipeline getestet wird. Die Tests sollten sowohl für Staging als auch für Production durchgeführt werden. **📖 Verwandte Dokumentation:** - [Pipeline Test Checklist](./pipeline-test-checklist.md) ⭐ - Detaillierte Schritt-für-Schritt Checkliste - [CI/CD Workflow Guide](./cicd-workflow-guide.md) - Workflow-Dokumentation - [CI/CD Status](../status/ci-cd-status.md) - Aktueller Status - [Troubleshooting Guide](../troubleshooting/initial-deployment-issues.md) - Probleme und Lösungen **🔧 Test-Scripts:** - `deployment/scripts/test-pipeline-prerequisites.sh` - Prüft alle Voraussetzungen für Pipeline-Tests --- ## Voraussetzungen prüfen **Schnellcheck mit Script:** ```bash cd /home/michael/dev/michaelschiemer ./deployment/scripts/test-pipeline-prerequisites.sh ``` Dieses Script prüft automatisch alle Voraussetzungen und gibt eine Zusammenfassung aus. ### 1. Secrets konfiguriert **Erforderliche Secrets in Gitea:** - ✅ `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 **Prüfen:** ``` https://git.michaelschiemer.de/michael/michaelschiemer/settings/secrets/actions ``` ### 2. Gitea Runner läuft **Prüfen:** ```bash cd deployment/gitea-runner docker compose ps ``` **Erwartet:** - `gitea-runner`: Up - `gitea-runner-dind`: Up **In Gitea UI prüfen:** ``` https://git.michaelschiemer.de/admin/actions/runners ``` Runner sollte als "Idle" oder "Active" angezeigt werden. ### 3. Application Stack läuft **Prüfen:** ```bash ssh deploy@94.16.110.151 cd ~/deployment/stacks/production docker compose -f docker-compose.base.yml -f docker-compose.production.yml ps ``` **Erwartet:** - Alle Container: Up (healthy) --- ## Staging Pipeline Test ### Schritt 1: Test-Commit erstellen ```bash # Auf staging Branch git checkout staging git pull origin staging # Kleine Änderung echo "# Test CI/CD Pipeline - $(date)" >> README.md git add README.md git commit -m "test: CI/CD pipeline test" git push origin staging ``` ### Schritt 2: Pipeline beobachten **Gitea Actions UI:** ``` https://git.michaelschiemer.de/michael/michaelschiemer/actions ``` **Erwartete Jobs:** 1. **changes** - Prüft ob Build notwendig ist 2. **test** - Führt Tests aus 3. **build** - Baut Docker Image 4. **deploy-staging** - Deploy zu Staging ### Schritt 3: Verifikation **Code-Deployment:** ```bash ssh deploy@94.16.110.151 cd /home/deploy/michaelschiemer/current git log -1 # Sollte Test-Commit zeigen ``` **Composer Dependencies:** ```bash docker compose -f docker-compose.base.yml -f docker-compose.production.yml \ exec php test -f /var/www/html/vendor/autoload.php && echo "EXISTS" ``` **Image-Deployment:** ```bash docker compose -f docker-compose.base.yml -f docker-compose.production.yml \ ps # Container sollten mit neuem Image laufen ``` **Health-Check:** ```bash curl -f https://staging.michaelschiemer.de/health ``` ### Schritt 4: Fehler beheben **Falls Fehler auftreten:** 1. Logs in Gitea Actions UI prüfen 2. Container Logs prüfen: `docker compose logs` 3. Siehe [Troubleshooting Guide](../troubleshooting/initial-deployment-issues.md) --- ## Production Pipeline Test ### Schritt 1: Test-Commit erstellen **Wichtig:** Nur nach erfolgreichem Staging-Test! ```bash # Auf main Branch git checkout main git pull origin main # Merge staging (oder direkter Commit für Test) echo "# Test CI/CD Pipeline Production - $(date)" >> README.md git add README.md git commit -m "test: CI/CD pipeline production test" git push origin main ``` ### Schritt 2: Pipeline beobachten **Gitea Actions UI:** ``` https://git.michaelschiemer.de/michael/michaelschiemer/actions ``` **Erwartete Jobs:** 1. **changes** - Prüft ob Build notwendig ist 2. **test** - Führt Tests aus 3. **build** - Baut Docker Image 4. **deploy-production** - Deploy zu Production ### Schritt 3: Verifikation **Gleiche Checks wie Staging:** - Code-Deployment verifizieren - Composer Dependencies verifizieren - Image-Deployment verifizieren - Health-Check durchführen **Production URL:** ```bash curl -f https://michaelschiemer.de/health ``` ### Schritt 4: Rollback-Test (Optional) **Falls Deployment fehlschlägt:** ```bash cd deployment/ansible ansible-playbook -i inventory/production.yml \ playbooks/rollback.yml \ --vault-password-file secrets/.vault_pass ``` --- ## Manueller Workflow-Test ### Via Gitea UI **Schritte:** 1. Gehe zu: `https://git.michaelschiemer.de/michael/michaelschiemer/actions` 2. Wähle: "Manual Deployment" 3. Klicke: "Run workflow" 4. Wähle: - Environment: `staging` oder `production` - Image Tag: Optional (z.B. `latest` oder `git-abc1234`) - Branch: Optional 5. Klicke: "Run workflow" 6. Beobachte Logs --- ## Checkliste für erfolgreichen Test ### Staging Test - [ ] Test-Commit gepusht - [ ] Pipeline gestartet - [ ] Alle Jobs erfolgreich: - [ ] changes - [ ] test - [ ] build - [ ] deploy-staging - [ ] Code-Deployment erfolgreich - [ ] Composer Dependencies installiert - [ ] Image-Deployment erfolgreich - [ ] Health-Check erfolgreich - [ ] Application läuft korrekt ### Production Test - [ ] Staging Test erfolgreich - [ ] Test-Commit auf main gepusht - [ ] Pipeline gestartet - [ ] Alle Jobs erfolgreich: - [ ] changes - [ ] test - [ ] build - [ ] deploy-production - [ ] Code-Deployment erfolgreich - [ ] Composer Dependencies installiert - [ ] Image-Deployment erfolgreich - [ ] Health-Check erfolgreich - [ ] Application läuft korrekt --- ## Bekannte Probleme & Workarounds ### Problem: Pipeline startet nicht **Ursache:** Runner läuft nicht oder ist nicht registriert **Lösung:** ```bash cd deployment/gitea-runner docker compose restart gitea-runner # Prüfe Runner-Status in Gitea UI ``` ### Problem: Code-Deployment schlägt fehl **Ursache:** Git Repository existiert nicht auf Server **Lösung:** ```bash # Initial Deployment durchführen ansible-playbook -i inventory/production.yml \ playbooks/sync-application-code.yml \ --vault-password-file secrets/.vault_pass ``` ### Problem: Image-Deployment schlägt fehl **Ursache:** Registry Login fehlgeschlagen **Lösung:** - Prüfe `REGISTRY_USER` und `REGISTRY_PASSWORD` Secrets - Teste Registry Login manuell ### Problem: Health-Check schlägt fehl **Ursache:** Container starten nicht oder Application hat Fehler **Lösung:** - Prüfe Container Status - Prüfe Container Logs - Siehe [Troubleshooting Guide](../troubleshooting/initial-deployment-issues.md) --- ## Referenz - [CI/CD Workflow Guide](./cicd-workflow-guide.md) - Workflow-Dokumentation - [CI/CD Status](../status/ci-cd-status.md) - Aktueller Status - [Troubleshooting Guide](../troubleshooting/initial-deployment-issues.md) - Probleme und Lösungen - [Backup & Rollback Guide](./backup-and-rollback-guide.md) - Rollback-Prozess