如何使用webhooks从Gitlab推送到Github

Ame*_*sse 6 ruby git github webhooks gitlab

如果我只能找到合适的手册,我的Google-fu会让我失望.

我有一个由我们的托管服务提供商安装的Gitlab服务器Gitlab服务器有很多项目.对于其中一些项目,我希望Gitlab每次从本地客户端推送到Gitlab时自动推送到远程存储库(在本例中为Github).像这样:client - > gitlab - > github也应该推送任何标签和分支.

AFAICT我有3个选择:

  1. 使用两个遥控器配置本地客户端,并同时推送到Gitlab和Github.我想避免这种情况,因为开发人员.
  2. 在Gitlab服务器的存储库中添加一个git post-receive钩子.这将是最灵活的(我有足够的Linux经验将shell脚本编写为git hooks)并且我已经找到了关于如何执行此操作的文档,但我也想避免这种情况,因为托管服务提供商需要给我shell访问权限.
  3. 我在Gitlab中使用webhooks.我不熟悉webhooks的基础知识,我无法找到可理解的文档,甚至是一个简单的分步示例.这是我发现的Gitlab文档,我不明白它:http://demo.gitlab.com/help/web_hooks/web_hooks

我会很感激好指点,当我找到它时,我会总结并记录一个解决方案.

编辑

我正在使用这个Ruby代码进行Web挂钩:

class PewPewPew < Sinatra::Base
  post '/pew' do
    push = JSON.parse(request.body.read)
    puts "I got some JSON: #{push.inspect}"
  end
end
Run Code Online (Sandbox Code Playgroud)

下一步:了解如何告诉gitlab服务器必须推送存储库.我将回到GitLab API.

编辑

我想我有个主意.在我运行webhook的服务器上,我从GitLab拉出然后我推送到Github.在推送到GitHub之前,我甚至可以做一些"魔术"(运行测试,构建jar,部署到Artifactory,......).事实上,如果Jenkins能够在成功构建之后能够推送到远程存储库,那将是很棒的,然后我不需要编写自己的webhook,因为我非常确定Jenkins已经为Gitlab提供了一个webhook,无论是本机还是通过插件.但我不知道.然而.

编辑

我在詹金斯解决了这个问题.您可以在Jenkins作业中设置多个git远程.我使用Git Publisher作为后构建动作,它就像一个魅力,正是我想要的.

Ame*_*sse 2

我在詹金斯中解决了这个问题。您可以在一项 Jenkins 作业中设置多个 git Remote。我使用 Git Publisher 作为构建后操作,它就像一个魅力,正是我想要的。

我添加了在“”成功构建后运行的“-publisher”作业。我本来可以用一份工作来完成它,但我决定把它分开。构建作业由 GitLab 中的 Web 挂钩触发;发布者作业正在使用 BuildResultTrigger 插件中的 @daily 计划。