docs: document pipeline fix v6 confirmation and root cause overview
Added a session log confirming the resolution of pipeline issues in iteration v6, including successful sequential builds and the use of direct `config.json` for Docker credentials. Detailed the root causes (registry proxy timeouts and RAM-OOM) and the implemented fixes, ensuring stability and reliable internal registry access.
This commit is contained in:
parent
cdb01a7b4c
commit
e29d7b3db8
|
|
@ -78,7 +78,7 @@ BuildKit → http://git.mo-code.at:80
|
|||
| v3 | socat nicht verfügbar | iptables DNAT | Permission denied |
|
||||
| v4 | iptables — kein sudo-Recht | buildkitd Mirror (kein Root) | HTTP→HTTPS Fehler |
|
||||
| v5 | login-action: HTTP→HTTPS-Konflikt | daemon.json + systemctl restart | ❌ RAM-OOM + unklar |
|
||||
| **v6** | RAM-OOM + Daemon-Neustart komplex | **config.json direkt + max-parallel:1** | ✅ erwartet grün |
|
||||
| **v6** | RAM-OOM + Daemon-Neustart komplex | **config.json direkt + max-parallel:1** | ✅ **BESTÄTIGT GRÜN** |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
121
docs/99_Journal/2026-03-06_Session_Log_Pipeline_Gruen.md
Normal file
121
docs/99_Journal/2026-03-06_Session_Log_Pipeline_Gruen.md
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
---
|
||||
type: journal
|
||||
status: ACTIVE
|
||||
owner: Lead Architect
|
||||
date: 2026-03-06
|
||||
---
|
||||
|
||||
# Session Log — Pipeline vollständig grün ✅
|
||||
|
||||
**Datum:** 06.03.2026
|
||||
**Agent:** 🏗️ Lead Architect
|
||||
**Thema:** CI/CD Pipeline — alle 4 Jobs erfolgreich bestätigt
|
||||
|
||||
---
|
||||
|
||||
## Ergebnis
|
||||
|
||||
Alle vier Build-and-Push-Jobs sind grün:
|
||||
|
||||
| Job | Status |
|
||||
|-----|--------|
|
||||
| `api-gateway` (backend/infrastructure/gateway/Dockerfile) | ✅ grün |
|
||||
| `ping-service` (backend/services/ping/Dockerfile) | ✅ grün |
|
||||
| `web-app` (config/docker/caddy/web-app/Dockerfile) | ✅ grün |
|
||||
| `keycloak` (config/docker/keycloak/Dockerfile) | ✅ grün |
|
||||
|
||||
---
|
||||
|
||||
## Root Causes (Gesamtüberblick)
|
||||
|
||||
Die Pipeline hatte **zwei voneinander unabhängige Probleme**, die zusammen alle Pushes verhinderten:
|
||||
|
||||
### Problem 1: Pangolin-Tunnel als Registry-Proxy (Hauptursache)
|
||||
|
||||
Der Gitea-Runner (VM 102, `10.0.0.23`) kannte `git.mo-code.at` nur über den
|
||||
Pangolin-Tunnel (öffentliche DNS-Auflösung → Pangolin → HTTPS → Gitea).
|
||||
|
||||
Bei großen Image-Layern (70+ Sekunden Upload) timeoutet Pangolin → `502 Bad Gateway`.
|
||||
|
||||
**Lösung (v6):** Credentials direkt in `~/.docker/config.json` schreiben (kein Daemon-Ping),
|
||||
buildkitd via `config-inline` auf `http://10.0.0.22:3000` zeigen (intern, kein Pangolin).
|
||||
|
||||
### Problem 2: RAM-OOM auf 16 GB Runner
|
||||
|
||||
4 Matrix-Jobs liefen parallel. Jeder Job: Gradle-Build + Docker-Buildx = 3–4 GB RAM.
|
||||
Zusammen: 15+ GB → RAM-Erschöpfung → Builds crashed/hingen.
|
||||
|
||||
**Lösung (v6):** `max-parallel: 1` — Jobs laufen sequenziell, Runner bleibt stabil.
|
||||
|
||||
---
|
||||
|
||||
## Finale Lösung (v6) — die funktionierenden Kern-Änderungen
|
||||
|
||||
```yaml
|
||||
strategy:
|
||||
max-parallel: 1 # ← RAM-Schutz: kein OOM mehr
|
||||
|
||||
steps:
|
||||
- name: Registry-Credentials konfigurieren (kein Daemon-Kontakt)
|
||||
run: |
|
||||
mkdir -p ~/.docker
|
||||
printf '{"auths":{"10.0.0.22:3000":{"auth":"%s"}}}' \
|
||||
"$(printf '%s:%s' '${{ secrets.REGISTRY_USER }}' '${{ secrets.REGISTRY_TOKEN }}' | base64 -w0)" \
|
||||
> ~/.docker/config.json
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
config-inline: |
|
||||
[registry."git.mo-code.at"]
|
||||
mirrors = ["http://10.0.0.22:3000"]
|
||||
http = true
|
||||
insecure = true
|
||||
[registry."10.0.0.22:3000"]
|
||||
http = true
|
||||
insecure = true
|
||||
```
|
||||
|
||||
**Traffic-Weg (intern, kein Pangolin):**
|
||||
```
|
||||
BuildKit → push git.mo-code.at/mocode-software/meldestelle/<image>:latest
|
||||
→ buildkitd config-inline Mirror: http://10.0.0.22:3000
|
||||
→ Gitea Registry (HTTP, direkt intern)
|
||||
→ ✅ kein Pangolin, kein Timeout, kein TLS-Konflikt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Warum 6 Iterationen nötig waren
|
||||
|
||||
| Version | Blockiert durch |
|
||||
|---------|----------------|
|
||||
| v1 | Pangolin 502 beim Push großer Layer |
|
||||
| v2 | `socat` nicht im APT-Repo des Runners |
|
||||
| v3 | `iptables` benötigt Root — Runner-User hat kein sudo für iptables |
|
||||
| v4 | buildkitd-Mirror funktioniert für Pulls, nicht für Pushes von `login-action` |
|
||||
| v5 | `systemctl restart docker` benötigt Root + RAM-OOM durch parallele Jobs |
|
||||
| **v6** | **Beide Root Causes gleichzeitig behoben → ✅ grün** |
|
||||
|
||||
---
|
||||
|
||||
## Gelernt
|
||||
|
||||
- **Pangolin ist kein Registry-Proxy** — ausschließlich Pull-Traffic (klein) läuft über Pangolin.
|
||||
Push-Traffic (groß, langsam) muss intern bleiben.
|
||||
- **buildkitd ≠ Docker-Daemon** — beide Prozesse müssen separat konfiguriert werden.
|
||||
`login-action` → Daemon; `build-push-action` → buildkitd.
|
||||
- **`~/.docker/config.json` direkt schreiben** umgeht den Daemon vollständig — kein Ping, kein HTTPS-Test.
|
||||
- **`max-parallel: 1`** ist auf einem 16 GB Runner mit Gradle + Buildx Pflicht.
|
||||
- Permanente Lösung für die Zukunft: `insecure-registries` einmalig in `/etc/docker/daemon.json`
|
||||
auf VM 102 setzen → `login-action` kann wieder normal verwendet werden.
|
||||
|
||||
---
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
1. **Permanent (einmalig auf VM 102):** `/etc/docker/daemon.json` → `insecure-registries: ["10.0.0.22:3000"]`
|
||||
→ dann kann der `config.json`-Workaround durch `docker/login-action` ersetzt werden.
|
||||
2. **Meldestelle-Host:** `.env` mit Server-IP befüllen, Container neu starten, Ping-Service testen.
|
||||
3. **Grafana + Pangolin-URLs** konfigurieren (nächste Session).
|
||||
4. **Ollama + Open WebUI** auf Proxmox LXC einrichten (übernächste Session).
|
||||
Loading…
Reference in New Issue
Block a user