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:
121
docs-bonne-pratiqueCI/infra-ci.md
Normal file
121
docs-bonne-pratiqueCI/infra-ci.md
Normal 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.
|
||||
Reference in New Issue
Block a user