Continue integratie — Gitea Acties¶
Machinevertaling van het Franse origineel.
De omgeving voert zijn workflows uit met act_runner, op vm-compute-01, in de modus dind: de taken draaien in de Docker-daemon van de runner, niet in die van de host.
Het pad van een push¶
flowchart LR
dev["Poste<br/>git push"]
gitea["Gitea<br/>vm-docker:3303"]
runner["act_runner<br/>vm-compute-01"]
job["Job dans<br/>node:20-bookworm"]
hote["vm-docker<br/>deploy-hook.sh"]
dev --> gitea
gitea -.->|"le runner interroge,<br/>Gitea ne pousse pas"| runner
runner --> job
job -->|"ssh, clé verrouillée<br/>par command="| hote
hote --> ok["git pull + build<br/>+ vérification"]
De runner haalt de taak op via een lange query: Gitea doet dit nooit. Daarom staat er in de configuratie een directe IP-URL — via Caddy lijkt deze continue query op een scan en zou het door CrowdSec geblokkeerd kunnen worden.
De duurste val: de reikwijdte van een runner¶
Een act_runner heeft een unieke reikwijdte, gekoppeld aan een registratie — instance, organisatie, gebruiker, of een enkele repository. Deze verandert niet later.
flowchart TB
subgraph hote["vm-compute-01"]
r1["rtx-runner<br/>portée : dépôt homelab-vault"]
r2["docs-runner<br/>portée : dépôt homelab-docs"]
end
v["Dépôt homelab-vault"]
d["Dépôt homelab-docs"]
t["Un troisième dépôt"]
r1 --> v
r2 --> d
t -.->|"aucun runner éligible"| queued["runs « queued »<br/>indéfiniment"]
classDef bad stroke-width:3px,stroke-dasharray: 5 5
class queued bad
Permanente runs queued lijken geen fout
Als er geen runner beschikbaar is, verschijnen de uitvoeringen normaal in de interface en blijven ze queued. Er zijn geen berichten, geen waarschuwingen, niets dat aangeeft dat er niemand ze zal ophalen. Dit wordt geïnterpreteerd als "de CI is nog niet verbonden".
De controle die resulteert in een enkele query:
curl -s -H "Authorization: token $TOKEN" \
https://gitea.savethemall.eu/api/v1/repos/<owner>/<repo>/actions/runners \
| jq '.runners[].name'
# tableau vide → ces jobs ne partiront jamais
Het toevoegen van een repository aan de CI, betekent dus ofwel het toevoegen van een runner, of het migreren van een bestaande runner naar een grotere reikwijdte — deze tweede optie stopt de CI, die hij voorheen gebruikte, met een "koude" start.
Het registratie-token wordt aangevraagd via POST, niet via GET:
Wat de taak-image bevat — en niet bevat¶
De taken runs-on: ubuntu-latest worden uitgevoerd in node:20-bookworm.
| Aanwezig | Afwezig |
|---|---|
git 2.39 |
pip |
| Python 3.11 | venv |
| Toegang tot github.com en pypi.org | SSH-client |
Debian levert pip, venv en openssh-client apart. Een workflow die deze verwacht, faalt later, na het ophalen, met een bericht dat niet aangeeft dat er een pakket ontbreekt.
actions/setup-python werkt niet op deze runner
De actie downloadt binaire bestanden die beschikbaar zijn voor de afbeeldingen ubuntu-XX van GitHub. Er zijn er nog niet voor Debian bookworm. Dit is geen probleem met het netwerk: de runner kan zonder problemen verbinding maken met github.com en pypi.org.
Installeren vanuit Debian in plaats daarvan:
Implementeren zonder een shell{ #deployer-sans-donner-un-shell }¶
Een implementatiesleutel die een volledige shell op de productieomgeving opent, is even waardevol als het wachtwoord van die omgeving. De hier gebruikte methode reduceert dit tot één enkele actie:
command="/opt/docker/<stack>/deploy-hook.sh",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty,restrict ssh-ed25519 AAAA…
Wat de client ook stuurt, de server voert dit script uit en niets anders. De controle, in plaats van aan te nemen:
ssh -i <clé> -p <port-ssh> <user>@vm-docker "cat /etc/shadow"
# doit afficher la sortie du déploiement, jamais le contenu du fichier
Een ontwerpvolgorde: het script moet zelf de controle uitvoeren, aangezien de client geen tweede opdracht kan sturen om het resultaat te controleren.
Dernière vérification de cette page : 2026-09-08