VSTS / Azure DevOps:包装上的自动增量NuGet软件包版本

问题描述 投票:10回答:4

运行.NET Core Pack任务,如何使输出的NuGet软件包版本自动递增?

因此,例如,如果我当前的版本是1.0.0,那么下次我调用Pack任务时,我希望看到1.0.1

我正在将环境构建变量与Build.BuildNumber一起使用,并在例如20180913-.2.0等。我想建立一个更传统的版本控制系统。

.net-core azure-devops azure-pipelines azure-pipelines-build-task azure-artifacts
4个回答
25
投票

我可能已经知道了。对于任何将头发扯掉的人,请尝试以下方法:

打包任务:

  • 自动软件包版本控制:使用环境变量
  • 环境变量: Build.BuildNumber

然后,在顶部菜单中的任务变量触发器选项上,单击选项并设置:

  • 内部编号格式:1.0 $(Rev:.r)

保存并排队。这将产生例如1.0.1。

((如果我错了,或者如果长期不起作用,请纠正我。)


20
投票

docs开始,变量Rev:.r每日构建修订计数。接受的“解决方案”将导致一天的完成具有1.0.12版本,然后第二天将是1.0.1

如果要简单的增量和unique semver,请使用1.0.$(BuildID)

[$(BuildID)是构建的内部不可变计数器,因此比$(BuildNumber)干净得多。


BuildID将始终递增-无需重置。因此,经过一个小小的颠簸之后,您最终会说1.2.123变成1.3.124

如果您想很好地执行此任务,则可以使用npm version或类似方法,例如Dart或Flutter构建的pubspec_version完成。

- script: npm version $RELEASE_TYPE

其中$RELEASE_TYPE是您可以基于构建设置的变量(即:CI,PR等),其值为majorminorpatchprerelease

- script: npm version $RELEASE_TYPE
  condition: startsWith(variables['build.sourceBranch'], 'refs/head/release/')
  env:  
    releaseType: minor

更新:Bump Repo版本和在内部版本中使用(使用npm)

为了更新仓库版本,我最终将npm version作为DevDependency包含在内,它具有预提交钩子,可在任何提交时增加项目版本。

此技术可以应用于其他项目类型,将它们放在子文件夹中-尽管可能导致服务器操作系统要求变得复杂。

要在构建中使用此版本,请添加此bash脚本任务,该版本将版本获取并导出为任务变量:

v=`node -p "const p = require('./package.json'); p.version;"`
echo "##vso[task.setvariable variable=packageVersion]$v"

。Net Core Task only版本

很遗憾,没有回购提示。

解决方法1:
jobs:
  - job: versionJob #reads version number from the source file
    steps:
      - powershell: |
          $fv = Get-Content versionFile
          Write-Host ("##vso[task.setvariable variable=versionFromFile;isOutput=true]$fv")
        displayName: 'version from file' 
        name: setVersionStep  


  - job: buildJob # consumes version number, calculates incremental number and set version using assemblyinfo.cs
    dependsOn: versionJob
    variables:
      versionFromFile: $[ dependencies.versionJob.outputs['setVersionStep.versionFromFile'] ] # please note that spaces required between $[ and dependencies
      buildIncrementalNumber: $[ counter(dependencies.versionJob.outputs['setVersionStep.versionFromFile'],1) ] #can't use $versionFromFile here


    steps:
      - powershell: |
          Write-Host ($env:versionFromFile)
          Write-Host ($env:versionFromFile + '.' + $env:buildIncrementalNumber)
        displayName: 'version from file output' 
解决方法2:

This post使用version-prefix描述了另外两个,并自动将BuildNumber用作version-suffix


1
投票

对我来说,将“选项”选项卡上的内部版本号格式设置为

$(date:yyyy).$(date:MMdd)$(rev:.r) 

并添加下一个构建参数:

/p:Version=1.$(Build.BuildNumber) /p:AssemblyVersion=1.$(Build.BuildNumber)

在这种情况下,我们将手动管理主要版本,但是次要版本和内部版本号将自动设置。易于理解您已部署的版本。


0
投票

[如果您只是想更改主要版本,次要版本或修订版本号,则在变量中使用counter运算符是一种简单而优雅的方法。它将自动将当前值加一。

我在这里使用:

variables:
  major: '1'
  minor: '0'
  revision: $[counter(variables['minor'], 1)]
  app_version: '$(major).$(minor).$(revision)'

[如果您希望看到使用此功能的真实4作业管道,我在这里https://github.com/LanceMcCarthy/DevReachCompanion/blob/master/azure-pipelines.yml

© www.soinside.com 2019 - 2024. All rights reserved.