# CI/CD — Gitea Actions → Raspberry Pi ## Ce que ça fait À chaque `git push` sur `main`, Gitea : 1. Vérifie la syntaxe Python (`lint`) 2. SSH sur le Pi → `git pull` + `pip install` + `systemctl restart` Déclenchement manuel possible (avec option "installation complète"). --- ## 1. Préparer le Pi ### Cloner le dépôt la première fois ```bash cd /home/pi git clone https://gitea.lespatas.ovh/admin/photoBooth.git jh-photomaton cd jh-photomaton sudo bash scripts/install.sh ``` ### Installer la règle sudoers (permet au CI de restart sans mot de passe) ```bash sudo cp scripts/sudoers-jh-photomaton /etc/sudoers.d/jh-photomaton sudo chmod 440 /etc/sudoers.d/jh-photomaton sudo visudo -c # doit afficher "parsed OK" ``` ### Générer une clé SSH dédiée au CI/CD Sur le Pi : ```bash ssh-keygen -t ed25519 -C "gitea-cicd-jh-photomaton" -f ~/.ssh/gitea_deploy -N "" cat ~/.ssh/gitea_deploy.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # Afficher la clé privée à copier dans Gitea : cat ~/.ssh/gitea_deploy ``` --- ## 2. Configurer les secrets dans Gitea `Settings → Secrets and Variables → Actions → New Secret` | Nom | Valeur | |-----|--------| | `PI_SSH_HOST` | IP du Pi (ex: `192.168.1.42`) ou hostname si résolvable depuis le serveur Gitea | | `PI_SSH_USER` | `pi` | | `PI_SSH_KEY` | Contenu de `~/.ssh/gitea_deploy` (clé **privée**, commence par `-----BEGIN...`) | | `PI_SSH_PORT` | `22` (optionnel) | --- ## 3. Configurer le runner Gitea Actions Le workflow nécessite un runner Gitea Actions avec le label `ubuntu-latest`. ### Option A — Runner sur le serveur Gitea (recommandé) Sur le serveur qui héberge Gitea : ```bash # Télécharger l'act runner Gitea wget https://gitea.com/gitea/act_runner/releases/latest/download/act_runner-linux-amd64 -O act_runner chmod +x act_runner # Enregistrer le runner (token dans Gitea : Settings → Actions → Runners) ./act_runner register --instance https://gitea.lespatas.ovh \ --token VOTRE_TOKEN --name "gitea-server" --labels "ubuntu-latest:docker://node:16-bullseye" # Démarrer ./act_runner daemon ``` ### Option B — Runner directement sur le Pi (plus simple, pas de Docker) ```bash wget https://gitea.com/gitea/act_runner/releases/latest/download/act_runner-linux-arm64 -O act_runner chmod +x act_runner ./act_runner register --instance https://gitea.lespatas.ovh \ --token VOTRE_TOKEN --name "pi-runner" --labels "ubuntu-latest:host" ./act_runner daemon & ``` > Avec `ubuntu-latest:host`, les jobs s'exécutent directement sur le Pi sans Docker. > Dans ce cas, le job SSH est superflu — on peut simplifier le workflow pour exécuter > `scripts/update.sh` directement. --- ## 4. Premier push et vérification ```bash git add . git commit -m "feat: ajout CI/CD Gitea Actions" git push origin main ``` Suivre l'exécution dans Gitea : `Repository → Actions`. --- ## 5. Déclenchement manuel (avec installation forcée) Dans Gitea : `Actions → Deploy — JH Photomaton → Run workflow` Choisir `force_install = true` pour relancer `install.sh` complet (re-pip, re-service). --- ## Résolution de problèmes | Problème | Solution | |----------|----------| | `Host key verification failed` | Ajouter le Pi dans `~/.ssh/known_hosts` du runner | | `Permission denied (publickey)` | Vérifier que la clé publique est dans `authorized_keys` du Pi | | `sudo: systemctl: command not found` | Utiliser `/bin/systemctl` (déjà dans update.sh) | | `git stash pop` conflit | SSH sur le Pi, résoudre manuellement : `cd /home/pi/jh-photomaton && git checkout -- config/settings.yaml` | | Le runner ne démarre pas | Vérifier le token dans `gitea.lespatas.ovh/admin/photoBooth/settings/actions/runners` |