Я использую встроенного бота Renovate в Gitlab для сканирования моего репозитория Gitlab на наличие зависимых обновлений изображений. Бот сканирует изображения, используемые в моем docker-compose.yml, и просматривает мой частный реестр контейнеров Azure (ACR), если есть какие-либо зависимые обновления образа. В настоящее время это не удается, поскольку имя изображения, используемое в моем docker-compose.yml, не совпадает с именем изображения в моем ACR. Renovate сообщает, что не может найти мою посылку. Как мне это решить?
Я знаю, что мне нужно использоватьpackageRules и customManagers, но я не совсем понимаю, как мой renovate.json должен выглядеть для реализации этого.
Текущая настройка
докер-compose.yml:
services:
prometheus:
image: <ACR_URL>/<TEAM>/prometheus:0.0.1
Имя образа ACR:
<TEAM>/prometheus
Обновить журналирование ботов:
{
"depName": "<ACR_URL>/<TEAM>/prometheus",
"currentValue": "0.0.1",
"replaceString": "<ACR_URL>/<TEAM>/prometheus:0.0.1",
"autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
"datasource": "docker",
"updates": [],
"packageName": "<ACR_URL>/<TEAM>/prometheus",
"versioning": "docker",
"warnings": [
{
"topic": "<ACR_URL>/<TEAM>/prometheus",
"message": "Failed to look up docker package <ACR_URL>/<TEAM>/prometheus"
}
]
},
Это мой текущий renovate.json:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
],
"baseBranches": [
"main"
],
"hostRules": [
{
"matchHost": "$ACR_URL",
"username": "$ACR_USER",
"password": "$ACR_TOKEN"
}
],
"packageRules": [
{
"groupName": "all non-major dependencies",
"groupSlug": "all-minor-patch",
"matchPackagePatterns": [
"*"
],
"registryUrls": [
"$ACR_URL"
]
}
]
}
Рабочая конфигурация обновления
Пример .gitlab-ci.yml
image: renovate/renovate:37.382
stages:
- renovate
variables:
RENOVATE_BASE_DIR: $CI_PROJECT_DIR/renovate
RENOVATE_ENDPOINT: $CI_API_V4_URL
RENOVATE_EXTRA_FLAGS: --autodiscover=true
RENOVATE_HOST_RULES: |
[
{
"matchHost": "github.com",
"token": "$GITHUB_TOKEN"
},
{
"matchHost": "gitlab.<ENDPOINT>.com",
"token": "$GITLAB_ACCESS_TOKEN",
"authType": "Bearer"
},
{
"matchHost": "$ACR_URL",
"password": "$ACR_TOKEN",
"username": "$ACR_USER"
}
]
RENOVATE_ONBOARDING: "true"
RENOVATE_OPTIMIZE_FOR_DISABLED: "true"
RENOVATE_PLATFORM: gitlab
RENOVATE_REPOSITORY_CACHE: "true"
LOG_LEVEL: debug
.matrix:
parallel:
matrix:
- RENOVATE_AUTODISCOVER_FILTER: /<PARENT>/<SUBGROUPA>/.*/
- RENOVATE_AUTODISCOVER_FILTER: /<PARENT>/<SUBGROUPB>/<PROJECT>/
cache:
key: ${CI_COMMIT_REF_SLUG}-renovate
paths:
- $CI_PROJECT_DIR/renovate
run_renovate:
stage: renovate
resource_group: production
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
script:
- renovate $RENOVATE_EXTRA_FLAGS
extends: .matrix
renovate:
stage: renovate
script:
- renovate --dry-run $RENOVATE_EXTRA_FLAGS
extends: .matrix
На примере renovate.json:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
],
"baseBranches": [
"main"
],
"packageRules": [
{
"groupName": "all non-major dependencies",
"matchPackagePatterns": [
"*"
],
"matchUpdateTypes": [
"minor",
"patch"
]
},
{
"groupName": "all major dependencies",
"matchPackagePatterns": [
"*"
],
"matchUpdateTypes": ["major"]
}
],
"pre-commit": {
"enabled": true
}
}
Ты прав. Я перенастроил хост-правила в своей конфигурации RenovateBot, добавив хост-правила gitlab и docker. Теперь происходит сбой только в правилах хостинга, установленных в renovate.json сканируемого проекта при авторизации ACR. Спасибо за вашу помощь, мне нужно будет выяснить, как настроить мои учетные данные ACR.
Привет @Byang117. Можете ли вы подтвердить, где вы хотите настроить учетные данные ACR, будь то бот или Gitlab?
Мне удалось заставить его работать с конфигурацией учетных данных ACR в конфигурации renovatebot. Помещение его в renovate.json сканируемого проекта gitlab не помогло. Но текущая настройка у меня работает нормально. Просто нужно поместить все мои реестры в качестве хострулов в конфигурацию моего renovatebot.
@ Byang117 Очень приятно слышать, что вы смогли решить свою проблему. Не могли бы вы задокументировать свое решение в ответе? Это внесет ясность для тех, кто сталкивается с аналогичными техническими проблемами в сообществе.
Хорошая мысль, добавил свою текущую настройку
@ Byang117 Byang117 Вы можете опубликовать свое решение в качестве ответа ниже и согласиться пометить его как рабочее решение на платформе.
Хорошее предложение, сделано.





Рабочая конфигурация обновления
Пример .gitlab-ci.yml
image: renovate/renovate:37.382
stages:
- renovate
variables:
RENOVATE_BASE_DIR: $CI_PROJECT_DIR/renovate
RENOVATE_ENDPOINT: $CI_API_V4_URL
RENOVATE_EXTRA_FLAGS: --autodiscover=true
RENOVATE_HOST_RULES: |
[
{
"matchHost": "github.com",
"token": "$GITHUB_TOKEN"
},
{
"matchHost": "gitlab.<ENDPOINT>.com",
"token": "$GITLAB_ACCESS_TOKEN",
"authType": "Bearer"
},
{
"matchHost": "$ACR_URL",
"password": "$ACR_TOKEN",
"username": "$ACR_USER"
}
]
RENOVATE_ONBOARDING: "true"
RENOVATE_OPTIMIZE_FOR_DISABLED: "true"
RENOVATE_PLATFORM: gitlab
RENOVATE_REPOSITORY_CACHE: "true"
LOG_LEVEL: debug
.matrix:
parallel:
matrix:
- RENOVATE_AUTODISCOVER_FILTER: /<PARENT>/<SUBGROUPA>/.*/
- RENOVATE_AUTODISCOVER_FILTER: /<PARENT>/<SUBGROUPB>/<PROJECT>/
cache:
key: ${CI_COMMIT_REF_SLUG}-renovate
paths:
- $CI_PROJECT_DIR/renovate
run_renovate:
stage: renovate
resource_group: production
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
script:
- renovate $RENOVATE_EXTRA_FLAGS
extends: .matrix
renovate:
stage: renovate
script:
- renovate --dry-run $RENOVATE_EXTRA_FLAGS
extends: .matrix
На примере renovate.json:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
],
"baseBranches": [
"main"
],
"packageRules": [
{
"groupName": "all non-major dependencies",
"matchPackagePatterns": [
"*"
],
"matchUpdateTypes": [
"minor",
"patch"
]
},
{
"groupName": "all major dependencies",
"matchPackagePatterns": [
"*"
],
"matchUpdateTypes": ["major"]
}
],
"pre-commit": {
"enabled": true
}
}
Можете ли вы включить ведение журнала отладки для Renovate, чтобы получить больше информации о том, почему он не может получить доступ к реестру контейнеров. Название изображения не является проблемой. Я бы лучше сделал ставку на права доступа к реестру контейнеров.