You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Renovate配置疑问:如何在同一PR更新镜像版本并保留摘要固定?

问题:Renovate配置导致版本更新失效,无法同时保留镜像版本更新与摘要固定

我配置了Renovate,但现在会生成两个PR(摘要更新得等版本合并后才触发)。我的核心需求是更新镜像版本的同时保留镜像摘要固定的安全性,但添加"docker:pinDigests"配置后,版本更新功能直接停了,请问我的配置哪里有问题?

镜像声明示例(Kubernetes)

image: ghcr.io/stirling-tools/s-pdf:0.25.1@sha256:c510d267ad6c2d4062f0b6ead3ce4201a888a07ba1c685359d4ba09a4c48cb26

我的Renovate配置

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "labels": ["dependencies", "renovate"],
  "ignorePaths": [
    "Kubernetes/secrets_raw"
  ],
  "minimumReleaseAge": "7 days",
  "extends": [
    "config:recommended",
    "config:base"
  ],
  "helm-values": {
    "fileMatch": [
      "\\.ya?ml$"
    ]
  },
  "kubernetes": {
    "fileMatch": [
      "\\.ya?ml$" 
    ]
  },
  "argocd": {
    "fileMatch": [
      "\\.ya?ml$"
    ]
  },"docker": {
    "fileMatch": [
      "Dockerfile",
      ".*\\.dockerfile$",
      "Dockerfile.*",
      "\\.ya?ml$"
    ]
  },
  "regexManagers": [
    {
      "description": "Process custom dependencies",
      "fileMatch": [
        "\\.ya?ml$"
      ],
      "matchStrings": [
        "datasource=(?<datasource>\\S+) depName=(?<depName>\\S+)( versioning=(?<versioning>\\S+))?\n.*?\"(?<currentValue>.*)\"\n"
      ],
      "datasourceTemplate": "{{#if datasource}}{{{datasource}}}{{else}}github-releases{{/if}}",
      "versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}"
    },
    {
      "fileMatch": [
        "\\.ya?ml$"
      ],
      "matchStrings": [
        "image: (?<depName>[^:\\s]+):(?<currentValue>[^@\\s]+)@sha256:(?<digest>[a-fA-F0-9]+)"
      ],
      "datasourceTemplate": "docker",
      "versioningTemplate": "docker"
    }
  ]
}

解答

问题根源

  • 重复解析冲突:同时启用了kubernetes内置管理器和自定义regexManagers解析镜像,加上docker:pinDigests后,Renovate的逻辑出现冲突——内置Kubernetes管理器已能处理带摘要的镜像版本更新,自定义正则重复抓取同一镜像,导致优先级混乱,版本更新逻辑被阻断。
  • docker:pinDigests逻辑冲突:该预设用于自动添加/更新镜像摘要,但多个管理器处理同一依赖时,Renovate无法判断执行版本更新还是仅更新摘要,最终导致版本更新功能失效。

解决方案

1. 移除冲突的自定义正则管理器

删掉regexManagers中专门解析镜像的条目,kubernetes内置管理器已完全支持解析Kubernetes YAML中的带摘要镜像,无需自定义正则重复处理。

2. 正确启用docker:pinDigests

在extends数组中添加"docker:pinDigests",同时调整docker管理器的fileMatch,去掉\\.ya?ml$,避免和kubernetes管理器冲突。

修改后的配置示例

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "labels": ["dependencies", "renovate"],
  "ignorePaths": [
    "Kubernetes/secrets_raw"
  ],
  "minimumReleaseAge": "7 days",
  "extends": [
    "config:recommended",
    "config:base",
    "docker:pinDigests"
  ],
  "helm-values": {
    "fileMatch": [
      "\\.ya?ml$"
    ]
  },
  "kubernetes": {
    "fileMatch": [
      "\\.ya?ml$" 
    ]
  },
  "argocd": {
    "fileMatch": [
      "\\.ya?ml$"
    ]
  },
  "docker": {
    "fileMatch": [
      "Dockerfile",
      ".*\\.dockerfile$",
      "Dockerfile.*"
    ]
  },
  "regexManagers": [
    {
      "description": "Process custom dependencies",
      "fileMatch": [
        "\\.ya?ml$"
      ],
      "matchStrings": [
        "datasource=(?<datasource>\\S+) depName=(?<depName>\\S+)( versioning=(?<versioning>\\S+))?\n.*?\"(?<currentValue>.*)\"\n"
      ],
      "datasourceTemplate": "{{#if datasource}}{{{datasource}}}{{else}}github-releases{{/if}}",
      "versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}"
    }
  ]
}

效果说明

修改后,Renovate会通过kubernetes管理器直接识别带摘要的镜像,当有新版本发布时,会生成单个PR,同时更新镜像的版本标签和对应的最新摘要,既满足版本更新需求,又保留了摘要固定的安全性,不会再生成两个分开的PR。

内容的提问来源于stack exchange,提问作者user8802521

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:05:09