我们正在将代码从TFS版本控件迁移到Git(由TFS托管)。迁移的一部分是设置“拉取请求”构建。
我们使用TFS vNext CI框架。
我们可以正常工作,当创建请求请求时,构建将按预期开始。
例如,这是PR生成服务器上的Git存储库历史记录在生成开始后的样子:
PS D:\_wf\02\1\s> git lg -5
* 92d0a7efc | (HEAD, pull/505/merge) Merge pull request 505 from canws211_master1 into master (2 hours ago) [Lopyreva, Valeria]
|\
| * 37103b362 | (origin/canws211_master1) test (16 hours ago) [Lopyreva, Valeria]
| * ca6601027 | test (17 hours ago) [Lopyreva, Valeria]
* | 50045719d | (origin/master) Merged PR 504: Fix the path references. (2 hours ago) [Kharitonov, Mark]
|\ \
| * | bf3814458 | (origin/shelve_test) Fix the path references. (18 hours ago) [Kharitonov, Mark]
PS D:\_wf\02\1\s>
PR构建的一个非常重要的逻辑是找出Pull Request涉及哪些文件。在上述示例中,可以这样确定:
PS D:\_wf\02\1\s> git diff-tree --name-status origin/master..
M Build
现在是问题所在。如何从构建本身推断合并目标?
我可以定义一个专用的构建参数,并在此处传递合并目标。但是我觉得这是错误的。合并目标应该以某种方式可用。
有什么想法吗?
编辑1
试图澄清。构建脚本需要知道在请求请求中修改了哪些文件。这样做的方法是:
git diff-tree --name-status -r <MERGE_TARGET>..
将<MERGE_TARGET>
替换为合并目标的位置。因此,如果PR用于主站,则它将为origin/master
。但是,如果它是针对名为YabaDabaDoo的分支的,则它将为origin/YabaDabaDoo
。我的问题是我想从vNext Git构建中自动推断出合并目标。
答案 0 :(得分:0)
您可以使用REST API获取PR信息,其中包括源分支和目标分支。
答案 1 :(得分:0)
我们最终放置了以下嵌入式Powershell脚本:
$TargetBranch = $env:SYSTEM_PULLREQUEST_TARGETBRANCH
if ($TargetBranch)
{
$TargetBranch = $TargetBranch.Split('/')[-1]
}
else
{
$TargetBranch = $env:BUILD_SOURCEBRANCHNAME
}
Write-Host "##vso[task.setvariable variable=branch]$(git remote show -n)/$TargetBranch"
这将生成一个branch
变量,因此$(branch)
等于我们需要的变量。