Azure DevOps-使用另一个变量(嵌套/组合变量)设置Build变量

时间:2018-12-16 12:04:20

标签: azure-devops

在Azure DevOps中,我有一个管道变量“程序包版本”,并使用0.1.3$(Rev:.r)-alpha进行了设置。

enter image description here

我使用该变量替换.net核心项目文件中的“版本”。

在构建任务中, dotnet构建给我这个错误:

enter image description here

所以我假设P​​ipeline变量不能使用嵌套变量。

有其他方法或不同的语法来做到这一点吗?

[编辑]
嵌套变量应该起作用。 我认为错误是使用自动软件包版本控制的dotnet软件包设置为“使用内部版本号”,其中包含错误的$(rev:.r)(小写!)。

在VS项目文件中使用Version的自定义字符串会在VS上产生噪音(如果打开文件则会出错,否则警告),现在由于版本无效,Pipeline Build在dotnet nuget restore上给我一个错误。

我决定使用一个简单的干净版本<Version>0.1.2</Version>,我可以选择该版本并进行记录。 然后,我想找到一种在构建管道中读取它的方法,并创建一个附加了Build Revision的自定义变量:
0.1.2 $(Rev:.r) => 0.1.2.123

那是我想要的结果。

我发现了这个:https://marketplace.visualstudio.com/items?itemName=tmarkovski.projectversionasvariable

我正在使用默认设置。 enter image description here

我正在使用它创建的变量来组成一个新变量“程序包版本”:

enter image description here

我在 nuget pack 任务中使用了它:

enter image description here

但不起作用。
结果变量仍然包含未解析的“ $(Rev:.r)”。

我将尝试再次使用“自动软件包版本控制”,并在“选项...”中创建内部版本号。

[编辑2]
在工作的“管道构建选项”中设置构建版本号。
这不是最佳解决方案,因为内部版本号未解析且看起来很糟糕。

enter image description here

enter image description here

[解决方案]

$(Rev:.r)在构建/选项之外不可用。
我使用了$(Build.BuildNumber),并且能够创建一个组合变量: $(Version.MajorMinor).$(Build.BuildNumber)-alpha

Build.BuildNumber 在“构建/选项”中为$(Build.DefinitionVersion)$(Rev:.r)

Version.MajorMinor Project Version As Build Variable附加组件创建。
我不知道如何在不使用第三方组件的情况下获得相同的结果。

1 个答案:

答案 0 :(得分:1)

很高兴我的扩展程序获得了帮助,并感谢您的好评。如果您需要更多控制权并且花一点时间来玩PowerShell,则可以通过两步轻松实现所需的功能,而无需使用第三方扩展。

  • 以XML格式读取并解析.csproj文件
  • 设置构建变量

这里有几个有关读取XML文件和使用构建变量的链接,实际上很简单。

https://www.business.com/articles/powershell-read-xml-files/

VSTS: Pass build/release variables into Powershell script task

[xml]$XmlDocument = Get-Content -Path $env:project_file

echo $XmlDocument.Project.PropertyGroup.Version

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=vsts&tabs=yaml%2Cbatch

Write-Host '##vso[task.setvariable variable=package_version;issecret=true]0.1.2.'

注意:我的答案不适合评论,我必须发布答案。