【问题标题】:VSTS v.Next Build Definitions Multiple BranchesVSTS v.Next 构建定义多个分支
【发布时间】:2018-05-19 10:03:52
【问题描述】:

我最近从 XAML 构建过渡到 v.Next 构建。我一直为每个分支保留一个构建定义,但我发现新系统能够在多个分支上触发单个构建定义并拉取请求。

这是个好主意吗?有哪些需要注意的事项以及进行此设置的最佳方法?

首先想到的几个问题是:

1) 版本号。我将如何处理诸如旧维护分支版本控制为 1.0.、主版本控制为 2.0. 以及开发构建为 0.2.* 等场景,这样我就不会混淆构建工件?有没有更好的办法?

2) 如果 repos 树发生了变化怎么办?如果 master 希望在一个文件夹中构建一个 .sln,但 dev 分支已将其移至另一个文件夹怎么办?

还有其他问题和解决办法吗?

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    单个构建定义触发多个分支和拉取请求可以使 VSTS 构建更加灵活。您可以根据需要选择方式:

    • 如果要为构建定义构建某个分支n,可以指定某个分支名称。假设您只想构建master 分支,您可以在Get Source 步骤中指定master 分支(用于手动构建),或在Branch filters 中指定master 分支(用于CI 构建)。
    • 如果您想在构建定义中构建多个分支(用于 CI 构建),您可以在“触发器”选项卡上的分支过滤器中指定分支。
    • 如果您想在合并前验证 PR,可以为分支策略添加构建验证。

    关于您的疑虑:

    1. 即使一个构建定义也可以触发多个分支,但是对于某个构建,它会在将更改推送到该分支后构建某个分支。并且可以检测出实际构建的是哪个分支,并相应地更新分支版本号。

      比如你有一个构建定义,它可以触发为master 分支和dev 分支构建。将更改推送到master 分支后,构建将排队等待master 分支。并且可以通过一些方式获取分支名,相应的增加版本号。

    2. 您不仅可以在构建定义中指定可以触发哪些分支,还可以在path filters.中指定可以触发的文件夹假设folderAfolderB都包含.sln,你想仅当folderA 下的.sln 文件发生更改时触发构建,因此您可以指定分支过滤器和路径过滤器,如下所示:


    对于这种情况:一个构建定义可以触发多个分支,您可以添加一个PowerShell任务来检测哪个分支正在构建。脚本如下:

    $head=$(git rev-parse HEAD)
    $sha=$head.Substring(0,7)
    $branches=$(git branch -rv)
    for ($i=0;$i -lt $branches.Length; $i++)
    {
      if ($branches[$i] -match $sha)
      {
        $tbranch=$branches[$i] -split "\s+"
        $local=$tbranch[1] -split '/'
        $br=$local[1]
        echo "You are building $br branch"
        break
      }
    }
    

    【讨论】:

    • 我可以更详细地了解“您可以检测实际构建的分支,并相应地更新分支版本号。”吗?我怀疑如果我知道如何做到这一点,我会非常喜欢这种模式。
    • 是的,当然。我在答案的最后部分添加了检测正在构建哪个分支的方法,您可以尝试一下。
    • 我在分支过滤器中有 'Branch specification' = 'master'(如上图所示)。当 CI 构建发生时,我将构建名称命名为“合并”,而不是分支名称(我从 master 创建了我的分支)。但是在手动构建中,当我选择特定的分支时,TFS 会使用正确的分支名称进行构建。我使用了 SourceBranchName(构建名称:合并)。还尝试了 SourceBranch(构建名称:refs_heads_merge)。如何在 CI 构建中获取分支名称? “合并”名称从何而来?
    【解决方案2】:

    这部分,

    这是个好主意吗?有哪些需要注意的事项以及进行此设置的最佳方法?

    离题(太宽泛/主要基于意见),所以我忽略它并回答你概述的两个具体场景。

    1. 不太清楚你在问什么。发布定义环境可以设置为在分支上触发(工件触发器),因此如果您对旧分支有不同的发布要求,您可以有不同的发布定义,或者只是在单个发布定义中使用备用管道。

    2. 您可以在 Visual Studio 构建步骤中指定通配符,以便指定,例如,**/*.sln。这将在任何文件夹下找到任何 .sln 文件。

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 2018-09-21
      • 2018-05-24
      相关资源
      最近更新 更多