如何在Azure DevOps上保持你的软件包依赖性的最新状态

220 阅读4分钟

作为一个开发者,你有多少次看到仓库里的软件包已经过时了?

新的软件包更新通常包括新功能、性能改进和安全修复。但是追踪你项目中所有过时的依赖关系可能真的很无聊,而且是一项耗时的任务,特别是当你有很多依赖关系的时候。

因此,为了进行这种内务管理,我试用了Dependabot

Dependabot如何工作

Dependabot会检查你的项目的依赖文件。例如,它搜索你的package.jsonpom.xml 文件,检查是否有任何过期或不安全的依赖关系。如果发现任何依赖,它就会打开单独的拉动请求来更新每一个依赖。

这个工具是与GitHub原生集成的。但最近,我不得不解决这个问题,为一个在Azure DevOps中运行的项目更新依赖项。所以我决定找到一个变通方法,将Dependabot与Azure管道整合起来。在这篇博文中,我将分享我的解决方案。

如果你去Azure DevOps扩展市场搜索 "Dependabot",你会发现Tingle软件的一个扩展。使用这个扩展,我们可以很容易地将Dependabot与我们在Azure DevOps中的仓库集成。

你可以在Azure DevOps的 "组织设置 "中检查你是否有这个扩展。如果没有,请在继续之前确保已经安装了它:

1-2

已安装的扩展 - 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

在任务参数中,我已经指定了三个参数:

  1. packageManager:它指定了要检查依赖性升级的包的类型。例子。nuget,maven,gradle,npm, 等等。
  2. targetBranch:这是一个可选的参数,定义了创建拉动请求时的目标分支。如果不指定,Dependabot将选择版本库的default 分支。
  3. openPullRequestsLimit:这也是一个可选的参数,它指定了在任何时候打开的拉动请求的最大数量。默认情况下,它一次打开5个拉取请求。

你可以通过该扩展支持的所有任务参数来调整你的实现。现在只需简单地将这个YAML文件与一个新的Azure管道配置在一起,然后就可以运行了:

3-2

管线配置 - Azure DevOps

下一步是给你的存储库的Project Collection Build Service ,以便Dependabot可以创建拉动请求到你项目的存储库。

为此,请到你的项目设置中去。在这里,你点击资源库,搜索你集成管道的资源库。

选择之后,点击安全标签,搜索项目集合构建服务。你必须允许对它的以下访问:

  • 贡献
  • 为拉动请求做贡献
  • 创建分支
  • 创建标签
  • 强制推送

2-1

访问Repo中提出的PR

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

5-3

由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总是开放的。