Pipeline internal-api
Pipeline — internal-api
Section intitulée « Pipeline — internal-api »Version métier : voir internal-api — vue métier.
Contexte
Section intitulée « Contexte »internal-api est l’API Symfony 6 / PHP 8.2 d’erevo. Elle centralise les entités métier (apprenants, formateurs, sessions DPC, classes virtuelles, rappels, produits, versions de formation) et fournit le backend EasyAdmin utilisé par les équipes CSM et IT. Le dépôt GitLab est w-ap.fr/erevo/internal-api.
Workflow de déclenchement
Section intitulée « Workflow de déclenchement »Défini dans .gitlab-ci.yml (workflow.rules) :
$CI_PIPELINE_SOURCE == "schedule"→ le pipeline tourne toujours, avec les seuls jobs déclarés dansci-jobs/.scheduled-ci.yml(inclus viainclude: rules: if: '$CI_PIPELINE_SOURCE == "schedule"'). Les jobs standard sont filtrés par.standard_job_rules(jamais exécutés sur schedule).- Branche
master/main→APP_ENV=prod - Branche
staging→APP_ENV=staging - Branches
dev/tests→APP_ENV=dev
| Stage | Quand | Rôle |
|---|---|---|
install_dependencies | push (composer.lock changé, branches dev/staging/master) | composer install dans un cache vendor/ partagé |
tests | push (hors schedule) | PHPUnit avec services MariaDB 10.5, RabbitMQ 3.9, MinIO ; fixtures Doctrine chargées |
codelint | push (hors schedule) | PHPStan niveau 5 sur src/ |
build | push (hors schedule) | docker build → docker push vers $DOCKER_REPO/$APP_NAME:$APP_ENV |
deploy | push sur master ou staging, gate manual | SSH vers $APP_URL, reset conteneur, docker run avec env vars de prod |
backup | schedule SCHEDULE_TYPE=backup | Voir Backup base de données |
clean-backup | schedule SCHEDULE_TYPE=clean-backup | Voir Purge des backups |
daily_check_reminders | schedule SCHEDULE_TYPE=check_reminders | Voir Vérification des rappels |
setup_student_showcase | schedule SCHEDULE_TYPE=student_showcase_recommended_products | Voir Vitrine & upsell apprenants |
ogdpc_extract | schedule SCHEDULE_TYPE=ogdpc_extract ou ogdpc_reconcile_session_dates | Voir Extraction OGDPC et Rapprochement dates |
Jobs standard (hors schedule)
Section intitulée « Jobs standard (hors schedule) »Tous les jobs standard étendent .standard_job_rules (jamais exécutés sur un pipeline schedulé).
| Job | Stage | Image | Notes |
|---|---|---|---|
install_dependencies | install_dependencies | php:8.2-fpm-alpine | Extensions : intl pdo pdo_mysql zip gd amqp ; only: changes: [composer.lock] sur dev/staging/master |
✔ tests | tests | php:8.2-fpm-alpine | APP_ENV=test ; services mariadb:10.5.19, rabbitmq:3.9-management-alpine, quay.io/minio/minio ; consumer RabbitMQ démarré via docker/php/consume-message-in-tests.sh |
🏸 static_analysis | codelint | php:8.2-fpm-alpine | phpstan analyse src/ --level=5, allow_failure: false |
🐳 Build | build | docker:latest | docker build --no-cache avec APP_ENV, APP_NAME, GITHUB_OAUTH, HUBSPOT_EMAIL_USERNAME, HUBSPOT_EMAIL_PASSWORD comme build args ; push vers $DOCKER_REPO/$APP_NAME:$APP_ENV |
📲 Deployment production | deploy | docker:latest | when: manual sur master/staging uniquement ; SSH → clean container → docker run avec env vars de prod (OGDPC_PASSWORD, GEMINI_API_KEY, JITSI_*, HUBSPOT_PRIVATE_TOKEN, JWT_*, …) |
Pipelines planifiés
Section intitulée « Pipelines planifiés »Récupérés via glab api /projects/w-ap.fr%2Ferevo%2Finternal-api/pipeline_schedules le 2026-04-23. Tous les schedules ciblent refs/heads/master et sont actifs.
| ID | Description GitLab | Cron (Europe/Paris) | SCHEDULE_TYPE | Job CI (fichier) | Commande invoquée | Page détaillée | Dernier run |
|---|---|---|---|---|---|---|---|
| 4081502 | Backup database | 0 */4 * * * | backup | backup_job (ci-jobs/.scheduled-ci.yml) | mysqldump + rsync (shell) | Backup base de données | ✔ 2026-04-23 |
| 4081863 | Clean database backup | 0 1 * * 7 | clean-backup | clean_old_backups (ci-jobs/.scheduled-ci.yml) | find ~/internal/ -mtime +60 -delete (shell) | Purge des backups base de données | ✖ 2026-04-18 |
| 4083210 | Check reminders | 0 1 * * * | check_reminders | daily_check_reminders (ci-jobs/.scheduled-ci.yml) | php bin/console scheduled:reminder | Vérification des rappels | ✔ 2026-04-22 |
| 4086440 | Setup recommended products & showcase | 0 1 * * * | student_showcase_recommended_products | setup_student_showcase (ci-jobs/.scheduled-ci.yml) | php bin/console scheduled:student-show-case-recommended | Vitrine & upsell apprenants | ✔ 2026-04-22 |
| 4217181 | Extrract ANDPC data | 0 1 * * * | ogdpc_extract | ogdpc_extract_sessions (ci-jobs/.scheduled-ci.yml) | php bin/console scheduled:ogdpc-extract-sessions | Extraction des sessions OGDPC | ✔ 2026-04-22 |
| 4217183 | Reconcile session dates against ANDPC | 30 2 * * * | ogdpc_reconcile_session_dates | ogdpc_reconcile_session_dates (ci-jobs/.scheduled-ci.yml) | php bin/console scheduled:ogdpc-reconcile-session-dates | Rapprochement des dates de session OGDPC | ✖ 2026-04-23 |
TODO(review) : la description GitLab du schedule 4217181 contient un typo (
Extrract). À corriger dans GitLab > Build > Pipeline schedules.
TODO(review) : les derniers runs des schedules 4081863 (2026-04-18) et 4217183 (2026-04-23) sont en échec. Investiguer dans Sentry / logs GitLab.
Commande orpheline (dans le code, pas encore planifiée)
Section intitulée « Commande orpheline (dans le code, pas encore planifiée) »scheduled:ogdpc-reconcile-virtual-class-trainers→ Rapprochement des formateurs de classe virtuelle OGDPC. À planifier prochainement (schedule GitLab à créer, stageogdpc_extractà réutiliser, nouveauSCHEDULE_TYPEà définir — typiquementogdpc_reconcile_trainers, cron0 3 * * *Europe/Paris après le rapprochement des dates).
Secrets et variables CI/CD
Section intitulée « Secrets et variables CI/CD »Toutes les valeurs sont gérées dans GitLab > Settings > CI/CD > Variables. Ne jamais les commiter dans le repo. Variables référencées :
Déploiement / infra : $DEPLOYER_SSH_PRIVATE_KEY, $DOCKER_PASS, $DOCKER_USER, $DOCKER_REPO, $APP_NAME, $APP_URL, $USER, $SSH_PORT, $TRUSTED_HOSTS
Build args : $GITHUB_OAUTH, $HUBSPOT_EMAIL_USERNAME, $HUBSPOT_EMAIL_PASSWORD
Runtime (injectées au docker run du déploiement) : $HUBSPOT_PRIVATE_TOKEN, $JWT_PRIVATE_KEY, $JWT_PUBLIC_KEY, $JWT_PASSPHRASE, $JITSI_SECRET, $JITSI_APP_ID, $JITSI_DOMAINE, $OGDPC_PASSWORD, $GEMINI_API_KEY
Backup : $BACKUP_PRIVATE_KEY, $BACKUP_USER, $BACKUP_SERVER_URL, $DATABASE_SERVER_URL, $MYSQL_USER, $MYSQL_NAME, $MYSQL_PWD
Tests (valeurs de test, non sensibles) : $MARIADB_ROOT_PASSWORD, $MARIADB_DATABASE, $MINIO_ACCESS_KEY, $MINIO_ACCESS_SECRET, $MINIO_DEFAULT_BUCKET, $MINIO_ALIAS, $MINIO_ROOT_USER, $MINIO_ROOT_PASSWORD
Variables de schedule (définies dans chaque schedule GitLab, pas dans les variables projet) : $SCHEDULE_TYPE — voir tableau ci-dessus.
Observabilité
Section intitulée « Observabilité »- Logs pipeline : GitLab > Build > Pipelines > pipeline concerné.
- Logs applicatifs : sortie de
docker exec $APP_NAME php bin/console …capturée dans le job CI schedulé. - Alerting applicatif : les exceptions PHP (dont
ScheduledCommandException) sont remontées dans Sentry. Les jobs 100 % shell (backup, clean-backup) ne sont pas couverts par Sentry — s’appuyer sur la page GitLab > Build > Pipeline schedules pour détecter les échecs. - Historique des schedules : GitLab > Build > Pipeline schedules → colonne « Last pipeline ».
Références
Section intitulée « Références »/home/nicolas/PhpstormProjects/internal-api/.gitlab-ci.yml/home/nicolas/PhpstormProjects/internal-api/ci-jobs/.scheduled-ci.yml/home/nicolas/PhpstormProjects/internal-api/src/Command/Scheduled//home/nicolas/PhpstormProjects/internal-api/src/Exceptions/ScheduledCommandException.php- GitLab : https://gitlab.com/w-ap.fr/erevo/internal-api
- Pipeline schedules : https://gitlab.com/w-ap.fr/erevo/internal-api/-/pipeline_schedules