有没有办法让 Phabricator 将差异推送到存储库?
Is there any way to get Phabricator to push diffs to a repository?
我们的团队最近开始尝试使用 Phabricator 进行代码审查。
除了 Phabricator 之外,我们还有一个测试系统,可以自动构建和测试推送到我们主要 git 存储库中特定分支的任何代码。有没有办法让 arc diff
自动将差异推送到那个特定的分支?测试通常需要几个小时,我希望人们可以在测试代码时查看代码。能否以某种方式将其集成为单元测试,而不必在发送差异以供审核之前完成?
arc diff
的目的是允许 tests/Code 执行审核 而无需 将代码登陆分支。我们通过 Herald 规则、Harbormaster 构建计划和 Jenkins 在这里做到这一点。
当 diff 为 created/updated 时,监视 Repo 的先驱规则触发 Harbormaster 构建计划,该计划通过 HTTP post 请求触发 Jenkins。我会尝试详细说明基础知识,但如果您选择走这条路,我建议您在构建此过程时查看一些其他材料。
请注意 - Harbormaster 被列为 "Prototype"。意思是,对它的支持有限。但是,除了编写您自己的自定义代码之外,没有其他方法可以执行我在此建议的操作。
我希望这里有足够的内容帮助您入门。根据您的特定需求进行制作需要您提供更多细节。这就是我们所做的,对我们来说效果很好。我希望它对你有用。
设置测试作业
必须对测试作业进行参数化,以便您可以将差异和构建 ID 作为参数传入。
在你的测试中,你会做这样的事情来从差异中提取代码:
#!/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
查看代码
与此同时,开发人员可以参考该差异 (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
另一种选择是配置 Diffusion 以观察您的 git 存储库并创建一个 "staging" 区域。这将导致 arc diff
自动推送到带有 phabricator/diff/123
.
等标签的已配置暂存远程
有关详细信息,请参阅 https://secure.phabricator.com/book/phabricator/article/harbormaster/#change-handoff
我们的团队最近开始尝试使用 Phabricator 进行代码审查。
除了 Phabricator 之外,我们还有一个测试系统,可以自动构建和测试推送到我们主要 git 存储库中特定分支的任何代码。有没有办法让 arc diff
自动将差异推送到那个特定的分支?测试通常需要几个小时,我希望人们可以在测试代码时查看代码。能否以某种方式将其集成为单元测试,而不必在发送差异以供审核之前完成?
arc diff
的目的是允许 tests/Code 执行审核 而无需 将代码登陆分支。我们通过 Herald 规则、Harbormaster 构建计划和 Jenkins 在这里做到这一点。
当 diff 为 created/updated 时,监视 Repo 的先驱规则触发 Harbormaster 构建计划,该计划通过 HTTP post 请求触发 Jenkins。我会尝试详细说明基础知识,但如果您选择走这条路,我建议您在构建此过程时查看一些其他材料。
请注意 - Harbormaster 被列为 "Prototype"。意思是,对它的支持有限。但是,除了编写您自己的自定义代码之外,没有其他方法可以执行我在此建议的操作。
我希望这里有足够的内容帮助您入门。根据您的特定需求进行制作需要您提供更多细节。这就是我们所做的,对我们来说效果很好。我希望它对你有用。
设置测试作业
必须对测试作业进行参数化,以便您可以将差异和构建 ID 作为参数传入。
在你的测试中,你会做这样的事情来从差异中提取代码:
#!/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
查看代码
与此同时,开发人员可以参考该差异 (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
另一种选择是配置 Diffusion 以观察您的 git 存储库并创建一个 "staging" 区域。这将导致 arc diff
自动推送到带有 phabricator/diff/123
.
有关详细信息,请参阅 https://secure.phabricator.com/book/phabricator/article/harbormaster/#change-handoff