【发布时间】:2014-12-08 04:47:04
【问题描述】:
如果我只能找到正确的手册,我的 Google-fu 会让我失望。
我有一个由我们的托管服务提供商安装的 Gitlab 服务器 Gitlab 服务器有很多项目。 对于其中一些项目,我希望 Gitlab 每次从本地客户端推送到 Gitlab 时自动推送到远程存储库(在本例中为 Github)。 像这样:客户端 --> gitlab --> github 任何标签和分支也应该被推送。
AFAICT 我有 3 个选项:
- 为本地客户端配置两个遥控器,同时推送到 Gitlab 和 Github。我想避免这种情况,因为开发人员。
- 在 Gitlab 服务器上的存储库中添加一个 git post-receive 挂钩。这将是最灵活的(我有足够的 Linux 经验将 shell 脚本编写为 git 挂钩),并且我找到了有关如何执行此操作的文档,但我也想避免这种情况,因为这样托管服务提供商将需要给我 shell 访问权限。
- 我在 Gitlab 中使用 webhook。我不熟悉 webhook 的基础知识,也找不到可理解的文档,甚至找不到简单的分步示例。这是我从 Gitlab 中找到但我不明白的文档:http://demo.gitlab.com/help/web_hooks/web_hooks
我会很感激好的指点,当我找到它时,我会总结并记录一个解决方案。
编辑
我正在将此 Ruby 代码用于网络挂钩:
class PewPewPew < Sinatra::Base
post '/pew' do
push = JSON.parse(request.body.read)
puts "I got some JSON: #{push.inspect}"
end
end
下一步:了解如何告诉 gitlab 服务器它必须推送一个存储库。我要回到 GitLab API。
编辑
我想我有个主意。在我运行 webhook 的服务器上,我从 GitLab 拉取数据,然后推送到 Github。在我推送到 GitHub 之前,我什至可以做一些“魔术”(运行测试、构建 jar、部署到 Artifactory,...)。事实上,如果 Jenkins 能够在成功构建后推送到远程存储库,那就太好了,那么我就不需要编写自己的 webhook,因为我很确定 Jenkins 已经为 Gitlab 提供了一个 webhook,无论是原生的还是通过插件。但我不知道。然而。
编辑
我在 Jenkins 中解决了这个问题。 您可以在 Jenkins 作业中设置多个 git 远程。我将 Git Publisher 用作构建后操作,它就像一个魅力,正是我想要的。
【问题讨论】:
标签: ruby git github gitlab webhooks