W08
CI/CD & Automatisation
GitHub Actions, pipelines lintâtestâbuildâdeploy, conditions, matrix et cache npm.
⥠1. Qu'est-ce que le CI/CD ?
- CI (Continuous Integration) â vĂ©rifier automatiquement que le code compile, passe les tests et respecte les rĂšgles de qualitĂ© Ă chaque push
- CD (Continuous Deployment) â dĂ©ployer automatiquement en production quand le CI passe sur la branche principale
Bénéfices
- Détection précoce des régressions (pas besoin d'attendre le dev lead)
- Déploiements cohérents et reproductibles
- Réduction des erreurs humaines
- Feedback rapide sur les pull requests
Un pipeline CI/CD simple :
git push â lint â tests â build â deploy. Si une Ă©tape Ă©choue, le pipeline s'arrĂȘte et vous recevez une notification.đ 2. GitHub Actions
GitHub Actions est le systÚme CI/CD intégré à GitHub. Gratuit pour les dépÎts publics et généreux pour les privés (2000 minutes/mois).
Concepts clés
| Concept | Description |
|---|---|
workflow | Fichier YAML dans .github/workflows/ |
on: | ĂvĂ©nements dĂ©clencheurs (push, PR, schedule...) |
jobs: | Groupes de steps qui s'exécutent sur une machine virtuelle |
steps: | Commandes individuelles dans un job |
uses: | Action réutilisable (ex: actions/checkout@v4) |
run: | Commande shell à exécuter |
secrets: | Variables sensibles (tokens, clés API) |
đ 3. Pipeline complet
name: CI/CD Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run build
deploy-vercel:
needs: ci
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci && npm run build
- run: npx vercel --prod --token=${{ secrets.VERCEL_TOKEN }}
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
đ 4. Conditions & Secrets
Conditions
# Exécuter seulement sur main
if: github.ref == 'refs/heads/main'
# Exécuter si le job précédent a réussi
if: success()
# ExĂ©cuter mĂȘme en cas d'Ă©chec (pour cleanup)
if: always()
# Combiner des conditions
if: github.ref == 'refs/heads/main' && success()
Secrets
# Utiliser un secret dans un step
- run: npx vercel --token=${{ secrets.VERCEL_TOKEN }}
# Passer comme variable d'environnement
- run: npm run deploy
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
Ajoutez les secrets dans GitHub : Settings â Secrets and Variables â Actions â New repository secret. Ils sont masquĂ©s dans les logs et accessibles via
${{ secrets.NOM }}.đČ 5. Matrix builds
Testez sur plusieurs versions de Node.js ou plusieurs OS en parallĂšle.
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: npm
- run: npm ci && npm test
cache: npm dans actions/setup-node met en cache ~/.npm automatiquement. Peut rĂ©duire le temps d'installation de 30-60 secondes.đ 6. Exemples de dĂ©ploiement
Déploiement Netlify via CI
deploy-netlify:
needs: ci
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci && npm run build
- run: npx netlify-cli deploy --dir=dist --prod
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
Déploiement VPS via SSH
deploy-vps:
needs: ci
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPS_HOST }}
username: ubuntu
key: ${{ secrets.VPS_SSH_KEY }}
script: |
cd /var/www/mon-app
git pull origin main
npm ci
npm run build
pm2 restart mon-api