It is a tool to remove stalled and dangling resources when using Docker in Gitlab CI/CD.
2.4K
Gitlab Janitor это утилита для автоматической очистки зависших и прошенных ресурсов при использовании Docker в Gitlab CI/CD. Проект вдохновлён утилитой GitLab Runner Docker Cleanup.
GitLab Janitor is a tool to automatically manage stalled and dangling resources when using Docker in Gitlab CI/CD. Project inpired by GitLab Runner Docker Cleanup.
Возможности / Features
$ gem install gitlab-janitor
При установке Gitlab Janitor через bundler добавте следующую строку в Gemfile, установив require параметр в false:
If you'd rather install Gitlab Janitor using bundler, add a line for it in your Gemfile (but set the require option to false, as it is a standalone tool):
gem 'rubocop', require: false
Для установки с помощью docker контейнера скачайте образ:
To install as docker container just pull the image:
docker pull rnds/gitlab-janitor:latest
Запустите gitlab-janitor и смотрите за процессом или запустите docker:
Just type gitlab-janitor and watch the magic happen or run in docker:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock rnds/gitlab-janitor:latest
Параметры командной строки, переменные окружения и занчения по-умолчанию:
Commain line options, environment variables and default values:
$ gitlab-janitor --help
Usage: gitlab-janitor [options]
--clean-delay=30m ENV[CLEAN_DELAY] Delay between clean operation.
--include=*units* ENV[INCLUDE] <List> Include container for removal.
--exclude=*gitlab* ENV[EXCLUDE] <List> Exclude container from removal by name.
--container-deadline=1h10m ENV[CONTAINER_DEADLINE] Maximum container run duration.
--volume-include=runner*cache*
ENV[VOLUME_INCLUDE] <List> Include volumes for removal.
--volume-deadline=2d6h ENV[VOLUME_DEADLINE] Maximum volume life duration.
--image-deadline=20d ENV[IMAGE_DEADLINE] Maximum image life duration.
--image-store=./images.txt ENV[IMAGE_STORE] File to store images timestamps.
--cache-size=10G ENV[CACHE_SIZE] Size of docker cache to keep.
--remove ENV[REMOVE] Real remove instead of dry run.
--docker=unix:///tmp/mysock ENV[DOCKER_HOST] Docker api endpoint.
--debug ENV[LOG_LEVEL] Verbose logs. ENV values: debug, info, warn, error
Порядок определения контейнреов для удаления:
include=[*units*] - в список на удаление включаются контейнеры удовлетворябющие шаблону;exclude=[*gitlab*] - из спсика исключаются контейнеры по шаблону;container-deadline=[1h10m] - результирующий список проверяется на длительность запуска контенйра;Containers deleted when:
include=[*units*] - select containers by matching name by pattern;exclude=[*gitlab*] - reject containers by matching name by pattern;container-deadline=[1h10m] - when container lifetime exceeding the deadline it is removed;Порядок определения вольюмов для удаления:
volume-include=[runner*cache*]- дополнительные волюмы для удаления;volume-deadline=[2d6h] - результирующий список проверяется на длительность существования вольюма;Volumes deleted when:
volume-include=[runner*cache*]- add volumes by matching name by pattern;volume-deadline=[2d6h] - when volume lifetime exceeding the deadline it is removed;Docker не сохраняет временную метку образа при скачивании (pull), таким образом используя средства Docker API невозможно понять как давно образ был скачан и когда его пора удалять. Для решения этой задачи сервис сохраняет информацию о скачанных образах, отслеживая таким образом интервалы устаревания.
Порядок определения образов для удаления:
image-deadline=[20d] - результирующий список проверяется на длительность существования образа;Docker don't track timestamp when puling image, so there is impossible track lifetime through Docker API. To solve this problem, the service saves information about downloaded images, thus keeping track of lifetime deadline.
Images deleted when:
image-deadline=[20d] - when lifetime exceeding the deadline image it is removed (docker rmi <image>);Конфиг для продуктового режима / Production ready config:
REMOVE=true INCLUDE="*integr*, *units*" EXCLUDE="*gitlab*" CONTAINER_DEADLINE="1h10m" VOLUME_DEADLINE="3d" IMAGE_DEADLINE="20d" gitlab-janitor
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-e REMOVE=true \
-e INCLUDE="*integr*, *units*" \
-e EXCLUDE="*gitlab*" \
-e CONTAINER_DEADLINE="1h10m" \
-e VOLUME_DEADLINE="3d" \
-e IMAGE_DEADLINE="20d" \
rnds/gitlab-janitor:latest
Content type
Image
Digest
sha256:89861793b…
Size
79.9 MB
Last updated
over 2 years ago
docker pull rnds/gitlab-janitor