Aller au contenu

GUIDE TECHNIQUE · GITHUB

Comment créer une CI Node.js avec GitHub Actions ?

Créer un workflow GitHub Actions pour installer les dépendances, exécuter les tests et compiler une application Node.js sur chaque pull request avant fusion.

Niveau Intermédiaire7 min de lecture— vuesGitHub

L’ESSENTIEL EN BREF

Les étapes clés

Ce guide présente 6 étapes, de « Vérifier le projet Node.js et le verrouillage des dépendances » à « Stabiliser le pipeline et encadrer les évolutions ».

Avant de commencer : Dépôt GitHub de recette avec package.json, package-lock.json et scripts de test, lint ou build adaptés.

01 · CADRAGE

Périmètre et résultat visé

Résultat attendu : Le fichier .github/workflows/ci.yml est présent sur la branche et sa syntaxe est acceptée par GitHub Actions.

Public concerné : Développeurs Node.js, ingénieurs DevOps, responsables qualité, tech leads et équipes de plateforme

Environnement et versions

GitHub Actions sur runner Linux GitHub-hosted ; Node.js 22 et npm avec package-lock.json. Les versions des actions et de Node.js sont à vérifier pour le projet et la politique de support.

Contrôlez les versions, les droits et les options disponibles dans votre environnement avant de suivre la procédure.

02 · AVANT DE COMMENCER

Prérequis et points de contrôle

  • Dépôt GitHub de recette avec package.json, package-lock.json et scripts de test, lint ou build adaptés.
  • Permissions d’écriture dans une branche du dépôt pour ajouter un fichier de workflow .github/workflows/ci.yml.
  • GitHub Actions autorisé dans le dépôt ou l’organisation ; accès à l’onglet Actions et aux contrôles de pull request.
  • Aucun secret de déploiement requis : le workflow présenté lit le code et exécute seulement les contrôles.

03 · VUE D’ENSEMBLE

Comprendre l’architecture et les flux

ARCHITECTURE TECHNIQUEComprendre la chaîne de bout en bout
01Pull request
02GitHub Actions
03Runner Linux
04npm ci
05Tests & build
06Statut CI
Une pull request déclenche un workflow isolé sur un runner. Le job installe les dépendances verrouillées et exécute les contrôles ; son statut peut devenir obligatoire dans le ruleset de main.
Schéma du pipeline GitHub Actions : pull request, runner Linux, installation npm, tests et validation CI
Illustration

04 · TUTORIEL

Procédure complète, étape par étape

Suivez les étapes dans l’ordre et contrôlez chaque résultat avant de poursuivre. Renseignez les paramètres adaptés à votre environnement.

01

ÉTAPE 1 / 6

Vérifier le projet Node.js et le verrouillage des dépendances

npm ci exploite le fichier de verrouillage et échoue si celui-ci n’est pas cohérent avec package.json.

  1. Examiner le script de test, le script de lint et le script de build. Corriger les contrôles localement sur une branche de travail.
  2. Vérifier la présence de package-lock.json dans le dépôt ; ne pas remplacer npm ci par un npm install silencieux en CI.
  3. Identifier la version LTS de Node.js utilisée par le projet et l’exécuteur CI.
Exemple techniqueÀ adapter à votre environnement
node --version
npm --version
npm ci
npm run lint --if-present
npm test
npm run build
Ce qui se passe à cette étape
1package.json
2package-lock.json
3Contrôles locaux

À vérifier : Les dépendances et les commandes du projet fonctionnent sur un poste de recette avec un lockfile cohérent.

Point de vigilance : --if-present évite une erreur lorsqu’un script manque ; il ne prouve pas qu’un test existe. En production, exiger explicitement les scripts attendus.

02

ÉTAPE 2 / 6

Créer le fichier de workflow GitHub Actions

Le fichier YAML versionné rend la procédure reproductible et permet de revoir toute modification du pipeline.

  1. Ajouter .github/workflows/ci.yml dans une branche dédiée.
  2. Déclarer pull_request sur main et push sur main ; limiter les permissions du GITHUB_TOKEN à contents: read.
  3. Choisir un runner explicite et des actions référencées par SHA complet, suivant la politique de sécurité.
Exemple techniqueÀ adapter à votre environnement
name: CI Node.js
on:
  pull_request:
    branches: [main]
  push:
    branches: [main]
permissions:
  contents: read
jobs:
  checks:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          persist-credentials: false
      - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
        with:
          node-version: '22'
          cache: npm
      - run: npm ci
      - run: npm run lint --if-present
      - run: npm test
      - run: npm run build
Ce qui se passe à cette étape
1Workflow YAML
2Pull request main
3Job checks

À vérifier : Le workflow est versionné dans le bon chemin et son job unique s’appelle checks.

Point de vigilance : Les SHA des actions indiqués illustrent des versions précises. Examiner les versions supportées, mises à jour de sécurité et exigences des runners avant réutilisation.

03

ÉTAPE 3 / 6

Ouvrir une pull request et déclencher les contrôles

La validation doit porter sur le code proposé, avant son intégration à main.

  1. Pousser la branche contenant le workflow et ouvrir une pull request ciblant main.
  2. Ouvrir les onglets Checks et Actions, puis vérifier l’apparition du job checks dans la bonne exécution.
  3. Examiner les journaux d’échec sans y publier de secrets ni de données sensibles.
Exemple techniqueÀ adapter à votre environnement
git status --short
git add .github/workflows/ci.yml
git commit -m "ci: ajouter les controles Node.js"
git push -u origin ma-branche-ci
# Dans GitHub : Pull requests > New pull request
Ce qui se passe à cette étape
1Commit
2PR
3Checks

À vérifier : La pull request affiche une exécution du workflow CI Node.js et un statut de job exploitable.

Point de vigilance : Remplacer ma-branche-ci par le nom de la branche créée. Le workflow ne doit pas utiliser pull_request_target pour exécuter du code non approuvé.

04

ÉTAPE 4 / 6

Interpréter les erreurs sans contourner les contrôles

Une CI fiable distingue les erreurs de code, d’environnement et de dépendances.

  1. Si npm ci échoue, vérifier la cohérence du lockfile et les éventuels paquets privés nécessitant une politique d’accès.
  2. Si un test ou la compilation échoue, corriger le code sur la branche et pousser un nouveau commit.
  3. Comparer le contexte d’exécution CI à l’environnement local : version Node.js, variables requises et services externes.
Exemple techniqueÀ adapter à votre environnement
# Diagnostic local (sur une branche de recette)
node --version
npm ci
npm test
npm run build
# Corriger la source puis relancer la PR.
Ce qui se passe à cette étape
1Erreur identifiée
2Correction PR
3Nouvelle CI

À vérifier : Les contrôles reflètent les résultats du code soumis et le job ne passe pas artificiellement au vert.

Point de vigilance : Ne pas utiliser continue-on-error sur un contrôle qui doit bloquer la fusion et ne pas désactiver les tests pour obtenir un statut vert.

05

ÉTAPE 5 / 6

Relier le job CI aux règles de fusion de main

Un workflow informatif ne bloque pas la fusion tant qu’un ruleset ne rend pas le contrôle obligatoire.

  1. Attendre qu’au moins une exécution du job checks apparaisse dans le dépôt.
  2. Dans Settings > Rules > Rulesets, viser main et exiger la réussite du contrôle publié par le workflow CI Node.js.
  3. Tester le blocage sur une pull request de recette et vérifier l’obligation de revue si elle est activée.
Exemple techniqueÀ adapter à votre environnement
# GitHub > Settings > Rules > Rulesets
# Require a pull request before merging
# Require status checks to pass
# Sélectionner le contrôle « checks » du workflow CI Node.js.
Ce qui se passe à cette étape
1CI checks
2Ruleset
3Fusion autorisée

À vérifier : Une pull request dont les contrôles requis échouent ne peut pas être fusionnée sur main.

Point de vigilance : Ne sélectionner que les contrôles réellement publiés ; leur nom peut être préfixé par le nom du workflow dans l’interface GitHub.

06

ÉTAPE 6 / 6

Stabiliser le pipeline et encadrer les évolutions

Les workflows sont du code opérationnel : leurs dépendances et leurs permissions doivent être maintenues.

  1. Attribuer la maintenance des workflows et protéger .github/workflows avec une revue dédiée si la gouvernance l’exige.
  2. Conserver les permissions minimales, désactiver les écritures non nécessaires et éviter les secrets dans les workflows de PR.
  3. Faire évoluer progressivement les contrôles : tests obligatoires, analyse de dépendances et vérifications de sécurité adaptées au dépôt.
Exemple techniqueÀ adapter à votre environnement
# Checklist avant généralisation
# Permissions GITHUB_TOKEN minimales
# Actions référencées par commit SHA approuvé
# Dépendances installées avec npm ci
# Statuts requis seulement après recette
# Aucun secret exposé aux pull requests non fiables
Ce qui se passe à cette étape
1Qualité
2Sécurité
3Maintenance

À vérifier : Les responsables du pipeline, ses contrôles bloquants et sa procédure d’évolution sont documentés.

Point de vigilance : Ce pipeline vérifie un projet Node.js ; il ne constitue pas à lui seul un déploiement continu, ni une validation fonctionnelle exhaustive.

RÉFÉRENCES TECHNIQUES

Documentation officielle

Retrouvez les prérequis, les fonctionnalités et les versions prises en charge par GitHub. Vérifiez les commandes sur un environnement de test avant leur utilisation en production.

Consulter la documentation officielle

05 · RECETTE

Comment vérifier que tout fonctionne ?

Résultat attenduContrôles avant de considérer la procédure terminée
01

Le fichier .github/workflows/ci.yml est présent sur la branche et sa syntaxe est acceptée par GitHub Actions.

02

La pull request déclenche le job checks sur un runner GitHub-hosted sans secret de déploiement.

03

npm ci installe les dépendances verrouillées ; tests et build produisent des statuts lisibles.

04

Un échec de test provoque l’échec du job et bloque la fusion lorsque le ruleset exige ce contrôle.

05

Les permissions du token sont en lecture seule et les actions sont référencées par SHA complet.

06 · DIAGNOSTIC

Problèmes fréquents et résolution

Aucune exécution

Cause probable : Workflow non présent dans la branche, Actions désactivé ou événement non déclenché

Que faire : Vérifier le chemin .github/workflows/ci.yml, les autorisations et la PR cible.

npm ci échoue

Cause probable : Lockfile absent ou incohérent avec package.json

Que faire : Mettre à jour et committer le lockfile depuis une branche validée.

Job vert sans tests

Cause probable : Scripts absents et usage de --if-present

Que faire : Définir les scripts réellement exigés et retirer --if-present pour les contrôles obligatoires.

Contrôle requis introuvable

Cause probable : Job non exécuté ou libellé différent

Que faire : Exécuter une PR de test et relever le nom du contrôle dans Checks.

07 · QUESTIONS PRATIQUES

Questions fréquentes

Quelle différence entre CI et CD sur GitHub ?

La CI exécute automatiquement des contrôles sur les changements. La livraison ou le déploiement continu requiert une phase supplémentaire et des droits distincts.

Pourquoi utiliser npm ci ?

npm ci s’appuie sur le fichier de verrouillage et échoue si la définition des dépendances est incohérente, ce qui améliore la reproductibilité.

Faut-il mettre des secrets dans ce workflow ?

Non pour ce pipeline de tests. Les accès de déploiement, s’ils sont nécessaires ailleurs, doivent être gérés séparément avec les permissions minimales et des approbations adaptées.

Peut-on exiger un contrôle jamais exécuté ?

Il vaut mieux faire fonctionner le workflow sur une pull request de recette, puis sélectionner le job publié dans les règles de fusion.

AUTRES TECHNOLOGIES

Guides complémentaires

Tous les guides GitHub

VOTRE ENVIRONNEMENT

Besoin d’aller plus loin sur votre environnement ?

Gouvernance, CI/CD et pratiques DevOps : échangeons sur la sécurité et la fiabilité de vos workflows GitHub.

Échanger avec ADN Consulting

Pour aller plus loin