#CI/CD#GitLab#Jenkins#Qualité

Intégration continue : de GitLab CI à Jenkins

A

Alexandre Jeffroy

Ingénieur logiciel

||2 min de lecture

L'intégration continue (CI) consiste à compiler et tester automatiquement le code à chaque modification. Dans l'industrie, où les bases de code vivent parfois plus d'une décennie, c'est un filet de sécurité dont on ne peut plus se passer une fois qu'on l'a goûté.

Pourquoi la CI change tout

Sans CI, un défaut peut rester tapi dans le code jusqu'à la prochaine livraison, là où il coûte le plus cher à corriger. Avec une CI, chaque modification est vérifiée immédiatement. En quelques minutes, on sait si quelque chose s'est cassé, et surtout on sait où regarder.

Un pipeline GitLab CI minimal

Pour un projet C++, un fichier .gitlab-ci.yml de quelques lignes suffit à mettre en place les étapes de build et de test.

yaml
1stages:
2  - build
3  - test
4
5build:
6  stage: build
7  script:
8    - cmake -B build -DCMAKE_BUILD_TYPE=Release
9    - cmake --build build -j
10
11test:
12  stage: test
13  script:
14    - ctest --test-dir build --output-on-failure

Le même esprit avec Jenkins

Quand l'environnement impose Jenkins, on retrouve exactement la même logique dans un Jenkinsfile.

groovy
1pipeline {
2  agent any
3  stages {
4    stage('Build') {
5      steps {
6        sh 'cmake -B build && cmake --build build -j'
7      }
8    }
9    stage('Test') {
10      steps {
11        sh 'ctest --test-dir build --output-on-failure'
12      }
13    }
14  }
15}

Ce que la CI apporte concrètement

  • Les régressions sont détectées en quelques minutes plutôt qu'à la recette.
  • Les livraisons deviennent reproductibles, identiques d'une fois à l'autre.
  • Toute l'équipe ose faire évoluer le code, parce qu'un garde-fou vérifie derrière elle.

Le principe avant l'outil

GitLab CI ou Jenkins, peu importe : l'outil compte moins que le principe qu'il sert, celui de vérifier en continu et sans intervention humaine. Quand j'arrive sur un projet qui n'a pas encore de CI, c'est presque toujours la première chose que je mets en place.