# 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**: ⚠️ Workflow nutzt Vault, aber kein Secret dafür

**Problem:**
- Der Workflow `update-production-secrets.yml` benötigt ein Vault-Passwort
- Aktuell wird es als Workflow-Input eingegeben (manuell)
- Für automatisiertes Deployment sollte es als Secret vorliegen

**Lösung:**
- [ ] Optional: `ANSIBLE_VAULT_PASSWORD` als Secret hinzufügen (nur wenn automatisiert)
- [ ] Oder: Manuelles Eingeben beim Workflow-Trigger ist ausreichend

---

### 4. 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` ✅
  - [ ] `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)

### Pipeline-Test
- [ ] Test-Commit gepusht oder Workflow manuell getriggert
- [ ] Alle Jobs erfolgreich:
  - [ ] Tests
  - [ ] Build
  - [ ] Deploy
- [ ] Deployment erfolgreich auf Production
- [ ] Health-Check erfolgreich
- [ ] 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: 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 manuell triggern (NÄCHSTER SCHRITT)
```
1. Gehe zu: https://git.michaelschiemer.de/michael/michaelschiemer/actions
2. Wähle: "Production Deployment Pipeline"
3. Klicke: "Run workflow"
4. Wähle Branch: main
5. Optionale Einstellungen:
   - skip_tests: false (Tests sollen laufen)
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!**

- ✅ Secrets konfiguriert
- ✅ Runner läuft und ist registriert
- ✅ Workflows sind vorhanden
- ⚠️ **Nächster Schritt:** Pipeline testen!

**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
  ```
