Help:CLI/cleanup: Difference between revisions

From Svacer Wiki
m (add info cleanup)
m (minor fixes)
Line 11: Line 11:
== Добавление нового правила удаления ==
== Добавление нового правила удаления ==


  svacer server cleanup add-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --keep-time <nowiki><time> </nowiki><time>--max-snapshots <max>
  svacer server cleanup add-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --keep-time <nowiki><time></nowiki> --max-snapshots <max>


=== Параметры ===
=== Параметры ===


* <code>--project</code> - проект, в котором искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех снимков)
* <code>--project</code> проект, в котором искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех проектов)
* <code>--branch</code> - ветка, в которой искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех снимков)
* <code>--branch</code> ветка, в которой искать снимки для удаления ('''обязательный''', используйте <code>"*"</code> для всех веток)
* <code>--snapshot</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>--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> верхняя граница по количеству снимков в ветке. При значении = 0 данное правило не работает. При значении > 0 '''игнорирует'''  '''<code>--keep-time</code>'''. По умолчанию 0


=== Логика работы <code>--max-snapshots</code> ===
=== Логика работы <code>--max-snapshots</code> ===
Line 65: Line 65:


'''2. <code>*</code> (любое количество любых символов):'''
'''2. <code>*</code> (любое количество любых символов):'''
  --project "Dev*"     # DevProject, Development
  --project "Dev*"         # DevProject, Development
  --branch "*test*"     # test, my-test, testing
  --branch "*test*"       # test, my-test, testing
  --snapshot "nightly-*"
  --snapshot "nightly-*"


'''3. Регулярные выражения (с префиксом <code>re:</code>):'''
'''3. Регулярные выражения (с префиксом <code>re:</code>):'''
  --snapshot "re:^v[0-9]+\.[0-9]+\.[0-9]+$"   # v1.0.0, v2.3.5
  --snapshot "re:^v[0-9]+\.[0-9]+\.[0-9]+$"   # v1.0.0, v2.3.5
  --branch "re:^feature/[0-9]+$"              # feature/123
  --branch "re:^feature/[0-9]+$"              # feature/123


Line 79: Line 79:
=== Параметры ===
=== Параметры ===


* <code>--project</code> - проект, в котором искать снимки для удаления ('''обязательный''' , используйте <code>"*"</code> для всех веток)
* <code>--project</code> проект, в котором искать снимки для удаления ('''обязательный''' , используйте <code>"*"</code> для всех проектов)


* <code>--branch</code> - ветка ('''обязательный''', используйте <code>"*"</code> для всех веток)
* <code>--branch</code> ветка ('''обязательный''', используйте <code>"*"</code> для всех веток)
* <code>--snapshot</code> - снимок ('''обязательный''', используйте <code>"*"</code> для всех снимков)
* <code>--snapshot</code> снимок ('''обязательный''', используйте <code>"*"</code> для всех снимков)
* <code>--min-snapshots</code> - нижняя граница по количеству снимков в ветке. По умолчанию '''0'''  
* <code>--min-snapshots</code> нижняя граница по количеству снимков в ветке. По умолчанию '''0'''  
Флаги проекта, ветки и снимка работают аналогично с флагами в <code>--add-rule</code>.
Флаги проекта, ветки и снимка работают аналогично с флагами в <code>--add-rule</code>.


Line 231: Line 231:
| <code>^</code> || Начало строки || <code>^test</code>
| <code>^</code> || Начало строки || <code>^test</code>
|-
|-
|[^x]
| <code>[^x]</code> || Отрицание символов || <code>^[^m].*$</code>
|Отрицание символов
|^[^m].*$
|-
|-
| <code>$</code> || Конец строки || <code>test$</code>
| <code>$</code> || Конец строки || <code>test$</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.