如何以特定编号启动 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 产品而被解雇)。
我使用的是 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 的
我只需要做第一步"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 产品而被解雇)。