Help:CLI/cleanup: Difference between revisions
(cleanup add info) |
m (minor fixes) |
||
| (10 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
= Автоматическое удаление снимков = | |||
== Обзор == | |||
Удаление происходит раз в 24 часа (данное время можно задать при запуске сервера опцией <code>--snapshots-cleanup-period</code>, либо в конфигурационном файле, либо переменной окружения <code>SVACER_CLEANUP_SNAPSHOTS_PERIOD</code>), первое удаление всех подходящих снимков будет через указанное время после запуска сервера. | |||
Применять может только пользователь с доступом '''ServerOperations'''. | |||
'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков. Также информация о удалении через cleanup вносится в системный журнал. | |||
== Добавление нового правила удаления == | |||
* project — проект в котором искать снимки для удаления | |||
* branch — ветка в которой искать снимки для удаления | svacer server cleanup add-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --keep-time <nowiki><time></nowiki> --max-snapshots <max> | ||
* snapshot — | |||
* time — время | === Параметры === | ||
* <code>--project</code> — проект, в котором искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех проектов) | |||
* <code>--branch</code> — ветка, в которой искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех веток) | |||
* <code>--snapshot</code> — снимок, который удалять ('''обязательный''', используйте <code>"*"</code> для всех снимков) | |||
* <code>--keep-time</code> — время, которое должно пройти после создания '''(НЕ импорта)''' снимка, чтобы его удалить. Задается в формате Go Duration (например <code>33h5m</code>, <code>720h</code>). По умолчанию '''720 часов''' (30 дней). '''Игнорируется, если <code>--max-snapshots > 0</code>''' | |||
* <code>--max-snapshots</code> — верхняя граница по количеству снимков в ветке. При значении = 0 данное правило не работает. При значении > 0 '''игнорирует''' '''<code>--keep-time</code>'''. По умолчанию 0 | |||
=== Логика работы <code>--max-snapshots</code> === | |||
'''MAX устанавливает верхнюю границу по количеству снимков в ветке:''' | |||
* Считает '''все''' снимки в ветке (total) если хотя бы один из снимков подходит под <code>project\branch\snapshot</code> | |||
* Если <code>total > MAX</code>, удаляет <code>(total - MAX)</code> самых старых снимков | |||
* Удаляет '''только''' снимки, подходящие под паттерн <code>project\branch\snapshot</code> | |||
* При <code>MAX = 0</code> данное правило не работает | |||
'''Примеры:''' | |||
Пример 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 снимков | |||
=== Шаблоны и паттерны === | |||
Флаги <code>--project</code>, <code>--branch</code>, <code>--snapshot</code> можно задавать как: | |||
'''1. Имя или ID:''' | |||
--project "MyProject" | |||
--project "550e8400-e29b-41d4-a716-446655440000" # UUID проекта | |||
'''2. <code>*</code> (любое количество любых символов):''' | |||
--project "Dev*" # DevProject, Development | |||
--branch "*test*" # test, my-test, testing | |||
--snapshot "nightly-*" | |||
'''3. Регулярные выражения (с префиксом <code>re:</code>):''' | |||
--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> | |||
=== Параметры === | |||
* <code>--project</code> — проект, в котором искать снимки для удаления ('''обязательный''' , используйте <code>"*"</code> для всех проектов) | |||
* <code>--branch</code> — ветка ('''обязательный''', используйте <code>"*"</code> для всех веток) | |||
* <code>--snapshot</code> — снимок ('''обязательный''', используйте <code>"*"</code> для всех снимков) | |||
* <code>--min-snapshots</code> — нижняя граница по количеству снимков в ветке. По умолчанию '''0''' | |||
Флаги проекта, ветки и снимка работают аналогично с флагами в <code>--add-rule</code>. | |||
=== Логика работы <code>--min-snapshots</code> === | |||
'''MIN устанавливает нижнюю границу по количеству снимков в ветке:''' | |||
'''Значение = 0''' — '''полный запрет на удаление:''' | |||
* Снимки, подходящие под паттерн <code>project\branch\snapshot</code>, '''никогда не удаляются''' | |||
* Применяется индивидуально к каждому снимку | |||
'''Значение > 0''' — '''минимальное количество в ветке:''' | |||
* Правило применяется ко '''всей ветке''', если хотя бы один снимок подходит под паттерн | |||
* Пока <code>total_snapshots ≤ MIN</code>, в ветке '''ничего не удаляется''' | |||
* После того как <code>total > MIN</code>, можно удалить до <code>(total - MIN)</code> снимков | |||
== | '''Важные моменты:''' | ||
* При множественных запретах для одной ветки берется '''МАКСИМАЛЬНОЕ''' значение 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 — | * <code>--id</code> — ID конфигурации из таблицы правил или запретов (получить через <code>cleanup list</code>) | ||
== Вывести таблицу == | |||
svacer server cleanup list --user <user> --password <password> --type <rule|exclude-rule|log> --format <table|json> | |||
Где: | Где: | ||
* type — тип таблицы | * <code>--type</code> — тип таблицы: <code>rule</code> — таблица правил удаления (по умолчанию); <code>exclude-rule</code> — таблица запретов на удаление; <code>log</code> — таблица удаленных снимков | ||
: | |||
== | * <code>--format</code> — формат вывода: <code>table</code> — человекочитаемый вывод (по умолчанию); <code>json</code> — 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 | |||
[[File:Cleanup rules table.png|center|thumb|1006x1006px]] | |||
=== Вывод таблицы запретов === | |||
svacer server cleanup list --user admin --password admin --type exclude-rule | |||
[[File:Cleanup exclude rule table.png|center|thumb|1009x1009px]] | |||
=== Вывод в 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 | |||
Снимки <code>*release*</code> никогда не удаляются. | |||
=== Ограничение количества снимков === | |||
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 | |||
Подходит: <code>feature/JIRA-123</code>, <code>feature/JIRA-456</code><br>Не подходит: <code>feature/JIRA-ABC</code>, <code>bugfix/JIRA-123</code> | |||
=== Regex синтаксис === | |||
{| class="wikitable" | |||
! Паттерн !! Описание !! Пример | |||
|- | |||
| <code>^</code> || Начало строки || <code>^test</code> | |||
|- | |||
| <code>[^x]</code> || Отрицание символов || <code>^[^m].*$</code> | |||
|- | |||
| <code>$</code> || Конец строки || <code>test$</code> | |||
|- | |||
| <code>.</code> || Любой символ || <code>a.c</code> → abc, a1c | |||
|- | |||
| <code>.*</code> || Любое кол-во символов || <code>test.*</code> → test-123 | |||
|- | |||
| <code>.+</code> || Один или более || <code>test.+</code> → test-1 | |||
|- | |||
| <code>[0-9]</code> || Любая цифра || <code>v[0-9]</code> → v1, v9 | |||
|- | |||
| <code>[a-z]</code> || Буква (нижний регистр) || <code>[a-z]+</code> → abc | |||
|- | |||
| <code>[A-Z]</code> || Буква (верхний регистр) || <code>[A-Z]+</code> → ABC | |||
|- | |||
| <code>(a|b)</code> || "a" или "b" || <code>(test|prod)</code> | |||
|- | |||
| <code>[0-9]{2,4}</code> || От 2 до 4 цифр || <code>12</code>, <code>1234</code> | |||
|} | |||
Не поддерживается '''negative lookahead''' <code>(?!...)</code>. Используйте комбинацию правил и запретов. | |||
Для правил отрицания конкретного элемента возможно использовать сложные правила, например: | |||
<code>--branch "re:^(.{0,3}|.{5,}|[^m]...|m[^a]..|ma[^i].|mai[^n])$"</code> | |||
<code> | Данное правило выбирает все ветки, кроме <code>main</code>. | ||
Revision as of 14:56, 23 October 2025
Автоматическое удаление снимков
Обзор
Удаление происходит раз в 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> --max-snapshots <max>
Параметры
--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.