我最近从XAML版本转换为v.Next版本。我总是为每个分支保留一个构建定义,但我看到新系统能够在多个分支和拉取请求上触发单个构建定义。
这是个好主意吗?有什么需要注意的事项以及设置它的最佳方法?
首先想到的几个问题是:
1)版本号。我如何处理诸如旧维护分支版本控制为1.0的情节。,主版本化为2.0。和dev构建如0.2。*所以我不混淆构建工件?还有更好的方法吗?
2)如果回购树发生了变化怎么办?如果master希望在一个文件夹中构建一个.sln但是dev分支将它移动到另一个文件夹会怎么样?
任何其他问题和解决方案?
答案 0 :(得分:1)
单个构建定义以触发多个分支和拉取请求可以使VSTS构建更加灵活。您可以根据需要选择方式:
master
分支,可以在Get Source步骤中指定master
分支(用于手动构建),或在Branch过滤器中指定master
分支(用于CI构建)。 关注您:
即使构建定义也可以触发多个分支,但对于某个构建,它会在此分支上推送更改后构建某个分支。并且您可以检测实际构建的分支,并相应地更新分支版本号。
例如,您有一个构建定义,可以触发为master
分支和dev
分支构建。将更改推送到master
分支后,构建将排队等待master
分支。并且您可以通过某种方式获取分支名称,因此您可以相应地增加版本号。
您不仅可以指定在构建定义中可以触发哪些分支,还可以在path filters.
中指定可以触发的文件夹。假设有folderA
和folderB
两者都包含.sln
,您只想在.sln
文件在folderA
下更改时触发构建,因此您可以指定分支过滤器和路径过滤器,如下所示:
对于这种情况:构建定义可以触发多个分支,您可以添加 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)
这部分,
这是个好主意吗?有什么需要注意的事项以及设置它的最佳方法?
是偏离主题的(太广泛/主要基于意见),所以我忽略了它并回答了你概述的两个具体方案。
不确定你在问什么。可以将发布定义环境设置为在分支上触发(工件触发器),因此,如果您对旧分支具有不同的发布要求,则可以在单个发行版定义中使用不同的发行版定义或简单的备用管道。
您可以在Visual Studio Build步骤中指定通配符,以便指定**/*.sln
。这将在任何文件夹下找到任何.sln文件。