Pipeline as Code
Jenkinsfile conservé dans un dépôt GitLab dédié, récupéré via un Deploy Token limité à read_repository.
Un laboratoire personnel pour concevoir, automatiser et exploiter une infrastructure hybride : Linux, KVM, Docker, GitLab CI/CD, Jenkins, Ansible, WireGuard et déploiements multi-environnements.
Dernière mise à jour : · Schémas simplifiés pour publication publique · Aucune donnée d'accès ni adresse privée exposée.
Le whiteboard distingue trois zones : le poste et l'hyperviseur locaux, le réseau domestique derrière la Freebox, et les ressources OVHcloud. Un contrôleur Ansible Debian 13 reconstruit via Cloud-init complète désormais le lab, avec un tunnel WireGuard dédié vers GitLab. Le diagramme ci-dessous présente les rôles sans divulguer la topologie d'adressage.
Un changement de HTML part du poste de travail, passe par GitLab et son registre de conteneurs, puis rejoint deux cibles de déploiement. Le pipeline comporte les étapes test, build, deploy-ovh et deploy-freebox.
Le contenu HTML est édité localement puis envoyé dans Git. Le commit devient l'unité de traçabilité.
GitLab exécute le pipeline et construit une image Docker Nginx contenant la version du site. L'image est publiée dans le Container Registry.
Les jobs de déploiement récupèrent l'image et recréent le conteneur applicatif sur OVH et sur le serveur Debian domestique.
Sur les deux cibles, Caddy est le point d’entrée HTTPS permanent ; le conteneur Docker Nginx du CV est remplaçable à chaque pipeline sans recréer les certificats.
Le job de build utilise docker:dind : un service Docker dédié permet au client Docker exécuté dans le job GitLab CI de construire l’image Nginx du CV. Cette image est ensuite taguée avec l’identifiant court du commit et poussée vers le Container Registry privé.
Intérêt : builds reproductibles et traçables, séparation construction/déploiement et même artefact livré sur plusieurs cibles. Point de vigilance : DinD nécessite une configuration de sécurité adaptée du runner et du daemon Docker.
Une seconde chaîne d’automatisation, distincte du pipeline GitLab qui publie le CV. Jenkins récupère un Jenkinsfile versionné dans GitLab et exécute déjà un diagnostic Ansible sur une VM Debian 13 de recette via SSH. Le nouveau contrôleur Ansible du lab dispose désormais de son propre bootstrap Cloud-init et d’une liaison WireGuard validée avec GitLab ; les playbooks de configuration restent à construire.
Jenkinsfile conservé dans un dépôt GitLab dédié, récupéré via un Deploy Token limité à read_repository.
Image personnalisée avec Ansible et client SSH ; Docker Compose, volume persistant et autorité de certification interne reconnue.
Authentification SSH via Jenkins Credentials, vérification des hôtes et exécution d’un diagnostic Ansible sur Debian 13.
Un contrôleur Ansible Debian 13 peut désormais être recréé à partir d’un fichier cloud-init.yaml. La liaison chiffrée avec la VM GitLab est rétablie après régénération des clés : scénario de reconstruction exécuté et vérifié sur le laboratoire.
Cloud-init prépare l’utilisateur d’administration, l’accès SSH par clé, l’autorité de certification interne, les paquets système, Ansible et WireGuard. Le YAML a été contrôlé syntaxiquement puis validé par le schéma Cloud-init.
Au premier démarrage, la VM génère sa clé privée WireGuard sur place, avec des permissions restrictives, puis prépare l’interface serveur et active wg-quick@server. Aucune clé privée n’est intégrée au dépôt Git.
Depuis le poste d’administration, un script Bash récupère par SSH la clé publique du serveur Ansible et la transmet à GitLab. Un utilitaire local, autorisé par une règle sudo dédiée, actualise la configuration du pair sans ouvrir de shell administrateur générique.
Installation des composants, génération locale des clés, création de la configuration WireGuard et activation automatique du service.
Le script gitl4b-wg-update.sh lit la nouvelle clé publique du serveur et actualise le pair WireGuard côté GitLab.
Après reconstruction et synchronisation, le tunnel a présenté un handshake récent et des compteurs de trafic dans les deux sens.
Le VPS rejoint les réseaux du homelab via un tunnel chiffré. Un second tunnel WireGuard relie désormais le contrôleur Ansible à GitLab sur le réseau virtuel KVM. Les routes sont limitées aux sous-réseaux utiles : le trafic Internet ordinaire n’a pas besoin de traverser la maison.
Un serveur peut joindre une adresse IP tout en échouant à résoudre un nom. Le lab a permis d'identifier un DNS poussé par WireGuard qui perturbait la résolution publique du VPS.
Les VM utilisent un réseau virtuel distinct du LAN. L'accès depuis le VPS exige une route vers le réseau KVM et des règles de filtrage ciblées, plutôt qu'une ouverture générale.
Sur les deux cibles, Caddy et Nginx tournent dans des conteneurs Docker distincts. Caddy reçoit le HTTPS et transmet les requêtes au conteneur applicatif Nginx sur le réseau privé cv-web. Les certificats sont conservés dans des volumes persistants.
Architecture opérationnelle sur les deux cibles : Caddy expose HTTPS, reverse-proxy vers Nginx sur cv-web et conserve ses certificats dans des volumes persistants.
Une architecture réellement exploitée : postes et hôtes physiques à domicile, virtualisation KVM, machines hébergées par la Freebox et ressources distantes OVHcloud. Les références CPU, RAM et stockage détaillées ne sont pas publiées ici.
Machine Linux de développement : VS Code, Git, SSH et administration du lab.
Physique · localHôte adri3n : KVM/libvirt, réseau virtuel NAT et VM GitLab avec Container Registry.
Physique + VMRouteur Freebox avec serveur WireGuard ; hôtes Debian et Alpine sur l’infrastructure domestique.
Réseau + hôtes locauxVPS Debian distant : conteneurs Docker Caddy (HTTPS) et Nginx (CV), réseau privé Docker et tunnel WireGuard.
Hébergé · actifPOC déjà réalisé sur OVH Public Cloud ; environnement utilisé pour expérimenter l’infrastructure cloud et préparer la reproductibilité avec Terraform et Ansible.
POC réalisé · évolutions envisagéesLecture rapide du whiteboard : ce qui fonctionne est séparé des travaux prévus. Les adresses privées et les identifiants d'accès ne sont pas publiés.
INTERNET
|
+--> VPS OVH · PRODUCTION
| |-- Docker : Caddy HTTPS --> project1 / Nginx
| |-- Réseau privé Docker : cv-web
| `-- WireGuard vers homelab
|
`--> Freebox · RECETTE (VM Debian 13)
`-- Docker : Caddy HTTPS --> project1 / Nginx
GitLab CI/CD : test --> build --> déploiements OVH + Freebox
GitLab SCM --> Jenkins (Docker) --> Ansible --> Debian recette
GitLab + Registry : VM KVM sur hyperviseur Debian
Cloud-init --> contrôleur Ansible Debian 13
WireGuard : contrôleur Ansible <--> VM GitLab
SSH : synchronisation de clé publique après rebuildEVOLUTIONS ENVISAGEES
RECETTE · FREEBOX
|-- Ansible : configuration et déploiement
|-- Tests de validation et idempotence
`-- Promotion contrôlée vers production
INFRASTRUCTURE & AUTOMATISATION
|-- Kubernetes : orchestration de conteneurs
|-- Terraform : provisionnement reproductible
|-- Ansible Vault : secrets des playbooks
|-- Vault : gestion centralisée des secrets (étude)
|-- Jenkins : pipelines enrichis, tests, PRA
`-- Supervision, observabilité, documentationLe laboratoire a également servi à expérimenter un scénario de PRA. Cet exercice est distinct des pipelines de livraison et du diagnostic Jenkins / Ansible.
Un test de reprise a été effectué dans le laboratoire. Les procédures détaillées, les mesures de temps de reprise et les preuves d’exécution ne sont pas publiées sur cette page ; la formalisation d’un scénario reproductible et son automatisation restent dans la roadmap.
Une feuille de route progressive, construite autour d’un lab personnel. Les technologies planifiées ne sont pas présentées comme déjà mises en production.
Build d’image Nginx, registre privé, déploiements Freebox et OVH ; Caddy en conteneur Docker pour HTTPS.
Pipeline as Code, credentials, TLS interne, Docker Compose et exécution SSH sur Debian 13.
Bootstrap Debian 13, génération locale des clés, synchronisation SSH de la clé publique vers GitLab et tunnel rétabli avec handshake vérifié.
Inventaire du lab, playbooks de configuration exécutés depuis Jenkins, contrôles post-déploiement, idempotence et gestion des erreurs.
Pods, Deployments, Services, configuration, stockage et stratégies de mise à jour ; expérimentation sur un environnement isolé.
Infrastructure as Code, chiffrement des variables et étude de Vault pour la gestion centralisée des secrets.
Tests automatisés, validation en recette avant promotion, supervision, journalisation et scénarios de reprise documentés.
Roadmap indicative : les priorités seront ajustées selon les besoins des missions et les compétences à développer.
Debian, services systemd, réseau, SSH, DNS, analyse des journaux et diagnostic en ligne de commande.
KVM/libvirt, réseaux NAT, routage, pare-feu, WireGuard et segmentation des flux.
Git, GitLab CI/CD, Docker, registre d'images, déploiements automatisés et reverse proxy.
Diagnostic progressif, hypothèses vérifiées, captures réseau, tests de connectivité et analyse de la cause racine.
Persistance des configurations, redémarrages contrôlés, séparation des responsabilités et documentation.
PRA testé ; Jenkins et Ansible validés pour le diagnostic ; contrôleur Debian 13 reconstruit par Cloud-init et liaison WireGuard rétablie après rotation de clé. Terraform, Kubernetes et Vault restent des axes d’évolution.
Une même image Docker, construite par GitLab CI/CD, est déployée sur deux infrastructures indépendantes :
Deux environnements, deux reverse proxies Caddy, deux certificats TLS publics et un même pipeline de livraison automatisée.
Clin d’œil à ma règle de conduite ITIL : KISS — Keep It Simple, Stupid. Une architecture compréhensible, des changements mesurés, un test à la fois et pas d’usine à gaz. « Mon impatience est un moteur. Ma méthode est le volant. »