Files
michaelschiemer/deployment/docs/guides/pipeline-test-checklist.md
Michael Schiemer 36ef2a1e2c
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
fix: Gitea Traefik routing and connection pool optimization
- 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
2025-11-09 14:46:15 +01:00

357 lines
9.0 KiB
Markdown

# 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-<sha>`, `<sha>-<timestamp>`
- [ ] 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`