Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- BASE_PATH=/var/opt/gitlab/gitlab-rails/shared/registry/docker/registry/v2/repositories
- CONFIG_YML_FILE=/export/docker-registry/gitlab-docker-registry/config.yml
- DRY_RUN=0
- KEEP_LAST_IMAGES=10
- RUN_GARBAGE_COLLECTOR=0
- GITLAB_CTL_COMMAND=`which gitlab-ctl`
- if [ ! -x "${GITLAB_CTL_COMMAND}" ]; then
- echo "Missing gitlab-ctl command"
- exit 1
- fi
- while (( "$#" )); do
- case "$1" in
- "-b" | "--base-path")
- BASE_PATH=$2
- shift
- ;;
- "-r" | "--run-gc")
- RUN_GARBAGE_COLLECTOR=1
- ;;
- "-d"|"--dry-run")
- DRY_RUN=1
- ;;
- "-k"|"--keep")
- if ! ( echo $2 | grep -q '^[0-9]\+$') || [ $2 -eq 0 ]; then
- echo "Invalid value for keep last images '$2'"
- exit 1
- fi
- KEEP_LAST_IMAGES=$2
- shift
- ;;
- "-c" | "--config-path")
- BASE_PATH=$2
- shift
- ;;
- "-h"|"--help")
- echo "Usage: ${0} [options]"
- echo "Options:"
- echo -e "\t-k NUM, --keep NUM"
- echo -e "\t\tKeeps last NUM revisions, except current tags"
- echo
- echo -e "\t-d, --dry-run"
- echo -e "\t\tEnables dry run, no changes will be made"
- echo
- echo -e "\t-b, --base-path"
- echo -e "\t\tSets base path of Gitlab Registry repository storage"
- echo
- echo -e "\t-r, --run-gc"
- echo -e "\t\tStarts garbage collector after revision removal"
- echo
- echo -e "\t-c, --config-path"
- echo -e "\t\tSets the full path to the registry config.yml, to be used together with the garbace collector option (r)"
- exit 0
- ;;
- *)
- echo "Unknown argument: $1"
- exit 1
- ;;
- esac
- shift
- done
- IFS=$'\n'
- used_hashes=`mktemp`
- marked_hashes=`mktemp`
- for repository in `find ${BASE_PATH} -mindepth 2 -maxdepth 2 -type d | sed "s#${BASE_PATH}/##"`; do
- for tag_hash in ${BASE_PATH}/${repository}/_manifests/tags/*/current/link; do
- cat "${tag_hash}" | cut -d':' -f2;
- done > "${used_hashes}"
- echo "Removing revisions of $repository:"
- ls -t ${BASE_PATH}/${repository}/_manifests/revisions/sha256 | fgrep -vf "${used_hashes}" | tail -n+${KEEP_LAST_IMAGES} | tee ${marked_hashes}
- if [ ${DRY_RUN} -ne 1 ]; then
- cat ${marked_hashes} | sed "s#^#${BASE_PATH}/${repository}/_manifests/revisions/sha256/#" | xargs rm -rf
- fi
- done
- rm ${used_hashes}
- rm ${marked_hashes}
- if [ ${DRY_RUN} -eq 0 -a ${RUN_GARBAGE_COLLECTOR} -eq 1 ]; then
- "${GITLAB_CTL_COMMAND}" registry-garbage-collect "$CONFIG_YML_FILE"
- fi
Add Comment
Please, Sign In to add comment