如何以特定编号启动 vNext TFS 2015 构建修订版

How to start vNext TFS 2015 build revision at a specific number

我使用的是 TFS 2015 的 vNext 构建系统。

我目前拥有传统格式的构建版本。 Major.Minor-rev.RevisionNumber。因此,如果我有 Major 1、Minor 12 的构建版本,当我开始时构建版本看起来像 1.12-rev.1。我想知道是否有可能让构建版本从 1 以外的数字开始,比如 55。这样构建版本看起来像 1.12-rev.55,然后像往常一样增加一个。

很遗憾,这是不可能的。

每个构建定义都有一个 构建编号格式 字段,您可以在其中使用一些宏来指定生成的构建编号应该是什么样子。在这种格式中,我们使用 $(Rev:.rr) 它以 1 开头。

What is $(Rev:.rr)?

To ensure that every completed build has a unique name. When a build is completed, if nothing else in the build number has changed, the Rev integer value is incremented by one.

Source:MSDN

此外,如果你想生成一个没有增量的自定义内部版本号。 这里有一篇博客,里面有详细的步骤:Generate custom build numbers in TFS Build vNext

有一种方法可以做到这一点。它不漂亮,但它有效。

假设您的内部版本号格式类似于 $(Major).$(Minor)-rev$(rev:.r)

要执行此操作,请排队生成编号为 1.12-rev.1 的版本。然后转到 TFS 数据库并进入名为 tbl_Build 的 table。找到您最后一次构建并将 BuildNumberRevision 列中的值更改为 54。

下一个启动的版本现在是 1.12-rev.55

我们不能在一个构建的格式中手动设置它,即:

$(Major).$(Minor)-rev$(rev:.54)

然后恢复为:

$(Major).$(Minor)-rev$(rev:.r)

没试过,但如果行得通,就会省去数据库中的黑客攻击。

实际上,可以在 vNext 构建中实现这一点而无需破解数据库。

有 2 个步骤。

首先,您需要使用以下内联脚本执行 powershell 构建步骤(作为构建的第一步):

#Set the BuildNumberOffset. (Change this to the difference between the TFS build number,
#and the number that your build needs.) 
$BuildNumberOffset = 543  

#Don't change 
$BuildNumberParts = $($env:BUILD_BUILDNUMBER) -split '\.' 
$TFSRevision = [int]$BuildNumberParts[$BuildNumberParts.Length-1] 
$BuildNumberParts[$BuildNumberParts.Length-1] = ($TFSRevision + $BuildNumberOffset).ToString() 
$BuildNumber = [string]::Join(".", $BuildNumberParts) 
Write-Host "##vso[build.updatebuildnumber]$BuildNumber" 

其次,在存储库选项卡的标签格式字段中将标签格式设置为“$(Build.BuildNumber)”而不是“$(Build.DefinitionName)$(rev:.r)” .这很重要,这样您的标签将与更新后的内部版本号相同。

@Steve Sims 的 仍然使用 TFS 2017 vNext。非常感谢!

我只需要做第一步"to add the script as an inline powershell script in my build."感谢@PainElemental

在选项标签中使用这个 "Build number format" 它可以工作:

$(BuildDefinitionName)_1.2.0$(rev:.r)

我没有用构建标记我的来源,所以我没有检查:

Second, on the Label format field of the repository tab set the label format to "$(Build.BuildNumber)" instead of "$(Build.DefinitionName)$(rev:.r)". This is important so that your label will be the same as your updated build number.

我认为,您可以在 "Advanced" GetSources 选项中编辑标签格式。 (通常是隐藏的)。

您可以轻松做到这一点,但前提是您将 Git 存储库与名为 GitVersion

的工具结合使用

这是一个很棒的工具,我经常在我的 git 存储库中使用它。对于您的用例:当您拥有 1.2.3 版并且想要跳转到 1.2.55 版时,您只需添加一个 git 标签 'v1.2.55',它就会从那里开始版本控制。 Git版本要复杂得多,功能也多得多,但这是功能之一。您不必弄乱特殊的 PowerShell 脚本或任何东西,它会读取您的 git 存储库历史记录,并且 git 标签会覆盖计算的版本控制。已经有一个名为 Git 版本的 TFS/VSTS/Azure Devops 扩展,来自同一个开发人员,效果很好。

这对我们来说也很痛苦,从现有的 CI 系统迁移到它自己的构建编号,我们需要构建编号从特定值开始递增。组织中不允许黑客入侵数据库,抵消似乎是一个障碍。

最后,我们使用 AutoIt 脚本启动和停止构建,并使用 WebUI 删除构建结果并保留它 运行。不好,但它完成了工作。

需要调整屏幕分辨率等,也许还需要调整时间。使用 AutoIt Window 信息找到按钮位置,确保浏览器是全屏的(不是窗口化的)运行 循环几次以确保它在设置更大的循环之前稳健。

#include <AutoItConstants.au3>
;Increment TFS build count (Chrome browser buttons locations).  Start from build result page.

For $i = 1 To 15 Step 1

ConsoleWrite ( "Loop " & $i & " of 5" & @CRLF )
Sleep(200)
MouseClick($MOUSE_CLICK_PRIMARY, 1800, 200, 2)
Sleep(500)
MouseClick($MOUSE_CLICK_PRIMARY, 1150, 881, 2)
Sleep(2000)
MouseClick($MOUSE_CLICK_PRIMARY, 1800, 200, 2)
Sleep(500)
MouseClick($MOUSE_CLICK_PRIMARY, 1055, 165, 2)
Sleep(10000)

Next

TFS/Devops 是一个非常不成熟的 CI 系统,它不是我们 运行 的补丁。不幸的是,公司政策说我们转向 TFS,因为没有人会因为购买 Microsoft 产品而被解雇(但很多人应该因为在不属于他们的地方购买 them/forcing 产品而被解雇)。