Aller au contenu principal

CI/CD et Deploiement

Pipeline GitLab CI/CD

Configuration (.gitlab-ci.yml)

Le pipeline est configuré avec les règles suivantes:

  • Exécution : Sur tous les commits de toutes les branches
  • Exclusions : Pas de pipeline sur les merge requests ni sur la branche prod
  • Image : jakzal/phpqa:php8.1-alpine (outils PHP QA sur PHP 8.1)

Stages

Un seul stage : test

Jobs

1. phpstan (bloquant)

stage: test
image: jakzal/phpqa:php8.1-alpine
script:
- composer install -n --no-progress --no-scripts --ignore-platform-req=*
- phpstan analyse --no-progress
  • Niveau : 5 (avec baseline)
  • Chemins analysés : application/
  • Répertoires scannés : library/
  • Exclusions : application/modules/cms/Newsletters, application/modules/cms/models/Newsletters
  • Baseline : phpstan-baseline.neon (387KB de suppressions d'erreurs legacy)
  • Status : Bloquant - le pipeline échoue si des erreurs sont détectées

2. phpstan-level0 (non-bloquant)

stage: test
image: jakzal/phpqa:php8.1-alpine
script:
- composer install -n --no-progress --no-scripts --ignore-platform-req=*
- phpstan analyse --no-progress -c phpstan-level0.neon
allow_failure: true
  • Niveau : 0 (moins strict, sans baseline)
  • Status : Non-bloquant (allow_failure: true)

3. security-checker (non-bloquant)

stage: test
image: jakzal/phpqa:php8.1-alpine
script:
- local-php-security-checker security:check composer.lock
allow_failure: true
  • Outil : local-php-security-checker
  • Cible : composer.lock
  • Status : Non-bloquant (allow_failure: true)

Cache

  • Cache Composer par branche : .composer-cache avec clé composer-${CI_COMMIT_REF_NAME}

Secret Detection

  • Template GitLab inclus : Security/Secret-Detection.gitlab-ci.yml

PHPStan

Configuration principale (phpstan.neon.dist)

includes:
- phpstan-baseline.neon
parameters:
level: 5
paths:
- application
scanDirectories:
- library
excludePaths:
analyse:
- application/modules/cms/Newsletters
- application/modules/cms/models/Newsletters
reportUnmatchedIgnoredErrors: false

Configuration level 0 (phpstan-level0.neon)

Même chemins et exclusions mais sans baseline et au niveau 0.

Baseline (phpstan-baseline.neon)

Fichier de 387KB contenant les suppressions d'erreurs pour le code legacy Zend Framework:

  • Propriétés non définies sur les classes Zend
  • Méthodes non définies
  • Constantes manquantes (APPLICATION_ENV, APPLICATION_PATH)
  • Conditions toujours fausses

Configuration Docker

Développement (docker-compose.yml)

4 services:

  1. php : PHP-FPM 7.0 + Nginx

    • Build depuis docker/php/Dockerfile
    • Volume monté pour le code source
    • Volume externe file-service_data
    • Timezone: Europe/Brussels
  2. notifier : Service push notifications

    • Image: gitlab.redange.fr-team.lu:5050/focus/frontend/notifier/notifier:latest
    • JWT authentication via PUSH_KEY
    • Port 8080
  3. mail : MailDev

    • SMTP: port 1025
    • Interface web: port 1080
    • Capture tous les emails en développement
  4. compass : Compilateur SCSS

    • Image: rubygem/compass
    • Watch mode avec polling sur /public/cms
    • Compilation automatique des .scss en .css

Production

  • Image PHP depuis le registre GitLab privé (gitlab.redange.fr-team.lu:5050)
  • Configuration via docker/php-full/ pour l'image complète
  • Pas de MailDev ni Compass en production
  • Configuration application.ini avec vraies clés API
Infrastructure

Pour les details sur le cluster Docker Swarm et les instances GCP, voir Infrastructure de Production.

Deploiement

Fichier de version

make build génère public/cms/version.txt contenant les informations du commit (hash, date).

Variables d'environnement

Configurées dans .env:

  • DOCKER_SERVICE_PORTS_RADIX : Préfixe des ports (défaut: 8)
  • CI_REGISTRY : Registre Docker GitLab
  • PUSH_KEY : Clé JWT pour notifications push

Convention de tags

Le pattern de tags prod est défini dans le CI: /^20[2-5]\d{5}\.\d+.*/ (format: YYYYMMDD.N)