Help:CLI/cleanup: Difference between revisions

From Svacer Wiki
m (minor fixes)
(cleanup add info)
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Автоматическое удаление снимков =
== Автоматическое удаление снимков ==
Удаление происходит раз в час, первое удаление всех подходящих снимков будет через 1 час после запуска сервера.


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


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


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


'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков. Также информация о удалении через cleanup вносится в системный журнал.
<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>


== Добавление нового правила удаления ==
Где:
* project — проект в котором искать снимки для удаления
* branch — ветка в которой искать снимки для удаления
* snapshot — снимки которые удалять
* time — время сколько должно пройти после создания снимка, чтобы его удалить, задается в формате Go Duration (например 33h5m). По умолчанию 720 часов (30 дней)


svacer server cleanup add-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --keep-time <nowiki><time></nowiki> --max-snapshots <max>
Флаги для проекта, ветки и снимка можно задавать как имя либо как ID, также в имени может быть знак *, который равен "любому количеству любых символов". Если данные флаги не заданы, то автоматически подставляется * (любой проект, ветка, снимок).


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


* <code>--project</code> — проект, в котором искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех проектов)
<code>svacer server cleanup add-prohibition --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name></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> ===
Флаги работают аналогично с <code>svacer server cleanup add-rule</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 снимков


== Удаление правила ==
<code>svacer server cleanup delete --id <config id></code>
 
svacer server cleanup delete --user <user> --password <password> --id <config id>


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


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


svacer server cleanup list --user <user> --password <password> --type <rule|exclude-rule|log> --format <table|json>
<code>svacer server cleanup list --type <rule|prohibition|log> --format <table|json></code>


Где:
Где:
* <code>--type</code> — тип таблицы: <code>rule</code> — таблица правил удаления (по умолчанию); <code>exclude-rule</code> — таблица запретов на удаление; <code>log</code> — таблица удаленных снимков
* type — тип таблицы, которую нужно вывести
:*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>


== Примеры ==


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


'''Правило 1: Удаление по времени'''
<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" --max-snapshots 0


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


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


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


В любом проекте, в ветке "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-exclude-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "test*" --min-snapshots 0


Снимки, начинающиеся с "test", в проектах "Devel*" и ветке "2025" '''никогда не удаляются'''.
<code>svacer server cleanup list --user admin --password admin --type prohibition --format json</code>
 
=== Вывод таблицы правил ===
 
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"}]
<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>
 
=== Удаление правила ===
 
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&#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>main</code>.
<code>svacer server cleanup delete --user admin --password admin --id 878d1d1a-db1a-42a4-9557-ef568f68cd3e</code>

Revision as of 14:53, 30 June 2025

Автоматическое удаление снимков

Удаление происходит раз в час, первое удаление всех подходящих снимков будет через 1 час после запуска сервера.

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

Принцип работы: происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков.

Если снимок не задан в запрещенных к удалению, то он будет удаляться по минимальному времени, среди всех подходящих для него правил.

Добавление нового правила удаления

svacer server cleanup add-rule --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name> --time <time>

Где:

  • project — проект в котором искать снимки для удаления
  • branch — ветка в которой искать снимки для удаления
  • snapshot — снимки которые удалять
  • time — время сколько должно пройти после создания снимка, чтобы его удалить, задается в формате Go Duration (например 33h5m). По умолчанию 720 часов (30 дней)

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

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

svacer server cleanup add-prohibition --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name>

Флаги работают аналогично с svacer server cleanup add-rule

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

svacer server cleanup delete --id <config id>

Где:

  • id — id конфигурации из разрешенных к удалению или запрещенных к удалению

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

svacer server cleanup list --type <rule|prohibition|log> --format <table|json>

Где:

  • type — тип таблицы, которую нужно вывести
  • rule — таблица удаляемых снимков
  • prohibition — таблица запрещенных к удалению
  • log — таблица удаленных снимков
  • format — формат вывода: table — таблица (человекочитаемый вывод), json

Примеры

Добавление нового правила

svacer server cleanup add-rule --user admin --password admin --project Devel* --branch 2025 --time "240h"


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

svacer server cleanup add-prohibition --user admin --password admin --project Devel* --branch 2025 --snapshot test*


Вывод данных таблиц

svacer server cleanup list --user admin --password admin --type prohibition


svacer server cleanup list --user admin --password admin --type rule


svacer server cleanup list --user admin --password admin --type prohibition --format json

Вывод:

[{"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"}]


Удаление элемента из таблицы

svacer server cleanup delete --user admin --password admin --id 878d1d1a-db1a-42a4-9557-ef568f68cd3e