Dependabot 完全指南:GitHub 自动依赖更新工具详解

什么是 Dependabot?

Dependabot 是 GitHub 提供的一项自动化服务,用于帮助开发者及时更新项目依赖,修复已知安全漏洞,并保持第三方组件处于较新的版本状态。

简单来说,它相当于一个「自动升级机器人」。

它会定期检查项目依赖:

  • 是否存在新版本
  • 是否存在安全漏洞
  • 是否存在补丁更新
  • 是否有兼容版本可以升级

发现问题后,会自动创建 Pull Request,让开发者审核并合并。

例如:

项目使用:

Spring Boot 3.4.0
PostgreSQL Driver 42.7.1
React 18.2.0

几周后:

Spring Boot 3.4.3
PostgreSQL Driver 42.7.4
React 18.3.0

Dependabot 会自动提交 PR:

Bump spring-boot from 3.4.0 to 3.4.3

Bump postgresql from 42.7.1 to 42.7.4

开发者只需要:

Review
↓

CI 自动测试

↓

Merge

即可完成升级。


Dependabot 能解决什么问题?

传统依赖维护方式:

开发者自己查看官网

↓

发现新版本

↓

修改配置

↓

测试

↓

提交代码

问题:

容易忘记

更新不及时

安全漏洞长期存在

依赖版本落后

Dependabot 自动化后:

Dependabot

↓

定时扫描仓库

↓

发现新版本

↓

自动创建PR

↓

CI测试

↓

人工审核

↓

合并

整个过程几乎零成本。


Dependabot 的核心能力

Dependabot 主要包含两部分功能。

1 安全更新(Security Updates)

这是 GitHub 默认提供的功能。

当依赖存在已知漏洞时:

CVE

↓

GitHub Advisory Database

↓

发现项目受影响

↓

Dependabot 创建修复PR

例如:

lodash 4.17.19

↓

存在高危漏洞

↓

建议升级到

4.17.21

Dependabot 自动提交:

Bump lodash from 4.17.19 to 4.17.21

这是很多企业开启 Dependabot 的主要原因。


2 版本更新(Version Updates)

主动保持依赖最新。

例如:

package.json

pom.xml

build.gradle

requirements.txt

go.mod

Dependabot 会定期扫描。

比如:

schedule:
  interval: weekly

每周检查一次。

发现新版本:

v1.3.0

↓

v1.4.0

↓

自动PR

Dependabot 支持哪些生态?

支持非常多。

Java

Maven

pom.xml

Gradle

build.gradle

JavaScript

npm

package.json

pnpm

pnpm-lock.yaml

Yarn

yarn.lock

Python

requirements.txt

poetry.lock

Pipfile

Go

go.mod

Rust

Cargo.toml

Docker

Dockerfile

例如:

FROM node:22-alpine

Dependabot 可以检测:

node:22-alpine

↓

node:22.16-alpine

GitHub Actions

uses: actions/checkout@v4

升级:

v4

↓

v5

Terraform

*.tf

Kubernetes Helm

Chart.yaml

dependabot.yml 是什么?

配置文件:

.github/dependabot.yml

告诉 Dependabot:

检查哪些依赖、多久检查一次、一次提交多少 PR。

例如:

version: 2

updates:
  - package-ecosystem: "npm"

    directory: "/"

    schedule:
      interval: "weekly"

表示:

npm项目

仓库根目录

每周检查一次

dependabot.yml 配置详解

version

当前固定为:

version: 2

package-ecosystem

指定依赖生态。

例如:

package-ecosystem: npm

或者:

package-ecosystem: maven

支持:

npm

yarn

pnpm

maven

gradle

docker

gomod

pip

cargo

terraform

github-actions

directory

依赖所在目录。

单模块项目:

directory: "/"

多模块:

directory: "/backend"
directory: "/frontend"

Monorepo:

updates:

- package-ecosystem: npm
  directory: "/web"

- package-ecosystem: maven
  directory: "/services/api"

schedule

更新周期。

daily

schedule:
  interval: daily

每天扫描。


weekly

schedule:
  interval: weekly

最常见。


monthly

schedule:
  interval: monthly

适合稳定系统。


还支持:

schedule:
  interval: weekly
  day: monday
  time: "02:00"
  timezone: Asia/Shanghai

target-branch

指定目标分支。

target-branch: main

或者:

target-branch: develop

labels

自动给 PR 打标签。

labels:

- dependencies

- security

reviewers

自动添加 Reviewer。

reviewers:

- team/backend

assignees

自动分配负责人。

assignees:

- arnold

commit-message

控制提交信息。

commit-message:
  prefix: deps

生成:

deps: bump react from 18.2 to 18.3

open-pull-requests-limit

限制同时打开的 PR 数量。

open-pull-requests-limit: 5

避免:

一次创建80个PR

导致仓库被刷屏。


ignore

忽略某些更新。

例如:

ignore:

- dependency-name: "react"

  update-types:
    - version-update:semver-major

表示:

React

18.x

↓

19.x

忽略

但是:

18.2

↓

18.3

允许

allow

只允许部分依赖更新。

allow:

- dependency-name: spring-boot

一个完整示例

Java + Docker + GitHub Actions

version: 2

updates:

- package-ecosystem: "maven"

  directory: "/"

  schedule:
    interval: weekly

  open-pull-requests-limit: 10

  labels:
    - dependencies

- package-ecosystem: "docker"

  directory: "/"

  schedule:
    interval: weekly

- package-ecosystem: "github-actions"

  directory: "/"

  schedule:
    interval: monthly

前后端 Monorepo

version: 2

updates:

- package-ecosystem: npm

  directory: "/frontend"

  schedule:
    interval: weekly

- package-ecosystem: maven

  directory: "/backend"

  schedule:
    interval: weekly

- package-ecosystem: docker

  directory: "/"

  schedule:
    interval: monthly

Dependabot 工作流程

Dependabot

↓

扫描仓库

↓

解析依赖文件

↓

查询最新版本

↓

比较版本差异

↓

创建分支

↓

修改依赖文件

↓

提交Commit

↓

创建PR

↓

触发CI

↓

测试通过

↓

人工审核

↓

Merge

Dependabot 与 Renovate 对比

功能 Dependabot Renovate
GitHub 官方维护
开箱即用 一般
配置复杂度
支持规则 一般 非常强
自动分组更新 有限 很强
Monorepo 支持 一般 优秀
自定义能力 中等 极强
学习成本 较高

很多团队的选择:

个人项目
↓

Dependabot

----------------

中大型Monorepo

↓

Renovate

----------------

企业级平台

↓

Renovate

最佳实践

每周更新一次

推荐:

schedule:
  interval: weekly

避免每天大量 PR。


限制 PR 数量

open-pull-requests-limit: 5

配合 CI

Dependabot

↓

创建PR

↓

GitHub Actions

↓

自动测试

↓

自动部署验证

↓

人工合并

禁止自动升级 Major 版本

ignore:

- dependency-name: "*"

  update-types:
    - version-update:semver-major

只允许:

Patch

Minor

避免:

Spring Boot 3

↓

Spring Boot 4

造成破坏性升级。


总结

Dependabot 本质上就是:

GitHub 官方提供的自动依赖升级机器人。

它负责:

  • 自动检查依赖更新
  • 自动发现安全漏洞
  • 自动创建升级 PR
  • 自动与 CI/CD 集成
  • 保持项目依赖持续健康

对于 GitHub 托管项目来说,Dependabot 基本已经成为现代软件开发的标准配置。

如果项目规模较小或者主要托管在 GitHub 上,Dependabot 通常已经足够;如果是大型 Monorepo 或希望实现高度定制化更新策略,则可以考虑 Renovate。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐