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-cacheavec 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:
-
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
-
notifier : Service push notifications
- Image: gitlab.redange.fr-team.lu:5050/focus/frontend/notifier/notifier:latest
- JWT authentication via PUSH_KEY
- Port 8080
-
mail : MailDev
- SMTP: port 1025
- Interface web: port 1080
- Capture tous les emails en développement
-
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 GitLabPUSH_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)