【问题标题】:How to start vNext TFS 2015 build revision at a specific number如何以特定编号启动 vNext TFS 2015 构建修订版
【发布时间】:2021-02-01 22:06:20
【问题描述】:

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

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

【问题讨论】:

标签: tfs tfsbuild asp.net-core


【解决方案1】:

实际上,可以在 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)”。这很重要,这样您的标签将与您更新的内部版本号相同。

【讨论】:

  • 这确实有效!但需要注意的重要一点是,只有在构建中使用内联 powershell 脚本时它才有效!!!首先,我将脚本本地存储在无法正常工作的构建计算机上......第二个重点是 powershell 脚本必须保留在构建脚本中。如果删除它,偏移量就消失了。所以下一个构建不会寻找之前运行的最高数字!
【解决方案2】:

有办法做到这一点。它不漂亮,但很有效。

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

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

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

【讨论】:

    【解决方案3】:

    很遗憾,这是不可能的。

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

    什么是 $(Rev:.rr)?

    确保每个已完成的构建都有一个唯一的名称。当一个构建 已完成,如果内部版本号中没有其他内容发生变化,则 Rev 整数值加一。

    来源:MSDN

    此外,如果您想生成不增加的自定义内部版本号。 这里有一个博客,详细过程:Generate custom build numbers in TFS Build vNext

    【讨论】:

    • 在本地 tfs 或 vsts 中是不可能的?
    • @StingyJack 不幸的是,现在两者都没有。
    • 无法设置起始种子是导致发布管理无法用于在该功能可用之前已发布版本的程序的原因。
    • @PatrickLu-MSFT 链接“在 TFS Build vNext 中生成自定义版本号”现已过时。
    • @CJBS 感谢提醒,OP改了博客地址。已更新链接,现在应该可以使用了。
    【解决方案4】:

    我们不能手动将其设置为一个构建的格式,即:

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

    然后返回到:

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

    没有尝试过,但如果它有效,它将在数据库中节省黑客攻击。

    【讨论】:

    • 几乎可以工作 - 构建以手动设置的编号运行,但在恢复为 $(Major).$(Minor)-rev$(rev:.r) 后,它从原始编号继续,而不是手动设置一个。不知道为什么手动编号现在在数据库中?但无论如何都没有用......
    • 再次到达 54 时可能会发生碰撞。
    • 我试过了,但是当切换回 $(rev:.r) 时,它又从 1 开始
    【解决方案5】:

    您可以轻松做到这一点,但前提是您将 Git 存储库与名为 GitVersion 的工具结合使用

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

    【讨论】:

      【解决方案6】:

      @Steve Sims 的 Answer 仍可与 TFS 2017 vNext 一起使用。非常感谢!

      我只需要执行第一步“将脚本添加为我的构建中的内联 powershell 脚本”。感谢@PainElemental

      使用选项选项卡中的这种“内部版本号格式”,它可以工作:

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

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

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

      我认为,您可以在“高级”GetSources 选项上编辑标签格式。 (通常是隐藏的)。

      【讨论】:

        【解决方案7】:

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

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

        可能还需要调整屏幕分辨率等时间。使用 AutoIt Window Info 查找按钮位置,确保浏览器是全屏(非窗口)运行它几个周期,以确保它在设置循环更大之前稳健。

        #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 产品而被解雇(但很多人应该因为购买/强迫他们去不属于他们的地方而被解雇)。

        【讨论】:

          猜你喜欢
          • 2016-07-30
          • 2018-05-12
          • 1970-01-01
          • 2016-05-23
          • 2016-08-27
          • 1970-01-01
          • 2016-04-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多