Preview-окружения создаются автоматически при каждом пуше кода для проверки изменений. Со временем они накапливаются и занимают значительную часть дискового пространства серверов CI/CD, замедляя работу системы. Очистка старых окружений без удаления активных веток (main, develop) необходима для поддержания производительности и стабильности инфраструктуры.
Определение статуса preview-окружений и их влияние на производительность
Preview-ветки (например, feature/branch-name) создаются автоматически при пуше кода в систему CI/CD. Они содержат скомпилированные артефакты, логи тестов и временные файлы, необходимые для проверки сборки.
При частых обновлениях или работе с большими проектами количество таких веток может достигать сотен. Каждая ветка потребляет дисковое пространство и ресурсы процессора при запуске пайплайнов.
Накопление старых окружений приводит к замедлению времени выполнения CI/CD, увеличению стоимости хостинга (если тариф зависит от объема хранилища) и рискам потери доступа к актуальным версиям из-за переполнения лимитов системы.
Методы очистки веток preview без удаления основных рабочих веток
Основная задача — удалить только те ветки, которые не используются в текущих процессах разработки или тестирования. Активные ветки main и develop должны оставаться нетронутыми.
Первый шаг — идентификация старых веток. В Git это можно сделать через команду git branch -a | grep 'preview' или просмотр списка веток в интерфейсе репозитория (GitHub, GitLab).
Второй шаг — проверка активности. Удалить следует ветки, которые не обновлялись более определенного периода (например, 30 дней) и не имеют активных ссылок на них в задачах трекера.
Третий шаг — физическое удаление. В GitLab это делается через интерфейс или API (удаление ветки по имени). В GitHub Actions можно использовать встроенные настройки для удаления артефактов после определенного времени.
Использование скриптов для автоматизации процесса удаления старых окружений
Ручное удаление неэффективно при большом количестве веток. Рекомендуется использовать скрипты, которые автоматически находят и удаляют старые preview-ветки.
Пример логики скрипта: 1) Получить список всех веток; 2) Отфильтровать те, что содержат 'preview' или 'feature'; 3) Проверить дату последнего изменения (например, через git log); 4) Удалить ветки старше заданного порога.
Скрипт должен работать с правами администратора в репозитории и иметь механизмы безопасности: например, подтверждение удаления перед выполнением или исключение определенных имен веток из списка на удаление.
Важно тестировать скрипт на копии репозитория или в режиме 'dry-run' (сухой запуск), чтобы убедиться, что он не удалит активные ветки разработки.
Проверка состояния репозитория после очистки и восстановление доступа
После выполнения очистки необходимо проверить целостность репозитория. Это включает проверку количества веток, объема хранилища и доступности основных веток main и develop.
Если удаление прошло успешно, время сборки новых пайплайнов должно сократиться, а стоимость хранения данных уменьшиться.
В случае ошибок (например, попытки удаления активной ветки) нужно восстановить состояние репозитория: откатить изменения, если они были внесены в Git-историю, и убедиться, что ссылки на удаленные ветки в задачах трекера обновлены или перенаправлены.
Настройка правил в CI/CD системах для автоудаления старых preview
Современные платформы CI/CD (GitHub Actions, GitLab CI) позволяют настроить автоматическое удаление артефактов и веток.
В GitHub Actions можно использовать настройки workflow для удаления временных файлов после завершения пайплайна. В GitLab CI есть возможность настраивать TTL (Time To Live) для артефактов и веток.
Рекомендуется настроить правило: удалять preview-ветки, которые не обновлялись более 14–30 дней. Это балансирует между необходимостью тестирования новых функций и экономией ресурсов.
Также стоит настроить уведомления о приближении к лимитам хранилища, чтобы оперативно реагировать на аномальный рост количества веток.
Вопросы и ответы
Можно ли удалять preview-ветки, если они используются в задачах трекера?
Нет. Перед удалением необходимо убедиться, что на ветку нет активных ссылок в задачах (Jira, Trello и др.). Если ссылка активна, ветку следует оставить или перенаправить её на новую версию.
Как часто нужно проводить очистку preview-окружений?
Оптимально — раз в неделю или при достижении определенного порога использования хранилища. Автоматизация позволяет делать это ежедневно без участия человека.


