.gitlab-ci.yml : syntaxe et structure
Le fichier .gitlab-ci.yml est la definition declarative du pipeline. Sa syntaxe est un surensemble de YAML avec des mots-cles specifiques a GitLab. Comprendre la structure de base et les mots-cles courants couvre 90% des cas d'usage.
Structure de base
stages:
- build
- test
- deploy
variables:
IMAGE_TAG: $CI_COMMIT_SHORT_SHA
build:
stage: build
image: docker:27
script:
- docker build -t app:$IMAGE_TAG .
unit-tests:
stage: test
image: python:3.12
script:
- pip install -r requirements.txt
- pytest tests/
deploy-prod:
stage: deploy
script:
- ./deploy.sh
environment:
name: production
rules:
- if: $CI_COMMIT_BRANCH == "main"Mots-cles essentiels
- image : image Docker pour l'execution du job
- script : commandes a executer (liste ordonnee)
- before_script / after_script : commandes avant/apres script, au niveau job ou global
- artifacts : fichiers a conserver apres le job et passer aux jobs suivants
- cache : fichiers mis en cache entre les runs (node_modules, .venv, .gradle...)
- needs : dependances directes (DAG)
- rules : conditions d'execution du job
- when : on_success (defaut), on_failure, always, manual, delayed, never
- allow_failure : le job peut echouer sans bloquer le pipeline
- timeout : duree maximale du job
- retry : nombre de tentatives en cas d'echec
- interruptible : le job peut etre annule si un nouveau pipeline demarre
Rules vs Only/Except
rules est le remplacement moderne de only/except, plus expressif et sans ambiguites d'evaluation. Une rule est une condition (if, changes, exists) combinee a une action (when: on_success, when: manual, when: never).
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: on_success
- if: $CI_COMMIT_BRANCH == "main"
when: on_success
- when: neverVariables predefinies
GitLab expose des dizaines de variables d'environnement dans chaque job : CI_COMMIT_SHA, CI_COMMIT_REF_NAME, CI_PROJECT_PATH, CI_REGISTRY, CI_REGISTRY_USER, CI_REGISTRY_PASSWORD, CI_ENVIRONMENT_NAME... La liste complete est dans la documentation officielle.