我正在自动部署nuget包 它工作正常,除了我无法按照我想要的方式设置预发行包。
有两个分支触发构建。
当主分支触发构建时,我想发布一个常规的nuget包
当构建由测试分支触发时,我想发布一个预发布包。
为此,我需要将-beta
添加到nuget包版本号。
所以我将Automatic package versioning
从use build number
更改为use an environment variable
见以下img:
起初它抱怨变量说No value was found for the provided environment variable
,但我通过删除$()
解决了这个问题。但现在我仍然卡住了,因为我找不到用Build.BuilderNumber
和-beta
设置变量的方法。我可以复制构建并为每个分支创建每个构建触发器,但我宁愿只有一个构建可以处理来自两个分支的构建。
所以现在我正在考虑将设置更改回use build number
并更改在构建的选项卡options
中设置内部版本号的表达式。 但是,即便如此,我也无法在Build.SourceBranch
上添加条件表达式来添加或不添加-beta
。
Chris McKenzie似乎遇到了类似的问题here并用powershell解决了这个问题。不幸的是,我不知道powershell并且无法理解,因为脚本似乎对我需要的东西来说太大了。仍然我相信他们是我的希望与powershell。所以我将在那个方向上实现我的条件构建号。
这个问题已经很长了,所以我把它的关键元素设置为粗体
我在哪里以及如何在源分支上添加条件以将-beta
附加到BuildNumber并用作nuget包版本?
答案 0 :(得分:2)
您可以通过添加PowerShell任务来实现它,以根据不同的分支更改变量$(PackageVersion)
条件。
在NuGet打包任务之前,使用以下脚本添加 PowerShell任务:
$branch1="test"
$branch2="master"
if ("$(Build.SourceBranchName)" -eq $branch1)
{
echo "the build is on $branch1"
Write-Host "##vso[task.setvariable variable=PackageVersion]$(Build.BuildNumber)-beta"
}
elseif ("$(Build.SourceBranchName)" -eq $branch2)
{
echo "the build is on $branch2"
Write-Host "##vso[task.setvariable variable=PackageVersion]$(Build.BuildNumber)"
}
else
{
echo "it's either on $branch1 branch nor $branch2 branch"
}
现在在NuGet pack setp中,如果分支是$(Build.BuildNumber)
,则包版本将为master
;如果分支是$(Build.BuildNumber)-beta
,则包版本将为test
。