Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

GARM : orchestrer des runners GitHub/Gitea Actions avec LXD

4 min de lecture
Améliorer cette page

Vous avez des pipelines GitHub Actions ou Gitea Actions, mais vos runners self-hosted sont statiques, ils tournent en permanence, coûtent de l'argent et doivent être maintenus manuellement. GARM (GitHub/Gitea Actions Runner Manager) résout ce problème : il crée et détruit automatiquement des runners à la demande, sur LXD, KVM, AWS, Azure ou GCP.

Quand un job Actions est mis en file d'attente, GARM reçoit un webhook du serveur (GitHub ou Gitea), démarre un conteneur ou une machine virtuelle, y installe l'agent runner, et l'enregistre. Une fois le job terminé, la VM est détruite. Pas de runner zombi, pas de surcoût.

GARM joue le rôle d'un orchestrateur de runners. Il s'intercale entre le serveur de forge (GitHub ou Gitea) et le fournisseur d'infrastructure (LXD, cloud public...).

Gitea GARM LXD
│ │ │
│──workflow_job queued──▶│ │
│ (webhook) │ │
│ │──crée conteneur───────▶│
│ │◀──IP + état ready──────│
│ │ │
│ │ installe runner agent │
│ │ dans le conteneur │
│ │ │
│◀──runner s'enregistre──│ │
│ │ │
│──assigne job──────────▶│ runner exécute le job │
│ │ │
│──workflow_job completed▶│ │
│ (webhook) │──détruit conteneur────▶│

Le runner est éphémère : il est créé pour ce job précis, et détruit dès que le job est fini. Chaque job repart d'un environnement propre, sans résidus des exécutions précédentes.

ConceptRôle
ControllerL'instance GARM centrale. Gère les providers, les endpoints, les pools.
ProviderLe backend d'infrastructure : LXD, Openstack, AWS, GCP, Azure...
EndpointLa forge (Gitea ou GitHub) à laquelle GARM se connecte.
CredentialsLe token d'authentification (PAT Gitea ou GitHub App).
PoolAssociation entre une forge (repo/org/enterprise), un provider et une image. Définit le nombre max/min de runners.
RunnerLa VM ou le conteneur créé par le provider pour exécuter un job.

Dans ce guide, GARM est installé sur la même VM que Gitea pour simplifier le lab. En production, GARM et Gitea seraient sur des serveurs distincts.

Architecture GARM sur la VM gitea-lab (192.168.122.52) : Gitea (port 3000), qui héberge les dépôts, envoie ses webhooks à GARM (port 9997, provider LXD) ; GARM y enregistre les runners et demande à LXD (snap 5.21 LTS) de créer puis détruire des runners éphémères ubuntu:24.04, supprimés après chaque job.gitea-lab (192.168.122.52)Gitea, port :3000héberge les repos, déclenche les webhooksGARM, port :9997, provider LXDgère les runners, orchestre LXDLXD (snap 5.21 LTS)runner-xxx (ubuntu:24.04)éphémère, détruit après le jobwebhookenregistrementdu runnercrée / détruit
Source · SVG
Échap pour fermer, + et − pour zoomer, défilement pour se déplacer. 100 %

Avant de commencer, vous avez besoin de :

  • Une VM Ubuntu 24.04 avec au moins 4 Go de RAM et 30 Go de disque (les containers LXD en ont besoin)
  • Gitea ≥ 1.24 installé et accessible (voir Installer Gitea)
  • Docker installé sur votre machine locale (pour extraire les binaires GARM de l'image nightly)
  • Les droits sudo sur la VM
  • GARM crée des runners à la demande, sur webhook workflow_job queued.
  • Chaque runner est éphémère : créé pour un job, détruit après.
  • Le provider LXD permet de lancer des conteneurs Ubuntu directement sur la VM, sans cloud public.
  • GARM supporte GitHub, Gitea (≥ v0.2.0), et d'autres forges.
  • La configuration se fait via garm-cli ou l'API REST.

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn