Делал исследование на тему автоматизации обновления зависимостей в GitLab по аналогии с GitHub Dependabot.
Чаще всего приходится обновлять:
- GitLab CI скрипты
- Версии Helm чартов
- Теги контейнерных образов, которые использует Helm чарт
Поиск в сети дал три кандидата, которые более-менее подходили под эти требования:
Dependabot-gitlab
Про dependabot-gitlab особо рассказать нечего. Он является обёрткой над dependabot-core. Я не нашёл какой-либо информации о поддержке обновления CI скриптов GitLab поэтому этот вариант был сразу отброшен.
Updatecli
Updatecli не поддерживает обновление GitLab CI скриптов, но у меня получилось "накрутить" конфигурацию которая будет их обновлять. В итоге получилась "простыня" на 50+ строк, которую пришлось самостоятельно доводить до рабочего варианта, т.к. AI агент не осилил написать синтаксически верную конфигурацию, упорно пытаясь использовать "kind: gitlabtag" и выполняя чтобы получить список тегов из GitHub репозитория.
В какой-то момент мое терпение закончилось и я быстро нашёл в документации что правильный вариант "kind: gitlab/tag". После этого оставалось поправить несколько "шероховатостей" и первый MR создался. В общем легковесный и рабочий вариант, но скорее всего придётся писать конфиг руками и конфигурация по-умолчанию привязана к конкретному репозитарию.
Renovate
Renovate понравился больше всего. Ставится в Kubernetes кластер через Helm чарт, привязывается к GitLab серверу через веб хуки (можно не привязывать, но тогда срабатывание будет только по расписанию). Сходу определились доступные обновления CI скриптов, образов, которые указаны в services и теги в Helm values.yaml файле.
Наш нестандартный пайплайн для Helm чартов в котором версия чарта задаётся через переменную получилось прикрутить через "regex" custom manager. Перед переменной нужно добавить аннотацию чтобы renovate понимал как выделить текущую версию и проверить наличие обновления. При первом запуске в репозитории создаётся "Configure Renovate" MR в котором перечислены изменения которые произойдут после включения Renovate. По-умолчанию создаёт только 2 MR в час и на первое время стоит увеличить этот лимит через параметр prHourlyLimit.
Для community версии Renovate по-умолчанию предоставляется лицензия на 10 репозитариев и чтобы снять это ограничение нужно запросить отдельную бесплатную лицензию.
Комментариев нет:
Отправить комментарий