Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rnd-soft/gitlab-janitor
[MIRROR] GitLab Runner Cleanup Tool a tool to automatically managestalled containers when using Docker
https://github.com/rnd-soft/gitlab-janitor
Last synced: about 7 hours ago
JSON representation
[MIRROR] GitLab Runner Cleanup Tool a tool to automatically managestalled containers when using Docker
- Host: GitHub
- URL: https://github.com/rnd-soft/gitlab-janitor
- Owner: RND-SOFT
- License: mit
- Created: 2022-08-05T12:43:30.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-04-19T16:03:40.000Z (7 months ago)
- Last Synced: 2024-10-31T13:08:32.310Z (19 days ago)
- Language: Ruby
- Homepage:
- Size: 69.3 KB
- Stars: 2
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gitlab-janitor
[![Gem Version](https://badge.fury.io/rb/gitlab-janitor.svg)](https://rubygems.org/gems/gitlab-janitor)
[![Gem](https://img.shields.io/gem/dt/gitlab-janitor.svg)](https://rubygems.org/gems/gitlab-janitor/versions)
[![YARD](https://badgen.net/badge/YARD/doc/blue)](http://www.rubydoc.info/gems/gitlab-janitor)[![quality](https://lysander.rnds.pro/api/v1/badges/janitor_quality.svg)](https://lysander.rnds.pro/api/v1/badges/janitor_quality.html)
[![outdated](https://lysander.rnds.pro/api/v1/badges/janitor_outdated.svg)](https://lysander.rnds.pro/api/v1/badges/janitor_outdated.html)
[![vulnerable](https://lysander.rnds.pro/api/v1/badges/janitor_vulnerable.svg)](https://lysander.rnds.pro/api/v1/badges/janitor_vulnerable.html)[![Docker Pulls](https://badgen.net/docker/pulls/rnds/gitlab-janitor?icon=docker&label=pulls)](https://hub.docker.com/r/rnds/gitlab-janitor/)
[![Docker Stars](https://badgen.net/docker/stars/rnds/gitlab-janitor?icon=docker&label=stars)](https://hub.docker.com/r/rnds/gitlab-janitor/)Gitlab Janitor это утилита для автоматической очистки зависших и брошенных ресурсов при использовании Docker в `Gitlab` CI/CD. Проект вдохновлён утилитой [GitLab Runner Docker Cleanup](https://gitlab.com/gitlab-org/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](https://gitlab.com/gitlab-org/gitlab-runner-docker-cleanup).
Возможности / Features
- Удаление повисших контейнеров / Remove dangling containers
- Удаление неиспользуемых хранилищ / Remove unused anonymous volumes
- Удаление неиспользуемых образов / Remove unused images
- Отслеживание вререни использвоания образов / Track image usage timestamp
- Очистка кешей Docker (build cache) / Cleanup docker build cache
- Готовый [docker-образ](https://hub.docker.com/r/rnds/gitlab-janitor) / Production ready [docker image](https://hub.docker.com/r/rnds/gitlab-janitor)## Установка / Installation
```sh
$ 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):
```sh
gem 'rubocop', require: false
```Для установки с помощью docker контейнера [скачайте образ](https://hub.docker.com/r/rnds/gitlab-janitor):
---
To install as docker container just [pull the image](https://hub.docker.com/r/rnds/gitlab-janitor):
```sh
docker pull rnds/gitlab-janitor:latest
```## Быстрый запуск / Quickstart
Запустите `gitlab-janitor` и смотрите за процессом или запустите docker:
---
Just type `gitlab-janitor` and watch the magic happen or run in docker:
```sh
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock rnds/gitlab-janitor:latest
```## Документация / Documentation
Параметры командной строки, переменные окружения и значения по-умолчанию:
Commain line options, environment variables and default values:
```sh
$ gitlab-janitor --helpUsage: gitlab-janitor [options]
--clean-delay=30m ENV[CLEAN_DELAY] Delay between clean operation.
--include=*units* ENV[INCLUDE] Include container for removal.
--exclude=*gitlab* ENV[EXCLUDE] Exclude container from removal by name.
--container-deadline=1h10m ENV[CONTAINER_DEADLINE] Maximum container run duration.
--volume-include=runner*cache*
ENV[VOLUME_INCLUDE] 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
```### Удаление зависших контейнеров / Removing stalled containers
Порядок определения контейнреов для удаления:
- `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;### Удаление ненужных volumes / Removing unused volumes
Порядок определения вольюмов для удаления:
- на удаление попадают вольюмы, не являющиеся именованными;
- `volume-include=[runner*cache*]`- дополнительные волюмы для удаления;
- `volume-deadline=[2d6h]` - результирующий список проверяется на длительность существования вольюма;---
Volumes deleted when:
- select all anonymous volumes;
- `volume-include=[runner*cache*]`- add volumes by matching name by pattern;
- `volume-deadline=[2d6h]` - when volume lifetime exceeding the deadline it is removed;### Removing images / Удаление образов
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:
- When a new image is first encountered, the timestamp is stored in local storage (file);
- When a running container is found, the timestamp for the corresponding image is reset to zero;
- `image-deadline=[20d]` - when lifetime exceeding the deadline image it is removed (`docker rmi `);## Приеры / Examples
Конфиг для продуктового режима / Production ready config:
```sh
REMOVE=true INCLUDE="*integr*, *units*" EXCLUDE="*gitlab*" CONTAINER_DEADLINE="1h10m" VOLUME_DEADLINE="3d" IMAGE_DEADLINE="20d" gitlab-janitor
```## Запуск в докере / Running in docker
```sh
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
```## Лицензия / License
[MIT](./LICENSE)