Tutoriel GitHub Actions : Automatiser CI/CD pour vos Projets en 2026
Tutoriel GitHub Actions : Automatiser CI/CD pour vos Projets en 2026
Tutoriel GitHub Actions étape par étape. Apprenez à automatiser les tests, builds et déploiements avec des exemples pratiques pour Node.js et Python.
Pourquoi Automatiser avec CI/CD ?
Imaginez ce scénario : votre équipe compte 10 développeurs qui commitent des dizaines de fois par jour. Si après chaque fusion de code il faut manuellement lancer les tests, faire le build et déployer, ce n'est pas seulement inefficace, c'est aussi source d'erreurs. C'est exactement ce que résout CI/CD (Intégration Continue/Déploiement Continu).
GitHub Actions est l'outil CI/CD natif de GitHub – totalement gratuit pour les dépôts publics (illimité), avec 2 000 minutes gratuites par mois pour les dépôts privés. Profondément intégré à GitHub, simple à configurer et puissant, il s'est imposé en 2026 comme l'outil standard des équipes de développement.
Concepts Fondamentaux
| Concept | Explication |
|---|---|
| Workflow | Définition complète d'un processus d'automatisation (fichier YAML) |
| Event | Déclencheur d'un workflow (push, PR, timer, etc.) |
| Job | Unité d'exécution dans le workflow, tourne sur une VM dédiée |
| Step | Opération individuelle dans un job – commande ou Action |
| Action | Unité d'automatisation réutilisable, disponible sur le Marketplace |
| Runner | VM qui exécute le workflow (hébergée par GitHub ou auto-hébergée) |
Votre Premier Workflow GitHub Actions
Les fichiers de workflow doivent être stockés dans le répertoire .github/workflows/ :
# .github/workflows/bonjour-monde.yml
name: Mon premier workflow
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
accueillir:
runs-on: ubuntu-latest
steps:
- name: Afficher le message de bienvenue
run: echo "Bonjour, GitHub Actions !"
- name: Vérifier l'environnement
run: |
echo "Système : $(uname -a)"
echo "Version Node.js : $(node --version)"
echo "Version Python : $(python3 --version)"
Workflow CI/CD Complet pour Node.js
# .github/workflows/node-ci.yml
name: Node.js CI/CD
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
name: Tests
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
steps:
- name: Récupérer le code
uses: actions/checkout@v4
- name: Configurer Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Installer les dépendances
run: npm ci
- name: Vérification du linting
run: npm run lint
- name: Lancer les tests unitaires
run: npm test -- --coverage
- name: Uploader le rapport de couverture
uses: codecov/codecov-action@v4
if: matrix.node-version == '20.x'
with:
token: ${{ secrets.CODECOV_TOKEN }}
build:
name: Build
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'npm'
- run: npm ci
- run: npm run build
- name: Uploader les artefacts de build
uses: actions/upload-artifact@v4
with:
name: build-files
path: dist/
retention-days: 7
deploy:
name: Déploiement en production
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
environment: production
steps:
- uses: actions/checkout@v4
- name: Télécharger les artefacts de build
uses: actions/download-artifact@v4
with:
name: build-files
path: dist/
- name: Déployer sur le serveur
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
script: |
cd /var/www/myapp
git pull origin main
npm ci --production
pm2 restart myapp
Workflow CI pour Projet Python
# .github/workflows/python-ci.yml
name: Python CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4
- name: Configurer Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Installer les dépendances
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-cov black flake8 mypy
- name: Vérifier le formatage du code (black)
run: black --check .
- name: Vérifier la qualité du code (flake8)
run: flake8 . --max-line-length=100
- name: Vérification des types (mypy)
run: mypy src/
- name: Lancer les tests
run: pytest tests/ -v --cov=src --cov-report=xml
- name: Uploader la couverture
uses: codecov/codecov-action@v4
if: matrix.python-version == '3.12'
docker:
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Se connecter à Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extraire les métadonnées
id: meta
uses: docker/metadata-action@v5
with:
images: monnom/mon-app
tags: |
type=ref,event=branch
type=sha,prefix=sha-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
- name: Construire et pousser l'image Docker
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max
Gestion des Secrets
Les données sensibles (clés API, mots de passe, clés SSH) ne doivent jamais apparaître dans le code. GitHub Actions fournit une gestion sécurisée des secrets.
Ajouter des Secrets
- Ouvrir le dépôt → Settings → Secrets and variables → Actions
- Cliquer sur "New repository secret"
- Saisir le nom (ex :
DEPLOY_SSH_KEY) et la valeur
Utiliser dans le Workflow
steps:
- name: Utiliser les secrets
env:
API_KEY: ${{ secrets.API_KEY }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
run: |
echo "API_KEY=$API_KEY" >> .env
# Important : ne jamais afficher les secrets dans les logs !
Optimisation du Cache : Accélérer les Workflows
# Mettre en cache les dépendances npm
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm' # Support de cache intégré
# Ou configuration manuelle
- name: Mettre en cache node_modules
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
# Cache pip Python
- uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: 'pip'
Un bon usage du cache peut réduire les temps d'exécution des workflows de plusieurs minutes à quelques secondes.
Builds en Matrice : Tests Multi-Environnements
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node: [18, 20, 22]
exclude:
- os: windows-latest
node: 18
fail-fast: false # L'échec d'une combinaison ne stoppe pas les autres
runs-on: ${{ matrix.os }}
Tâches Planifiées
on:
schedule:
# Chaque jour à 01h00 UTC (02h00 heure de Paris)
- cron: '0 1 * * *'
# Chaque lundi à 09h00 UTC
- cron: '0 9 * * 1'
Cas d'usage courants pour les tâches planifiées :
- Analyse des vulnérabilités de sécurité dans les dépendances
- Sauvegardes de données
- Benchmarks de performance
- Synchronisation périodique de données
Protection des Environnements
Pour les déploiements en production, des règles d'approbation peuvent être configurées :
deploy:
environment:
name: production
url: https://mon-app.fr
# Les approbateurs doivent être configurés dans les paramètres du dépôt
Actions Recommandées
| Action | Utilisation |
|---|---|
| actions/checkout | Récupérer le code (toujours nécessaire) |
| actions/setup-node | Configurer l'environnement Node.js |
| actions/setup-python | Configurer l'environnement Python |
| actions/cache | Mettre en cache les dépendances |
| actions/upload-artifact | Uploader les artefacts de build |
| docker/build-push-action | Construire et pousser les images Docker |
| appleboy/ssh-action | Déploiement SSH distant |
| codecov/codecov-action | Uploader la couverture de code |
Conclusion
GitHub Actions est une infrastructure centrale du développement logiciel moderne. Avec ce tutoriel, vous avez appris :
- La structure de base des workflows et les concepts fondamentaux
- Les pipelines CI/CD complets pour Node.js et Python
- La gestion des secrets et les pratiques de sécurité
- L'optimisation du cache et les builds en matrice
- Les tâches planifiées et la protection des environnements
Configurez CI/CD pour vos projets dès aujourd'hui. Même la suite de tests automatisée la plus simple améliore significativement la qualité du code et la collaboration en équipe. Au fil de l'expérience, faites évoluer votre pipeline d'automatisation et faites de GitHub Actions votre assistant d'automatisation le plus fiable.