0

我们的目标是在 Azure Pipelines 的发布定义中对 npm 和 NuGet 包进行自动版本控制

到目前为止,我们正在使用基于 rev 值的标记化任务,我们替换了 nuspec 和 package.json 文件中的版本号。所以我们得到了像 1.0.1、1.0.2……这样的版本号,并且在发布定义中实现了自动版本控制

但问题是,每当发布失败时,我们都会丢失这些数字作为我们的版本号,因为 rev 值正在增加

示例:如果我发布的工件版本是 1.0.1.. 为我发布的下一个版本是 1.0.2

但是,如果 1.0.2 发布失败并且 1.0.3 成功,我们将在此处获得发布编号为 1.0.3,因为最终用户 1.0.2 缺失

现在我们需要帮助来根据上次成功发布增加我的版本号或根据成功发布重置 rev 值或获取已发布的工件版本并增加该数字

或者任何其他完成此任务的最佳实践都会有所帮助。

先感谢您。

4

1 回答 1

0

NPM 与 NuGet 包自动版本控制

恐怕没有这种方法可以直接完成这项任务。因为$(Rev:.r)是这一天的内部版本号。用于$(Rev:.r)确保每个完成的构建都有一个唯一的名称。构建完成后,如果构建编号中没有其他任何内容发生变化,则 Rev 整数值将增加 1。该值存储在数据库中。

作为测试,我创建了一个Inline Powershell任务来在构建/发布任务失败时修改值。

我使用 powershell 脚本Write-Host "##vso[build.updatebuildnumber]$newVersionNumber"来更新build.updatebuildnumber(我build.updatebuildnumber用作 nuget 包版本。)并将选项设置Run this taskOnly when a previous task has failed

在此处输入图像描述

要查看可用于构建和发布管道的变量,请查看以下页面: -构建变量-发布变量

以下是修改的powershell脚本build.updatebuildnumber

$vstsCurrentVersionNumber = $Env:BUILD_BUILDNUMBER
$currentVersionNumber = $vstsCurrentVersionNumber.Split(".")
$revisionNumber = $currentVersionNumber[3]
$newRevisionNumber = [int]$revisionNumber -1
$newVersionNumber = $currentVersionNumber[0] + "." + 
$currentVersionNumber[1] + "." + $currentVersionNumber[2] + "." + 
$newRevisionNumber
$env:VersionNumber = $newVersionNumber

 Write-Host "Update Build Number To: $newVersionNumber"
 Write-Host "##vso[build.updatebuildnumber]$newVersionNumber"

事实上,如果构建/发布任务失败,构建号将在此构建中被修改。

但是,当我们下次执行构建/发布时,buildnumber/$(Rev:.r)仍然会根据上次失败的构建结果增加:

在此处输入图像描述

作为解决方法,我们可以为 nuget 包版本设置一个值,例如 1.0.0。当我们成功构建/发布时,添加一个 Inline Powershell 任务,每次将版本的值增加一。构建/发布失败时不要执行 Inline Powershell 任务。

希望这可以帮助。

于 2019-04-02T09:11:11.030 回答