Help:CLI/cleanup: Difference between revisions

From Svacer Wiki
m (minor fixes)
(cleanup info add more info and examples)
Line 1: Line 1:
== Автоматическое удаление снимков ==
= Автоматическое удаление снимков =
Удаление происходит раз в час, первое удаление всех подходящих снимков будет через 1 час после запуска сервера.


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


'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков.{{Note|text=Если снимок не задан в запрещенных к удалению, то он будет удаляться по минимальному времени, среди всех подходящих для него правил.}}
Удаление происходит раз в час (данное время можно изменить в переменных окружения или при запуске сервера), первое удаление всех подходящих снимков будет через указанное время после запуска сервера.


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


<nowiki>svacer server cleanup add-rule --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name> --time <time> --max-snapshots <max snapshots in branch></nowiki>
'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление и заносится отметка в таблицу удаленных снимков.


Где:
== Добавление нового правила удаления ==
* project проект в котором искать снимки для удаления
 
* branch ветка в которой искать снимки для удаления
svacer server cleanup add-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --time <time> --max-snapshots <max>
* snapshot — снимки которые удалять
 
* time время, которое должно пройти после создания снимка, чтобы его удалить. Задается в формате Go Duration (например <code>33h5m</code>). По умолчанию 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>--time</code>  - время, которое должно пройти после создания '''(НЕ импорта)''' снимка, чтобы его удалить. Задается в формате Go Duration (например <code>33h5m</code>, <code>720h</code>). По умолчанию '''720 часов''' (30 дней). '''Игнорируется, если <code>--max-snapshots > 0</code>'''
* <code>--max-snapshots</code> - верхняя граница по количеству снимков в ветке. При значении = 0 данное правило не работает. При значении > 0 '''игнорирует'''  '''<code>--time</code>'''. По умолчанию 0
 
=== Логика работы <code>--max-snapshots</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
Правило: --time 24h --max-snapshots 0
Результат: Удалит 5 старых снимков (>24h), останется 5
Пример 2: Только MAX
10 снимков в ветке
Правило: --max-snapshots 5
Результат: Удалит 5 самых старых, оставит 5 новейших
Пример 3: MAX игнорирует TIME
10 снимков, 5 старше 24h, 5 новых <24h
Правило: --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>.


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


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


=== Добавление запрета на удаление ===
'''Значение = 0''' — '''полный запрет на удаление:'''
* Снимки, подходящие под паттерн <code>project\branch\snapshot</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>
'''Значение > 0''' — '''минимальное количество в ветке:'''
* Правило применяется ко '''всей ветке''', если хотя бы один снимок подходит под паттерн
* Пока <code>total_snapshots ≤ MIN</code>, в ветке '''ничего не удаляется'''
* После того как <code>total > MIN</code>, можно удалить до <code>(total - MIN)</code> снимков


Где:
'''Важные моменты:'''
* При множественных запретах для одной ветки берется '''МАКСИМАЛЬНОЕ''' значение MIN
* MIN '''всегда''' имеет приоритет над MAX
* Если MIN=5 и MAX=3, то в ветке останется 5 снимков (MIN побеждает)


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


Остальные флаги работают аналогично с <code>svacer server cleanup add-rule</code>
Пример 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>


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


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


  svacer server cleanup list --type <rule|prohibition|log> --format <table|json>
  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 add-rule --user admin --password admin --project Devel* --branch 2025 --time "240h"
  svacer server cleanup run --user <user> --password <password>


'''Добавление запрета на удаление'''
Запускает процесс очистки немедленно (вне расписания).


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
'''Правило 1: Удаление по времени (TIME mode)'''


Вывод:
svacer server cleanup add-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "*" --time "240h" --max-snapshots 0
[[File:Prohibition table.png|thumb|1017x1017px|none]]
 
Удалятся снимки старше 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 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


Вывод:
Вывод:
[[File:Rules table.png|thumb|1012x1012px|none]]


  svacer server cleanup list --user admin --password admin --type prohibition --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
 
Снимки <code>*release*</code> никогда не удаляются.
 
=== Ограничение количества снимков ===
 
  svacer server cleanup add-rule --user admin --password admin --project "*" --branch "main" --snapshot "*" --max-snapshots 20


Вывод:
В ветке main хранить максимум 20 снимков.
  [{"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"}]
 
=== Комбинация 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 "*" --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>
|-
|[^x]
|Отрицание символов
|^[^m].*$
|-
| <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>


svacer server cleanup delete --user admin --password admin --id 878d1d1a-db1a-42a4-9557-ef568f68cd3e
Данное правило выбирает все ветки, кроме <code>main</code>.

Revision as of 19:25, 13 October 2025

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

Обзор

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

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

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

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

svacer server cleanup add-rule --user <user> --password <password> --project <project> --branch <branch> --snapshot <snapshot> --time 

Параметры

  • --project - проект, в котором искать снимки для удаления (обязательный, используйте "*" для всех снимков)
  • --branch - ветка, в которой искать снимки для удаления (обязательный, используйте "*" для всех снимков)
  • --snapshot - снимок, который удалять (обязательный, используйте "*" для всех снимков)
  • --time - время, которое должно пройти после создания (НЕ импорта) снимка, чтобы его удалить. Задается в формате Go Duration (например 33h5m, 720h). По умолчанию 720 часов (30 дней). Игнорируется, если --max-snapshots > 0
  • --max-snapshots - верхняя граница по количеству снимков в ветке. При значении = 0 данное правило не работает. При значении > 0 игнорирует --time. По умолчанию 0

Логика работы --max-snapshots

MAX устанавливает верхнюю границу по количеству снимков в ветке:

  • Считает все снимки в ветке (total) если хотя бы один из снимков подходит под project\branch\snapshot
  • Если total > MAX, удаляет (total - MAX) самых старых снимков
  • Удаляет только снимки, подходящие под паттерн project\branch\snapshot
  • При MAX = 0 данное правило не работает

Примеры:

Пример 1: Только TIME
10 снимков в ветке, 5 старше 24h
Правило: --time 24h --max-snapshots 0
Результат: Удалит 5 старых снимков (>24h), останется 5

Пример 2: Только MAX
10 снимков в ветке
Правило: --max-snapshots 5
Результат: Удалит 5 самых старых, оставит 5 новейших

Пример 3: MAX игнорирует TIME
10 снимков, 5 старше 24h, 5 новых <24h
Правило: --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: Удаление по времени (TIME mode)

svacer server cleanup add-rule --user admin --password admin --project "Devel*" --branch "2025" --snapshot "*" --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 "*" --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.