我们正在将代码从TFS版本控制迁移到Git (由TFS托管)。迁移的一部分是设置Pull Request构建。
我们使用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构建的一个非常重要的逻辑是找出哪些文件被拉入请求所触及。根据上面的示例,可以这样确定:
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是master,那么它就是origin/master
。但是如果它是用于名为YabaDabaDoo的分支,那么它将是origin/YabaDabaDoo
。我的问题是,我想从vNext Git构建中自动推导出合并目标。
发布于 2018-07-25 23:40:34
我们最终放置了以下内联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)
恰好等于我们所需要的。
发布于 2018-07-07 03:35:06
您可以使用REST API获取PR信息,包括源分支和目标分支。
https://stackoverflow.com/questions/51213391
复制相似问题