与 Gerrit 和 Xcode Server 的持续集成
Posted
技术标签:
【中文标题】与 Gerrit 和 Xcode Server 的持续集成【英文标题】:Continuous Integration With Gerrit and Xcode Server 【发布时间】:2015-04-14 23:59:40 【问题描述】:我正在尝试使用针对 Gerrit 运行验证测试的 Xcode 服务器运行 ios 的持续集成。
为了让 Xcode 从 gerrit 服务器中提取,我必须将它的 libgit2.dylib 升级到版本 0.21.5
我从https://codeload.github.com/libgit2/libgit2/zip/v0.21.5下载的
有人对如何让 gerrit 触发特定分支的 Xcode 构建有建议吗?
【问题讨论】:
【参考方案1】:一个简单的方法是创建一个Xcode bot 来执行构建。您可以将机器人设置为定期轮询 Gerrit 的存储库以获取所需的钩子(很可能是“提交”)。
http://bjmiller.me/post/72937258798/continuous-integration-with-xcode-5-xctest-os-x 是设置 Xcode 机器人的一个很好的分步指南,但请记住,您使用 Gerrit 作为 git 存储库。
创建 Xcode 机器人后,您还可以创建一个 Gerrit 挂钩,以与 Xcode git 存储库相同的方式触发构建:Custom Trigger Scripts for Bot (Xcode 5 CI)
【讨论】:
【参考方案2】:整个事情很复杂,但是......
设置一个由 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 存储库中存在的具有适当身份验证的用户 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
您认为成功或失败取决于您。目前我在警告和成功上成功,在构建错误和测试失败上失败。
要让它重新检查,请删除投票并手动触发机器人。
【讨论】:
以上是关于与 Gerrit 和 Xcode Server 的持续集成的主要内容,如果未能解决你的问题,请参考以下文章