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

9.8 KiB

CI/CD Pipeline Status

Stand: CI/CD Pipeline ist vollständig konfiguriert und bereit zum Testen!

📖 Dokumentation

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:

# 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:
    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

  • Gitea Repository Secrets konfiguriert:
    • REGISTRY_USER
    • REGISTRY_PASSWORD
    • SSH_PRIVATE_KEY
    • ANSIBLE_VAULT_PASSWORD (für automatisiertes Deployment)
    • GITEA_TOKEN (optional)

Gitea Runner

  • Runner Registration Token von Gitea abgerufen
  • deployment/gitea-runner/.env erstellt und konfiguriert
  • Runner registriert
  • Runner läuft (docker compose up -d)
  • Runner sichtbar in Gitea UI als "Idle" oder "Active" (bitte manuell prüfen)

Code-Deployment Integration

  • deploy-application-code.yml in Workflows integriert
  • install-composer-dependencies.yml in Workflows integriert
  • deploy-image.yml in Workflows integriert
  • 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

# Secrets in Gitea konfigurieren:
https://git.michaelschiemer.de/michael/michaelschiemer/settings/secrets/actions

Runner Setup

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:

# Prüfe alle Voraussetzungen
./deployment/scripts/test-pipeline-prerequisites.sh

Detaillierte Test-Anleitung: Siehe Pipeline Test Checklist 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)

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:
    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:
    ssh -i ~/.ssh/production deploy@94.16.110.151