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.
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"
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'
}
}
}
}
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;"]