Help:CLI/cleanup: Difference between revisions

From Svacer Wiki
m (minor fixes)
(cleanup-type add)
 
(8 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></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 дней)
=== Параметры ===
 
* <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


Флаги для проекта, ветки и снимка можно задавать как имя либо как ID, также в имени может быть знак *, который равен "любому количеству любых символов". Если данные флаги не заданы, то автоматически подставляется * (любой проект, ветка, снимок).
== Добавление запрета на удаление ==


С версии 12-0-0 в опциях <code>add-rule</code> и <code>add-prohibition</code> можно задавать регулярные выражения: для этого нужно в начале написать <code>re:</code> и следующая часть будет считаться регулярным выражением (в этом случае нужно будет указывать <code>.*</code> вместо <code>*</code>).
svacer server cleanup add-exclude-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --min-snapshots <min>


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


<code>svacer server cleanup add-prohibition --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name></code>
* <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 — таблица запрещенных к удалению
:* log — таблица удаленных снимков
* format — формат вывода: table — таблица (человекочитаемый вывод), json


=== Примеры ===
* <code>--format</code> — формат вывода: <code>table</code> — человекочитаемый вывод (по умолчанию); <code>json</code> — JSON формат
== Запуск очистки вручную ==


'''Добавление нового правила'''
svacer server cleanup run --user <user> --password <password>


<code>svacer server cleanup add-rule --user admin --password admin --project Devel* --branch 2025 --time "240h"</code>
Запускает процесс очистки немедленно (вне расписания).


== Примеры ==


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


<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 "Devel*" --branch "2025" --snapshot "*" --keep-time "240h"


'''Вывод данных таблиц'''
Удалятся снимки старше 240 часов (10 дней) в проектах, начинающихся с "Devel", в ветке "2025".


<code>svacer server cleanup list --user admin --password admin --type prohibition</code>
'''Ограничение количества'''


[[File:Prohibition table.png|thumb|1017x1017px|none]]
svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --min-snapshots 20


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


<code>svacer server cleanup list --user admin --password admin --type rule</code>
'''Очистка пустых веток'''
[[File:Rules table.png|thumb|1012x1012px|none]]


svacer server cleanup add-rule --user admin --password admin --project "*" --branch "master"  --cleanup-type branch


<code>svacer server cleanup list --user admin --password admin --type prohibition --format json</code>
В любом проекте, в ветке "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
[[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


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


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