【问题标题】:Azure DevOps - Set a Build variable using another variable (nested/composed variables)Azure DevOps - 使用另一个变量(嵌套/组合变量)设置构建变量
【发布时间】:2019-05-17 00:50:41
【问题描述】:

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

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

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

所以我假设 Pipeline 变量不能使用嵌套变量。

有其他方法或不同的语法吗?

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

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

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

这就是我想要的结果。

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

我正在使用默认设置。

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

我在 nuget pack 任务中使用它:

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

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

[编辑 2]
在 Pipeline Build Options 中设置构建版本号。
这不是最佳解决方案,因为内部版本号没有被解析并且看起来很糟糕。

[解决方案]

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

Build.BuildNumber 在 Build/Options 中得到验证:$(Build.DefinitionVersion)$(Rev:.r)

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

【问题讨论】:

  • 你确定这个名字可以解析
  • 似乎在 Pipeline Build /Options / Build properties - build number 格式中无法识别 Pipeline 变量,并且在 Build / Options 之外无法识别 $(Rev:.r) 变量。我使用 $(Build.BuildNumber) 而不是 $(Rev:.r) 来组成一个变量,它可以工作。
  • 没什么异常。该变量未列为可用:docs.microsoft.com/en-us/azure/devops/pipelines/build/…

标签: azure-devops azure-pipelines


【解决方案1】:

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

  • 读取 .csproj 文件并将其解析为 XML
  • 设置构建变量

这里有几个关于读取 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.'

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

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多