Azure DevOps 管道任务 NetCoreCLI 包。 AutoVersion 但保持 Major.Minor.Patch 不变

Posted

技术标签:

【中文标题】Azure DevOps 管道任务 NetCoreCLI 包。 AutoVersion 但保持 Major.Minor.Patch 不变【英文标题】:Azure DevOps pipeline task NetCoreCLI pack. AutoVersion but keep Major.Minor.Patch unchanged 【发布时间】:2021-04-22 18:11:39 【问题描述】:

我在同一个存储库中有多个 NuGet 包。我想将我的包自动版本化为 $Major.$Minor.$Patch-CI-$DateTimeStamp。 $Major.$Minor.$Patch-CI-$rev 也可以。

如果我知道原始版本是什么,它将使 NuGet 包更易于理解。我还可以确保我的开发 NuGet 包的版本高于我的主 NuGet 包。我不想手动设置 Major、Minor 和 Patch 变量,因为解决方案中有多个 NuGet 包。

以下尝试始终将 Major.Minor.Patch 设为 1.0.0

- task: DotNetCoreCLI@2
  condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))
  inputs:
    command: 'pack'
    packagesToPack: $(projectsNuGet)
    nobuild: true
    versioningScheme: 'byPrereleaseNumber'

这根本不会改变版本

- task: DotNetCoreCLI@2
  displayName: DotNetCoreCLI pack !master
  condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))
  inputs:
    command: 'pack'
    packagesToPack: $(projectsNuGet)
    nobuild: true
    arguments: --version-suffix pre9999

【问题讨论】:

这个问题有更新吗?如果答案能给你一些帮助,请随时告诉我。只是提醒this。 【参考方案1】:

Azure DevOps 管道任务 NetCoreCLI 包。 AutoVersion 但保持 Major.Minor.Patch 不变

您应该在 YAML 文件中将 Major、Minor 和 Patch 定义为变量,并将它们作为参数传递给任务 DotNetCoreCLI

variables:
  Major: '1'
  Minor: '0'
  Patch: '0'

steps:
- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: $(projectsNuGet)
    nobuild: true
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

Here 是提供一组很好的 yaml 示例的文档。

如果解决方案中有多个 NuGet 包,您可以为每个项目定义不同的 Major、Minor 和 Patch,例如 Major_Project1: '1',然后将其作为参数 majorVersion: '$(Major_Project1)' 传递。

或者,如果您不想在 YAML 文件中手动将 Major、Minor 和 Patch 定义为变量,您可以使用第二种方法,但有一点不同。

我们需要在项目文件.csproj下面添加VersionPrefixVersionSuffix属性:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp3.1</TargetFrameworks>
  </PropertyGroup>

    <PropertyGroup>
    <VersionPrefix>1.0.3</VersionPrefix>
    <VersionSuffix></VersionSuffix>
  </PropertyGroup>

</Project>

然后我们需要使用 DotNetCoreCLI custom donet 任务而不是带有参数 --version-suffix "pre9999" 的 nuget pack 任务:

- task: DotNetCoreCLI@2
  displayName: 'dotnet custom'
  inputs:
    command: custom
    projects: '$(projectsNuGet)'
    custom: pack
    nobuild: true
    arguments: '--version-suffix "pre9999"'

【讨论】:

(1) 我在管道名称的顶部添加了:'$(Date:MMddyyyy)-$(Rev:r)' 这样我就可以使用变量 $(Build.BuildNumber) 来获取依赖时间戳的 --version-suffix (2) 现在在 $(Build.SourcesDirectory) 而不是 $(Build.ArtifactStagingDirectory) 中创建包

以上是关于Azure DevOps 管道任务 NetCoreCLI 包。 AutoVersion 但保持 Major.Minor.Patch 不变的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用经典 UI 在 for 循环中运行 Azure DevOps 管道任务?

Azure DevOps 中项目的 Sonarqube 扫描问题

用于更新文件和签入 TFS 的 Azure DevOps 管道任务

用于 Linux 操作系统的 azure devops 发布管道中的自动化 SQL 部署任务

如何在 Azure DevOps 中导入任务组

在 Azure DevOps 中是不是有一种 GUI 方法可以禁用基于 YAML 的管道中的任务?