Help:CLI/cleanup
Автоматическое удаление снимков
Обзор
Удаление происходит раз в 24 часа (данное время можно задать при запуске сервера опцией --snapshots-cleanup-period, либо в конфигурационном файле, либо переменной окружения SVACER_CLEANUP_SNAPSHOTS_PERIOD), первое удаление всех подходящих снимков будет через указанное время после запуска сервера.
Применять может только пользователь с доступом ServerOperations.
Принцип работы: происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков. Также информация о удалении через cleanup вносится в системный журнал.
Добавление нового правила удаления
svacer server cleanup add-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --keep-time <time>
Параметры
--project- проект, в котором искать снимки для удаления (обязательный, используйте"*"для всех снимков)--branch- ветка, в которой искать снимки для удаления (обязательный, используйте"*"для всех снимков)--snapshot- снимок, который удалять (обязательный, используйте"*"для всех снимков)--keep-time- время, которое должно пройти после создания (НЕ импорта) снимка, чтобы его удалить. Задается в формате Go Duration (например33h5m,720h). По умолчанию 720 часов (30 дней). Игнорируется, если--max-snapshots > 0--max-snapshots- верхняя граница по количеству снимков в ветке. При значении = 0 данное правило не работает. При значении > 0 игнорирует--keep-time. По умолчанию 0
Логика работы --max-snapshots
MAX устанавливает верхнюю границу по количеству снимков в ветке:
- Считает все снимки в ветке (total) если хотя бы один из снимков подходит под
project\branch\snapshot - Если
total > MAX, удаляет(total - MAX)самых старых снимков - Удаляет только снимки, подходящие под паттерн
project\branch\snapshot - При
MAX = 0данное правило не работает
Примеры:
Пример 1: Только TIME 10 снимков в ветке, 5 старше 24h Правило: --keep-time 24h --max-snapshots 0 Результат: Удалит 5 старых снимков (>24h), останется 5 Пример 2: Только MAX 10 снимков в ветке Правило: --max-snapshots 5 Результат: Удалит 5 самых старых, оставит 5 новейших Пример 3: MAX игнорирует TIME 10 снимков, 5 старше 24h, 5 новых <24h Правило: --keep-time 24h --max-snapshots 8 Результат: TIME игнорируется. Применяется ТОЛЬКО MAX Удалит 2 самых старых и останется 8 (MAX) Пример 4: Scoped правило с MAX 10 снимков: 6 nightly-*, 4 regular-* Правило: --snapshot "nightly-*" --max-snapshots 8 Результат: total = 10 > MAX=8, нужно удалить 2 Удалит 2 самых старых ТОЛЬКО из nightly-* Останется: 4 nightly-* + 4 regular-* = 8 снимков
Шаблоны и паттерны
Флаги --project, --branch, --snapshot можно задавать как:
1. Имя или ID:
--project "MyProject" --project "550e8400-e29b-41d4-a716-446655440000" # UUID проекта
2. * (любое количество любых символов):
--project "Dev*" # DevProject, Development --branch "*test*" # test, my-test, testing --snapshot "nightly-*"
3. Регулярные выражения (с префиксом re:):
--snapshot "re:^v[0-9]+\.[0-9]+\.[0-9]+$" # v1.0.0, v2.3.5 --branch "re:^feature/[0-9]+$" # feature/123
Добавление запрета на удаление
svacer server cleanup add-exclude-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --min-snapshots <min>
Параметры
--project- проект, в котором искать снимки для удаления (обязательный , используйте"*"для всех веток)
--branch- ветка (обязательный, используйте"*"для всех веток)--snapshot- снимок (обязательный, используйте"*"для всех снимков)--min-snapshots- нижняя граница по количеству снимков в ветке. По умолчанию 0
Флаги проекта, ветки и снимка работают аналогично с флагами в --add-rule.
Логика работы --min-snapshots
MIN устанавливает нижнюю границу по количеству снимков в ветке:
Значение = 0 — полный запрет на удаление:
- Снимки, подходящие под паттерн
project\branch\snapshot, никогда не удаляются - Применяется индивидуально к каждому снимку
Значение > 0 — минимальное количество в ветке:
- Правило применяется ко всей ветке, если хотя бы один снимок подходит под паттерн
- Пока
total_snapshots ≤ MIN, в ветке ничего не удаляется - После того как
total > MIN, можно удалить до(total - MIN)снимков
Важные моменты:
- При множественных запретах для одной ветки берется МАКСИМАЛЬНОЕ значение MIN
- MIN всегда имеет приоритет над MAX
- Если MIN=5 и MAX=3, то в ветке останется 5 снимков (MIN побеждает)
Примеры:
Пример 1: MIN Правило: --min-snapshots 5 Ветка имеет 10 снимков Результат: Можно удалить до 5 снимков (10 - 5 = 5) Пример 2: MIN с паттерном Правило: --snapshot "release-*" --min-snapshots 3 Ветка имеет 8 снимков (включая 2 release-*) Результат: - Хотя бы 1 release-* есть → MIN=3 применяется ко ВСЕЙ ветке - Можно удалить до 5 снимков (8 - 3 = 5) Пример 3: MIN=0 Правило: --snapshot "important-*" --min-snapshots 0 Ветка имеет 10 снимков (2 important-*, 8 других) Результат: - important-* НИКОГДА не удаляются - Остальные 8 могут быть удалены Пример 4: Множественные MIN Правило 1: --snapshot "*" --min-snapshots 3 Правило 2: --snapshot "release-*" --min-snapshots 5 Ветка имеет 10 снимков (включая release-*) Результат: MIN = 5 (максимальное), можно удалить до 5 снимков
Удаление правила
svacer server cleanup delete --user <user> --password <password> --id <config id>
Где:
--id— ID конфигурации из таблицы правил или запретов (получить черезcleanup list)
Вывести таблицу
svacer server cleanup list --user <user> --password <password> --type <rule|exclude-rule|log> --format <table|json>
Где:
--type— тип таблицы:rule— таблица правил удаления (по умолчанию);exclude-rule— таблица запретов на удаление;log— таблица удаленных снимков
--format— формат вывода:table— человекочитаемый вывод (по умолчанию);json— JSON формат
Запуск очистки вручную
svacer server cleanup run --user <user> --password <password>
Запускает процесс очистки немедленно (вне расписания).
Примеры
Добавление нового правила
Правило 1: Удаление по времени
svacer server cleanup add-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "*" --keep-time "240h" --max-snapshots 0
Удалятся снимки старше 240 часов (10 дней) в проектах, начинающихся с "Devel", в ветке "2025".
Правило 2: Ограничение количества (MAX mode)
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --max-snapshots 20
В любом проекте, в ветке "main" всегда будет максимум 20 снимков (независимо от возраста).
Добавление запрета на удаление
svacer server cleanup add-exclude-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "test*" --min-snapshots 0
Снимки, начинающиеся с "test", в проектах "Devel*" и ветке "2025" никогда не удаляются.
Вывод таблицы правил
svacer server cleanup list --user admin --password admin --type rule

Вывод таблицы запретов
svacer server cleanup list --user admin --password admin --type exclude-rule

Вывод в JSON формате
svacer server cleanup list --user admin --password admin --type exclude-rule --format json
Вывод:
[{"Branch":"2025","CreatedBy":"admin","CreatedById":"00000000-0000-0000-0000-000000000000","ID":"018fe552-f390-4110-9545-6ef9cbe1a406","MinBranchSnapshots":0,"Project":"Devel*","Snapshot":"test*","create_time":"2025-10-13T15:00:14.997004Z"}]
Удаление правила
svacer server cleanup delete --user admin --password admin --id b1895877-1f3c-4b12-ac19-3ff4a7bc5416
Защита важных снимков
svacer server cleanup add-exclude-rule --user admin --password admin --project "*" --branch "*" --snapshot "*release*" --min-snapshots 0
Снимки *release* никогда не удаляются.
Ограничение количества снимков
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --max-snapshots 20
В ветке main хранить максимум 20 снимков.
Комбинация MIN и MAX
Минимум 5 снимков svacer server cleanup add-exclude-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --min-snapshots 5 Максимум 20 снимков svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --max-snapshots 20
Результат: в ветке main всегда будет от 5 до 20 снимков.
Использование regex
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "re:^feature/JIRA-[0-9]+$" --snapshot "*" --keep-time 168h --max-snapshots 0
Подходит: feature/JIRA-123, feature/JIRA-456
Не подходит: feature/JIRA-ABC, bugfix/JIRA-123
Regex синтаксис
| Паттерн | Описание | Пример |
|---|---|---|
^ |
Начало строки | ^test
|
| [^x] | Отрицание символов | ^[^m].*$ |
$ |
Конец строки | test$
|
. |
Любой символ | a.c → abc, a1c
|
.* |
Любое кол-во символов | test.* → test-123
|
.+ |
Один или более | test.+ → test-1
|
[0-9] |
Любая цифра | v[0-9] → v1, v9
|
[a-z] |
Буква (нижний регистр) | [a-z]+ → abc
|
[A-Z] |
Буква (верхний регистр) | [A-Z]+ → ABC
|
(a|b) |
"a" или "b" | (test|prod)
|
[0-9]{2,4} |
От 2 до 4 цифр | 12, 1234
|
Не поддерживается negative lookahead (?!...). Используйте комбинацию правил и запретов.
Для правил отрицания конкретного элемента возможно использовать сложные правила, например:
--branch "re:^(.{0,3}|.{5,}|[^m]...|m[^a]..|ma[^i].|mai[^n])$"
Данное правило выбирает все ветки, кроме main.