Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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 --help

Usage: 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)