VSTS v.Next构建定义多个分支

时间:2017-12-05 16:55:36

标签: azure-devops azure-pipelines

我最近从XAML版本转换为v.Next版本。我总是为每个分支保留一个构建定义,但我看到新系统能够在多个分支和拉取请求上触发单个构建定义。

这是个好主意吗?有什么需要注意的事项以及设置它的最佳方法?

首先想到的几个问题是:

1)版本号。我如何处理诸如旧维护分支版本控制为1.0的情节。,主版本化为2.0。和dev构建如0.2。*所以我不混淆构建工件?还有更好的方法吗?

2)如果回购树发生了变化怎么办?如果master希望在一个文件夹中构建一个.sln但是dev分支将它移动到另一个文件夹会怎么样?

任何其他问题和解决方案?

2 个答案:

答案 0 :(得分:1)

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

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

关注您:

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

    例如,您有一个构建定义,可以触发为master分支和dev分支构建。将更改推送到master分支后,构建将排队等待master分支。并且您可以通过某种方式获取分支名称,因此您可以相应地增加版本号。

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

    enter image description here

  3. 对于这种情况:构建定义可以触发多个分支,您可以添加 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
      }
    }
    

答案 1 :(得分:0)

这部分,

  

这是个好主意吗?有什么需要注意的事项以及设置它的最佳方法?

是偏离主题的(太广泛/主要基于意见),所以我忽略了它并回答了你概述的两个具体方案。

  1. 不确定你在问什么。可以将发布定义环境设置为在分支上触发(工件触发器),因此,如果您对旧分支具有不同的发布要求,则可以在单个发行版定义中使用不同的发行版定义或简单的备用管道。

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