有没有办法让Phabricator将差异推送到存储库?

时间:2015-03-20 18:48:06

标签: git phabricator

我们的团队最近开始尝试使用Phabricator进行代码审查。

除了Phabricator之外,我们还有一个测试系统,可以自动构建和测试推送到主git仓库中特定分支的任何代码。有没有办法让arc diff自动将差异推送到特定分支?测试通常需要几个小时,我希望人们可以在测试时查看代码。它可以以某种方式集成为单元测试,在发送差异之前不必完成审核吗?

2 个答案:

答案 0 :(得分:6)

arc diff的目的是,它允许在没有将代码登陆到分支上的情况下执行测试/代码审查。我们通过Herald规则,Harbormaster构建计划和Jenkins来实现这一目标。

当创建/更新差异时,正在观看Repo触发通过HTTP发布请求触发Jenkins的Harbormaster构建计划的Herald规则。我将尝试详细介绍基础知识,但是,如果您选择这条路线,我建议您在构建此过程时查看其他一些材料。

请注意 - Harbormaster被列为“原型”。意思是,对它的支持有限。但是,除了编写自己的自定义代码之外,没有其他方法可以做我在这里建议的内容。

我希望有足够的帮助你入门。根据您的具体需求进行制作需要您提供更多详细信息。这就是我们所做的,它对我们很有用。我希望它适合你。

设置测试作业

必须对测试作业进行参数化,以便您可以将Diff和构建ID作为参数传递 在你的测试中,你会做这样的事情从diff中提取代码:

#!/bin/bash
# Clean the branch
git fetch --all
git checkout master
git reset --hard origin/master
git pull

# Delete the arcpatch branch (ignoring error if the branch doesn't exist)
git branch -D arcpatch-D$DIFF || true

# Apply the patch
arc patch D$DIFF

# Update dependencies
git submodule update
composer install

然后触发您的常规测试。在测试之后,您将需要一些这样的代码来查看更新Phabricator的构建结果:

#!/bin/bash
# Let Phabricator know if the build succeeded
if [ -n "$PHID" ]; then
   export PATH=$PATH:~/bin/arcanist/bin
   if [ {{{Code to determine Failure}}} ]; then
      jsonResult="{\"buildTargetPHID\":\"$PHID\",\"type\":\"fail\"}";
   else
      jsonResult="{\"buildTargetPHID\":\"$PHID\",\"type\":\"pass\"}";
   fi
   echo $jsonResult | arc call-conduit harbormaster.sendmessage;
fi

查看代码

同时,开发人员可以引用diff(http:// {Phabricator.url} / D ####),查看代码,甚至可以按照测试作业上面执行的类似过程运行任何测试。

先驱规则

先驱规则将触发差异修订。它将寻找任何表示您想要测试的更改(通常是特定仓库中的任何内容)并运行构建计划(请参阅有关如何创建链接到Jenkins的构建计划的其他参考,如果这是您使用的)。

其他参考资料:

http://www.guywarner.com/2014/05/integrating-jenkins-and-phabricator.html http://www.guywarner.com/2014/06/part-2-integrating-phabricator-and.html

答案 1 :(得分:1)

另一种选择是配置Diffusion来观察你的git存储库并创建一个“staging”区域。这将导致arc diff自动推送到已配置的转储远程w /标签,如phabricator/diff/123

有关详细信息,请参阅https://secure.phabricator.com/book/phabricator/article/harbormaster/#change-handoff