是否可以从Azure DevOps YAML读取文件?

问题描述 投票:2回答:2

[使用YAML文件格式在Azure DevOps上执行CI时,我试图读取csproj文件以提取有关版本的信息,以创建将遵循csproj版本的NuGet程序包。

我正在使用NuGetCommand@2进行包装(由于[C​​0])

是否有内置任务或一种方法可以从csproj文件中提取此信息作为正则表达式并将其传递给versioningScheme: byPrereleaseNumber

azure-devops yaml csproj
2个回答
2
投票

我相当确定这没有内置的功能,但是您可以使用任何喜欢的脚本语言来解析文件,然后将所需的任何内容“吐出”作为构建变量并在以后使用。这是我一直在做的:

NuGetCommand@2

您显然可以在脚本步骤中执行任何自定义操作,并以您希望的任何方式使用结果。

- script: echo "##vso[task.setvariable variable=dp]$(cat $(Build.Repository.LocalPath)/deployment/dp)" - script: az group delete -n $(dp)-k8s -y --no-wait


0
投票

您可以将其添加为提取csproj标记的第一步:

https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md

然后您就可以通过在Yaml中的任意位置调用- script: echo "##vso[task.setvariable variable=version]$(cat 'ProjectDirectory/MyProject.csproj' | grep -oP '(?<=<Version>).*?(?=<\/Version>)')" 来使用它。

说明:

  • $(version)的意思是“设置一个我以后可以使用的变量”
  • [echo "##vso[task.setvariable variable=version]获取您的csproj内容,然后将其传递给grep,以便我们可以对其执行正则表达式]
  • [cat 'ProjectDirectory/MyProject.csproj' | grep是一个正则表达式,它找到(?<=<Version>).*?(?=<\/Version>)')标记而不消耗这些标记,因此仅打印其中的内容
© www.soinside.com 2019 - 2024. All rights reserved.