Help:CLI/cleanup: Difference between revisions

From Svacer Wiki
(cleanup add max/min snapshots)
(cleanup-type add)
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Автоматическое удаление снимков ==
= Автоматическое удаление снимков =
Удаление происходит раз в час, первое удаление всех подходящих снимков будет через 1 час после запуска сервера.


Применять может только пользователь с доступом ServerOperations.
== Обзор ==


'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков.{{Note|text=Если снимок не задан в запрещенных к удалению, то он будет удаляться по минимальному времени, среди всех подходящих для него правил.}}
Удаление происходит раз в 24 часа (данное время можно задать при запуске сервера опцией <code>--snapshots-cleanup-period</code>, либо в конфигурационном файле, либо переменной окружения <code>SVACER_CLEANUP_SNAPSHOTS_PERIOD</code>), первое удаление всех подходящих снимков будет через указанное время после запуска сервера.


=== Добавление нового правила удаления ===
Применять может только пользователь с доступом '''ServerOperations'''.


<code>svacer server cleanup add-rule --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name> --time <nowiki><time> max-snapshots <max snapshots in branch></nowiki></code>
'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление самых старых по времени создания подходящих снимков и заносится отметка в таблицу удаленных снимков и в системный журнал. После этого происходит удаление пустых веток и проектов в соответствии с правилами удаления. Также информация о удалении через 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 (например 33h5m). По умолчанию 720 часов (30 дней)
=== Параметры ===
* max-snapshots - верхняя граница по количеству снимков в ветке. Если снимков > max, удаляются самые старые, чтобы осталось ровно max (time не учитывается). Удаляются снимки, только подходящие под паттерн project\branch\snapshot, но количестве снимков считается во всей ветке (вне зависимости, подходит ли он под паттерн project\branch\snapshot или нет). При значении = 0 данное правило не работает. По умолчанию имеет значение 0. Данный флаг появился в версии 12-0-0.
 
* <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 проекта


Флаги для проекта, ветки и снимка можно задавать как имя либо как ID, также в имени может быть знак *, который равен "любому количеству любых символов". Если данные флаги не заданы, то автоматически подставляется * (любой проект, ветка, снимок).
'''2. <code>*</code> (любое количество любых символов):'''
--project "Dev*"        # DevProject, Development
--branch "*test*"        # test, my-test, testing
--snapshot "nightly-*"


С версии 12-0-0 в опциях <code>add-rule</code> и <code>add-prohibition</code> можно задавать регулярные выражения: для этого нужно в начале написать <code>re:</code> и следующая часть будет считаться регулярным выражением (в этом случае нужно будет указывать <code>.*</code> вместо <code>*</code>).
'''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


=== Добавление запрета на удаление ===
== Добавление запрета на удаление ==


<code>svacer server cleanup add-prohibition --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name> min-snapshots <min snapshots in branch></code>
svacer server cleanup add-exclude-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --min-snapshots <min>


Где:
=== Параметры ===


* min-snapshots - нижняя граница по количеству снимков в ветке. Пока в ветке снимков ≤ min, в ветке ничего не удаляется правилами cleanup (данное правило применяется к ветке, если хотя бы один из снимков подошел под паттерн project\branch\snapshot). При значении = 0 данное правило не работает (и тогда устанавливается полный запрет на удаление снимков, подходящий под паттерн project\branch\snapshot). По умолчанию имеет значение 0. Данный флаг появился в версии 12-0-0.
* <code>--project</code> — проект, в котором искать снимки для удаления ('''обязательный''' , используйте <code>"*"</code> для всех проектов)


Остальные флаги работают аналогично с <code>svacer server cleanup add-rule</code>
* <code>--branch</code> — ветка ('''обязательный''', используйте <code>"*"</code> для всех веток)
* <code>--snapshot</code> — снимок ('''обязательный''', используйте <code>"*"</code> для всех снимков)
Флаги проекта, ветки и снимка работают аналогично с флагами в <code>--add-rule</code>.


=== Удаление правила ===
== Удаление правила ==


<code>svacer server cleanup delete --id <config id></code>
svacer server cleanup delete --user <user> --password <password> --id <config id>


Где:
Где:
* id — id конфигурации из разрешенных к удалению или запрещенных к удалению
* <code>--id</code> ID конфигурации из таблицы правил или запретов (получить через <code>cleanup list</code>)


=== Вывести таблицу ===
== Вывести таблицу ==


<code>svacer server cleanup list --type <rule|prohibition|log> --format <table|json></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> — таблица удаленных снимков
:*rule — таблица удаляемых снимков
 
:* prohibition — таблица запрещенных к удалению
* <code>--format</code> — формат вывода: <code>table</code> — человекочитаемый вывод (по умолчанию); <code>json</code> — JSON формат
:* log — таблица удаленных снимков
== Запуск очистки вручную ==
* format — формат вывода: table — таблица (человекочитаемый вывод), 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".


'''Добавление нового правила'''
'''Ограничение количества'''


<code>svacer server cleanup add-rule --user admin --password admin --project Devel* --branch 2025 --time "240h"</code>
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --min-snapshots 20


В любом проекте, в ветке "main" всегда будет не более 20 снимков, остальные будут удаляться.


'''Добавление запрета на удаление'''
'''Очистка пустых веток'''


<code>svacer server cleanup add-prohibition --user admin --password admin --project Devel* --branch 2025 --snapshot test*</code>
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "master"  --cleanup-type branch


В любом проекте, в ветке "main" всегда будет не более 20 снимков, остальные будут удаляться.


'''Вывод данных таблиц'''
=== Добавление запрета на удаление ===


<code>svacer server cleanup list --user admin --password admin --type prohibition</code>
svacer server cleanup add-exclude-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "test*"


[[File:Prohibition table.png|thumb|1017x1017px|none]]
Снимки, начинающиеся с "test", в проектах "Devel*" и ветке "2025" '''никогда не удаляются правилами cleanup'''.


=== Вывод таблицы правил ===


<code>svacer server cleanup list --user admin --password admin --type rule</code>
svacer server cleanup list --user admin --password admin --type rule
[[File:Rules table.png|thumb|1012x1012px|none]]
[[File:Cleanup rules.png|none|thumb|955x955px]]


=== Вывод таблицы запретов ===


<code>svacer server cleanup list --user admin --password admin --type prohibition --format json</code>
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


Вывод:
Вывод:


<code>[{"Branch":"2025","CreatedBy":"admin","CreatedById":"00000000-0000-0000-0000-000000000000","DeleteTime":0,"ID":"7e2c2a12-3fd4-4bb2-8b3a-1f80d81c3bc5","Project":"Devel*","Snapshot":"test*","create_time":"2025-02-24T09:06:53.794742Z"}]</code>
[{"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&#124;b)</code> || "a" или "b" || <code>(test&#124;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>svacer server cleanup delete --user admin --password admin --id 878d1d1a-db1a-42a4-9557-ef568f68cd3e</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.