拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Renovate helm-requirements 管理器全指南:自动更新 Helm v2 requirements.yaml 中的 Chart 依赖

Renovate helm-requirements 管理器全指南自动更新 Helm v2 requirements.yaml 中的 Chart 依赖【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovatehelm-requirements是 Renovate 内置的依赖管理器Manager专门用于解析 Helm v2 时代的requirements.yaml文件自动发现并更新其中的 Chart 依赖版本。本文基于该管理器在仓库中的实现与默认配置系统讲解其依赖提取原理、仓库别名registryAliases解析机制、各类跳过规则以及如何为私有 Helm 仓库配置凭据帮助你在实际仓库中开箱即用地维护 Helm Chart 依赖。helm-requirements 管理器是什么在 Renovate 的模块体系中Manager 负责“提取依赖”。helm-requirements管理器针对 Helm v2 的 Chart 依赖清单文件requirements.yamlHelm v3 则使用Chart.yaml由helmv3管理器负责。其模块元信息定义在 lib/modules/manager/helm-requirements/index.ts 中displayNameHelm v2 Chart Dependencies即该管理器定位为 Helm v2 的 Chart 依赖管理categories[helm, kubernetes]归属 Helm 与 Kubernetes 生态supportedDatasources仅支持helm数据源HelmDatasource所有依赖都会通过 Helm Chart 仓库的index.yaml进行版本查询managerFilePatterns/(^|/)requirements\.ya?ml$/默认匹配任意目录下名为requirements.yaml或requirements.yml的文件。因此只要仓库中存在requirements.yamlRenovate 就会自动启用该管理器进行扫描无需额外配置即可开始提取依赖。默认 registryAliasesstable仓库别名helm-requirements管理器在defaultConfig中定义了一个默认的仓库别名registryAlias{ registryAliases: { stable: https://charts.helm.sh/stable } }在 Helm v2 时代requirements.yaml的依赖条目通过repository字段指定 Chart 来源。很多存量 Chart 会使用stable这类以开头的别名写法对应 Helm 客户端中helm repo add添加的命名仓库而非直接书写完整 URL。Renovate 需要知道这些别名背后的真实地址才能去对应仓库拉取index.yaml做版本查询。上述默认配置即把stable别名映射到官方 stable 仓库https://charts.helm.sh/stable。如果项目中的requirements.yaml使用了其他仓库别名例如自建的 ChartMuseum、公司内网仓库别名则必须在 Renovate 配置中显式补充registryAliases对象。注意别名对应的值必须是格式合法的 URIproperly formatted URIs例如https://charts.example.com否则 Renovate 无法解析该依赖的来源仓库。一个完整的配置示例{ registryAliases: { stable: https://charts.helm.sh/stable, internal: https://charts.company.com } }别名解析的源码细节在 lib/modules/manager/helm-requirements/extract.ts 中可以看到别名解析的实际逻辑。当某个依赖的repository字段以或alias:开头时Renovate 会去掉前缀得到别名的名字然后在配置的registryAliases中查找命中别名将该依赖的registryUrls替换为别名对应的真实 URL继续正常提取未命中别名将该依赖标记为skipReason: placeholder-url占位符 URL无法查询版本。这里需要特别说明两种前缀的差异name去掉首字符slice(1)对应 Helm v2 中形如repository: stable的写法alias:name去掉前 6 个字符alias:slice(6)对应形如repository: alias:internal的写法。两者最终都落在registryAliases的同一套映射表上因此只要你配置的别名键名正确两种写法都能被解析。extract.spec.ts中的测试用例resolves aliased registry urls验证了这两种前缀均可被正确解析为真实的registryUrls参见 lib/modules/manager/helm-requirements/extract.spec.ts。requirements.yaml 的提取逻辑提取入口是extractPackageFile()函数其工作流程如下对应 lib/modules/manager/helm-requirements/extract.ts使用parseSingleYaml()将文件内容解析为 YAML 文档若解析失败记录 debug 日志并返回null该文件不产生任何依赖检查文档中是否存在dependencies数组若不存在返回null遍历dependencies数组中的每个条目提取name依赖名、version当前版本与repository仓库地址对每个条目做字段校验与仓库解析生成PackageDependency对象最终返回{ deps, datasource: helm }将整组依赖统一交给helm数据源处理。其中version字段还做了类型兼容处理如果 YAML 中版本号写成了数字例如version: 0.9会被转换为字符串0.9确保后续版本比较逻辑拿到的是字符串类型测试用例ensure that currentValue is string专门验证了这一行为。一个被正常提取的requirements.yaml示例如下dependencies: - name: redis version: 0.9.0 repository: https://charts.helm.sh/stable/ - name: postgresql version: 0.8.1 repository: https://charts.helm.sh/stable/提取后产生的依赖对象为[ { depName: redis, currentValue: 0.9.0, registryUrls: [https://charts.helm.sh/stable/] }, { depName: postgresql, currentValue: 0.8.1, registryUrls: [https://charts.helm.sh/stable/] } ]跳过规则什么样的依赖不会被更新并不是requirements.yaml中列出的每个条目都会被更新。extract.ts会对每个依赖做严格校验不符合条件的条目会被标记skipReason并在日志与 Dependency Dashboard 中说明原因。下表汇总了全部跳过场景均可在 lib/modules/manager/helm-requirements/extract.spec.ts 的测试用例中找到对应验证skipReason触发条件说明invalid-name缺少name字段无法确定依赖名无法发起查询invalid-version缺少version字段没有当前版本无法判断升级方向no-repository缺少repository字段不知道 Chart 来源仓库placeholder-urlrepository以/alias:开头且别名未在registryAliases中配置别名无法解析为真实 URIinvalid-urlrepository无法被解析为合法 URL例如写了无法识别的字符串local-dependencyrepository协议为file:本地路径依赖无法远程查询版本其中invalid-url与local-dependency的判定位于else分支extract.tsRenovate 使用parseUrl()校验仓库地址若url.protocol file:则视为本地依赖。这些规则保证了只有“来源明确、可远程查询”的依赖才会进入版本比对环节避免对无效条目发起无意义的网络请求。值得注意的是跳过是逐条独立的同一份文件中某个依赖无效不会影响其他依赖的正常提取。测试用例skips only invalid dependences展示了同一文件里四条依赖各自得到不同skipReason或正常提取的结果。底层数据源HelmDatasource 如何查询版本提取出的依赖最终交给helm数据源HelmDatasource做版本查询。其核心逻辑在 lib/modules/datasource/helm/index.ts 中数据源会访问 Chart 仓库根路径下的index.yaml从中按 Chart 名称查找版本列表getReleases()读取repositoryData[packageName]getRepositoryData()对同一仓库的index.yaml结果做了缓存以仓库地址为 key避免重复拉取仓库地址默认会被补上尾部斜杠ensureTrailingSlash后再拼接index.yaml。另外该数据源支持s3://协议的仓库地址即 Chart 存放在 Amazon S3或 S3 兼容后端的场景Renovate 会通过 AWS SDK 签名请求读取index.yaml详见 lib/modules/datasource/helm/readme.md。这意味着requirements.yaml中形如下面的依赖也可以被正常解析dependencies: - name: my-chart version: 1.0.0 repository: s3://my-bucket/chartsS3 仓库的凭据可通过两种方式提供设置环境变量走 AWS 默认凭据链或在hostRules中配置hostType: helm、matchHost指向 bucket 名、username为 Access Key ID、password为 Secret Access Key。自定义 versioning默认情况下helm-requirements提取的依赖使用helm版本方案lib/modules/versioning/helm/index.ts该方案基于 npm/SemVer 版本规则实现...npm支持范围range表达式以及bump、widen、replace等范围更新策略。对绝大多数 SemVer 风格的 Chart 版本开箱即用即可正确判断 major/minor/patch。如果某些依赖的版本号并不遵循 SemVer例如使用了日期版本、或带有自定义前缀可以通过 Renovate 的packageRules为特定依赖覆盖版本方案。完整的 versioning 机制说明见 docs/usage/modules/versioning/index.md一个典型示例是使用正则自定义版本方案{ packageRules: [ { matchManagers: [helm-requirements], matchPackageNames: [foo/bar], versioning: regex:^(?compatibility.*)-v?(?major\\d)\\.(?minor\\d)\\.(?patch\\d)?$ } ] }私有 Helm 仓库的凭据配置如果你的 Chart 存放在私有 Helm 仓库如自建的 ChartMuseum则需要为helm数据源配置访问凭据。Renovate 的版本查询全部通过自身发起的 HTTP(S) 请求完成凭据通过hostRules提供。仓库文档指向的私有包支持说明位于 docs/usage/getting-started/private-packages.md其中 Helm 的推荐配置如下放在自托管全局配置config.js中module.exports { hostRules: [ { matchHost: your.host.io, hostType: helm, username: your-username, password: process.env.SELF_HOSTED_HELM_CHARTS_PASSWORD, }, ], };几点实践建议hostType写helm与helm-requirements管理器使用的数据源 ID 保持一致凭据优先通过环境变量注入如上面的process.env.SELF_HOSTED_HELM_CHARTS_PASSWORD避免把明文密码写死在配置文件中如果只需要对单个仓库配置凭据也可以把上述hostRules写进该仓库的renovate.jsonS3 仓库的凭据同样复用hostRuleshostType: helm这是数据源实现中通过hostRules.find()查找的参见 lib/modules/datasource/helm/index.ts。与 helmv3 管理器的区别仓库中还提供了针对 Helm v3 的helmv3管理器lib/modules/manager/helmv3/index.ts两者定位互补维度helm-requirementsHelm v2helmv3Helm v3目标文件requirements.yaml/requirements.ymlChart.yaml数据源helmhelm与docker锁文件无Chart.lock支持锁文件维护默认registryAliasesstable→https://charts.helm.sh/stable相同两者都默认把stable别名映射到官方 stable 仓库且commitMessageTopic均为helm chart {{depName}}。如果你的仓库同时存在两类文件Renovate 会自动分别用对应的管理器处理。相关参考管理器入口与默认配置lib/modules/manager/helm-requirements/index.ts依赖提取实现lib/modules/manager/helm-requirements/extract.ts提取逻辑测试lib/modules/manager/helm-requirements/extract.spec.tsHelm 数据源说明lib/modules/datasource/helm/readme.md版本方案总览docs/usage/modules/versioning/index.md私有包与凭据配置docs/usage/getting-started/private-packages.md【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门