1. Le fichier pivot .gitlab-ci.yml

GitLab propose une intégration CI/CD native pilotée par un fichier unique à la racine du dépôt : .gitlab-ci.yml. La force de GitLab réside dans sa gestion hiérarchique explicite des étapes (stages) :

stages:
  - test
  - build
  - deploy

Tous les jobs appartenant à une même étape s’exécutent en parallèle dès que les runners sont disponibles. L’étape suivante ne démarre que lorsque tous les jobs de l’étape précédente ont réussi.

2. Exemple de pipeline GitLab CI complet avec validation manuelle

# Fichier : .gitlab-ci.yml
default:
  image: python:3.11-slim

# Mise en cache pour accélérer les exécutions successives
cache:
  paths:
    - .cache/pip
    - venv/

variables:
  PIP_CACHE_DIR: "/.cache/pip"

test_unitaire:
  stage: test
  script:
    - python -m venv venv/
    - source venv/bin/activate
    - pip install -r requirements.txt
    - pytest tests/ --junitxml=report.xml
  artifacts:
    when: always
    reports:
      junit: report.xml

build_image:
  stage: build
  image: docker:24.0
  services:
    - docker:dind
  script:
    - echo "" | docker login -u "" --password-stdin 
    - docker build -t : -t :latest .
    - docker push  --all-tags
  only:
    - main

deploiement_staging:
  stage: deploy
  script:
    - echo "Déploiement automatique sur le cluster Staging de Genève..."
  environment:
    name: staging
    url: https://staging.educasuisse.ch
  only:
    - main

deploiement_production:
  stage: deploy
  script:
    - echo "Déploiement en Production sous haute surveillance..."
  environment:
    name: production
    url: https://educasuisse.ch
  when: manual # Exige un clic humain explicite pour valider la mise en production
  only:
    - main

3. Cache vs Artifacts : La nuance essentielle

  • Cache : Utilisé pour conserver les dépendances externes (modules npm, packages pip, briques Maven) entre plusieurs exécutions d’un même job afin d’accélérer le pipeline. Le cache n’est pas garanti d’exister.
  • Artifacts : Fichiers générés par un job (rapports de tests JUnit, binaires compilés, fichiers PDF) transmis de manière garantie aux jobs des étapes suivantes et téléchargeables depuis l’interface web de GitLab.

GitLab Environments & Review Apps : GitLab permet de provisionner dynamiquement un environnement éphémère complet pour chaque Merge Request ouverte, permettant à l’équipe produit de tester visuellement la nouvelle fonctionnalité avant même sa fusion dans le tronc commun.