Gitlab stocke 1 fichier de log par job dans la CI/CD. Ceux-ci sont stockés sous forme de fichiers et considérés comme artefact
du job.
Sur un système de fichiers standard, une simple commande find
suffit pour supprimer tous les logs plus anciens qu’un nombre de jours donnés:
find <gitlab-artifact-dir> -mtime +365 -name job.log -delete
Ici c’est un poil plus complexe, pas de commande find, on va utiliser s3cmd
et un peu de bash pour processer les fichiers.
L’extrait de code étant commenté je vous invite à le lire directement pour comprendre le processing :)
#! /bin/bash
# List only root folder for memory efficience
s3cmd -c .s3cfg ls s3://<bucket-name>/ | while read -r line; do
# Retrieve folder name
subFolder=$(echo "${line}" | awk '{print $2}')
echo "Working on: ${subFolder}"
# List all files in the folder
s3cmd -c .s3cfg ls --recursive "${subFolder}" | while read -r lineS3File; do
createDate=$(echo "${lineS3File}" | awk '{print $1" "$2}')
createDate=$(date -d"${createDate}" +%s)
olderThan=$(date -d"-365days" +%s)
# Process only files older than 365 days
if [[ $createDate -lt $olderThan ]]; then
fileName=$(echo "${lineS3File}" | awk '{print $4}')
# Retrieve file name from full path and ensure it's a job.log file
if [[ "${fileName##*/}" == "job.log" ]]; then
echo "Removing more than 1 year job.log file: $fileName"
s3cmd -c .s3cfg rm "${fileName}" && echo "Removed."
fi
fi
done
done