Purge des backups base de données
Version métier : voir Nettoyage des vieilles sauvegardes.
Pipeline 100 % shell CI — pas de commande Symfony associée.
Description
Section intitulée « Description »Nettoyage hebdomadaire du dossier ~/internal/ sur le serveur de backup : supprime les dumps SQL historiques dont la mtime dépasse 60 jours (ainsi que toute archive .sql.gz correspondante). Complément du schedule Backup base de données.
Déclenchement
Section intitulée « Déclenchement »Planification GitLab (via pipeline_schedules API, 2026-04-23) :
- Description :
Clean database backup - ID du schedule :
4081863 - Cron :
0 1 * * 7(fuseau :Europe/Paris) — 01:00 Paris chaque dimanche. - Branche :
refs/heads/master - État : actif (dernier run
2026-04-18→ failed) - Variable injectée :
SCHEDULE_TYPE=clean-backup
Job CI : clean_old_backups dans ci-jobs/.scheduled-ci.yml (stage clean-backup).
TODO(review) : le dernier run (pipeline 2462907340) est en état
failed. Investiguer :$BACKUP_PRIVATE_KEYinvalide ? accès SSH bloqué ? À corriger, et éventuellement durcir la commandefind(|| truesi aucun fichier à purger).
Fonctionnement
Section intitulée « Fonctionnement »before_script: installeopenssh-client, charge$BACKUP_PRIVATE_KEYdansssh-agent(et non$DEPLOYER_SSH_PRIVATE_KEYcomme pourbackup_job— distinction importante).- Purge : SSH sur
$BACKUP_USER@$BACKUP_SERVER_URLet exécute :Fenêtre de terminal find ~/internal/ -type f -mtime +60 \\( -name "${MYSQL_NAME}_*.sql" -o -name "*.sql.gz" \) \-print -delete-mtime +60→ strictement plus vieux que 60 jours.-printpour tracer dans les logs GitLab chaque chemin supprimé.
- Pas d’
after_script.
TODO(review) :
-name "*.sql.gz"n’est pas scopé sur$MYSQL_NAME— si d’autres.sql.gzcohabitent dans~/internal/, ils sont aussi supprimés. À confirmer (dossier dédié ou partagé ?).
Entités impactées
Section intitulée « Entités impactées »Aucune entité applicative. Impact uniquement sur le filesystem du serveur de backup.
Gestion des erreurs
Section intitulée « Gestion des erreurs »- Pas de retry.
find … -deleteexit 0 même si aucun fichier ne correspond, mais les erreurs SSH ou d’authentification font échouer le pipeline. - Pas couvert par Sentry (job shell).
Dépendances externes
Section intitulée « Dépendances externes »- Serveur de backup (
$BACKUP_SERVER_URL,$BACKUP_USER) — accès SSH avec$BACKUP_PRIVATE_KEY.
Observabilité
Section intitulée « Observabilité »- Logs :
GitLab > Build > Pipelines > clean_old_backups(liste des fichiers supprimés viafind -print). - Aucune métrique d’espace disque exposée.
TODO(review) : comme pour
backup_job, envisager un alerting dédié (GitLab webhook → Sentry Cron / chat).
Références code
Section intitulée « Références code »- Job CI :
ci-jobs/.scheduled-ci.yml(jobclean_old_backups) - Commande Symfony associée : aucune
Variables CI consommées
Section intitulée « Variables CI consommées »$BACKUP_PRIVATE_KEY,$BACKUP_USER,$BACKUP_SERVER_URL,$SSH_PORT$MYSQL_NAME— préfixe du nom de fichier à supprimer