Aller au contenu

Pipeline internal-api

Version métier : voir internal-api — vue métier.

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.

Défini dans .gitlab-ci.yml (workflow.rules) :

  • $CI_PIPELINE_SOURCE == "schedule" → le pipeline tourne toujours, avec les seuls jobs déclarés dans ci-jobs/.scheduled-ci.yml (inclus via include: rules: if: '$CI_PIPELINE_SOURCE == "schedule"'). Les jobs standard sont filtrés par .standard_job_rules (jamais exécutés sur schedule).
  • Branche master / mainAPP_ENV=prod
  • Branche stagingAPP_ENV=staging
  • Branches dev / testsAPP_ENV=dev
StageQuandRôle
install_dependenciespush (composer.lock changé, branches dev/staging/master)composer install dans un cache vendor/ partagé
testspush (hors schedule)PHPUnit avec services MariaDB 10.5, RabbitMQ 3.9, MinIO ; fixtures Doctrine chargées
codelintpush (hors schedule)PHPStan niveau 5 sur src/
buildpush (hors schedule)docker builddocker push vers $DOCKER_REPO/$APP_NAME:$APP_ENV
deploypush sur master ou staging, gate manualSSH vers $APP_URL, reset conteneur, docker run avec env vars de prod
backupschedule SCHEDULE_TYPE=backupVoir Backup base de données
clean-backupschedule SCHEDULE_TYPE=clean-backupVoir Purge des backups
daily_check_remindersschedule SCHEDULE_TYPE=check_remindersVoir Vérification des rappels
setup_student_showcaseschedule SCHEDULE_TYPE=student_showcase_recommended_productsVoir Vitrine & upsell apprenants
ogdpc_extractschedule SCHEDULE_TYPE=ogdpc_extract ou ogdpc_reconcile_session_datesVoir Extraction OGDPC et Rapprochement dates

Tous les jobs standard étendent .standard_job_rules (jamais exécutés sur un pipeline schedulé).

JobStageImageNotes
install_dependenciesinstall_dependenciesphp:8.2-fpm-alpineExtensions : intl pdo pdo_mysql zip gd amqp ; only: changes: [composer.lock] sur dev/staging/master
✔ teststestsphp:8.2-fpm-alpineAPP_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_analysiscodelintphp:8.2-fpm-alpinephpstan analyse src/ --level=5, allow_failure: false
🐳 Buildbuilddocker:latestdocker 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 productiondeploydocker:latestwhen: 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_*, …)

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.

IDDescription GitLabCron (Europe/Paris)SCHEDULE_TYPEJob CI (fichier)Commande invoquéePage détailléeDernier run
4081502Backup database0 */4 * * *backupbackup_job (ci-jobs/.scheduled-ci.yml)mysqldump + rsync (shell)Backup base de données✔ 2026-04-23
4081863Clean database backup0 1 * * 7clean-backupclean_old_backups (ci-jobs/.scheduled-ci.yml)find ~/internal/ -mtime +60 -delete (shell)Purge des backups base de données✖ 2026-04-18
4083210Check reminders0 1 * * *check_remindersdaily_check_reminders (ci-jobs/.scheduled-ci.yml)php bin/console scheduled:reminderVérification des rappels✔ 2026-04-22
4086440Setup recommended products & showcase0 1 * * *student_showcase_recommended_productssetup_student_showcase (ci-jobs/.scheduled-ci.yml)php bin/console scheduled:student-show-case-recommendedVitrine & upsell apprenants✔ 2026-04-22
4217181Extrract ANDPC data0 1 * * *ogdpc_extractogdpc_extract_sessions (ci-jobs/.scheduled-ci.yml)php bin/console scheduled:ogdpc-extract-sessionsExtraction des sessions OGDPC✔ 2026-04-22
4217183Reconcile session dates against ANDPC30 2 * * *ogdpc_reconcile_session_datesogdpc_reconcile_session_dates (ci-jobs/.scheduled-ci.yml)php bin/console scheduled:ogdpc-reconcile-session-datesRapprochement 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-trainersRapprochement des formateurs de classe virtuelle OGDPC. À planifier prochainement (schedule GitLab à créer, stage ogdpc_extract à réutiliser, nouveau SCHEDULE_TYPE à définir — typiquement ogdpc_reconcile_trainers, cron 0 3 * * * Europe/Paris après le rapprochement des dates).

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.

  • 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 ».