Aller au contenu

TP : Votre premier pipeline CI/CD avec Node.js

Ce TP a pour objectif de vous faire pratiquer la mise en place d'un pipeline d'intégration continue (CI) sur GitLab pour une application Node.js simple

Objectifs du TP

  • Comprendre la structure d'un fichier .gitlab-ci.yml
  • Initialiser un projet Node.js et son serveur Express
  • Configurer des étapes de build et d'installation automatisées
  • Optimiser le pipeline avec la gestion du cache

Étape 1 : Le "Hello World" de la CI

Avant de manipuler du code applicatif, nous allons valider que votre environnement GitLab fonctionne correctement

  1. Créez un fichier nommé .gitlab-ci.yml à la racine de votre dépôt
  2. Définissez une étape (stage) nommée test
  3. Créez un job nommé hello_job qui appartient à cette étape et dont le script affiche simplement "Hello World" dans les logs
  4. Commitez ce fichier et vérifiez dans l'interface GitLab (section Build > Pipelines) que votre job s'exécute avec succès

Étape 2 : Préparation de l'application Node.js

Nous allons maintenant créer une application web très simple avec le framework Express

  1. Initialisez un nouveau projet Node.js avec la commande npm init
  2. Installez la dépendance express
  3. Créez un fichier index.js qui démarre un serveur sur le port 3000 et répond "Hello World" sur la route racine /
  4. Testez votre application localement avec node index.js pour vous assurer qu'elle fonctionne
  5. Pensez à ajouter un fichier .gitignore pour ne pas envoyer le dossier node_modules sur votre dépôt Git

Étape 3 : Automatisation de l'installation et du build

Maintenant que l'application est prête, nous voulons que GitLab s'occupe de préparer l'environnement à chaque changement de code

  1. Modifiez votre fichier .gitlab-ci.yml pour utiliser l'image Docker node:20
  2. Définissez deux étapes : install et build
  3. Créez un job install_dependencies dans le stage install qui utilise la commande npm ci (plus rapide et stable que npm install dans un contexte CI)
  4. Créez un job build_app dans le stage build qui exécute la commande de build de votre projet
    • Indice : Vous devrez probablement ajouter un script "build": "echo 'Building...'" dans votre package.json pour nous faciliter cette étape

Étape 4 : Optimisation avec le cache

Vous remarquerez que chaque job repart d'un environnement vide. Pour éviter de télécharger les dépendances à chaque fois, nous allons utiliser le cache

  1. Ajoutez une section cache globale dans votre configuration
  2. Configurez-la pour conserver le dossier node_modules/
  3. Observez la différence de temps d'exécution sur vos prochains pipelines

Étape 5 : Bonus - Vérification des dépendances

Il est important de savoir si vos bibliothèques sont à jour pour éviter des failles de sécurité ou des bugs

  1. Ajoutez un job nommé check_updates dans un stage de test
  2. Utilisez la commande npm outdated pour l'exécuter
  3. Utilisez l'option allow_failure: true pour que votre pipeline ne soit pas bloqué si une mise à jour est disponible, car c'est une information informative pour ce TP

☕️ Si tu souhaites soutenir mon travail, tu peux m'offrir un café ici.