与Gerrit和Xcode Server持续集成

时间:2015-04-14 23:59:41

标签: xcode gerrit

我正在尝试使用运行针对Gerrit的验证测试的Xcode服务器运行iOS的持续集成。

为了让Xcode从gerrit服务器中取出,我必须将它的libgit2.dylib升级到版本0.21.5

我是从https://codeload.github.com/libgit2/libgit2/zip/v0.21.5

下载的

有人建议如何让gerrit触发特定分支的Xcode构建吗?

2 个答案:

答案 0 :(得分:1)

一种简单的方法是创建一个将执行构建的Xcode bot。您可以将bot设置为定期轮询Gerrit的存储库以获取所需的钩子(很可能是'commit')。

http://bjmiller.me/post/72937258798/continuous-integration-with-xcode-5-xctest-os-x是设置Xcode机器人的一个很好的分步指南,但请记住,您使用Gerrit作为git存储库。

创建Xcode bot后,您还可以创建一个Gerrit钩子,以与Xcode git存储库相同的方式触发构建:Custom Trigger Scripts for Bot (Xcode 5 CI)

答案 1 :(得分:0)

整件事情很复杂但是......

设置由Gerrit触发的Jenkins作业(我的目标是让iOS工具与Android平价)

当该作业运行时,它会执行以下shell脚本。这可以通过首先轮询服务器并解析出BOT_HASH来改进,但我只是手工完成。机器人设置为手动集成。

curl -kg -X POST "https://[XCODE_SERVER]:20343/api/bots/[BOT_HASH]/integrations/"

机器人将以下脚本作为预集成步骤

cd [PROJECT]
ssh -p 29418 xcode@[GERRIT_SERVER] 'gerrit query label:Verified=0 project:[PROJECT]  status: open limit:1 --current-patch-set' >/tmp/junk.txt
export commit=`grep revision: /tmp/junk.txt | grep -oE '[^ ]+$'`
export ref=`grep ref: /tmp/junk.txt | grep -oE '[^ ]+$'`
git fetch "http://[GERRIT_SERVER]:8081/[PROJECT]" $ref && git checkout FETCH_HEAD
git checkout -b $commit
ssh -p 29418 xcode@[GERRIT_SERVER] 'gerrit review -p [PROJECT] -m "Starting Test" '$commit

这将检查gerrit服务器以查找尚未验证的项目的最新更新。它可能没有得到正确的,但最终它们都将被检查。然后它更新git存储库,不再指向头部的提交,而是指向我们要检查的提交。最后,它会为用户发布评论,以便他们知道正在查看。

这依赖于gerrit repo上存在的用户Xcode和正确的身份验证。您可以内联用户名和密码,也可以从_xcsbuildd设置ssh密钥。

成功脚本看起来像

export commit=`grep revision: /tmp/junk.txt | grep -oE '[^ ]+$'`
ssh -p 29418 xcode@[GERRIT_SERVER] 'gerrit review -p [PROJECT] -m "Test from the script  xcbot://[XCODE_SERVER]/botID/'$XCS_BOT_ID'/integrationID/'$XCS_INTEGRATION_TINY_ID'" --verified +1 '$commit

这标志着它已经过验证并发布了直接导致整合的链接。该链接可在电子邮件中点击,但不能在网页上点击。

失败看起来像这样

export commit=`grep revision: /tmp/junk.txt | grep -oE '[^ ]+$'`
ssh -p 29418 xcode@[GERRIT_SERVER] 'gerrit review -p [PROJECT] -m "Test from the script  xcbot://[XCODE_SERVER]/botID/'$XCS_BOT_ID'/integrationID/'$XCS_INTEGRATION_TINY_ID'" --verified -1 '$commit

由您认为成功或失败取决于您。目前,我在警告和成功方面取得了成功,并且在构建错误和测试失败方面失败了。

要让它重新检查,请删除投票并手动触发机器人。

相关问题