自托管 Renovate Bot 的 12 个技巧
更新依赖很无聊。尽管它很重要,但我们总是找借口避免用“如果它没有损坏,就不要修复它”或“还有更重要的功能需要处理”这样的短语来避免更新它们。随着时间的推移,项目的可维护性会恶化。团队最终得到了一个 3 岁的依赖项,没有人有足够的勇气去撞它。
那么,解决方案是什么?让机器人做我们无聊的工作!
在本文中,您将学习以 GitLab 为例运行自托管Renovate机器人的技巧。如果您正在寻找有关如何在 GitHub 上开始使用 Renovate 的指南,我强烈建议您阅读此。
TL;DR
-
为什么要使用翻新
-
自托管 Renovate 入门(以 GitLab 为例)
-
如何在本地运行 Renovate
-
调试翻新作业
-
12 个有用的翻新技巧
免责声明:这些提示是我从工作时间收集的经验教训中得出的个人意见。享受!
为什么使用翻新
简而言之,Renovate(官方文档)有助于自动更新项目依赖项(私有或第三方)。
如何? Renovate 会解析我们项目的依赖管理文件,例如package.json、pyproject.toml、go.mod文件,并相应地使用更新的依赖关系引发拉/合并请求 (PR/MR)。
Renovate 可通过简单的配置文件 (config.js) 进行高度定制。通过相当直观的配置设置,它还支持范围广泛的包管理器。
如今,Renovate 支持许多其他 Git 平台,例如 Bitbucket、Gitea 甚至 Azure DevOps。最重要的是,它是许多流行的开发社区或公司使用的,例如 Uber、GitLab、Prisma、Netlify 等。
亮点
Renovate 最好的部分是它能够自动合并 PR/MR。
除此之外, 100045 packageRules特性](https://docs.renovatebot.com/configuration-options/#packagerules提供的灵活性用于将规则应用于特定的依赖项(个人或组)非常方便。
如何在 GitLab 上运行自托管翻新
要在自托管 GitLab 上运行 Renovate,您需要一个私有 GitLab 项目(,即以下存储库)。此机器人存储库将用于托管个 GitLab 运行器,它们为您的其他项目运行 Renovate。
接下来,假设您已经安装并设置了 GitLab 运行器,您将需要在 bot 项目中进行以下操作:
- 配置以下 CI/CD 变量:
1.RENOVATE_TOKEN— GitLab个人访问令牌(PAT),范围:read_user、api和write_repository。
2.GITHUB_COM_TOKEN- 最小范围的 GitHub PAT。
2.config.js(注意:这里有一个更复杂的示例)。
// 来自 https://github.com/renovatebot/renovate/blob/main/docs/usage/examples/self-hosting.md 的示例 config.js
模块.exports u003d {
端点:'https://self-hosted.gitlab/api/v4/',
令牌:'**gitlab_token**',
平台:'gitlab',
入职配置:{
扩展:['config:base'],
},
存储库:['username/repo', 'orgname/repo'],
};
3..gitlab-ci.yml. 如果您需要更复杂的示例,请查看 GitLab 团队的这个示例。否则,这是一个最小的例子;做相应的更新:
图片:翻新/翻新:32.6.12
变量:
LOG_LEVEL:调试
翻新:按计划进行:
标签:
- 你的 gitlab-runner-tag-if-any
只要:
- 时间表
脚本:
- 翻新 $RENOVATE_EXTRA_FLAGS
翻新:
标签:
- 你的 gitlab-runner-tag-if-any
除了:
- 时间表
脚本:
- 翻新 $RENOVATE_EXTRA_FLAGS
- 最后,您需要使用 GitLab 项目的CI/CD Schedules功能定期(例如每小时)运行 Renovate。请注意,这与 Renovate 自己的计划不同。
查看源了解更多详情。不过,上面的步骤应该足够了。
如何运行本地翻新
当我使用大型存储库(完整克隆大于 6GB)时,每个 Renovate 作业可能需要数小时才能完成。能够在本地运行 Renovate 为我节省了大量的实验和调试时间。
首先,创建一个最小可重现示例 (MRE) 存储库。然后,更新您的config.js以定位或发现 MRE 存储库。要在本地运行 Renovate:
-
使用Docker简单很多。所以,确保你已经安装了 Docker。
-
首先,您需要确保在您的 shell 中导出这些环境变量:
export RENOVATE_TOKENu003d"aa11bb22cc" # GitLab 个人访问令牌 (PAT)
导出 GITHUB_COM_TOKENu003d"cc33dd44ee" # GitHub PAT
-
接下来,相应地更新您的
config.js。您需要相应地更新目标repositories。 -
最后,您可以使用以下命令运行 Renovate。要获取最新的 Renovate 版本,请查看Docker hub。请相应地更改以下命令:
码头运行\
- R M \
-e LOG_LEVELu003d"调试" \
-e GITHUB_COM_TOKENu003d"$GITHUB_COM_TOKEN" \
-v "/path/to/local/config.js:/usr/src/app/config.js" \
翻新/翻新:“32.6.12”\
--token "$RENOVATE_TOKEN" \
--dry-run u003d“真”
有了这个,现在可以以快速反馈循环的方式测试 Renovate 配置。如果您需要更全面的日志,请尝试设置LOG_LEVEL=”trace”。
要执行实际运行,请更新--dry-run="false"。
12 有用的翻新机器人技巧
一般提示
-
不确定如何快速充分利用 Renovate?查看此Renovate bot 备忘单而不是官方 Renovate 文档的冗长。
-
如果您不确定 Renovate 是否支持某些功能,请务必先查看他们的FAQ页面。很有可能它已经存在了。
-
要禁用特定包或库的更新,只需在相应的
100102 packageRule 100103 100101下设置enabled: false。示例:
// 示例 config.js
模块.exports u003d {
端点:'https://your.domain.com/api/v4/',
令牌:'**gitlab_token**',
平台:'gitlab',
入职配置:{
扩展:['config:base'],
},
存储库:[
{
存储库:“约翰/下一代回购”,
包规则:[
{
描述:“'禁用主要更新类型',”
matchUpdateTypes:['major'],
启用:假,
},
],
},
],
}
-
升级后需要运行一些自定义任务或脚本(例如向 Slack 发布消息的脚本)?试试
postUpgradeTasks。 -
将项目特定的 Renovate 配置保留在 bot 存储库中,而不是在每个其他存储库中保留
renovate.json。为此,在module.exports下设置100108 onboarding: false 100109 100107。这允许仅将与 Renovate 相关的配置抽象到单个存储库中。
调试技巧 Renovate 作业
当谈到自托管解决方案时,调试自己的工作是无可避免的。在某些情况下,您需要测试与私有注册表、代理等的连接。
以下是一些有用的提示:
-
尝试在本地运行 Renovate 以获得更快的反馈循环,而不是依赖 CI/CD 管道。另外,在本地运行几乎是免费的!
-
如果
debug没有为您提供足够的信息,请使用trace``LOG_LEVEL。 -
如果您正在处理一些定制用例或遇到奇怪的遭遇/错误,请尝试使用前缀“site:github.com/renovatebot/renovate”进行谷歌搜索。 (示例)。在大多数情况下,您会发现已经有其他人提出了类似的讨论或问题。
处理大型存储库(例如 GB 大小)
- 如果您尝试在大型存储库上运行 Renovate,由于超时,您可能会遇到
SIGTERM信号(可以在 Renovate 作业日志中看到)。为了解决这个问题,请在config.js中增加100120 executionTimeout设置](https://docs.renovatebot.com/self-hosted-configuration/#executiontimeout)。
// 示例 config.js
模块.exports u003d {
端点:'https://your.domain.com/api/v4/',
executionTimeout: 1440, // 分钟
令牌:'**gitlab_token**',
平台:'gitlab',
入职配置:{
扩展:['config:base'],
},
存储库:['john/large-repo', 'doe/huge-repo'],
};
-
在 GitLab 项目的 CI/CD 常规管道设置下,您可能希望增加作业超时时间(例如 10 小时),因为 Renovate 在大型存储库上的未缓存运行可能需要很长时间。
-
您可能希望设置
persistRepoData: true以在运行之间更快git fetch。
// 示例 config.js
模块.exports u003d {
端点:'https://your.domain.com/api/v4/',
令牌:'**gitlab_token**',
平台:'gitlab',
persistrepodata:毒药,
入职配置:{
扩展:['config:base'],
},
存储库:['john/repo'],
}
- 在某些情况下,您可能会遇到
ERROR: Disk space error - skipping。在这里,您可能希望配置一个增加磁盘大小的运行器。例如。如果您使用的是 AWS EC2,请尝试增加卷的大小。
结论
在过去的几个月里,我一直在广泛使用 Renovate bot;在 GitHub 上,以及自托管的 GitLab。今天,我在 GitHub 上的大多数活动项目中都使用 Renovate 来自动更新依赖项。到目前为止,Renovate 能够适应我 99% 的用例。
保持我们的项目依赖关系是最新的经常被忽视。然而,忽视这样的工作往往会付出巨大的代价。我们可以利用 Renovate 的能力来完成这些繁重的工作,这一事实真是太幸运了。
我希望这篇文章可以为您节省足够的时间,而不是让您通过 GitHub 讨论和问题的页面进行修饰。谢谢阅读!
本文首发于jerrynsh.com
更多推荐

所有评论(0)