Help:CLI/cleanup: Difference between revisions
m (minor fixes) |
(cleanup-type add) |
||
| (6 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> --type <type> | ||
* snapshot — | |||
* time — время, которое должно пройти после создания снимка, чтобы его удалить. Задается в формате Go Duration (например <code>33h5m</code>). По умолчанию 720 часов (30 дней) | === Параметры === | ||
* | |||
* <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>--min-snapshots</code> — количество снимков, которое необходимо оставлять в ветке, подходящей под паттерн project + branch. По умолчанию 0 | |||
* <code>--cleanup-type</code> — тип очистки. Возможные значения - project, branch, snapshot (по умолчанию snapshot). При указании snapshot будут очищаться снимки в соответствии с паттерном проект+ветка+снимок и проверяться <code>keep-time</code> и <code>min-snapshots</code>. При указании branch будут удаляться пустые ветки в соответствии с паттерном project + branch. При указании project Будут удаляться пустые проекты (у которых нет веток) в соответствии с паттерном project. При указании branch или project невозможно указать <code>keep-time</code> и <code>min-snapshots</code>, эти флаги не учитываются. | |||
=== Шаблоны и паттерны === | |||
Флаги <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- | 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>--add-rule</code>. | |||
== Удаление правила == | |||
svacer server cleanup delete --user <user> --password <password> --id <config id> | |||
Где: | Где: | ||
* id — | * <code>--id</code> — ID конфигурации из таблицы правил или запретов (получить через <code>cleanup list</code>) | ||
== Вывести таблицу == | |||
svacer server cleanup list --type <rule| | 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 формат | |||
== Запуск очистки вручную == | |||
* format — формат вывода: table — | |||
svacer server cleanup run --user <user> --password <password> | |||
Запускает процесс очистки немедленно (вне расписания). | |||
== Примеры == | |||
=== Добавление нового правила === | |||
'''Удаление по времени''' | |||
svacer server cleanup add-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "*" --keep-time "240h" | |||
Удалятся снимки старше 240 часов (10 дней) в проектах, начинающихся с "Devel", в ветке "2025". | |||
'''Ограничение количества''' | |||
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --min-snapshots 20 | |||
В любом проекте, в ветке "main" всегда будет не более 20 снимков, остальные будут удаляться. | |||
''' | '''Очистка пустых веток''' | ||
svacer server cleanup add- | svacer server cleanup add-rule --user admin --password admin --project "*" --branch "master" --cleanup-type branch | ||
В любом проекте, в ветке "main" всегда будет не более 20 снимков, остальные будут удаляться. | |||
=== Добавление запрета на удаление === | |||
svacer server cleanup add-exclude-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "test*" | |||
Снимки, начинающиеся с "test", в проектах "Devel*" и ветке "2025" '''никогда не удаляются правилами cleanup'''. | |||
=== Вывод таблицы правил === | |||
svacer server cleanup list --user admin --password admin --type rule | svacer server cleanup list --user admin --password admin --type rule | ||
[[File:Cleanup rules.png|none|thumb|955x955px]] | |||
=== Вывод таблицы запретов === | |||
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 | |||
=== Использование regex === | |||
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "re:^feature/JIRA-[0-9]+$" --snapshot "*" --keep-time 168h | |||
Подходит: <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>main</code>. | |||
Latest revision as of 16:13, 28 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> --type <type>
Параметры
--project— проект, в котором искать снимки для удаления (обязательный, используйте"*"для всех проектов)--branch— ветка, в которой искать снимки для удаления (обязательный, используйте"*"для всех веток)--snapshot— снимок, который удалять (обязательный, используйте"*"для всех снимков)--keep-time— время, которое должно пройти после создания (НЕ импорта) снимка, чтобы его удалить. Задается в формате Go Duration (например33h5m,720h). По умолчанию 720 часов (30 дней). Игнорируется, если--max-snapshots > 0--min-snapshots— количество снимков, которое необходимо оставлять в ветке, подходящей под паттерн project + branch. По умолчанию 0--cleanup-type— тип очистки. Возможные значения - project, branch, snapshot (по умолчанию snapshot). При указании snapshot будут очищаться снимки в соответствии с паттерном проект+ветка+снимок и проверятьсяkeep-timeиmin-snapshots. При указании branch будут удаляться пустые ветки в соответствии с паттерном project + branch. При указании project Будут удаляться пустые проекты (у которых нет веток) в соответствии с паттерном project. При указании branch или project невозможно указатьkeep-timeиmin-snapshots, эти флаги не учитываются.
Шаблоны и паттерны
Флаги --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— снимок (обязательный, используйте"*"для всех снимков)
Флаги проекта, ветки и снимка работают аналогично с флагами в --add-rule.
Удаление правила
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>
Запускает процесс очистки немедленно (вне расписания).
Примеры
Добавление нового правила
Удаление по времени
svacer server cleanup add-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "*" --keep-time "240h"
Удалятся снимки старше 240 часов (10 дней) в проектах, начинающихся с "Devel", в ветке "2025".
Ограничение количества
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --min-snapshots 20
В любом проекте, в ветке "main" всегда будет не более 20 снимков, остальные будут удаляться.
Очистка пустых веток
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "master" --cleanup-type branch
В любом проекте, в ветке "main" всегда будет не более 20 снимков, остальные будут удаляться.
Добавление запрета на удаление
svacer server cleanup add-exclude-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "test*"
Снимки, начинающиеся с "test", в проектах "Devel*" и ветке "2025" никогда не удаляются правилами cleanup.
Вывод таблицы правил
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
Использование regex
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "re:^feature/JIRA-[0-9]+$" --snapshot "*" --keep-time 168h
Подходит: 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.