đ SPĂCIFICATION CANONIQUE CONTRACTUELLE¶
đ Navigation User Story
| Document | | | ---------- | -- | | đ **SpĂ©cification** | *(ce document)* | | đ ïž Plan d'implĂ©mentation | [PD-12-plan.md](PD-12-plan.md) | | â CritĂšres d'acceptation | [PD-12-acceptability.md](PD-12-acceptability.md) | | đ Retour d'expĂ©rience | [PD-12-rex.md](PD-12-rex.md) | [â Retour Ă infrastructure-souveraine](../PD-193-epic.md) · [â Index User Story](index.md)PD-12 â Configuration GitLab Runner pour CI/CD
đ Artefact produit
âĄïž specifications/PD-12-spec.md
1. Objectif¶
DĂ©finir de maniĂšre formelle, complĂšte et testable les exigences nĂ©cessaires Ă la mise en place dâun ou plusieurs GitLab Runner destinĂ©s Ă lâexĂ©cution des pipelines CI/CD du projet ProbatioVault, hĂ©bergĂ©s sur une infrastructure OVH, avec des executors Docker, un mĂ©canisme de cache, et une gestion sĂ©curisĂ©e des secrets.
Cette spĂ©cification constitue une rĂ©fĂ©rence contractuelle : toute implĂ©mentation devra sây conformer strictement.
2. PĂ©rimĂštre / Hors pĂ©rimĂštre¶
2.1 PĂ©rimĂštre¶
La présente spécification couvre exclusivement :
- lâenregistrement et la configuration de GitLab Runner ;
- lâexĂ©cution des jobs CI/CD via des executors Docker ;
- la gestion du cache de pipeline ;
- lâaccĂšs aux secrets nĂ©cessaires aux pipelines ;
- lâintĂ©gration du Runner avec lâinfrastructure OVH ;
- les exigences de sĂ©curitĂ©, dâisolation et de traçabilitĂ© associĂ©es.
2.2 Hors pĂ©rimĂštre¶
Les éléments suivants sont explicitement hors périmÚtre :
- la dĂ©finition des pipelines CI/CD eux-mĂȘmes (
.gitlab-ci.yml) ; - la logique métier des jobs exécutés ;
- la configuration interne des images Docker utilisées par les jobs ;
- la gestion des permissions GitLab (groupes, projets, rĂŽles) ;
- lâoptimisation des performances CI/CD ;
- la supervision applicative du Runner (monitoring détaillé).
Tout besoin relevant de ces sujets devra faire lâobjet dâune spĂ©cification distincte.
3. DĂ©finitions¶
| Terme | Définition |
|---|---|
| GitLab Runner | Agent chargĂ© dâexĂ©cuter des jobs CI/CD pour GitLab. |
| Executor Docker | Mode dâexĂ©cution des jobs CI/CD utilisant des conteneurs Docker Ă©phĂ©mĂšres. |
| Pipeline CI/CD | Suite de jobs automatisés déclenchés par GitLab. |
| Secret | Information sensible requise par un job CI/CD (clé, token, mot de passe). |
| Cache CI | Mécanisme permettant de réutiliser des artefacts intermédiaires entre jobs ou pipelines. |
| Infrastructure OVH | Ressources dâhĂ©bergement fournies par OVH Cloud, utilisĂ©es pour exĂ©cuter le Runner. |
4. Invariants (non nĂ©gociables)¶
Les rĂšgles suivantes sont non nĂ©gociables et doivent ĂȘtre respectĂ©es en toutes circonstances :
- Le Runner ne doit jamais exposer de secrets en clair dans les logs.
- Les jobs CI/CD doivent ĂȘtre exĂ©cutĂ©s dans un environnement isolĂ© les uns des autres.
- Aucun job ne doit pouvoir accĂ©der aux donnĂ©es persistantes dâun autre job sans mĂ©canisme explicitement prĂ©vu.
- Toute exĂ©cution de job doit ĂȘtre traçable (identifiable par pipeline, job, commit).
- Les secrets utilisĂ©s par les pipelines doivent ĂȘtre rĂ©vocables sans redĂ©ploiement du Runner.
- Le Runner ne doit exécuter que des jobs explicitement autorisés par GitLab.
- Toute rĂšgle ci-dessus doit ĂȘtre vĂ©rifiable par test ou audit.
5. Flux nominaux¶
5.1 Enregistrement du Runner¶
- Un Runner est enregistrĂ© auprĂšs dâune instance GitLab.
- Le Runner est associé à un périmÚtre défini (instance, groupe ou projet).
- Le Runner devient disponible pour lâexĂ©cution de pipelines autorisĂ©s.
5.2 ExĂ©cution dâun pipeline¶
- Un événement GitLab déclenche un pipeline CI/CD.
- GitLab assigne un job au Runner compatible.
- Le Runner instancie un environnement Docker dédié au job.
- Le job sâexĂ©cute dans cet environnement isolĂ©.
- Les résultats du job sont remontés à GitLab.
- Lâenvironnement dâexĂ©cution est dĂ©truit Ă la fin du job.
5.3 Utilisation du cache¶
- Un job dĂ©clare lâutilisation dâun cache.
- Le Runner tente de restaurer le cache associé.
- Le job sâexĂ©cute.
- Le cache est mis à jour selon les rÚgles définies.
5.4 AccĂšs aux secrets¶
- Un job nécessite un ou plusieurs secrets.
- Les secrets sont injectĂ©s dans lâenvironnement dâexĂ©cution du job.
- Les secrets sont utilisables uniquement pendant lâexĂ©cution du job.
- Les secrets ne persistent pas aprĂšs la fin du job.
5bis. Diagrammes¶
5bis.1 Diagramme dâĂ©tats â Cycle de vie du Runner¶
Le Runner traverse plusieurs Ă©tats depuis son enregistrement jusquâĂ son Ă©ventuelle dĂ©sinscription. Les invariants INV-6 (jobs explicitement autorisĂ©s) et INV-7 (vĂ©rifiabilitĂ©) sâappliquent Ă chaque transition.
stateDiagram-v2
[*] --> Unregistered
Unregistered --> Registered : Enregistrement auprÚs de GitLab (§5.1.1-2)
Registered --> Available : Association périmÚtre validée (§5.1.3)
Available --> Executing : Job assigné par GitLab (§5.2.2)
Executing --> Available : Job terminé, environnement détruit (§5.2.6) [INV-2, INV-3]
Executing --> Error : Ăchec exĂ©cution Docker / secret manquant
Error --> Available : Erreur remontée à GitLab (§6) [INV-4]
Available --> Unavailable : Runner indisponible (réseau, ressources)
Unavailable --> Available : Reprise de service
Available --> Unregistered : Désinscription
Unavailable --> Unregistered : Désinscription forcée
note right of Executing
INV-1 : Secrets jamais en clair dans les logs
INV-2 : Isolation inter-jobs
INV-3 : Pas de données persistantes partagées
end note 5bis.2 Diagramme de sĂ©quence â ExĂ©cution dâun pipeline avec secrets¶
Ce diagramme dĂ©taille lâinteraction entre GitLab, le Runner, Docker et le gestionnaire de secrets lors de lâexĂ©cution dâun job (§5.2 + §5.4). Les invariants rĂ©fĂ©rencĂ©s garantissent lâisolation (INV-2, INV-3), la non-persistance des secrets (INV-1, INV-5) et la traçabilitĂ© (INV-4).
sequenceDiagram
participant GL as GitLab
participant RN as GitLab Runner
participant DK as Docker (executor)
participant SC as Secret Store (Vault)
participant CA as Cache Storage
GL->>RN: Assigner job (pipeline, commit, job_id) [INV-4]
activate RN
RN->>DK: Créer conteneur éphémÚre isolé [INV-2, INV-3]
activate DK
RN->>SC: Récupérer secrets pour le job [INV-5]
SC-->>RN: Secrets (durée de vie = job)
RN->>DK: Injecter secrets dans lâenvironnement [INV-1]
RN->>CA: Restaurer cache (si déclaré, §5.3.2)
CA-->>DK: Données de cache
DK->>DK: Exécuter le job
DK-->>RN: Résultat du job (succÚs / échec)
RN->>CA: Mettre à jour cache (§5.3.4)
RN->>DK: Détruire conteneur + purger secrets [INV-2, INV-3]
deactivate DK
Note over DK: Aucun secret ne persiste [INV-1, INV-5]
RN-->>GL: Remonter statut + logs (secrets masqués) [INV-1, INV-4]
deactivate RN 5bis.3 Diagramme de sĂ©quence â RĂ©vocation de secret¶
Ce diagramme illustre le comportement attendu lors de la rĂ©vocation dâun secret (§5.4, scĂ©nario 3). Lâinvariant INV-5 (rĂ©vocabilitĂ© sans redĂ©ploiement) est central.
sequenceDiagram
participant OP as Opérateur
participant SC as Secret Store (Vault)
participant GL as GitLab
participant RN as GitLab Runner
participant DK as Docker (executor)
OP->>SC: Révoquer secret [INV-5]
SC-->>OP: Confirmation révocation
Note over SC: Secret invalidé immédiatement
GL->>RN: Nouveau pipeline déclenché
activate RN
RN->>DK: Créer conteneur éphémÚre
activate DK
RN->>SC: Récupérer secrets pour le job
SC-->>RN: Erreur : secret révoqué
RN->>DK: Détruire conteneur [INV-2]
deactivate DK
RN-->>GL: Job Ă©chouĂ© â secret invalide [INV-4, INV-6]
deactivate RN
Note over GL: Statut dâĂ©chec explicite et traçable [INV-7] 6. Cas dâerreur¶
- Ăchec dâenregistrement du Runner auprĂšs de GitLab.
- Job assigné à un Runner indisponible.
- Ăchec de crĂ©ation de lâenvironnement Docker.
- Cache indisponible ou corrompu.
- Secret manquant ou invalide.
- Tentative dâaccĂšs non autorisĂ©e Ă un secret.
- Ăchec de communication entre GitLab et le Runner.
Chaque cas dâerreur doit produire un retour explicite et traçable dans GitLab.
7. CritĂšres dâacceptation (testables)¶
- Un pipeline simple peut ĂȘtre exĂ©cutĂ© de bout en bout via le Runner.
- Deux jobs exécutés en parallÚle ne partagent aucun état persistant.
- Un secret révoqué devient immédiatement inutilisable dans les pipelines.
- Aucun secret nâapparaĂźt en clair dans les logs GitLab.
- Le cache est correctement restauré et mis à jour selon les rÚgles définies.
- Un job Ă©chouant produit un statut dâĂ©chec explicite dans GitLab.
8. ScĂ©narios de test (Given / When / Then)¶
ScĂ©nario 1 â ExĂ©cution nominale¶
Given un Runner enregistré et actif
When un pipeline CI/CD est déclenché
Then le job est exécuté avec succÚs et son statut est visible dans GitLab
ScĂ©nario 2 â Isolation des jobs¶
Given deux jobs exécutés en parallÚle
When chacun écrit dans son environnement
Then aucun job ne peut lire ou modifier les donnĂ©es de lâautre
ScĂ©nario 3 â RĂ©vocation de secret¶
Given un secret valide utilisé par un pipeline
When le secret est révoqué
Then tout nouveau pipeline Ă©choue explicitement lors de lâaccĂšs au secret
ScĂ©nario 4 â Erreur dâexĂ©cution Docker¶
Given un environnement Docker non disponible
When un job est assigné au Runner
Then le job échoue avec une erreur explicite et traçable
9. HypothĂšses explicites¶
- Une instance GitLab fonctionnelle est disponible.
- Les ressources OVH sont accessibles et opérationnelles.
- Les pipelines CI/CD sont correctement définis en amont.
- Les utilisateurs GitLab disposent des droits nécessaires pour déclencher des pipelines.
10. Points Ă clarifier¶
Les éléments suivants nécessitent une clarification explicite avant implémentation :
- PérimÚtre exact du Runner (instance, groupe ou projet).
- Politique de durée de vie du cache CI.
- Volume maximal de cache autorisé.
- Politique de rotation des secrets.
- Niveau de journalisation attendu pour le Runner.
- Exigences spécifiques de conformité (ex. audit interne, normes).
Fin de la spécification canonique.