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>
4.3 KiB
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 :
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
- Créer le dépôt sur
git.open.us.org - Le rendre public (Settings > Danger Zone > Visibility)
- 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 :
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
- UI Woodpecker >
+(Add repository) > sélectionner le dépôt Gitea - Woodpecker installe un webhook sur Gitea automatiquement
- 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 :
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
/tmpn'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-cachené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
https://dtrack.syoul.fr→ loginadmin/admin→ changer le mot de passe- Administration > Access Management > Teams > Automation
- Onglet Permissions : ajouter
BOM_UPLOAD+PROJECT_CREATION - Onglet API Keys >
+→ copier la clé - 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 pour les 3 steps SBOM à copier dans la pipeline.