Gitlab - 4.4.2 Écriture du pipeline gitlab

Maintenant que vous connaissez les commandes et le flux nécessaires pour exécuter un pipeline GitLab, l'idéal est de créer votre propre fichier .gitlab-ci.yml en même temps que moi. La même approche s'applique : créer les fichiers localement, les pousser sur votre branche, exécuter le pipeline, puis fusionner avec master. Comme chaque pipeline commence par la définition d'un job, nous aurons ici besoin de deux jobs : un job Build qui installe les dépendances, et un job Deploy qui exécute l'application.

Définition des deux jobs Build et Deploy

Commençons par le job de build. Comme nous l'avons vu lors de la session précédente, npm doit être installé avant d'être utilisé. Dans le bloc script, on écrit donc la commande d'installation de Node, puis celle de npm (Node Package Manager). Une fois npm en place, on installe les dépendances déclarées dans package.json à la racine via la simple commande npm install.

build_app:
  script:
    - apt install nodejs -y
    - apt install npm -y
    - npm install

deploy_app:
  script:
    - apt install nodejs -y
    - node index.js

Une fois le build terminé, on définit un second job qui exécute le fichier index.js. Attention, l'environnement GitLab par défaut n'a pas Node installé : il faut donc l'installer explicitement avant d'utiliser node index.js. Vous pourriez vous demander pourquoi ne pas regrouper l'installation de Node dans le job de build : votre question est légitime, et vous aurez bientôt la réponse en abordant les artefacts et les stages.

  • Job build_app : install Node, install npm, npm install
  • Job deploy_app : install Node, node index.js
  • L'ordre d'écriture des jobs n'impose pas l'ordre d'exécution
  • Sans stages, GitLab exécute les jobs en parallèle
  • Exclure node_modules/ du push (généré par le pipeline)

Les deux jobs sont prêts. On commit le fichier et on l'envoie sur la branche dev (en excluant le dossier node_modules/, qui sera généré par le pipeline). Mais un problème se pose : dans quel ordre GitLab va-t-il exécuter ces jobs ? L'ordre dans lequel ils sont définis dans le fichier YAML n'a aucune importance. Par défaut, GitLab les exécute en parallèle. Résultat prévisible : le pipeline échoue car le job de déploiement tente de démarrer l'application avant que le build n'ait installé les dépendances.

Pour éviter ce comportement par défaut, nous devons indiquer explicitement à GitLab dans quel ordre exécuter les jobs. C'est exactement le rôle des stages (étapes), que nous explorerons en détail dans la prochaine leçon.