46 lines
2.1 KiB
Markdown
46 lines
2.1 KiB
Markdown
|
|
# CI/CD
|
||
|
|
|
||
|
|
Le brief demandait un `.gitlab-ci.yml`, mais ce dépôt vit sur **Forgejo**,
|
||
|
|
pas GitLab (voir le README racine) : l'équivalent réel est un workflow
|
||
|
|
**Forgejo Actions** (`.forgejo/workflows/ci.yml`), syntaxe compatible
|
||
|
|
GitHub Actions.
|
||
|
|
|
||
|
|
## Runner
|
||
|
|
|
||
|
|
Aucun runner Forgejo Actions n'existait sur ce serveur avant cette
|
||
|
|
phase. Déployé en systemd (`forgejo-runner.service`), conteneur
|
||
|
|
`code.forgejo.org/forgejo/runner:13.1`, socket Docker de l'hôte partagé
|
||
|
|
avec les conteneurs de job (`docker_host: "automount"` dans sa config)
|
||
|
|
plutôt qu'un `docker:dind` imbriqué et privilégié - plus léger sur une
|
||
|
|
machine à 3.7 Go déjà partagée, au prix d'une isolation plus faible
|
||
|
|
(un job de CI a accès au docker de l'hôte). Acceptable ici : instance
|
||
|
|
Forgejo mono-utilisateur, pas un service ouvert à des tiers.
|
||
|
|
|
||
|
|
## Déploiement : un compte dédié, pas root
|
||
|
|
|
||
|
|
Le pipeline ne se connecte jamais en root. Un utilisateur système
|
||
|
|
`deploy` existe uniquement pour :
|
||
|
|
1. recevoir le binaire compilé par `scp` dans `/opt/deploy-staging/` ;
|
||
|
|
2. lancer `sudo /usr/local/sbin/tripoli-deploy.sh <service>` - un
|
||
|
|
script sudo dédié (voir `/etc/sudoers.d/deploy` sur le serveur) qui
|
||
|
|
n'accepte que `tripoli-edge` ou `tripoli-api` comme argument, installe
|
||
|
|
le binaire à l'emplacement attendu et redémarre exactement ce
|
||
|
|
service. Rien d'autre n'est accessible via ce compte.
|
||
|
|
|
||
|
|
La clé privée correspondante est stockée comme secret Forgejo Actions
|
||
|
|
(`DEPLOY_SSH_KEY`), jamais dans ce dépôt.
|
||
|
|
|
||
|
|
## Workflow (`.forgejo/workflows/ci.yml`)
|
||
|
|
|
||
|
|
- `build-and-test` (toute PR et push) : installe Rust via rustup
|
||
|
|
(l'image du job, `node:20-bookworm`, a un rustc système trop ancien
|
||
|
|
pour ce code), `cargo build --workspace`, `cargo test --workspace`,
|
||
|
|
puis `npm ci && npm run build` pour le frontend.
|
||
|
|
- `deploy` (uniquement sur `main`, après succès du job précédent) :
|
||
|
|
build release, puis dépôt + redémarrage de `tripoli-edge` et
|
||
|
|
`tripoli-api` via le compte `deploy`.
|
||
|
|
|
||
|
|
`tripoli-netctl` et le labo `bird-lab` ne sont pas déployés par ce
|
||
|
|
pipeline : ce sont des outils de labo qu'on lance à la main, pas des
|
||
|
|
services qui tournent en continu.
|