首页 > 解决方案 > 在 Azure DevOps 中构建 NuGet 后更新 packages.config

问题描述

我们在 Azure devops 中拥有所有代码,并且大多数管道都在创建工件(Nuget 包)。这些 Nuget 包通常相互依赖。

我现在做什么:我更改了我提交的“A”中的一些代码,Azure 创建了一个工件。然后我转到“B”并更新我刚刚创建的 NuGet 包版本。

这我很想自动化!

但是怎么做?

也许,在创建 nuget 包后,在“A”管道(YAML)处,以某种方式进入“B”存储库并更改其 packages.config 并创建新提交。但我不知道从哪里开始。

标签: azure-devopsnuget

解决方案


C您为repo创建了一个额外的管道B来更新包版本。您可以添加一个任务以从 Pipeline 触发此管道 A,并将包版本作为其变量传递。请参见以下步骤:

1、为B repo创建一个管道C来更新包版本。

单击Variables按钮定义一个变量version来保存版本值。 (注意:选中此选项Let users override this value when running this pipeline,以便可以从 A 管道覆盖)

在此处输入图像描述

在此处输入图像描述

添加任务(MagicChunks / RegEx Find & Replace)以更新 Package.config 文件中的包版本。(注意:如果之前未安装,请从 Marketplace 将任务安装到您的组织)。配置任务以更新版本。您可以查看此线程以获取更多信息。

注意:如果 B repo 的 .csproj 有以下对 A repo 的引用,请参见下文。您还需要为 repo B 更新 .csproj 文件中的软件包版本。

<Reference Include="***8, Version=1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\***.1.2.0\lib\net45\....dll</HintPath>
    </Reference>

添加脚本任务以运行git commands以提交更改并推送回 B 存储库。请参见下面的示例管道 C yaml:

trigger: none
pool:
  vmImage: windows-latest
  
steps:
- checkout: self
  persistCredentials: true
- task: MagicChunks@2
  inputs:
    sourcePath: '$(system.defaultworkingdirectory)/package.config'
    fileType: 'Auto'
    targetPathType: 'source'
    transformationType: 'json'
    transformations: |
      {
        "package/version": "$(version)" #just an example
      }

- powershell: |
    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"

    git add .
    git commit -m "update package.json" #add [skip ci] to the commit message to keep B pipeline from being triggered
    git push origin Head:$(Build.SourceBranchName)
 

2,创建nuget包后C从管道触发管道,A

在 A 管道的末尾添加任务触发器构建。然后配置任务配置C流水线。并将版本变量传递给 C 管道

- task: benjhuser.tfs-extensions-build-tasks.trigger-build-task.TriggerBuild@3
  displayName: 'Trigger a new build of 48'
  inputs:
    buildDefinition: {ID of C pipeline}
    buildParameters: 'version: 1.0.3'  
    password: '$(System.AccessToken)'

除了使用上述 Trigger Build 任务,您还可以通过脚本任务中的Rest api触发 C 管道。这个例子。

额外的:

您可能希望参数化上面的版本值,buildParameters: 'version: 1.0.3'例如buildParameters: 'version: $(newversion)'. 在这种情况下,您需要使用脚本来获取新版本值并在脚本任务中设置此变量。浏览此处获取更多信息。

您还可以使用 rest api 直接在 C 管道中获取 A repo 的最新工件版本。这样,您将不需要传递buildParametersin A 管道。请参阅此处了解更多信息。


推荐阅读