# 05 — Mise en place de Gitea Actions (CI/CD) Guide d'installation du moteur d'automatisation (CI/CD) pour le dépôt. Contexte : **Gitea en Docker / docker-compose**, accès **SSH** au serveur. Gitea Actions nécessite deux choses : 1. **Activer** la fonctionnalité Actions dans Gitea. 2. Enregistrer au moins un **runner** (`act_runner`) qui exécute les workflows. --- ## Étape 1 — Activer Actions dans Gitea Se connecter en SSH au serveur, puis se placer dans le dossier du `docker-compose.yml` **de Gitea** (⚠️ celui de Gitea, pas celui de l'application Laravel). ### Option A (recommandée) — via variable d'environnement Dans le service Gitea du `docker-compose.yml`, ajouter la variable : ```yaml services: server: # nom du service Gitea (peut s'appeler "gitea") image: gitea/gitea:latest environment: - GITEA__actions__ENABLED=true # ... reste de la configuration inchangé ``` Puis recharger Gitea : ```bash docker compose up -d ``` ### Option B — via le fichier app.ini Éditer le fichier `app.ini` (dans le volume Gitea, souvent `./gitea/gitea/conf/app.ini`) et ajouter : ```ini [actions] ENABLED = true ``` Puis redémarrer : `docker compose restart`. ### Vérification Dans l'interface web du dépôt, un onglet **« Actions »** doit apparaître. --- ## Étape 2 — Obtenir un jeton d'enregistrement du runner Deux niveaux possibles : - **Niveau instance** (runner partagé par tous les dépôts) : `Site Administration → Actions → Runners → Create new Runner`. - **Niveau dépôt** (runner dédié au projet) : `Dépôt → Settings → Actions → Runners → Create new Runner`. Copier le **jeton (registration token)** affiché. --- ## Étape 3 — Lancer un runner (act_runner) en Docker Créer un dossier de travail sur le serveur, par exemple `~/gitea-runner`, avec un fichier `docker-compose.yml` : ```yaml services: runner: image: gitea/act_runner:latest container_name: gitea_runner restart: always environment: GITEA_INSTANCE_URL: "https://gitea.sam-coffre.duckdns.org" GITEA_RUNNER_REGISTRATION_TOKEN: "COLLER_LE_JETON_ICI" GITEA_RUNNER_NAME: "runner-docker-1" # Images utilisées pour `runs-on: ubuntu-latest` GITEA_RUNNER_LABELS: "ubuntu-latest:docker://catthehacker/ubuntu:act-latest" volumes: - ./data:/data - /var/run/docker.sock:/var/run/docker.sock ``` > Le montage de `/var/run/docker.sock` permet au runner de créer les conteneurs > qui exécutent chaque job. L'image `catthehacker/ubuntu:act-latest` fournit un > environnement compatible `ubuntu-latest` (Node, outils de base). Démarrer le runner : ```bash cd ~/gitea-runner docker compose up -d docker compose logs -f runner # doit afficher "runner registered successfully" ``` Le runner apparaît alors en vert dans `Settings → Actions → Runners` du dépôt. --- ## Étape 4 — Ajouter les secrets de déploiement Dans `Dépôt → Settings → Actions → Secrets`, créer : | Secret | Valeur | |--------|--------| | `SSH_HOST` | IP ou domaine du serveur de production | | `SSH_USER` | utilisateur SSH (ex. `sam`) | | `SSH_PRIVATE_KEY` | clé privée SSH autorisée sur le serveur | | `SSH_PORT` | port SSH (ex. `22`) | > Générer une paire de clés dédiée au déploiement : > `ssh-keygen -t ed25519 -C "gitea-deploy" -f deploy_key` > puis ajouter `deploy_key.pub` dans `~/.ssh/authorized_keys` du serveur, et > coller le contenu de `deploy_key` (clé privée) dans le secret `SSH_PRIVATE_KEY`. --- ## Étape 5 — Déclencher et vérifier Un simple push sur `master` déclenche les workflows : ```bash git commit --allow-empty -m "test: déclenche la CI" git push ``` Dans l'onglet **Actions** du dépôt : - le workflow **CI** (`ci.yml`) exécute Pint puis PHPUnit ; - le workflow **CD** (`deploy.yml`) déploie via SSH. Une exécution en vert constitue une **preuve idéale à intégrer au dossier** (capture d'écran). --- ## Dépannage rapide | Symptôme | Cause probable / solution | |----------|---------------------------| | Pas d'onglet Actions | Actions non activé (Étape 1) ou Gitea non redémarré | | « No runner available » | Runner non enregistré / hors ligne (Étape 3) | | `ubuntu-latest` introuvable | Label non défini → variable `GITEA_RUNNER_LABELS` | | `actions/checkout` échoue | Le serveur doit accéder à github.com (Gitea proxy les actions) | | Déploiement SSH refusé | Vérifier la clé dans `authorized_keys` et les secrets SSH_* |