将 GitLab 与 TeamCity 集成
Integrating GitLab with TeamCity
从 GitLab 7.6 或之后的版本开始,有一个新选项可以直接从 GitLab 项目中使用 TeamCity。在设置中有这条消息:
The build configuration in Teamcity must use the build format number
%build.vcs.number% you will also want to configure monitoring of all
branches so merge requests build, that setting is in the vsc root
advanced settings.
我不确定这是怎么回事。假设我有一个存储库 Foo。
我已经在 TeamCity 上建立了一个构建来听 Foo 分支规范:+:refs/pull/*/merge
然后我在 gitlab 中将 Foo fork 为 FooFork,进行更改,然后请求合并 FooFork -> Foo。
但是没有发生任何事情来测试这个合并,这是我期望 GitLab 做的。如果我接受合并,构建服务器会(立即)开始运行并构建两次(master
和 /ref/master
)。
我还将构建配置设置为使用 exactly: %build.vcs.number% 作为规定的构建号,但 gitlab 似乎没有给我任何关于构建结果的信息。
所以对于这个 GitLab -> TeamCity 集成究竟应该做什么以及我是否做错了,我真的有点困惑。
我目前 运行 GitLab 7.9 和 TeamCity 8.1.4
更新:
似乎版本 8 之前不支持此用例 - https://github.com/gitlabhq/gitlabhq/issues/7240
同样的问题。可能还有另一种方式,我现在正在评估。由于没有直接从目标 MR 获取合并状态的方法,因此您必须自己构建它:
IMO 有以下待办事项
1.) 初始化一个裸仓库 $ git init
2.) 添加你的目标仓库 $ git remote add origin git@your-repo:<origin.group>/<origin.repo>.git
3.) 添加 remote/feature/to-merge 的 $ git remote add target git@your-repo:<feature.group>/<feature.repo>.git
4.) 检查你的功能分支 $ git checkout -b <feature.branch> feature/<feature.branch>
5.) 检查你原来的分支 $ git checkout -b <origin.branch> origin/<origin.branch>
6.) 将功能变基到您的原始分支 $ git rebase <feature.branch>
如此处所述[1],GitLab-CE 可以在创建合并请求时触发事件,
所以您所要做的就是构建一些可以评估 WebHook 的 meta。
[1] http://doc.gitlab.com/ce/web_hooks/web_hooks.html#merge-request-events
我 运行正在使用 GitLab 8.0.2 和 TeamCity 9.1.1,并且能够 运行 CI 在分支和合并请求上构建。
我通过设置 VCS 触发器和 branch specification +:refs/heads/(xyz*)
来触发特定分支的 CI 构建,其中 xyz 是我们票务系统前缀的字符串,因为所有活动分支都需要以我们的问题跟踪器中的条目命名。
我通过分支规范触发合并请求的构建 +:refs/(merge-requests/*)
一切都按预期工作,让我们知道所有功能/错误分支的状态并自动合并请求。
感谢 Rob 的评论链接到合并请求规范中的 GitLab 8 发行说明条目。
从 GitLab 7.6 或之后的版本开始,有一个新选项可以直接从 GitLab 项目中使用 TeamCity。在设置中有这条消息:
The build configuration in Teamcity must use the build format number %build.vcs.number% you will also want to configure monitoring of all branches so merge requests build, that setting is in the vsc root advanced settings.
我不确定这是怎么回事。假设我有一个存储库 Foo。
我已经在 TeamCity 上建立了一个构建来听 Foo 分支规范:+:refs/pull/*/merge
然后我在 gitlab 中将 Foo fork 为 FooFork,进行更改,然后请求合并 FooFork -> Foo。
但是没有发生任何事情来测试这个合并,这是我期望 GitLab 做的。如果我接受合并,构建服务器会(立即)开始运行并构建两次(master
和 /ref/master
)。
我还将构建配置设置为使用 exactly: %build.vcs.number% 作为规定的构建号,但 gitlab 似乎没有给我任何关于构建结果的信息。
所以对于这个 GitLab -> TeamCity 集成究竟应该做什么以及我是否做错了,我真的有点困惑。
我目前 运行 GitLab 7.9 和 TeamCity 8.1.4
更新:
似乎版本 8 之前不支持此用例 - https://github.com/gitlabhq/gitlabhq/issues/7240
同样的问题。可能还有另一种方式,我现在正在评估。由于没有直接从目标 MR 获取合并状态的方法,因此您必须自己构建它:
IMO 有以下待办事项
1.) 初始化一个裸仓库 $ git init
2.) 添加你的目标仓库 $ git remote add origin git@your-repo:<origin.group>/<origin.repo>.git
3.) 添加 remote/feature/to-merge 的 $ git remote add target git@your-repo:<feature.group>/<feature.repo>.git
4.) 检查你的功能分支 $ git checkout -b <feature.branch> feature/<feature.branch>
5.) 检查你原来的分支 $ git checkout -b <origin.branch> origin/<origin.branch>
6.) 将功能变基到您的原始分支 $ git rebase <feature.branch>
如此处所述[1],GitLab-CE 可以在创建合并请求时触发事件,
所以您所要做的就是构建一些可以评估 WebHook 的 meta。
[1] http://doc.gitlab.com/ce/web_hooks/web_hooks.html#merge-request-events
我 运行正在使用 GitLab 8.0.2 和 TeamCity 9.1.1,并且能够 运行 CI 在分支和合并请求上构建。
我通过设置 VCS 触发器和 branch specification +:refs/heads/(xyz*)
来触发特定分支的 CI 构建,其中 xyz 是我们票务系统前缀的字符串,因为所有活动分支都需要以我们的问题跟踪器中的条目命名。
我通过分支规范触发合并请求的构建 +:refs/(merge-requests/*)
一切都按预期工作,让我们知道所有功能/错误分支的状态并自动合并请求。
感谢 Rob 的评论链接到合并请求规范中的 GitLab 8 发行说明条目。