Intégration continue
L'intégration continue dans le système de gestion de versions permet d'automatiser certaines étapes du développement, telle que la vérification du respect des normes de code et la vérification des tests unitaires. On peut aussi y intégrer le déploiement; on parlera alors de déploiement continu.
Pour configurer l'intégration continue dans GitLab il faut créer un fichier .gitlab-ci.yml à la racine du dépôt.
Dans ce fichier on spécifie les tâches à exécuter qui sont composées d'instructions (scripts). On spécifie aussi les dépendances à utiliser, telles que les images Docker.
Exemple Angular
image: node:22
# Liste des tâches dans l'ordre d'exécution
stages:
- test
- dependencies
- unit
- build
# Pour utiliser la cache entre les tâches
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- .npm/
before_script:
- npm ci --cache .npm --prefer-offline
# On lance le pipeline dès qu'il y a un commit sur dev ou main, ou qu'il y a un merge request à dev ou à main
workflow:
rules:
- if: $CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "main"
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' && ( $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev" )
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' && ( $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main" )
# Installation des dépendances
dependencies_job:
image: node:22-alpine
stage: dependencies
script:
- npm install
# Exécution des tests unitaires
unit-test-job:
image: trion/ng-cli-karma:20.3.5
stage: unit
allow_failure: false
script:
- npm install
- ng test --progress=false --watch=false --code-coverage
coverage: '/Lines \W+: (\d+\.\d+)%.*/'
artifacts:
paths:
- coverage/ # exporter le rapport de couverture (on pourra le télécharger pour le consulter)
# Vérifier ESLint
lint-test-job:
image: node:22-alpine
stage: unit # En même temps que les tests unitaires.
script:
- npm link @angular/[email protected]
- ng lint
# Créer un build web
build-job:
image: node:22-alpine
stage: build
script:
- npm link @angular/[email protected]
- npm run build --release
artifacts:
paths:
- $CI_PROJECT_DIR/dist # exporter l'application web (qu'on pourra télécharger)
Exemple Laravel
image: php:8.3-cli
stages:
- dependencies
- test
cache:
key: composer
paths:
- vendor/
before_script:
- apt-get update && apt-get install -y git unzip libzip-dev curl
- docker-php-ext-install zip pdo_mysql
- pecl install xdebug && docker-php-ext-enable xdebug
- curl -sS https://getcomposer.org/installer | php
- mv composer.phar /usr/local/bin/composer
- composer install
workflow:
rules:
- if: $CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "main"
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' && ( $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev" )
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' && ( $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main" )
dependencies_job:
stage: dependencies
script:
- composer install
artifacts:
paths:
- vendor/
expire_in: 1h
# Run tests
unit_test:
stage: test
dependencies:
- dependencies_job
script:
- cp .env.example .env
- php artisan key:generate
- php artisan migrate --force
- XDEBUG_MODE=coverage php artisan test --coverage-html=coverage-report --colors=never
artifacts:
when: always
paths:
- coverage-report/