Un récit de terrain · Incus · First access

Cinq composants
sur notre propre matériel

Les cinq composants qu’achète l’offre First access, déployés sur un petit cluster Incus à nous, sans compte cloud nulle part, mis au travail par un pipeline pendant une heure, puis démontés.

5 composants1 € par moisConstruite et démontée dans la même session
Les cinq composants du projet, chacun en marche
Cinq composants, chacun déployé par son propre pipeline et en bonne santé.
01

Le code

Un endroit pour le code, de quoi le construire

La première chose dont un projet a besoin, c’est d’un endroit pour son code et d’une machine qui le construit. La plateforme déploie GitLab et un runner, et le runner s’enregistre de lui-même auprès du GitLab voisin.

Son jeton d’enregistrement n’est jamais écrit dans un fichier de configuration. Le pipeline de déploiement le dépose dans la machine du runner une fois celle-ci créée, et le runner démarre déjà en ligne.

Les pipelines au fil des commits : au vert, ou en avertissement quand le contrôle instable a échoué et que le build est passé quand même.
Les pipelines au fil des commits : au vert, ou en avertissement quand le contrôle instable a échoué et que le build est passé quand même.
Pipeline de déploiementla CI GitLab de la plateformeapplique la racine de chaque machineCluster Incus · réseau du projetGitLabmachine virtuellecode · pipelines · file de jobsGitLab Runnerconteneur · exécuteur Dockerbuildcomputetestsoakquatre jobs à la foisPostgreSQLconteneurshowcase · pipelinesle jeton, parl’API Incuss’enregistre,prend les jobsteste, enregistre les résultatsLe jeton n’est jamais écrit dans un fichier de configuration : le pipeline le dépose dans la machine.
La place du runner : son jeton fourni par le pipeline de déploiement, enregistré auprès de GitLab, écrivant dans PostgreSQL.

Le runner appartient au projet, sur une machine du cluster, et non à un pool partagé ailleurs. Rien de ce que le projet construit ne quitte le matériel que son propriétaire maîtrise.

02

Le pipeline

Construire, calculer, tester, enregistrer

Chaque commit lance le même pipeline. Il compile un petit programme, puis fait un peu d’arithmétique sur le numéro de build : pair ou impair, et premier ou non.

Il teste contre le PostgreSQL du projet et y enregistre le build. À côté des tests tournent un job d’endurance de quatre minutes et un contrôle de connexion qui échoue de temps en temps, comme les contrôles des vrais projets. Le pipeline tolère l’échec de ce contrôle, si bien que le build passe quand même.

Les étapes d’un pipeline : build, calcul, les tests avec leur job d’endurance et leur contrôle instable, l’enregistrement, le rapport.
Les étapes d’un pipeline : build, calcul, les tests avec leur job d’endurance et leur contrôle instable, l’enregistrement, le rapport.
03

L’enregistrement

Chaque job laisse une ligne

Quand un job se termine, quel que soit son résultat, il écrit une ligne dans une base prévue à cet effet, à côté des données de l’application dans le même PostgreSQL.

Un dernier job écrit le résultat du pipeline : le numéro de build, sa parité, s’il est premier, et combien de jobs ont réussi ou échoué.

Le journal du job de rapport : la ligne écrite par le pipeline, et une ligne par job en dessous.
Le journal du job de rapport : la ligne écrite par le pipeline, et une ligne par job en dessous.
PostgreSQL pendant que les pipelines y écrivent.
PostgreSQL pendant que les pipelines y écrivent.

Le dashboard de la base est celui qu’une équipe surveillerait en production : connexions, transactions, lignes écrites et lues.

04

Le travail

Des jobs qui tournent, des jobs qui échouent, tout est visible

Les commits arrivent toutes les une à deux minutes, si bien que le runner est rarement inactif. Son dashboard montre les jobs en cours à chaque instant, leur durée, et les échecs au moment où ils surviennent.

GitLab a son propre dashboard à côté, si bien qu’un build lent peut être rattaché au runner ou au serveur sans deviner.

Le dashboard du runner : jobs en cours, total des jobs, et les contrôles en échec.
Le dashboard du runner : jobs en cours, total des jobs, et les contrôles en échec.
GitLab lui-même : ses workers web et les services derrière eux.
GitLab lui-même : ses workers web et les services derrière eux.

Les échecs viennent du contrôle de connexion instable. Il échoue au hasard sur environ deux builds sur cinq, ce qui donne aux panneaux d’échecs quelque chose de réel à montrer.

05

Les métriques

Un seul stockage, toutes les machines y rendent compte

VictoriaMetrics est le cinquième composant, et c’est lui qui donne son intérêt à Grafana. Chaque machine lui envoie ses métriques d’hôte dès sa naissance, avec celles du service qu’elle fait tourner.

Grafana lit ce seul stockage pour chaque dashboard, si bien que la base, le serveur de code, le runner et le stockage lui-même sont surveillés au même endroit.

VictoriaMetrics : ce qu’il reçoit et ce qu’il répond.
VictoriaMetrics : ce qu’il reçoit et ce qu’il répond.
La machine GitLab : CPU, mémoire, réseau et disque.
La machine GitLab : CPU, mémoire, réseau et disque.

Personne n’a eu à l’ajouter. La collecte des métriques fait partie du déploiement de chaque machine, ce n’est pas un composant auquel penser.

Le bilan de la journée

Composants
5 : quatre conteneurs, GitLab en machine virtuelle
Infrastructure
Un cluster Incus à nous, sans compte cloud
Pipelines
38 sur main, 35 réussis, dont 11 malgré l’échec du contrôle instable
Jobs
215, tous sur le runner du projet
Secrets dans la configuration
Aucun : déposés dans chaque machine par le pipeline

Tout ce qui précède est un vrai déploiement, pas une maquette. Il a été enregistré sous le nom incus-first-access-1 le 16 septembre 2026 ; chaque capture d’écran provient de ce déploiement, et la plateforme a été démontée ensuite : rien ici ne tourne encore ni ne coûte quoi que ce soit.

La même plateforme se déploie sur un serveur ou un cluster Incus qui vous appartient. Le pipeline l’atteint avec un certificat client auquel vous faites confiance et que vous pouvez révoquer, et les machines arrivent sur vos propres disques.

← Toutes les démonstrations de déploiement