Files
michaelschiemer/deployment/docs/status/ci-cd-status.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

317 lines
9.8 KiB
Markdown

# CI/CD Pipeline Status
**Stand:** ✅ CI/CD Pipeline ist vollständig konfiguriert und bereit zum Testen!
## 📖 Dokumentation
- **[Code Changes Workflow](../guides/code-change-workflow.md)** - Anleitung: Wie Codeänderungen gepusht und deployed werden
- **[Application Stack Deployment](../reference/application-stack.md)** - Detaillierte Erklärung des Deployment-Prozesses
## ✅ Was bereits vorhanden ist
### 1. Workflow-Dateien
-`.gitea/workflows/production-deploy.yml` - Haupt-Deployment-Pipeline
-`.gitea/workflows/update-production-secrets.yml` - Secrets-Deployment
-`.gitea/workflows/security-scan.yml` - Security-Vulnerability-Scan
### 2. Gitea Runner Setup
-`deployment/gitea-runner/docker-compose.yml` - Runner-Konfiguration
-`deployment/gitea-runner/config.yaml` - Runner-Konfiguration
-`deployment/gitea-runner/register.sh` - Registration-Script
-`deployment/gitea-runner/.env.example` - Environment-Template
### 3. Deployment-Scripts
-`deployment/ansible/playbooks/deploy-update.yml` - Ansible-Deployment
-`deployment/ansible/playbooks/rollback.yml` - Rollback-Playbook
---
## ⚠️ Was noch fehlt
### 1. Gitea Repository Secrets konfigurieren
**Status**: ✅ Secrets sind bereits konfiguriert
**Konfigurierte Secrets:**
-`REGISTRY_USER` - Benutzername für Docker Registry
-`REGISTRY_PASSWORD` - Passwort für Docker Registry
-`SSH_PRIVATE_KEY` - SSH Private Key für Production-Server-Zugriff
- ⚠️ `GITEA_TOKEN` - Optional: Für automatische Issue-Erstellung bei Security-Scans
**Verifiziert:** Alle kritischen Secrets sind bereits in Gitea konfiguriert.
**Hinweis:** Falls `GITEA_TOKEN` noch nicht konfiguriert ist, kann die automatische Issue-Erstellung bei Security-Scans optional später hinzugefügt werden.
**REGISTRY_USER:**
```
admin
```
**REGISTRY_PASSWORD:**
```
<Das Passwort für registry.michaelschiemer.de>
```
*Zu finden in: `deployment/stacks/registry/auth/htpasswd` oder manuell gesetzt*
**SSH_PRIVATE_KEY:**
```bash
# SSH Key Inhalt anzeigen
cat ~/.ssh/production
```
*Kompletter Inhalt der Datei inkl. `-----BEGIN OPENSSH PRIVATE KEY-----` und `-----END OPENSSH PRIVATE KEY-----`*
**GITEA_TOKEN (optional):**
```
<Gitea Personal Access Token mit repo-Berechtigung>
```
---
### 2. Gitea Runner registrieren und starten
**Status**: ✅ Runner läuft bereits
**Verifiziert:**
- ✅ Runner ist registriert (`data/.runner` existiert)
- ✅ Runner Container läuft (`gitea-runner` ist "Up")
- ✅ Docker-in-Docker Container läuft (`gitea-runner-dind` ist "Up")
- ✅ Runner hat bereits Tasks ausgeführt (task 1-6 in Logs)
- ✅ Runner Name: `dev-runner-01`
- ✅ Runner Labels: `ubuntu-latest`, `ubuntu-22.04`, `debian-latest`
**Hinweis:**
Die Logs zeigen einige Verbindungsfehler (connection refused, 502 Bad Gateway), was normal sein kann wenn Gitea temporär nicht erreichbar ist. Der Runner funktioniert grundsätzlich und hat bereits Tasks erfolgreich ausgeführt.
**Verifizierung in Gitea:**
- Prüfe Runner-Status in Gitea: `https://git.michaelschiemer.de/admin/actions/runners`
- Runner sollte als "Idle" oder "Active" angezeigt werden
---
### 3. Ansible Vault Password Handling
**Status**: ✅ Workflows verwenden ANSIBLE_VAULT_PASSWORD Secret
**Implementiert:**
-`ANSIBLE_VAULT_PASSWORD` wird als Gitea Secret verwendet
- ✅ Workflows erstellen automatisch Vault Password File aus Secret
- ✅ Fallback: Leeres Password File wenn Secret nicht gesetzt ist
**Konfiguration:**
- Secret Name: `ANSIBLE_VAULT_PASSWORD`
- Verwendung: Workflows erstellen `/tmp/vault_pass` aus Secret
- Optional: Falls Secret nicht gesetzt, wird leeres Password File verwendet (für nicht-verschlüsselte Vaults)
---
### 4. Code-Deployment Integration
**Status**: ✅ Code-Deployment via Ansible in Workflows integriert
**Implementiert:**
-`deploy-application-code.yml` wird in Workflows verwendet
-`install-composer-dependencies.yml` wird nach Code-Deployment ausgeführt
-`deploy-image.yml` wird für Image-Deployment verwendet
- ✅ Production Deployment Workflow verwendet Ansible statt direkter SSH-Befehle
**Workflows aktualisiert:**
-`.gitea/workflows/build-image.yml` - Staging & Production Auto-Deploy
-`.gitea/workflows/manual-deploy.yml` - Manuelles Deployment
### 5. Pipeline End-to-End testen
**Status**: ⚠️ Pipeline ist definiert, aber noch nicht getestet
**Was fehlt:**
- [ ] Test-Commit pushen und Pipeline-Lauf beobachten
- [ ] Fehler beheben falls notwendig
- [ ] Verifizieren dass Deployment funktioniert
**Test-Schritte:**
1. Stelle sicher dass alle Secrets konfiguriert sind
2. Stelle sicher dass Runner läuft
3. Test-Commit erstellen:
```bash
git checkout -b test/cicd-pipeline
# Kleine Änderung machen
echo "# Test CI/CD" >> README.md
git add README.md
git commit -m "test: CI/CD pipeline"
git push origin test/cicd-pipeline
```
4. Oder: Workflow manuell triggern:
- Gehe zu: `https://git.michaelschiemer.de/michael/michaelschiemer/actions`
- Wähle "Production Deployment Pipeline"
- Klicke "Run workflow"
5. Beobachte Logs und prüfe jeden Schritt:
- ✅ Tests laufen erfolgreich
- ✅ Docker Image wird gebaut
- ✅ Image wird zur Registry gepusht
- ✅ Ansible-Deployment läuft
- ✅ Health-Check schlägt erfolgreich durch
---
## 📋 Checkliste für CI/CD Completion
### Vorbereitung
- [x] Gitea Repository Secrets konfiguriert: ✅
- [x] `REGISTRY_USER` ✅
- [x] `REGISTRY_PASSWORD` ✅
- [x] `SSH_PRIVATE_KEY` ✅
- [x] `ANSIBLE_VAULT_PASSWORD` ✅ (für automatisiertes Deployment)
- [ ] `GITEA_TOKEN` (optional)
### Gitea Runner
- [x] Runner Registration Token von Gitea abgerufen ✅
- [x] `deployment/gitea-runner/.env` erstellt und konfiguriert ✅
- [x] Runner registriert ✅
- [x] Runner läuft (`docker compose up -d`) ✅
- [ ] Runner sichtbar in Gitea UI als "Idle" oder "Active" (bitte manuell prüfen)
### Code-Deployment Integration
- [x] `deploy-application-code.yml` in Workflows integriert ✅
- [x] `install-composer-dependencies.yml` in Workflows integriert ✅
- [x] `deploy-image.yml` in Workflows integriert ✅
- [x] Production Deployment Workflow auf Ansible umgestellt ✅
### Pipeline-Test
- [ ] Test-Commit gepusht oder Workflow manuell getriggert
- [ ] Alle Jobs erfolgreich:
- [ ] Tests
- [ ] Build
- [ ] Code-Deployment (Git)
- [ ] Composer Dependencies
- [ ] Image-Deployment
- [ ] Health-Check
- [ ] Deployment erfolgreich auf Production
- [ ] Application läuft korrekt
### Dokumentation
- [ ] Secrets-Setup dokumentiert
- [ ] Runner-Setup dokumentiert
- [ ] Bekannte Probleme/Workarounds dokumentiert
---
## 🎯 Priorisierte Reihenfolge
### Phase 1: Secrets Setup
**Status:** ✅ Abgeschlossen
- Alle kritischen Secrets sind konfiguriert
### Phase 2: Gitea Runner
**Status:** ✅ Abgeschlossen
- Runner läuft und ist registriert
### Phase 3: Code-Deployment Integration
**Status:** ✅ Abgeschlossen
- Code-Deployment via Ansible in Workflows integriert
- Production Deployment Workflow auf Ansible umgestellt
- Ansible Vault Password Handling implementiert
### Phase 4: Pipeline-Test (NÄCHSTER SCHRITT)
**Status:** ⚠️ Ausstehend
1. Test-Workflow ausführen
2. Fehler beheben falls notwendig
3. Production-Deployment verifizieren
---
## 📝 Quick Reference
### Secrets Setup
```bash
# Secrets in Gitea konfigurieren:
https://git.michaelschiemer.de/michael/michaelschiemer/settings/secrets/actions
```
### Runner Setup
```bash
cd deployment/gitea-runner
cp .env.example .env
# Token von https://git.michaelschiemer.de/admin/actions/runners eintragen
./register.sh
docker compose up -d
```
### Pipeline testen (NÄCHSTER SCHRITT)
**Vorbereitung:**
```bash
# Prüfe alle Voraussetzungen
./deployment/scripts/test-pipeline-prerequisites.sh
```
**Detaillierte Test-Anleitung:**
Siehe [Pipeline Test Checklist](../guides/pipeline-test-checklist.md) für Schritt-für-Schritt Anleitung.
**Pipeline manuell triggern:**
```
1. Gehe zu: https://git.michaelschiemer.de/michael/michaelschiemer/actions
2. Wähle: "Build & Deploy Image"
3. Klicke: "Run workflow"
4. Wähle Branch: staging (für Staging-Test) oder main (für Production-Test)
5. Optionale Einstellungen:
- force_build: false (nur bei Bedarf)
6. Klicke: "Run workflow"
7. Beobachte Logs und prüfe jeden Schritt
```
### Runner-Status prüfen
```
https://git.michaelschiemer.de/admin/actions/runners
```
---
---
## ✅ Aktueller Status
**CI/CD Pipeline ist vollständig konfiguriert und integriert!**
- ✅ Secrets konfiguriert
- ✅ Runner läuft und ist registriert
- ✅ Workflows sind vorhanden
- ✅ Code-Deployment via Ansible integriert
- ✅ Production Deployment Workflow auf Ansible umgestellt
- ✅ Ansible Vault Password Handling implementiert
- ⚠️ **Nächster Schritt:** Pipeline testen! (siehe [Pipeline Testing Guide](../guides/pipeline-testing-guide.md))
**Ready to Deploy:** Die Pipeline kann jetzt getestet werden. Alle Voraussetzungen sind erfüllt.
---
## 🔍 Troubleshooting
### Runner erscheint nicht in Gitea
- Prüfe Runner-Logs: `docker compose logs gitea-runner`
- Prüfe Registration-Token in `.env`
- Re-registrieren: `./unregister.sh && ./register.sh`
### Workflow startet nicht
- Prüfe ob Runner läuft: `docker compose ps`
- Prüfe Runner-Status in Gitea UI
- Prüfe ob Workflow-Datei korrekt ist
### Secrets werden nicht erkannt
- Prüfe Secret-Namen (müssen exakt übereinstimmen)
- Prüfe ob Secrets in korrektem Repository/Organisation sind
- Prüfe ob Secrets nicht abgelaufen sind
### Registry-Login fehlschlägt
- Prüfe `REGISTRY_USER` und `REGISTRY_PASSWORD` Secrets
- Teste Registry-Login manuell:
```bash
docker login registry.michaelschiemer.de -u admin -p <password>
```
### SSH-Verbindung fehlschlägt
- Prüfe `SSH_PRIVATE_KEY` Secret (kompletter Inhalt)
- Prüfe ob Public Key auf Production-Server ist
- Teste SSH-Verbindung manuell:
```bash
ssh -i ~/.ssh/production deploy@94.16.110.151
```