如何在 Azure DevOps 上使您的包依赖项保持最新

作为开发人员,您是否经常看到包含过期软件包的存储库?

新软件包更新通常包括新功能、性能改进和安全修复。但是跟踪项目中所有过时的依赖项可能非常无聊且耗时,尤其是当您有很多依赖项时。

所以为了做这种家务,我尝试了Dependabot

Dependabot 的工作原理

Dependabot 遍历项目的依赖文件。例如,它会搜索您的package.jsonpom.xml文件并检查任何过时或不安全的依赖项。如果找到,它会打开单独的拉取请求以更新每个拉取请求。

该工具与 GitHub 原生集成。但最近,我不得不为在 Azure DevOps 中运行的项目解决更新依赖项的问题。所以我决定找到一种解决方法,将 Dependabot 与 Azure Pipelines 集成。在这篇博文中,我将分享我的解决方案。

如果你去Azure DevOps Extension Marketplace并搜索“Dependabot”,你会发现一个由 Tingle Software提供的扩展。使用此扩展,我们可以轻松地将 Dependabot 与我们在 Azure DevOps 中的存储库集成。

你可以在 Azure DevOps 的“组织设置”中检查是否有此扩展。如果没有,请确保在继续之前已安装它。

1-2
已安装的扩展 - Azure DevOps

如何创建 Azure 管道

YAML现在让我们从为您的 azure 管道创建一个新文件开始:

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:它指定检查依赖项升级的包类型。例如:nugetmavengradlenpm, 等等。
  2. targetBranch:它是一个可选参数,用于定义创建拉取请求时要定位的分支。如果未指定,Dependabot 将选择default存储库的分支。
  3. openPullRequestsLimit:这又是一个可选参数,用于指定任何时候打开的拉取请求的最大数量。默认情况下,它一次打开 5 个拉取请求。

您可以通过扩展支持的所有任务参数来调整您的实现。现在只需使用新的 azure 管道配置此 YAML 文件,然后您就可以运行它了。

3-2
管道配置 - Azure DevOps

下一步是授予存储库的Project Collection Build Service访问权限,以便 Dependabot 可以创建对项目存储库的拉取请求。

为此,请转到您的项目设置。在这里,您单击存储库并搜索已集成管道的存储库。

选择后,单击安全选项卡并搜索project collection build service。您必须允许以下访问它:

  • 贡献
  • 参与拉取请求
  • 创建分支
  • 创建标签
  • 强制推送
2-1
获得在回购中提高公关的权限

有了这个,您就可以完全准备好运行管道了。完成后,您将开始在存储库中接收包含更新包的拉取请求。

5-3
Dependabot 提出的 PR

如何调度管道

到目前为止,您必须手动触发管道运行。要使其自动运行,您可以为管道配置计划。这将触发您的管道根据计划启动。

使用以下语法并将其添加到YAML文件的最顶部:

schedules:
- cron: string
  displayName: string
  branches:
    include: [ string ]
  always: boolean

branches ' include参数指定调度适用于哪些分支。

always参数指定是“始终”运行管道还是仅在自上次成功的计划运行后发生任何源代码更改时才运行。默认值为假。

对于这种情况,您将其值设置为true,因为 Dependabot 更新独立于任何代码更改。

cron 计划的时区是 UTC,cron 语法如下:

mm HH DD MM DW
         __ Days of week
        ____ Months
       ______ Days
      ________ Hours
     __________ Minutes

因此,如果您想在每周日世界标准时间 12 点运行您的管道,您需要编写 - 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

此管道为您执行以下操作:

它每周运行一次(在本例中为 UTC 时间周日下午 12 点),并查找任何过时或不安全的依赖项。如果找到,它会打开拉取请求以单独更新每个请求。

希望这将帮助您在 Azure DevOps 中使您的项目依赖项保持最新!

原文链接:https://www.freecodecamp.org/news/keep-package-dependencies-up-to-date-on-azure-devops/

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!