Renovate: обновления зависимостей и образов в GitLab
Добавлено 2026-10-29.
Проблема
Образы и зависимости обновляются вручную и редко. Закрепление по digest безопасно, но без автоматизации digest устаревает, и уязвимые версии живут месяцами.
Решение
Запускать Renovate по расписанию как job в self-hosted GitLab. Он создаёт merge request с обновлением и changelog; закрепление образов по digest включается пресетом docker:pinDigests. Автослияние — только при наличии тестов в CI.
Пример
.gitlab-ci.yml в отдельном проекте бота, запуск из Pipeline schedules. RENOVATE_TOKEN — маскированная переменная CI с токеном отдельного пользователя.
renovate:
image: renovate/renovate:44.196.1 # закрепить по digest
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
variables:
RENOVATE_PLATFORM: gitlab
RENOVATE_ENDPOINT: $CI_API_V4_URL
RENOVATE_REPOSITORIES: infra/devops-kb
script:
- renovate
renovate.json в обслуживаемом репозитории:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended", "docker:pinDigests"],
"schedule": ["* 0-5 * * 1"],
"packageRules": [
{ "matchDatasources": ["docker"], "groupName": "docker images" }
]
}
Для зависимостей с github.com дополнительно нужен RENOVATE_GITHUB_COM_TOKEN, иначе Renovate упрётся в лимиты API.
Когда применять
В любом репозитории с Dockerfile, compose-файлами или зависимостями пакетных менеджеров.
Источник
- renovatebot/renovate — лицензия AGPL-3.0
- Запуск self-hosted
- Пресет docker:pinDigests
Как применить у себя
- Завести пользователя-бота с правом создавать MR только в нужных проектах.
- Запустить на одном репозитории, без автослияния.
- Проверить первый MR с обновлением digest и changelog.
- Отметить «Изучено», когда обновления приходят еженедельно и сливаются после зелёного CI.