Lors de mon BUT Réseaux et Télécommunications, j’ai réalisé un projet dont l’objectif était de concevoir un environnement de développement proche de ce que l’on peut retrouver en entreprise. Ce projet m’a permis de découvrir et de mettre en œuvre une chaîne CI/CD, basée sur GitLab, intégrant l’audit automatique du code et le déploiement continu d’une application conteneurisée.
Infrastructure système réalisée
Ce projet a été réalisé sur une unique VM Debian (contrainte imposée par le projet), sur laquelle j’ai déployé l’infrastructure suivante :

- GitLab : système de versionnement de code et orchestrateur des pipelines CI/CD
- SonarQube : audit automatique du code (partie CI)
- Docker : déploiement applicatif via conteneurs (partie CD)
- Nginx : reverse proxy HTTPS (ajout personnel pour se rapprocher d’un contexte réel)
- Postfix (relay SMTP) : envoi des emails GitLab (réinitialisation de mot de passe)
Mise en place de la pipeline
Dans ce projet, la nouveauté pour moi était la mise en place d’un pipeline CI/CD que je n’avais jamais expérimenté.
Principe de fonctionnement d’un pipeline CI/CD
Un pipeline CI/CD est déclenché à chaque commit d’un projet sur GitLab. Ce pipeline est mis en place par les 2 éléments suivants :
- Un GitLab runner : cet outil permet de lancer la pipeline après un commit
- Un fichier
.gitlab-ci.yml: ce fichier est placé dans le dépôt en question et décrit ce qui sera fait pendant le pipeline. Le pipeline créé permet donc d’auditer le code du dépôt et si ce dernier donnait un audit conforme, une image Docker était build puis le code était déployé dans un conteneur.
La version finale de mon pipeline réalisé lors du projet dans le fichier .gitlab-ci.ymlressemblait à ça :
# ordre d'execution des jobs
stages:
- sonarqube
- build
- run
# Job permettant l'analyse du code par sonarqube
sonarqube-check:
stage: sonarqube
tags:
- SAE502_script
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
GIT_DEPTH: "0"
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner
# job permettant de build l'image docker
docker-build:
stage: build
script:
- docker build -t python-socket-server .
tags:
- docker
# job permettant le run du conteneur docker
docker-run:
stage: run
script:
- docker stop python-socket-server || true
- docker rm python-socket-server || true
- docker run -d --name python-socket-server -p 5555:5555 python-socket-server
tags:
- docker
Visualisation de la pipeline sur gitlab :

Audit de code par sonarqube
La configuration du pipeline concernant Sonarqube correspond à ce bloc dans le fichier .gitlab-ci.yml :
sonarqube-check:
stage: sonarqube
tags:
- SAE502_script
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
GIT_DEPTH: "0"
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner
Lors du déclenchement du pipeline, Sonarqube fait un audit et donne un résultat sur son interface web comme ci :
Sur ce rapport, on voit que le code ne passe pas le test car pendant l’audit, il a été considéré comme contenant des problèmes de sécurité.
Sonarqube est un outil puissant, il m’a permis de prendre conscience de l’importance de l’audit de code automatisé et des bonnes pratiques de sécurité, notamment sur la gestion des secrets et des erreurs applicatives.
Build d’image et deploiement avec Docker
La configuration du pipeline concernant Docker correspond à ce bloc dans le fichier .gitlab-ci.yml :
docker-build:
stage: build
script:
- docker build -t python-socket-server .
tags:
- docker
docker-run:
stage: run
script:
- docker stop python-socket-server || true
- docker rm python-socket-server || true
- docker run -d --name python-socket-server -p 5555:5555 python-socket-server
tags:
- docker
Après qu’un code a passé le test d’audit de Sonarqube, une image est build à partir d’un Dockerfile contenu dans le dépôt sur GitLab. Si le build se passe bien, un déploiement par conteneur est effectué en veillant à ce que l’ancien conteneur soit stoppé et supprimé afin que le nouveau prenne sa place.
Compétences acquises
Ce projet m’a permis de consolider et de développer des compétences techniques directement applicables en environnement professionnel, notamment :
Compétences consolidées
- Mise en place et administration d’une infrastructure Linux sur machine virtuelle.
- Utilisation d’un système de gestion de versions avec GitLab.
- Déploiement et exploitation de services via des conteneurs Docker
Nouvelles compétences acquises
- Conception et orchestration d’un pipeline CI/CD avec GitLab Runner.
- Automatisation de l’audit de code à chaque commit.
- Intégration de SonarQube pour l’analyse de la qualité et de la sécurité du code.
- Automatisation du build et du déploiement continu d’une application conteneurisée.