Introduction à CI/CD et GitHub Actions pour JavaScript
Le développement moderne d'applications JavaScript sur Node.js nécessite non seulement un code de qualité, mais aussi un processus fiable pour le livrer aux utilisateurs. CI/CD (Continuous Integration / Continuous Deployment) est un ensemble de pratiques qui permet d'automatiser la construction, les tests et le déploiement du code. L'un des outils les plus populaires pour mettre en œuvre CI/CD est GitHub Actions — un système d'automatisation de workflow intégré à la plateforme GitHub.
Dans cet article, nous allons détailler comment configurer CI/CD pour un projet JavaScript (Node.js) en utilisant GitHub Actions. Vous apprendrez à créer des pipelines, exécuter des tests, effectuer du linting, builder le projet et le déployer automatiquement sur un serveur ou un hébergement cloud. Ce contenu sera utile aussi bien aux développeurs débutants qu'aux ingénieurs expérimentés souhaitant optimiser le processus de développement.
Les bases de GitHub Actions : structure et syntaxe
GitHub Actions fonctionne avec des fichiers YAML, stockés dans le répertoire .github/workflows de votre dépôt. Chacun de ces fichiers définit un ou plusieurs workflows, qui sont déclenchés par des événements spécifiques : push, pull request, création de release, etc.
La structure de base d'un workflow comprend :
- name — le nom du pipeline ;
- on — l'événement qui déclenche l'exécution ;
- jobs — un ensemble de tâches exécutées séquentiellement ou en parallèle ;
- steps — les étapes à l'intérieur de chaque tâche (commandes, actions).
Voici un exemple minimal pour un projet Node.js :
name: Node.js CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
Dans cet exemple, nous utilisons des actions intégrées : actions/checkout pour cloner le dépôt et actions/setup-node pour installer la version souhaitée de Node.js. La commande npm ci installe les dépendances strictement selon package-lock.json, et npm test exécute les tests.
Configuration des tests et du linting
Un pipeline CI/CD de qualité pour un projet JavaScript doit inclure la vérification de la conformité du code aux normes et des tests automatisés. Voici un exemple avancé utilisant des outils populaires : ESLint pour le linting, Jest pour les tests et Prettier pour le formatage.
Ajoutons les dépendances nécessaires au projet :
npm install --save-dev eslint jest prettier eslint-config-prettier
Créons un fichier de configuration .eslintrc.json :
{
"env": {
"node": true,
"es2021": true,
"jest": true
},
"extends": ["eslint:recommended", "prettier"],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
"no-console": "warn",
"semi": ["error", "always"]
}
}
Mettons maintenant à jour le fichier de workflow :
name: Lint and Test
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run linter
run: npx eslint .
- name: Check formatting
run: npx prettier --check .
- name: Run tests
run: npm test
- name: Upload test coverage
```