Files
michaelschiemer/deployment/docs/tests/test-git-deployment.md

278 lines
6.9 KiB
Markdown

# Git-basiertes Deployment - Test Anleitung
**Datum:** 2025-01-31
**Status:** ⏳ Ready to Test
---
## ✅ Vorbereitung abgeschlossen
### Implementiert:
-`docker/entrypoint.sh` - Git Clone/Pull Funktionalität
-`Dockerfile.production` - Git + Composer installiert
-`deployment/stacks/application/docker-compose.yml` - Git Environment Variables
-`deployment/ansible/templates/application.env.j2` - Git Template Variablen
-`deployment/ansible/playbooks/sync-code.yml` - Code-Sync Playbook
---
## 🧪 Test-Schritte
### Schritt 1: Image neu bauen (mit Git-Funktionalität)
**Ziel:** Sicherstellen dass Image die Git-Funktionalität enthält
```bash
# Im Projekt-Root
docker build -f Dockerfile.production \
-t registry.michaelschiemer.de/framework:test-git \
.
# Image pushen
docker push registry.michaelschiemer.de/framework:test-git
```
**Prüfen:**
```bash
# Git installiert?
docker run --rm registry.michaelschiemer.de/framework:test-git git --version
# Composer installiert?
docker run --rm registry.michaelschiemer.de/framework:test-git composer --version
# Entrypoint hat Git-Logik?
docker run --rm registry.michaelschiemer.de/framework:test-git cat /usr/local/bin/entrypoint.sh | grep -A 5 "GIT_REPOSITORY_URL"
```
---
### Schritt 2: Git-Variablen in .env setzen (auf Production Server)
**Ziel:** Git-Repository-URL in .env konfigurieren
```bash
# Option A: Via Ansible Playbook (Empfohlen)
cd deployment/ansible
ansible-playbook -i inventory/production.yml \
playbooks/sync-code.yml \
-e "git_repo_url=https://git.michaelschiemer.de/michael/michaelschiemer.git" \
-e "git_branch=main"
```
**Oder manuell auf Production-Server:**
```bash
# SSH zum Production-Server
ssh deploy@94.16.110.151
# .env bearbeiten
cd ~/deployment/stacks/application
nano .env
# Folgende Zeilen hinzufügen:
GIT_REPOSITORY_URL=https://git.michaelschiemer.de/michael/michaelschiemer.git
GIT_BRANCH=main
```
**Wenn Repository privat ist (Token hinzufügen):**
```bash
# Token in .env hinzufügen:
GIT_TOKEN=your_git_token_here
```
---
### Schritt 3: Container mit Git-Variablen starten
**Ziel:** Prüfen ob Container Git Clone/Pull beim Start ausführt
```bash
# Auf Production-Server
cd ~/deployment/stacks/application
# Container neu starten
docker compose restart app
# Oder falls Container noch nicht läuft:
docker compose up -d app
# Logs prüfen (sollte Git Clone/Pull zeigen)
docker logs app --tail 100 | grep -E "(Git|Clone|Pull|✅|❌)"
```
**Erwartete Logs:**
```
📥 Cloning/Pulling code from Git repository...
📥 Cloning repository from https://git.michaelschiemer.de/michael/michaelschiemer.git (branch: main)...
📦 Installing/updating Composer dependencies...
✅ Git sync completed
```
---
### Schritt 4: Code-Verifikation im Container
**Ziel:** Prüfen ob Code tatsächlich im Container ist
```bash
# Auf Production-Server
docker exec app ls -la /var/www/html/ | head -20
# Prüfen ob wichtige Dateien vorhanden sind
docker exec app test -f /var/www/html/composer.json && echo "✅ composer.json vorhanden" || echo "❌ Fehlt"
docker exec app test -d /var/www/html/src && echo "✅ src/ vorhanden" || echo "❌ Fehlt"
docker exec app test -d /var/www/html/.git && echo "✅ .git vorhanden" || echo "❌ Fehlt"
# Prüfen welcher Commit
docker exec app sh -c "cd /var/www/html && git log --oneline -1"
```
**Erwartetes Ergebnis:**
- ✅ Dateien sind im Container
-`.git` Verzeichnis existiert (zeigt dass Git Clone funktioniert hat)
- ✅ Git Commit zeigt aktuellen Stand
---
### Schritt 5: Code-Update testen (Git Pull)
**Ziel:** Prüfen ob `sync-code.yml` Playbook funktioniert
```bash
# Lokal (auf Dev-Machine)
cd deployment/ansible
# Sync-Code Playbook ausführen
ansible-playbook -i inventory/production.yml \
playbooks/sync-code.yml \
-e "git_branch=main"
# Container-Logs prüfen (auf Production-Server)
ssh deploy@94.16.110.151
docker logs app --tail 50 | grep -E "(Git|Pull|✅)"
```
**Erwartetes Ergebnis:**
- ✅ Playbook führt erfolgreich aus
- ✅ Container wird neu gestartet
- ✅ Logs zeigen "🔄 Pulling latest changes from main..."
- ✅ Code wird aktualisiert
---
### Schritt 6: Application Health Check
**Ziel:** Prüfen ob Application nach Git-Sync noch funktioniert
```bash
# Health Check
curl -f https://michaelschiemer.de/health || echo "❌ Health Check fehlgeschlagen"
# Application Test
curl -f https://michaelschiemer.de/ || echo "❌ Application fehlgeschlagen"
```
**Erwartetes Ergebnis:**
- ✅ Health Check erfolgreich
- ✅ Application läuft
---
## 🔧 Troubleshooting
### Problem: Container zeigt keine Git-Logs
**Check 1: Prüfen ob GIT_REPOSITORY_URL gesetzt ist**
```bash
docker exec app env | grep GIT_REPOSITORY_URL
```
**Check 2: Prüfen Entrypoint Script**
```bash
docker exec app cat /usr/local/bin/entrypoint.sh | grep -A 10 "GIT_REPOSITORY_URL"
```
**Check 3: Prüfen ob Git installiert ist**
```bash
docker exec app which git
docker exec app git --version
```
**Lösung:**
- Falls nicht gesetzt: Git-Variablen in .env hinzufügen (siehe Schritt 2)
- Falls Entrypoint fehlt: Image neu bauen (siehe Schritt 1)
- Falls Git fehlt: Image neu bauen mit `git` in Dockerfile
---
### Problem: Git Clone fehlgeschlagen
**Check 1: Repository-Zugriff testen**
```bash
docker exec app git clone --depth 1 https://git.michaelschiemer.de/michael/michaelschiemer.git /tmp/test-clone
```
**Check 2: Logs prüfen**
```bash
docker logs app --tail 100 | grep -i "error\|fail"
```
**Mögliche Ursachen:**
1. Repository nicht erreichbar vom Server
2. Falsche Credentials
3. Branch nicht existiert
4. Network-Probleme
**Lösung:**
- Repository-URL prüfen
- Git-Credentials prüfen (Token/Username+Password)
- Branch-Name prüfen
- Network-Verbindung prüfen
---
### Problem: Composer Install fehlgeschlagen
**Check:**
```bash
docker exec app which composer
docker exec app composer --version
docker exec app sh -c "cd /var/www/html && composer install --no-dev --optimize-autoloader --no-interaction"
```
**Lösung:**
- Falls Composer fehlt: Image neu bauen
- Falls Network-Probleme: Network-Verbindung prüfen
---
## 📋 Test-Checkliste
### Vor Test:
- [ ] Image neu gebaut (mit Git-Funktionalität)
- [ ] Image gepusht zur Registry
- [ ] Git-Repository ist erreichbar vom Production-Server
- [ ] Git-Credentials verfügbar (falls private Repository)
- [ ] .env Datei existiert auf Production-Server
### Während Test:
- [ ] Schritt 1: Image neu bauen ✅
- [ ] Schritt 2: Git-Variablen in .env setzen
- [ ] Schritt 3: Container mit Git-Variablen starten
- [ ] Schritt 4: Code-Verifikation im Container
- [ ] Schritt 5: Code-Update testen (Git Pull)
- [ ] Schritt 6: Application Health Check
### Nach Test:
- [ ] Alle Tests erfolgreich
- [ ] Application läuft korrekt
- [ ] Code ist aktuell aus Git
- [ ] Logs zeigen Git-Operationen
---
## 🚀 Ready to Test!
**Nächster Schritt:** Schritt 1 ausführen (Image neu bauen)
**Vollständiger Test-Plan:** Siehe [GIT_DEPLOYMENT_TEST.md](GIT_DEPLOYMENT_TEST.md)