← Retour aux projets
🔬 Lab Personnel DevOps

Mise en place d'un pipeline CI/CD avec Docker

📅 2025
⏱️ 1 heure
🔧 Home Lab

📘 Contexte

Dans une démarche de modernisation des processus de déploiement, j'ai conçu et mis en place une chaîne CI/CD (Continuous Integration / Continuous Deployment) entièrement auto-hébergée. Ce projet simule une infrastructure de production réelle où chaque modification de code est automatiquement testée et mise en ligne.

🎯 Objectifs

  • Centraliser la gestion du code source sur une forge privée (Gitea)
  • Automatiser le cycle de build et de déploiement via un orchestrateur (Jenkins)
  • Isoler les services et l'application pour garantir la stabilité du serveur (Docker)
  • Standardiser l'infrastructure pour permettre une réplication rapide (Infrastructure-as-Code)

📍 Déroulement du Projet

Étape 1 : Construction de l'Usine Logicielle

Déploiement via Docker Compose d'une pile logicielle comprenant Jenkins et Gitea sur un réseau virtuel isolé. Cette étape définit l'infrastructure nécessaire au pipeline.

# Extrait du docker-compose.yml services: gitea: image: gitea/gitea:latest ports: ["3000:3000"] environment: - DB_TYPE=postgres jenkins: image: jenkins/jenkins:lts ports: ["8080:8080"] volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "jenkins_home:/var/jenkins_home"

Étape 2 : Développement du Pipeline (CI/CD)

Rédaction d'un Jenkinsfile (Pipeline-as-Code) automatisant les phases de Build, de nettoyage et de déploiement. Le script pilote les commandes Docker directement depuis l'orchestrateur.

// Pipeline Groovy pipeline { agent any stages { stage('Checkout') { steps { git 'https://gitea:3000/user/repo.git' } } stage('Build & Deploy') { steps { sh 'docker build -t hdd-app-v1 .' sh 'docker rm -f hdd-app-container || true' sh 'docker run -d -p 8081:80 --name hdd-app-container hdd-app-v1' } } } }

Étape 3 : Conteneurisation Applicative

Création d'un Dockerfile optimisé pour le dashboard de monitoring. L'utilisation d'une image de base Alpine garantit un déploiement léger, sécurisé et rapide sur un serveur Nginx.

FROM nginx:alpine # Copie de la configuration Nginx COPY nginx.conf /etc/nginx/nginx.conf # Copie des fichiers d'application COPY ./dist /usr/share/nginx/html/ # Exposition du port EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

🛠️ Stack Technique

Linux Linux
Docker Docker
Docker Compose Docker Compose
Jenkins Jenkins
Gitea Gitea
Nginx Nginx

🏷️ Mots-clés

CI/CD Automatisation Infrastructure-as-Code DevOps Conteneurisation Pipeline

📈 Résultats & Impact

⚙️
Automatisation Complète
Le passage du code à la production ne nécessite aucune action manuelle sur le serveur.
Fiabilité Accrue
Suppression automatique des erreurs de déploiement liées aux anciennes versions.
🚀
Portabilité
L'infrastructure peut être relancée sur n'importe quel serveur Linux en une seule commande.

💡 Apprentissages Clés

  • Maîtrise de l'architecture des pipelines CI/CD modernes
  • Compréhension profonde de la conteneurisation et de l'orchestration
  • Pratique avancée de l'Infrastructure-as-Code
  • Gestion complète du cycle de développement-déploiement
  • Sécurité et isolation des services en environnement production