VSTS/Azure DevOps:自动增加包上的 NuGet 包版本
VSTS/Azure DevOps: Auto-Increment NuGet Package Version on Pack
运行 .NET Core Pack 任务,如何让输出的 NuGet 包版本自动递增?
因此,例如,如果我当前的版本是 1.0.0
,那么下次调用 Pack 任务时,我希望看到 1.0.1
。
我在 Build.BuildNumber
中使用环境构建变量并在例如20180913-.2.0
,等。我想建立一个更传统的版本控制系统。
我可能已经明白了。对于任何撕裂头发的人,试试这个:
打包任务:
- 自动包版本控制:使用环境变量
- 环境变量: Build.BuildNumber
然后,在顶部菜单中,您有 任务、变量、触发器 , 选项, 点击选项 并设置:
- 版本号格式:1.0$(Rev:.r)
保存并排队。这将产生例如1.0.1.
(如果我说错了,或者这不能长期有效,请指正。)
从 docs 开始,变量 Rev:.r
是 每日 构建修订计数。接受的 "solution" 将导致有一天完成 1.0.12
的版本,然后第二天将是 1.0.1
.
如果你想要一个简单的增量和唯一 semver,使用1.0.$(BuildID)
.
$(BuildID)
是构建的内部不可变计数器,因此比 $(BuildNumber)
.
干净得多
BuildID 将始终递增 - 不会重置。
因此,在一个小的颠簸之后,你最终会说 1.2.123
变成 1.3.124
.
如果您想很好地执行此任务,可以使用 npm version or similar, such as pubspec_version 来完成 Dart 或 Flutter 构建。
- 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
更新:提升回购版本并在构建中使用(使用 npm)
为了更新 repo 版本,我最终将 npm version 作为 DevDependency 包括在内,它的预提交挂钩可以在任何提交时提升项目版本。
此技术可应用于其他项目类型,将它们放在子文件夹中 - 尽管可能会导致服务器 OS 要求复杂化。
要在您的构建中使用此版本,请添加此 bash 脚本任务,它获取版本并将其导出为任务变量:
v=`node -p "const p = require('./package.json'); p.version;"`
echo "##vso[task.setvariable variable=packageVersion]$v"
.Net Core Task 唯一版本
不幸的是,没有 repo-bump。
解决方法 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:
描述了其他几个,使用 version-prefix 并自动将 BuildNumber 应用为 version-suffix .
对我来说,将选项选项卡上的内部版本号格式设置为
就足够了
$(date:yyyy).$(date:MMdd)$(rev:.r)
并添加下一个构建参数:
/p:Version=1.$(Build.BuildNumber) /p:AssemblyVersion=1.$(Build.BuildNumber)
在这种情况下,我们手动管理主要版本,但会自动设置次要版本和内部版本号。易于了解您部署的版本。
如果您只是想增加主要、次要或修订版本号,在变量中使用 counter
运算符是一种简单而优雅的方法。它会自动将当前值加一。
这是我使用的:
variables:
major: '1'
minor: '0'
revision: $[counter(variables['minor'], 1)] #this will get reset when minor gets bumped. The number after Counter is the seed number (in my case, I started at 1).
app_version: '$(major).$(minor).$(revision)'
如果您想看到一个使用它的真实世界的 4 作业管道,我这里有一个 https://github.com/LanceMcCarthy/DevReachCompanion/blob/master/azure-pipelines.yml
我正在使用 ado 管道和 yaml 构建。我所做的是利用管道变量、计数器函数和内联 powershell 函数来创建版本号。它自动递增并使整个构建过程变得很好。
运行 .NET Core Pack 任务,如何让输出的 NuGet 包版本自动递增?
因此,例如,如果我当前的版本是 1.0.0
,那么下次调用 Pack 任务时,我希望看到 1.0.1
。
我在 Build.BuildNumber
中使用环境构建变量并在例如20180913-.2.0
,等。我想建立一个更传统的版本控制系统。
我可能已经明白了。对于任何撕裂头发的人,试试这个:
打包任务:
- 自动包版本控制:使用环境变量
- 环境变量: Build.BuildNumber
然后,在顶部菜单中,您有 任务、变量、触发器 , 选项, 点击选项 并设置:
- 版本号格式:1.0$(Rev:.r)
保存并排队。这将产生例如1.0.1.
(如果我说错了,或者这不能长期有效,请指正。)
从 docs 开始,变量 Rev:.r
是 每日 构建修订计数。接受的 "solution" 将导致有一天完成 1.0.12
的版本,然后第二天将是 1.0.1
.
如果你想要一个简单的增量和唯一 semver,使用1.0.$(BuildID)
.
$(BuildID)
是构建的内部不可变计数器,因此比 $(BuildNumber)
.
BuildID 将始终递增 - 不会重置。
因此,在一个小的颠簸之后,你最终会说 1.2.123
变成 1.3.124
.
如果您想很好地执行此任务,可以使用 npm version or similar, such as pubspec_version 来完成 Dart 或 Flutter 构建。
- 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
更新:提升回购版本并在构建中使用(使用 npm)
为了更新 repo 版本,我最终将 npm version 作为 DevDependency 包括在内,它的预提交挂钩可以在任何提交时提升项目版本。
此技术可应用于其他项目类型,将它们放在子文件夹中 - 尽管可能会导致服务器 OS 要求复杂化。
要在您的构建中使用此版本,请添加此 bash 脚本任务,它获取版本并将其导出为任务变量:
v=`node -p "const p = require('./package.json'); p.version;"`
echo "##vso[task.setvariable variable=packageVersion]$v"
.Net Core Task 唯一版本
不幸的是,没有 repo-bump。
解决方法 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:
对我来说,将选项选项卡上的内部版本号格式设置为
就足够了$(date:yyyy).$(date:MMdd)$(rev:.r)
并添加下一个构建参数:
/p:Version=1.$(Build.BuildNumber) /p:AssemblyVersion=1.$(Build.BuildNumber)
在这种情况下,我们手动管理主要版本,但会自动设置次要版本和内部版本号。易于了解您部署的版本。
如果您只是想增加主要、次要或修订版本号,在变量中使用 counter
运算符是一种简单而优雅的方法。它会自动将当前值加一。
这是我使用的:
variables:
major: '1'
minor: '0'
revision: $[counter(variables['minor'], 1)] #this will get reset when minor gets bumped. The number after Counter is the seed number (in my case, I started at 1).
app_version: '$(major).$(minor).$(revision)'
如果您想看到一个使用它的真实世界的 4 作业管道,我这里有一个 https://github.com/LanceMcCarthy/DevReachCompanion/blob/master/azure-pipelines.yml
我正在使用 ado 管道和 yaml 构建。我所做的是利用管道变量、计数器函数和内联 powershell 函数来创建版本号。它自动递增并使整个构建过程变得很好。