[英]How to push from Gitlab to Github with webhooks
如果我只能找到合适的手册,我的Google-fu会让我失望。
我有一个由我们的托管服务提供商安装的Gitlab服务器Gitlab服务器有很多项目。 对于其中一些项目,我希望Gitlab每次从本地客户端推送到Gitlab时自动推送到远程存储库(在本例中为Github)。 像这样:client - > gitlab - > github也应该推送任何标签和分支。
AFAICT我有3个选择:
我会很感激好指点,当我找到它时,我会总结并记录一个解决方案。
编辑
我正在使用这个Ruby代码进行Web挂钩:
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作业中设置多个git远程。 我使用Git Publisher作为后构建动作,它就像一个魅力,正是我想要的。
当然会工作的。
可能但很危险,因为GitLab shell会自动将符号链接挂钩到存储库中,这些是权限检查所必需的: https : //github.com/gitlabhq/gitlab-shell/tree/823aba63e444afa2f45477819770fec3cb5f0159/hooks所以我宁愿远离它。
Web挂钩不适合直接使用:它们在某些事件上以固定格式发出HTTP请求,在您的情况下是推送,而不是Git协议请求。
当然,您可以编写一个消耗钩子,克隆和推送的服务器,但是服务(单推和无部署)或GitLab CI(已实现挂钩管理)将是更好的解决方案。
如果有人实现它, 服务是最好的选择:在源代码树中生存,只需一次推送,并且不需要额外的部署开销。
GitLab CI或其他像Jenkins这样的CI是目前可用的最佳选择。 它们基本上已经为webhooks实现了服务器,它会自动为你克隆:你所要做的就是从它们中推送。
您想要Google的关键字是“gitlab mirror github”。 这导致我:例如Gitlab存储库镜像 。 今天似乎没有完美,简单的解决方案。
这也已经在功能请求论坛上提出: http : //feedback.gitlab.com/forums/176466-general/suggestions/4614663-automatic-push-to-remote-mirror-repo-after-push-to总是检查那里;)去和upvote请求。
现在的关键难点是如何存储推送凭证。
我在詹金斯解决了这个问题。 您可以在Jenkins作业中设置多个git远程。 我使用Git Publisher作为后构建动作,它就像一个魅力,正是我想要的。
我添加了在成功构建“”之后运行的“-publisher”作业。 我本可以在一份工作中完成它,但我决定把它分开。 构建作业由GitLab中的Web钩子触发; 发布者作业正在使用BuildResultTrigger插件中的@daily计划。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.