从docs,变量Rev:.r 是每日 构建修订计数。接受的“解决方案”将导致一天完成1.0.12 的版本,然后第二天将是1.0.1。
如果您想要一个简单的增量和独特 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 等),其值为major、minor、patch、prerelease 等。
- script: npm version $RELEASE_TYPE
condition: startsWith(variables['build.sourceBranch'], 'refs/head/release/')
env:
releaseType: minor
更新:Bump Repo 版本和在构建中使用(使用 npm)
为了更新 repo 版本,我最终将 npm version 作为 DevDependency 包含在内,它的 precommit hook 可以在任何提交时提升项目版本。
这种技术可以应用于其他项目类型,将它们放在一个子文件夹中 - 尽管可能会导致服务器操作系统要求的复杂化。
要在您的构建中使用此版本,请添加此 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。