CI/CD : les fondamentaux

Intégration Continue (CI)

La CI automatise la vérification du code à chaque commit :

  • Compilation et build
  • Exécution des tests
  • Analyse de code (linting, sécurité)
  • Vérification des types (TypeScript)

Déploiement Continu (CD)

Le CD automatise la mise en production après validation :

  • Build de l’image Docker
  • Push vers le registre
  • Déploiement sur le serveur
  • Vérification post-déploiement

Chez Lueur Externe, chaque projet dispose d’un pipeline CI/CD complet.

Pipeline GitLab CI

Configuration de base

stages:
  - lint
  - test
  - build
  - deploy

variables:
  NODE_VERSION: "20"

lint:
  stage: lint
  image: node:${NODE_VERSION}-alpine
  script:
    - npm ci
    - npm run lint
    - npx tsc --noEmit

test:
  stage: test
  image: node:${NODE_VERSION}-alpine
  script:
    - npm ci
    - npx vitest run --coverage
  coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/'
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml

build:
  stage: build
  image: docker:24
  services:
    - docker:24-dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  only:
    - main

deploy:
  stage: deploy
  script:
    - ssh $DEPLOY_USER@$DEPLOY_HOST "
        docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA &&
        docker compose up -d"
  only:
    - main
  environment:
    name: production
    url: https://monsite.fr

GitHub Actions (alternative)

name: CI/CD
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npx vitest run

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - run: docker build -t app .
      - run: docker push app

Bonnes pratiques

Tests obligatoires

Aucun merge sans tests verts. Configurez la protection de branche :

  • Tests unitaires : obligatoires
  • Tests d’intégration : obligatoires
  • Tests E2E : sur les branches principales
  • Coverage minimum : 80 %

Déploiement atomique

Chaque déploiement est une unité indivisible :

  • Nouvelle version déployée en parallèle
  • Bascule du trafic instantanée
  • Rollback en une commande si problème

Secrets et variables

Ne jamais commiter de secrets dans le code :

  • Utilisez les variables CI/CD de GitLab/GitHub
  • Chiffrez les secrets sensibles
  • Rotez les clés régulièrement

Notifications

Configurez des alertes sur :

  • Échec de pipeline
  • Déploiement réussi
  • Régression de performance
  • Erreurs en production

Monitoring post-déploiement

Après chaque déploiement, vérifiez automatiquement :

  • Le site répond (health check)
  • Les performances sont stables (Lighthouse CI)
  • Pas d’erreurs JavaScript en console
  • Les métriques business sont normales

Notre pipeline chez Lueur Externe

Sur ce site satellite, notre pipeline Lueur Externe inclut :

  1. Linting TypeScript et CSS
  2. 400+ tests automatisés (unitaires + property-based)
  3. Build Astro avec optimisation des assets
  4. Build Docker multi-stage
  5. Déploiement via Docker Compose
  6. Health check post-déploiement

Conclusion

Le CI/CD est un investissement qui paie dès le premier déploiement. Il réduit les erreurs humaines, accélère les livraisons et améliore la confiance de l’équipe. Contactez Lueur Externe pour mettre en place votre pipeline CI/CD.