docs: ajout dossier docs-bonne-pratiqueCI

Récap complet de l'infra CI sonic/openus : Gitea, Woodpecker server/agent,
Dependency-Track, tips Woodpecker next, checklist nouvelle app.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
syoul
2026-03-20 13:36:22 +01:00
parent 0aefbe012a
commit 4e02e59614
4 changed files with 734 additions and 0 deletions

View File

@@ -0,0 +1,121 @@
# Infra CI — Gitea, Woodpecker server, Woodpecker agent
---
## Gitea (`git.open.us.org`)
Forge Git. Héberge les dépôts et émet les webhooks vers Woodpecker.
### Contrainte critique : dépôt public obligatoire
Woodpecker injecte le token OAuth de l'utilisateur pour `git clone` (via netrc) uniquement
pour les repos marqués `private=true` dans sa DB. Ce token est au format **JWT** (`eyJhbGci...`)
— accepté par l'API Gitea (Bearer) mais **rejeté pour git over HTTPS** (Basic auth).
Résultat : exit 128 "could not read Username" au step `clone`.
**Règle** : rendre le dépôt **public sur Gitea**. Le clone se fait anonymement, sans token.
Le dépôt public ne pose aucun problème de sécurité si aucun secret n'est committé
(les secrets sont dans Woodpecker Secrets et dans `.gitignore`).
Alternative si le dépôt doit rester privé : remplacer le token JWT par un Personal Access
Token (PAT) Gitea (format hex) directement dans la DB Woodpecker :
```bash
PGPASSWORD=<pw> psql -h localhost -U woodpecker woodpecker -c \
"UPDATE users SET access_token='<PAT-hex>', refresh_token='', expiry=9999999999 WHERE login='syoul';"
sudo systemctl restart woodpecker
```
### Configurer un nouveau dépôt
1. Créer le dépôt sur `git.open.us.org`
2. Le rendre **public** (Settings > Danger Zone > Visibility)
3. Woodpecker détecte automatiquement les dépôts Gitea de l'utilisateur connecté via OAuth
---
## Woodpecker server (`open.us.org`)
Orchestre les pipelines, expose l'UI et l'API. Tourne en **systemd** (pas Docker).
```
Service : woodpecker (systemd)
Config : /etc/woodpecker/woodpecker.env (ou /etc/default/woodpecker)
DB : PostgreSQL localhost:5432/woodpecker
user: woodpecker, pw: voir DB
```
Variables d'environnement clés :
```env
WOODPECKER_DATABASE_DRIVER=postgres
WOODPECKER_GITEA_URL=https://git.open.us.org
WOODPECKER_GITEA_CLIENT=<oauth-client-id>
WOODPECKER_GITEA_SECRET=<oauth-secret>
WOODPECKER_AGENT_SECRET=<shared-secret-avec-agent>
```
### Activer un dépôt dans Woodpecker
1. UI Woodpecker > `+` (Add repository) > sélectionner le dépôt Gitea
2. Woodpecker installe un webhook sur Gitea automatiquement
3. Les secrets se configurent dans **Settings > Secrets** du dépôt
---
## Woodpecker agent (sonic)
Exécute les steps de pipeline dans des containers Docker sur sonic.
Tourne en Docker (container `woodpecker-agent`).
```
Container : woodpecker-agent
Config : variables d'env dans docker-compose ou .env
Socket : /var/run/docker.sock (monté pour lancer les steps)
```
Variables d'environnement clés :
```env
WOODPECKER_SERVER=<adresse-du-server>:9000 # gRPC
WOODPECKER_AGENT_SECRET=<shared-secret> # doit correspondre au server
WOODPECKER_MAX_WORKFLOWS=4 # parallélisme
```
### Workspace des steps
Chaque pipeline a un **workspace** (dossier partagé entre tous ses steps).
- Le workspace est monté dans chaque step container
- `/tmp` n'est **pas** partagé entre steps — utiliser le workspace (`.reports/`, `.env.deploy`, etc.)
- Le CWD initial de chaque step est la racine du workspace (= racine du dépôt cloné)
### Volumes montés disponibles sur sonic
| Chemin hôte | Usage |
|---|---|
| `/var/run/docker.sock` | Contrôle Docker depuis un step |
| `/opt/prestashop` | Données de déploiement PrestaShop |
| `/home/syoul/trivy-cache` | Cache DB CVE Trivy (~200 Mo, évite re-téléchargement) |
> `/opt/trivy-cache` nécessite sudo (non disponible) — utiliser `/home/syoul/trivy-cache`.
---
## Dependency-Track (`dtrack.syoul.fr`)
Plateforme SBOM centralisée. Reçoit les SBOM CycloneDX via API, surveille les CVE en continu.
Déployé sur sonic via Docker Compose dans `/opt/dtrack/`.
### Créer et configurer le token API
1. `https://dtrack.syoul.fr` → login `admin` / `admin` → changer le mot de passe
2. Administration > Access Management > Teams > **Automation**
3. Onglet **Permissions** : ajouter `BOM_UPLOAD` + `PROJECT_CREATION`
4. Onglet **API Keys** > `+` → copier la clé
5. Woodpecker UI > dépôt > Settings > Secrets > `dependency_track_token` → coller la clé
### Secret Woodpecker requis
| Secret | Valeur |
|---|---|
| `dependency_track_token` | API key de l'équipe Automation |
Voir [../docs-sbom/integration-nouvelle-app.md](../docs-sbom/integration-nouvelle-app.md)
pour les 3 steps SBOM à copier dans la pipeline.