Azure devops VSTS v.下一个构建定义多个分支

Azure devops VSTS v.下一个构建定义多个分支,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我最近从XAML版本转换到v.Next版本。我一直为每个分支保留一个构建定义,但我发现新系统能够在多个分支和拉请求上触发单个构建定义 这是个好主意吗?需要注意哪些事项以及设置此功能的最佳方法 首先想到的是: 1版本号。我将如何处理场景,例如旧的维护分支版本控制为1.0,主版本控制为2.0。还有一个开发版本,比如说0.2.*这样我就不会混淆构建工件了?有更好的办法吗 2如果回购协议树已更改怎么办?如果master希望在一个文件夹中构建一个.sln,但开发人员分支已将其移动到另一个文件夹,该怎么办

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

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

首先想到的是:

1版本号。我将如何处理场景,例如旧的维护分支版本控制为1.0,主版本控制为2.0。还有一个开发版本,比如说0.2.*这样我就不会混淆构建工件了?有更好的办法吗

2如果回购协议树已更改怎么办?如果master希望在一个文件夹中构建一个.sln,但开发人员分支已将其移动到另一个文件夹,该怎么办

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

本部分

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

这个话题太宽泛/主要是基于观点,所以我忽略了它,并回答了您概述的两个具体场景

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

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


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

如果要为生成定义生成特定分支,可以指定特定分支名称。假设如果只希望生成主分支,则可以在“获取源”步骤中为手动生成指定主分支,或者在“CI生成”的分支筛选器中指定主分支。 如果要在CI生成的生成定义中生成多个分支,可以在“触发器”选项卡上的“分支筛选器”中指定分支。 如果要在合并前验证PR,可以添加分支策略的生成验证。 请注意:

甚至一个构建定义也可以触发多个分支,但对于某个构建,它会在将更改推送到该分支上后构建某个分支。您可以检测哪个分支是实际生成的,并相应地更新分支版本号

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

您不仅可以指定在生成定义中可以触发哪些分支,还可以指定在路径筛选器中可以触发的文件夹。假设有folderA和folderB都包含.sln,您希望仅在folderA下的.sln文件更改时触发生成,因此您可以指定分支筛选器和路径筛选器,如下所示:

$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
  }
}
对于以下情况:生成定义可以触发多个分支,您可以添加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
  }
}

我可以了解更多的细节吗?您可以检测出哪个分支是实际构建的,并相应地更新分支版本号。?我想如果我知道怎么做,我真的会喜欢这种模式。是的,当然。我在回答的最后一部分添加了检测正在构建哪个分支的方法,您可以试一试。我在分支过滤器中有“分支规范”=“主”如上图所示。当CI构建发生时,我得到的构建名称是merge,而不是从master创建的分支名称。但是在手动构建中,当我选择特定的分支时,TFS将使用正确的分支名称构建。我使用了SourceBranchName构建名称:merge。还尝试了SourceBranchbuild名称:refs\u heads\u merge。如何在CI生成中获取分支名称?“合并”名称来自哪里?