作为一个开发者,你有多少次看到仓库里的软件包已经过时了?
新的软件包更新通常包括新功能、性能改进和安全修复。但是追踪你项目中所有过时的依赖关系可能真的很无聊,而且是一项耗时的任务,特别是当你有很多依赖关系的时候。
因此,为了进行这种内务管理,我试用了Dependabot。
Dependabot如何工作
Dependabot会检查你的项目的依赖文件。例如,它搜索你的package.json 或pom.xml 文件,检查是否有任何过期或不安全的依赖关系。如果发现任何依赖,它就会打开单独的拉动请求来更新每一个依赖。
这个工具是与GitHub原生集成的。但最近,我不得不解决这个问题,为一个在Azure DevOps中运行的项目更新依赖项。所以我决定找到一个变通方法,将Dependabot与Azure管道整合起来。在这篇博文中,我将分享我的解决方案。
如果你去Azure DevOps扩展市场搜索 "Dependabot",你会发现Tingle软件的一个扩展。使用这个扩展,我们可以很容易地将Dependabot与我们在Azure DevOps中的仓库集成。
你可以在Azure DevOps的 "组织设置 "中检查你是否有这个扩展。如果没有,请在继续之前确保已经安装了它:

已安装的扩展 - Azure DevOps
如何创建Azure管道
现在让我们开始创建,为你的Azure管道创建一个新的YAML 文件:
trigger: none
stages:
- stage: CheckDependencies
displayName: 'Check Dependencies'
jobs:
- job: Dependabot
displayName: 'Run Dependabot'
pool:
vmImage: 'ubuntu-latest'
steps:
- task: dependabot@1
displayName: 'Run Dependabot'
inputs:
packageManager: 'npm'
targetBranch: 'develop'
openPullRequestsLimit: 10
在任务参数中,我已经指定了三个参数:
- packageManager:它指定了要检查依赖性升级的包的类型。例子。
nuget,maven,gradle,npm, 等等。 - targetBranch:这是一个可选的参数,定义了创建拉动请求时的目标分支。如果不指定,Dependabot将选择版本库的
default分支。 - openPullRequestsLimit:这也是一个可选的参数,它指定了在任何时候打开的拉动请求的最大数量。默认情况下,它一次打开5个拉取请求。
你可以通过该扩展支持的所有任务参数来调整你的实现。现在只需简单地将这个YAML文件与一个新的Azure管道配置在一起,然后就可以运行了:

管线配置 - Azure DevOps
下一步是给你的存储库的Project Collection Build Service ,以便Dependabot可以创建拉动请求到你项目的存储库。
为此,请到你的项目设置中去。在这里,你点击资源库,搜索你集成管道的资源库。
选择之后,点击安全标签,搜索项目集合构建服务。你必须允许对它的以下访问:
- 贡献
- 为拉动请求做贡献
- 创建分支
- 创建标签
- 强制推送

访问Repo中提出的PR
这样,你就完全准备好运行管道了。一旦你这么做了,你就会开始在你的仓库中收到更新包的拉动请求:

由Dependabot提出的PR
如何安排流水线
到此为止,你必须手动触发管道的运行。为了让它自动运行,你可以为你的管道配置时间表。这将触发你的管道根据时间表启动。
使用以下语法,并将其添加到你的YAML 文件的最上面:
schedules:
- cron: string
displayName: string
branches:
include: [ string ]
always: boolean
branches'include 参数指定时间表适用于哪些分支。
always 参数指定是 "总是 "运行管道,还是只在上次成功计划运行后有任何源代码变化时才运行。默认是false。
在这种情况下,你把它的值设置为"true" ,因为Dependabot的更新与任何代码变化无关。
cron计划的时区是UTC,cron语法如下:
mm HH DD MM DW
\ \ \ \ \__ Days of week
\ \ \ \____ Months
\ \ \______ Days
\ \________ Hours
\__________ Minutes
因此,如果你想在每周日12点UTC运行你的管道,你需要写 -cron: "0 12 * * 0" (更新cron以适应你的需要)。
这就是你的最终YAML ,在添加了一个时间表之后,应该是这样的:
schedules:
- cron: "0 12 * * 0"
displayName: Weekly Dependency Updates
branches:
include:
- develop
always: true
trigger: none
stages:
- stage: CheckDependencies
displayName: 'Check Dependencies'
jobs:
- job: Dependabot
displayName: 'Run Dependabot'
pool:
vmImage: 'ubuntu-latest'
steps:
- task: dependabot@1
displayName: 'Run Dependabot'
inputs:
packageManager: 'npm'
targetBranch: 'develop'
openPullRequestsLimit: 10
这个管道为你做以下事情。
它每周运行一次(本例中为周日中午12点),并寻找任何过期或不安全的依赖。如果它发现任何依赖,它就会打开拉动请求,单独更新每一个依赖。
希望这能帮助你在Azure DevOps中保持你的项目依赖性的最新状态!
总结
到此为止,我们的文章就结束了。如果你想进一步讨论任何技术话题,或者你有任何问题、建议或反馈,我的DMs总是开放的。