.nu​​spec 文件中的 Azure DevOps 管道变量

Posted

技术标签:

【中文标题】.nu​​spec 文件中的 Azure DevOps 管道变量【英文标题】:Azure DevOps pipeline variables in .nuspec files 【发布时间】:2019-04-30 15:32:54 【问题描述】:

是否可以在用于创建包的 .nuspec 文件中使用 Azure DevOps 管道变量?

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>MyTemplate</id>
    <version>$(var1).$(var2).$(var3)</version>
    <description>
      Some template
    </description>
    <authors>Test Test</authors>
    <packageTypes>
      <packageType name="Template" />
    </packageTypes>
  </metadata>
</package>

或者它是一种方法来 ovveride .yaml 任务中的那些人在 .nuspec 文件中指定的版本(它是必需的元素)?

task: NuGetCommand@2
  displayName: Pack template
  inputs:
    command: pack
    packagesToPack: '**/Template/*.nuspec'
    packDestination: $(Build.ArtifactStagingDirectory)
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(var1)'
    minorVersion: '$(var2)'
    patchVersion: '$(var3)'

但是使用 versioningScheme: byPrereleaseNumber 我们会在我们的数字中添加时间戳

【问题讨论】:

您可以使用令牌替换任务之一覆盖这些设置:marketplace.visualstudio.com/… 【参考方案1】:

构建属性的弹出工具提示:

指定以分号分隔的令牌=值对列表,其中 .nuspec 文件中每次出现的 $token$ 都将替换为给定值。值可以是引号中的字符串。

我通过进入用于可视化编辑管道的 UI 构建器找到了以下 YAML,NuGet &gt; Pack 任务中有一个“高级”窗格。它允许您在“构建属性”(buildProperties)下指定额外的令牌替换值

我有一种感觉,你必须将一种类型的令牌转换为另一种类型的令牌。请参阅最后一行的 buildProperties:

variables:
  Parameters.requestedMajorVersion: '1'
  Parameters.requestedMinorVersion: '0'
  Parameters.requestedPatchVersion: '6'

steps:
- task: NuGetCommand@2
  displayName: 'NuGet pack'
  inputs:
    command: pack
    packagesToPack: '**/*.nuspec'
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Parameters.requestedMajorVersion)'
    minorVersion: '$(Parameters.requestedMinorVersion)'
    patchVersion: '$(Parameters.requestedPatchVersion)'
    includeSymbols: true
    buildProperties: 'id=$(Build.Variable)'

示例.nuspec

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata minClientVersion="2.5">
    <id>$id$</id>

【讨论】:

我无法解决的问题是,如果您尝试将 Url 作为值添加到包含等号“=”的任何标记。那么Nuget Pack的解析器就出现了解析正确值的问题。这类问题是否有任何已知的 Escape 序列? 我成功使用@bkwdesign描述的方法将Yaml中的版本变量替换为.nuspec,这应该标记为正确答案。对我有用的示例: buildProperties: 'vmajor=$(Major);vminor=$(Minor);vpatch=$(Patch)' .nuspec: $vmajor$.$vminor$.$vpatch$

以上是关于.nu​​spec 文件中的 Azure DevOps 管道变量的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure autorest 中生成排除方法

如何查找 Active Directory OAuth 身份验证的受众字段? (如何从 Azure Logic App 向 DevOps 发送发布请求?)

.spec 文件中的“ModuleNotFoundError:没有名为 'kivymd' 的模块”

微服务:docker.compose 文件中的 ESHOP_OCELOT_VOLUME_SPEC 行是啥意思

转译时排除 *.spec.ts 文件,但仍能正确 lint

rpm.spec文件中的多个tar(源文件)文件