与 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 的持续集成的主要内容,如果未能解决你的问题,请参考以下文章

centos nginx gerrit

gerrit + LDAP搭建

无法克隆 Gerrit 存储库

Gitlab+Gerrit+Ldap+nginx+mysql 之Gerrit搭建与配置

如何搭建基于ldap和mysql的gerrit服务

gerrit下设置git的http密码