- Remove middleware reference from Gitea Traefik labels (caused routing issues) - Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s) - Add explicit service reference in Traefik labels - Fix intermittent 504 timeouts by improving PostgreSQL connection handling Fixes Gitea unreachability via git.michaelschiemer.de
9.0 KiB
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
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 BenutzernameREGISTRY_PASSWORD- Docker Registry PasswortSSH_PRIVATE_KEY- SSH Private Key für Production-ServerANSIBLE_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:
cd deployment/gitea-runner
docker compose ps
Erwartet:
gitea-runner: Upgitea-runner-dind: Up
Staging Pipeline Test
Schritt 1: Test-Commit erstellen
# 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):
-
changes - Determine Build Necessity
- Job startet innerhalb von 1-2 Minuten
- Job läuft erfolgreich durch
- Output zeigt:
needs_build=true(oderfalsewenn nur Docs geändert)
-
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
- Job startet nach
-
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
- Job startet nach
-
build - Build Docker Image (nur wenn
needs_build=true)- Job startet nach
runtime-baseundtest - Docker Build läuft erfolgreich
- Image wird mit Tags gepusht:
latest,git-<sha>,<sha>-<timestamp> - Output zeigt Image URL
- Job startet nach
-
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
- Job startet nach
Gesamtzeit: ~8-15 Minuten
Schritt 3: Deployment auf Staging verifizieren
Code-Deployment:
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:
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:
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:
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:
-
Logs in Gitea Actions UI prüfen
- Klicke auf fehlgeschlagenen Job
- Scrolle durch Logs
- Suche nach Fehlermeldungen
-
Container Logs auf Server prüfen
ssh deploy@94.16.110.151 cd ~/deployment/stacks/staging docker compose -f docker-compose.base.yml -f docker-compose.staging.yml logs -
Bekannte Probleme:
- Siehe:
deployment/docs/troubleshooting/initial-deployment-issues.md - Siehe:
deployment/docs/guides/pipeline-testing-guide.md
- Siehe:
Production Pipeline Test
⚠️ WICHTIG: Nur nach erfolgreichem Staging-Test durchführen!
Schritt 1: Test-Commit auf main erstellen
# 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):
-
changes - Determine Build Necessity
- Job startet innerhalb von 1-2 Minuten
- Job läuft erfolgreich durch
-
runtime-base - Build Runtime Base Image (falls notwendig)
- Job startet nach
changes - Docker Build läuft erfolgreich
- Job startet nach
-
test - Run Tests & Quality Checks
- Job startet nach
changes - Tests laufen erfolgreich
- Job startet nach
-
build - Build Docker Image
- Job startet nach
runtime-baseundtest - Docker Build läuft erfolgreich
- Image wird zur Registry gepusht
- Job startet nach
-
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
- Job startet nach
Gesamtzeit: ~8-15 Minuten
Schritt 3: Deployment auf Production verifizieren
Code-Deployment:
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:
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:
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:
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:
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
-
Dokumentation aktualisieren
- Status-Dokumente aktualisieren
- Bekannte Probleme dokumentieren
- Testergebnisse dokumentieren
-
Backup-Playbook testen
- Siehe:
deployment/docs/guides/backup-and-rollback-guide.md
- Siehe:
-
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_USERundREGISTRY_PASSWORDSecrets - Teste Registry-Login manuell
SSH-Verbindung fehlschlägt
- Prüfe
SSH_PRIVATE_KEYSecret - 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.mddeployment/docs/guides/pipeline-testing-guide.md