33 lines
1.4 KiB
Markdown
33 lines
1.4 KiB
Markdown
# 02 — Fluxo GitOps (do push ao container no ar)
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant Dev as Dev (VPS4)
|
|
participant Gitea as Gitea (VPS3)
|
|
participant Listener as Listener (VPS4:porta)
|
|
participant Build as deploy-*.sh (VPS4)
|
|
participant Prod as Docker (VPS1)
|
|
|
|
Dev->>Gitea: git push origin main
|
|
Gitea->>Listener: POST /webhook?token=...
|
|
Listener->>Listener: valida token + trava de concorrência
|
|
Listener->>Gitea: status = pending
|
|
Listener->>Build: executa deploy-*.sh (background)
|
|
Build->>Gitea: git fetch & reset --hard
|
|
Build->>Build: build / version bump
|
|
Build->>Prod: rsync (artefato ou fonte)
|
|
Build->>Prod: ssh docker compose up -d [--build]
|
|
Build->>Gitea: git push (chore(deploy): bump version)
|
|
Note over Listener: commit de bump é IGNORADO (anti-loop)
|
|
Build-->>Listener: exit 0
|
|
Listener->>Gitea: status = success
|
|
```
|
|
|
|
## Pontos importantes do listener
|
|
|
|
- **Resposta 202 imediata**: evita timeout do webhook do Gitea; o build roda em background.
|
|
- **Trava `isBuilding`**: retorna `429` se já houver build rodando (sem deploys concorrentes).
|
|
- **Anti-loop de CI**: commits cuja mensagem casa com `^chore\(deploy\): bump version` são
|
|
**ignorados** — senão o `git push` do bump dispararia um novo deploy infinitamente.
|
|
- **Status no Gitea**: `pending` → `success`/`failure`, aparecendo o ✔/✘ ao lado do commit.
|