Удаление запуска
Важно
Удаленный запуск нельзя восстановить.
Удаление запуска — самый быстрый и надежный способ очистки исторических данных в базе данных. При удалении запуска выполняется каскадное удаление всех связанных с ним данных: результатов тестов, тестовых сценариев, вложений фикстур и прочих связанных записей.
Удаление отдельных запусков
Чтобы удалить отдельный запуск:
- Перейдите в раздел Запуски.
- Справа от нужного запуска нажмите
⋯→ Удалить → Удалить.
Массовое удаление запусков
Массовое удаление запусков в ТестОпс доступно с помощью утилиты allure-testops-utils и SQL-скрипта для удаления по расписанию.
Важно
После массового удаления запусков необходимо запускать процедуру VACUUM, чтобы очистить таблицы базы данных от неактуальных строк (dead tuples) и использовать освободившееся пространство. В первую очередь это относится к наиболее нагруженным таблицам test_result и test_result_custom_field, однако рекомендуется выполнять процедуру для всех таблиц.
Подробнее см. официальную документацию PostgreSQL.
Утилита allure-testops-utils
Утилита allure-testops-utils выполняется в Docker-контейнере и удаляет запуски по заданным критериям: дате создания, тегам и проекту. Для каждого подходящего запуска она вызывает тот же API ТестОпс, что и кнопка удаления в пользовательском интерфейсе, то есть массово повторяет ручную операцию удаления.
Для аутентификации утилита использует имя пользователя и пароль учетной записи в ТестОпс. Вход через SSO не поддерживается.
Пример запуска утилиты allure-testops-utils
shell
docker run \
-e "ALLURE_ENDPOINT=<URL-адрес вашего инстанса ТестОпс>" \
-e "ALLURE_USERNAME=<имя пользователя>" \
-e "ALLURE_PASSWORD=<пароль>" \
-e "PROJECT_ID=<ID проекта>" \
-e "LAUNCH_FILTER=tag = \"delete\"" \
-e "LAUNCH_CREATEDBEFORE=30d 0h 0m" \
ghcr.io/eroshenkoam/allure-testops-utils clean-launchesгде:
ALLURE_ENDPOINT— URL-адрес вашего инстанса ТестОпс;ALLURE_USERNAMEиALLURE_PASSWORD— имя пользователя и пароль вашей учетной записи в ТестОпс;PROJECT_ID— ID проекта;LAUNCH_FILTER— условие фильтрации запусков. В примере выше будут удалены только запуски с тегомdelete. Чтобы оставить фильтрацию только по времени, укажите значение"true";LAUNCH_CREATEDBEFORE— время с момента создания запуска, после которого он подлежит удалению. В примере выше — 30 дней.
SQL-скрипт для удаления по расписанию
Альтернативный способ для массового удаления большого количества запусков — SQL-скрипт, который напрямую обращается к базе данных. В этом скрипте можно указать сроки хранения запусков для каждого проекта и настроить удаление запусков по расписанию (например, через cronПланировщик заданий в Unix-подобных системах, который запускает команды и скрипты по расписанию).
Пример SQL-скрипта для удаления запусков
sql
DO
$do$
DECLARE
batch_size integer := 10;
cnt integer := 0;
launches_left bigint := 0;
BEGIN
DROP TABLE IF EXISTS launches_to_process;
CREATE TEMP TABLE launches_to_process AS
SELECT l.id AS id
FROM public.launch l
WHERE
-- Срок хранения по умолчанию — 3 месяца
(l.project_id NOT IN (11, 19, 21)
AND l.created_date < round(extract(epoch FROM (now() - INTERVAL '3 months')
AT TIME ZONE 'utc') * 1000))
OR
-- Проект 11: срок хранения — 6 месяцев
(l.project_id = 11
AND l.created_date < round(extract(epoch FROM (now() - INTERVAL '6 months')
AT TIME ZONE 'utc') * 1000))
OR
-- Проект 19: срок хранения — 1 месяц
(l.project_id = 19
AND l.created_date < round(extract(epoch FROM (now() - INTERVAL '1 month')
AT TIME ZONE 'utc') * 1000))
OR
-- Проект 21: срок хранения — 1 месяц
(l.project_id = 21
AND l.created_date < round(extract(epoch FROM (now() - INTERVAL '1 month')
AT TIME ZONE 'utc') * 1000))
ORDER BY id ASC;
LOOP
launches_left := (SELECT count(1) FROM launches_to_process);
EXIT WHEN (launches_left < 1);
cnt := cnt + batch_size;
RAISE NOTICE 'Удаление старых запусков... (%)', cnt;
CREATE TEMP TABLE launches_to_process_batch AS
SELECT id
FROM launches_to_process
ORDER BY id ASC
LIMIT batch_size;
DELETE FROM launch
WHERE launch.id IN (SELECT id FROM launches_to_process_batch);
DELETE FROM launches_to_process
WHERE launches_to_process.id IN (SELECT id FROM launches_to_process_batch);
DROP TABLE launches_to_process_batch;
COMMIT;
PERFORM pg_sleep(7);
END LOOP;
DROP TABLE launches_to_process;
END
$do$;В секции WHERE задаются правила хранения для каждого проекта. В приведенном примере:
- для всех проектов, кроме 11, 19 и 21, — удаление запусков старше 3 месяцев;
- для проекта 11 — удаление запусков старше 6 месяцев;
- для проектов 19 и 21 — удаление запусков старше 1 месяца.
Рекомендуется увеличить значение параметра batch_size до 100 для ускорения обработки.

