我们的团队最近开始尝试使用Phabricator进行代码审查。
除了Phabricator之外,我们还有一个测试系统,可以自动构建和测试推送到主git仓库中特定分支的任何代码。有没有办法让arc diff
自动将差异推送到特定分支?测试通常需要几个小时,我希望人们可以在测试时查看代码。它可以以某种方式集成为单元测试,在发送差异之前不必完成审核吗?
答案 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