Gitlab - 4.4.3 Stage et Stages dans une Pipeline

Parlons maintenant des mots-clés stage et stages dans GitLab CI : ils sont le fondement de tout pipeline. Attention, ce sont deux mots-clés différents : stage au singulier est utilisé dans un job pour préciser à quelle étape ce job appartient ; stages au pluriel sert à définir l'ordre d'exécution des étapes. Voyons cela avec un exemple concret.

Organiser un pipeline avec stage et stages

Prenons un pipeline simple avec trois jobs : build_job, test_job et deploy_job, qui se contentent chacun d'afficher un message indiquant leur origine. Sans aucune définition de stages, GitLab les place tous dans l'étape par défaut test et les exécute en parallèle. L'ordre d'écriture dans le YAML n'a aucune importance ! Pour imposer un ordre, on assigne à chaque job une étape via stage, puis on déclare l'ordre des étapes via la clé stages en début de fichier :

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script: [...]

test_job:
  stage: test
  script: [...]

deploy_job:
  stage: deploy
  script: [...]
  • Les jobs sans stage sont placés par défaut dans test
  • Plusieurs jobs avec le même stage s'exécutent en parallèle
  • L'étape suivante démarre seulement si tous les jobs de l'étape précédente réussissent
  • Étapes par défaut : .pre, build, test, deploy, .post
  • .pre est toujours la première, .post toujours la dernière (ordres figés)

Si vous avez plusieurs jobs dans une même étape, ils s'exécutent en parallèle (utile pour lancer plusieurs tests simultanément et gagner du temps). Si un job d'une étape échoue, les autres jobs de la même étape continuent leur exécution, mais l'étape suivante ne démarre pas. Par exemple, si un job de test échoue, le job de déploiement n'est pas lancé.

GitLab possède cinq étapes par défaut qui s'exécutent toujours dans cet ordre : .pre, build, test, deploy et .post. Si vous utilisez uniquement ces noms d'étapes dans vos jobs sans définir explicitement stages, GitLab respectera automatiquement cet ordre. .pre est garantie d'être toujours la première étape exécutée et .post la dernière — leur ordre ne peut pas être modifié.

Enfin, attention : si vous définissez un stage dans un job sans l'ajouter à la liste stages, GitLab renvoie une erreur car il ne trouve pas l'étape dans la liste disponible. Lorsque vous définissez explicitement stages, vous devez y inclure tous les noms d'étapes utilisés par vos jobs (sauf .pre et .post qui sont facultatives).

En résumé

Cette leçon explique les deux concepts-clés de GitLab CI : le mot-clé 'stage' (singulier) qui assigne une tâche à une étape spécifique, et 'stages' (pluriel) qui définit l'ordre d'exécution séquentiel des étapes dans une pipeline. Par défaut, les tâches s'exécutent en parallèle si aucune étape n'est définie. GitLab dispose également d'étapes prédéfinies (.pre, .post) qui encadrent l'exécution et dont l'ordre est immuable.

Points clés

  • Le mot-clé 'stage' (singulier) dans chaque tâche la rattache à une étape nommée ; 'stages' (pluriel) en haut de la pipeline définit l'ordre d'exécution des étapes.
  • Par défaut, toutes les tâches s'exécutent en parallèle ; sans étapes explicites, elles sont automatiquement allouées à l'étape 'test'.
  • Les tâches partageant la même étape s'exécutent en parallèle ; l'étape suivante ne démarre que si toutes les tâches de l'étape précédente réussissent.
  • GitLab propose cinq étapes prédéfinies : .pre (toujours première), build, test, deploy, .post (toujours dernière), avec un ordre fixe que l'utilisateur ne peut pas modifier.
  • Oublier d'ajouter une étape nommée dans le bloc 'stages' génère une erreur à la validation de la pipeline.
  • L'ordre des tâches dans le fichier YAML n'a aucune importance ; seul le mot-clé 'stage' et la déclaration 'stages' contrôlent l'exécution.

Questions fréquentes

Quelle est la différence entre 'stage' et 'stages' dans GitLab CI ?

'stage' (singulier) est un mot-clé utilisé dans chaque tâche pour spécifier à quelle étape elle appartient. 'stages' (pluriel) est une directive en haut de la pipeline qui définit l'ordre d'exécution séquentiel des étapes. Sans 'stages', les tâches s'exécutent en parallèle par défaut.

Comment les tâches d'une même étape s'exécutent-elles ?

Les tâches partageant le même nom d'étape s'exécutent en parallèle pour gagner du temps. L'ordre dans lequel elles sont définies dans le fichier YAML n'importe pas. Une tâche dans une étape n'est pas affectée par l'échec d'une autre tâche de la même étape.

Que sont les étapes .pre et .post, et puis-je modifier leur ordre ?

Les étapes .pre et .post sont deux étapes spéciales prédéfinies : .pre s'exécute toujours en premier, et .post toujours en dernier. Leur ordre est immuable et vous ne pouvez pas le modifier, même en déclarant explicitement 'stages'.