azure-devops - 在 Azure DevOps 中构建 NuGet 后更新 packages.config
问题描述
我们在 Azure devops 中拥有所有代码,并且大多数管道都在创建工件(Nuget 包)。这些 Nuget 包通常相互依赖。
我现在做什么:我更改了我提交的“A”中的一些代码,Azure 创建了一个工件。然后我转到“B”并更新我刚刚创建的 NuGet 包版本。
这我很想自动化!
但是怎么做?
也许,在创建 nuget 包后,在“A”管道(YAML)处,以某种方式进入“B”存储库并更改其 packages.config 并创建新提交。但我不知道从哪里开始。
解决方案
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 的最新工件版本。这样,您将不需要传递buildParameters
in A 管道。请参阅此处了解更多信息。
推荐阅读
- python - 如何获取列表中的每个不同检测对象?
- laravel - 当我让 composer install --optimize-autoloader --no-dev 时找不到类 'BeyondCode\DumpServer\DumpServerServiceProvider'
- java - BorderPane 总是返回空值
- c++ - 如何在 Matlab 中导入 C++ dll
- oracle - 如何在 SQL Developer 中实现多个数据库上多个脚本的自动执行?
- mysql - SQL 按列计数出现次数
- angular - 用 jasmine 测试 NGXS 异常
- node.js - 使用 node.js 监听特定 URL 的请求(不是 LOCALHOST)
- php - MYSQLi 创建数据库?作为名字
- android - 我怎样才能在android中保持“在线”状态