Renovate依赖更新 — 自动化依赖更新
一句话概述:Renovate 是自动化依赖更新机器人,自动检测项目中过时的依赖并创建 PR 来更新它们,支持 90+ 种包管理器,让依赖维护从手动苦力变成自动化流程。
核心知识点速查表
| 概念 | 白话解释 |
|---|
| Renovate Bot | 自动扫描你的代码仓库,发现过时依赖就提 PR |
| renovate.json | 配置文件,定义更新策略(多久更新、自动合并规则等) |
| Merge Confidence | 合并信心指标,根据社区数据评估更新是否安全 |
| Auto-merge | 满足条件的 PR 自动合并,无需人工干预 |
| Grouping | 把多个相关依赖的更新合成一个 PR |
| Onboarding PR | 第一次启用时 Renovate 创建的配置 PR |
当前版本信息(2026年)
| 信息 | 详情 |
|---|
| 开发商 | Mend.io |
| 支持平台 | GitHub、GitLab、Bitbucket、Azure DevOps |
| 包管理器 | 90+ 种 |
| 价格 | Community 版免费,Enterprise 版付费 |
| 官网 | https://www.mend.io/renovate |
| 文档 | https://docs.renovatebot.com |
安装配置
GitHub 上启用(推荐)
1. 访问 https://github.com/apps/renovate 安装 Renovate App
2. 选择要启用的仓库
3. Renovate 会自动创建一个 Onboarding PR(包含 renovate.json)
4. 合并 Onboarding PR 即可开始
配置文件
// renovate.json — 放在仓库根目录
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended" // 使用推荐配置(最佳实践)
],
"schedule": [
"every weekend" // 每周末检查更新
],
"labels": ["dependencies"], // 给 PR 打标签
"automerge": true, // 启用自动合并
"automergeType": "pr", // 通过 PR 合并(非直接 push)
"platformAutomerge": true // 使用平台的自动合并功能
}
高级配置示例
{
"extends": ["config:recommended"],
"schedule": ["after 9am and before 5pm every weekday"],
"packageRules": [
{
"matchPackagePatterns": ["*"],
"matchUpdateTypes": ["patch"],
"automerge": true // 补丁更新自动合并
},
{
"matchPackagePatterns": ["*"],
"matchUpdateTypes": ["minor"],
"automerge": false // 次版本更新需要人工审核
},
{
"matchPackageNames": ["pytest", "ruff"],
"groupName": "dev-tools", // 开发工具合成一个 PR
"automerge": true
},
{
"matchPackagePatterns": ["eslint"],
"enabled": false // 禁用 eslint 更新
},
{
"matchDepTypes": ["devDependencies"],
"automerge": true // 开发依赖全部自动合并
}
],
"vulnerabilityAlerts": {
"labels": ["security"],
"automerge": true // 安全更新自动合并
}
}
基本使用
Renovate 创建的 PR 示例
标题: Update dependency requests to v2.32.0
描述:
| Package | Update | Change |
|----------|--------|-------------|
| requests | minor | 2.31.0 → 2.32.0 |
### Release Notes
- Added support for HTTP/3
- Fixed connection pooling issue
- Updated urllib3 dependency
### Merge Confidence
✅ Age: 30 days
✅ Adoption: 89%
✅ Passing: 98%
✅ Confidence: High
管理 PR
# Renovate PR 的互动命令(在 PR 评论中输入):
@renovate rebase — 变基(解决冲突)
@renovate recreate — 重新创建 PR
@renovate retry — 重试失败的更新
@renovate close — 关闭(这次不更新)
支持的包管理器(部分)
# Python
pip (requirements.txt, setup.py, setup.cfg)
pipenv (Pipfile)
poetry (pyproject.toml)
pip-compile (requirements.in)
# JavaScript/Node.js
npm (package.json)
yarn (yarn.lock)
pnpm (pnpm-lock.yaml)
# 其他
Docker (Dockerfile)
GitHub Actions (.github/workflows/)
Terraform (.tf)
Go (go.mod)
Rust (Cargo.toml)
Conda (environment.yml)
高级用法
自托管运行
# 用 Docker 运行 Renovate CLI(自托管)
docker run --rm \
-e RENOVATE_TOKEN=ghp_xxxx \
-e RENOVATE_REPOSITORIES='["owner/repo"]' \
renovate/renovate
# 或者用 npm 安装
npm install -g renovate
renovate --token ghp_xxxx owner/repo
GitHub Actions 运行
# .github/workflows/renovate.yml
name: Renovate
on:
schedule:
- cron: '0 3 * * *' # 每天凌晨3点运行
workflow_dispatch: # 手动触发
jobs:
renovate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: renovatebot/github-action@v40
with:
token: ${{ secrets.RENOVATE_TOKEN }}
configurationFile: renovate.json
分组策略
{
"packageRules": [
{
"groupName": "生信工具",
"matchPackageNames": [
"biopython", "pysam", "HTSeq", "scanpy"
]
},
{
"groupName": "数据科学",
"matchPackageNames": [
"numpy", "pandas", "scipy", "scikit-learn"
]
},
{
"groupName": "所有非主要更新",
"matchPackagePatterns": ["*"],
"matchUpdateTypes": ["minor", "patch"],
"groupName": "non-major"
}
]
}
常见报错与解决
| 问题 | 原因 | 解决方案 |
|---|
| Onboarding PR 没出现 | App 权限不够 | 检查 Renovate App 的仓库权限 |
| 更新太频繁 | 默认立即更新 | 设置 schedule 限制更新频率 |
| 冲突太多 | PR 之间互相冲突 | 使用 grouping 合并相关更新 |
| 自动合并不工作 | 分支保护规则 | 检查 branch protection,允许 bot 合并 |
| 不需要的更新 | 某些包不想更新 | 用 enabled: false 或 ignoreDeps |
速查表
// ===== 常用配置 =====
"extends": ["config:recommended"] // 推荐配置
"schedule": ["every weekend"] // 更新时间
"automerge": true // 自动合并
"labels": ["deps"] // PR 标签
"assignees": ["user"] // PR 指派人
// ===== 包规则 =====
"matchPackageNames": ["pkg"] // 匹配包名
"matchPackagePatterns": ["eslint*"] // 包名模式
"matchUpdateTypes": ["major"] // 更新类型
"matchDepTypes": ["devDependencies"] // 依赖类型
"groupName": "group" // 分组名
"enabled": false // 禁用更新
// ===== PR 评论命令 =====
// @renovate rebase — 变基
// @renovate recreate — 重建
// @renovate retry — 重试
同类工具对比
| 特性 | Renovate | Dependabot | Snyk |
|---|
| 包管理器数 | 90+ | ~15 | ~10 |
| 自动合并 | ✅ 灵活 | ✅ 基本 | ✅ |
| 分组 PR | ✅ 强大 | ❌ | ✅ |
| Merge Confidence | ✅ 社区数据 | ❌ | ✅ 安全评分 |
| 自托管 | ✅ 免费 | ❌ | 付费 |
| 学习曲线 | 中等 | 低 | 低 |
| 灵活度 | 非常高 | 较低 | 中等 |
总结:Renovate 是最灵活的自动化依赖更新工具,支持 90+ 种包管理器,配置选项极其丰富。对于小项目用 Dependabot 就够了,但团队项目或 monorepo 用 Renovate 更合适。免费版(Community)功能就很强大。