Mettre en place un pipeline CI/CD avec GitHub Actions
Pipeline CI/CD configurer avec GitHub Actions
Cet article explique comment configurer une pipeline CI/CD avec GitHub Actions, destiné aux développeurs qui veulent automatiser leur processus de build, de test et de déploiement.
Prérequis
- Un compte GitHub avec un dépôt contenant votre code - Git 2.40.0 ou plus récent installé sur votre machine locale - Accès aux paramètres du dépôt (droits `write` au minimum) - Un projet avec un langage de programmation pris en charge (Node.js 20.x, Python 3.11, Java 17, ou équivalent) - Facultatif : une cible de déploiement comme un VPS, une plateforme cloud, ou un registre de conteneurs
Étapes
1. Créez le répertoire des workflows
GitHub Actions lit les fichiers de workflow depuis le répertoire `.github/workflows` à la racine de votre dépôt. Créez ce répertoire :
mkdir -p .github/workflows
2. Créez le fichier de workflow
Créez un nouveau fichier nommé `ci.yml` dans le répertoire `.github/workflows`. Ce fichier définit la pipeline complète au format YAML.
touch .github/workflows/ci.yml
3. Définissez le déclencheur du workflow
Ouvrez `.github/workflows/ci.yml` dans votre éditeur. Commencez par le nom du workflow et les déclencheurs. Le déclencheur `push` démarre la pipeline à chaque commit vers `main`, le déclencheur `pull_request` à chaque pull request vers `main` :
name: CI/CD Pipeline</p><p>on:
push:
branches: [main]
pull_request:
branches: [main]4. Configurez le job de build
Ajoutez un job qui construit le projet. Ce job s'exécute sur un runner Ubuntu avec Node.js 20. L'action `actions/checkout@v4` récupère le code, et `actions/setup-node@v4` installe la version correcte de Node.js :
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build5. Ajoutez un job de test
Ajoutez un deuxième job qui exécute les tests. Ce job dépend du job de build via `needs`, afin que les tests ne s'exécutent que si le build réussit. Utilisez `actions/upload-artifact@v4` pour conserver les résultats du build :
test:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
- uses: actions/upload-artifact@v4
with:
name: test-results
path: test-results/6. Ajoutez un job de déploiement
Ajoutez un job de déploiement qui ne s'exécute que lors des pushes vers `main`, pas lors des pull requests. Utilisez `if` pour vérifier cela. Ce job utilise des secrets pour les identifiants — conservez-les dans les paramètres du dépôt sous Settings → Secrets and variables → Actions :
deploy:
needs: test
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run build
- name: Deploy to production
run: |
rsync -avz --delete dist/ user@yourserver.com:/var/www/html/
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}7. Committez et poussez
Committez les fichiers de workflow et poussez-les vers GitHub. La pipeline démarre automatiquement :
git add .github/workflows/ci.yml
git commit -m "Add CI/CD pipeline with GitHub Actions"
git push origin main8. Vérifiez l'exécution du workflow
Allez sur votre dépôt GitHub. Cliquez sur l'onglet Actions dans la barre de navigation supérieure. Vous verrez le workflow qui vient de démarrer. Cliquez dessus pour suivre l'exécution de chaque étape. Les messages d'erreur apparaissent directement dans le journal d'exécution.
Vérification
Vérifiez que la pipeline fonctionne correctement en consultant le statut de la dernière exécution :
gh run list --limit 5
Cette commande affiche les cinq dernières exécutions de workflow avec leur statut (`completed`, `success`, `failure`). Vous aurez besoin de la CLI GitHub (version 2.40.0 ou plus récente), installée et authentifiée avec `gh auth login`.
Problèmes fréquents
1. Le workflow ne démarre pas
Vérifiez que le fichier `ci.yml` se trouve exactement dans `.github/workflows/`, pas dans un sous-répertoire. Vérifiez aussi que la syntaxe YAML est correcte — une indentation incorrecte d'un seul espace fait que GitHub ignore le fichier. Validez la syntaxe avec `npx yaml-lint .github/workflows/ci.yml`.
2. `npm ci` échoue avec "package-lock.json not found"
`npm ci` nécessite un fichier `package-lock.json`. Générez-le localement avec `npm install` et committez le fichier, ou remplacez `npm ci` par `npm install` dans le workflow.
3. Le déploiement échoue avec "Permission denied (publickey)"
La clé SSH que vous avez placée dans le secret `SSH_PRIVATE_KEY` doit correspondre à une clé publique dans le fichier `authorized_keys` de l'utilisateur cible sur le serveur. Testez d'abord la connexion manuellement depuis votre machine locale avec `ssh -i /chemin/vers/clé user@yourserver.com` avant de relancer la pipeline.
Cette configuration vous donne une pipeline CI/CD fonctionnelle avec des phases de build, de test et de déploiement séparées. Vous pouvez étendre les jobs avec des étapes supplémentaires comme des builds de conteneurs, des analyses de sécurité ou des notifications — mais la structure de base reste la même. La question n'est pas de savoir si votre pipeline échouera, mais quand — et à quelle vitesse vous saurez trouver les journaux qui expliquent pourquoi.