Aller au contenu

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.

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.

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_KEY invalide ? accès SSH bloqué ? À corriger, et éventuellement durcir la commande find (|| true si aucun fichier à purger).

  1. before_script : installe openssh-client, charge $BACKUP_PRIVATE_KEY dans ssh-agent (et non $DEPLOYER_SSH_PRIVATE_KEY comme pour backup_job — distinction importante).
  2. Purge : SSH sur $BACKUP_USER@$BACKUP_SERVER_URL et 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.
    • -print pour tracer dans les logs GitLab chaque chemin supprimé.
  3. Pas d’after_script.

TODO(review) : -name "*.sql.gz" n’est pas scopé sur $MYSQL_NAME — si d’autres .sql.gz cohabitent dans ~/internal/, ils sont aussi supprimés. À confirmer (dossier dédié ou partagé ?).

Aucune entité applicative. Impact uniquement sur le filesystem du serveur de backup.

  • Pas de retry. find … -delete exit 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).
  • Serveur de backup ($BACKUP_SERVER_URL, $BACKUP_USER) — accès SSH avec $BACKUP_PRIVATE_KEY.
  • Logs : GitLab > Build > Pipelines > clean_old_backups (liste des fichiers supprimés via find -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).

  • Job CI : ci-jobs/.scheduled-ci.yml (job clean_old_backups)
  • Commande Symfony associée : aucune
  • $BACKUP_PRIVATE_KEY, $BACKUP_USER, $BACKUP_SERVER_URL, $SSH_PORT
  • $MYSQL_NAME — préfixe du nom de fichier à supprimer