与 Gerrit 和 Xcode 服务器的持续集成

Continuous Integration With Gerrit and Xcode Server

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

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

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

下载的

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

一个简单的方法是创建一个 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)

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

设置一个由 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

这会将其标记为已验证并发布直接导致集成的 link。 link 在电子邮件中可点击,但在网页上不可点击。

失败看起来像这样

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

你认为成功或失败取决于你。目前我在警告和成功方面成功,在构建错误和测试失败方面失败。

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