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.
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
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
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.
É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.
- Examiner le script de test, le script de lint et le script de build. Corriger les contrôles localement sur une branche de travail.
- 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.
- Identifier la version LTS de Node.js utilisée par le projet et l’exécuteur CI.
node --version
npm --version
npm ci
npm run lint --if-present
npm test
npm run buildÀ 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.
É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.
- Ajouter .github/workflows/ci.yml dans une branche dédiée.
- Déclarer pull_request sur main et push sur main ; limiter les permissions du GITHUB_TOKEN à contents: read.
- Choisir un runner explicite et des actions référencées par SHA complet, suivant la politique de sécurité.
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À 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.
É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.
- Pousser la branche contenant le workflow et ouvrir une pull request ciblant main.
- Ouvrir les onglets Checks et Actions, puis vérifier l’apparition du job checks dans la bonne exécution.
- Examiner les journaux d’échec sans y publier de secrets ni de données sensibles.
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À 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é.
É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.
- Si npm ci échoue, vérifier la cohérence du lockfile et les éventuels paquets privés nécessitant une politique d’accès.
- Si un test ou la compilation échoue, corriger le code sur la branche et pousser un nouveau commit.
- Comparer le contexte d’exécution CI à l’environnement local : version Node.js, variables requises et services externes.
# Diagnostic local (sur une branche de recette)
node --version
npm ci
npm test
npm run build
# Corriger la source puis relancer la PR.À 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.
É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.
- Attendre qu’au moins une exécution du job checks apparaisse dans le dépôt.
- Dans Settings > Rules > Rulesets, viser main et exiger la réussite du contrôle publié par le workflow CI Node.js.
- Tester le blocage sur une pull request de recette et vérifier l’obligation de revue si elle est activée.
# 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.À 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.
É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.
- Attribuer la maintenance des workflows et protéger .github/workflows avec une revue dédiée si la gouvernance l’exige.
- Conserver les permissions minimales, désactiver les écritures non nécessaires et éviter les secrets dans les workflows de PR.
- Faire évoluer progressivement les contrôles : tests obligatoires, analyse de dépendances et vérifications de sécurité adaptées au dépôt.
# 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À 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.
05 · RECETTE
Comment vérifier que tout fonctionne ?
Le fichier .github/workflows/ci.yml est présent sur la branche et sa syntaxe est acceptée par GitHub Actions.
La pull request déclenche le job checks sur un runner GitHub-hosted sans secret de déploiement.
npm ci installe les dépendances verrouillées ; tests et build produisent des statuts lisibles.
Un échec de test provoque l’échec du job et bloque la fusion lorsque le ruleset exige ce contrôle.
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
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