如何创建Gitlab webhook来更新Github上的镜像仓库?

时间:2014-02-23 01:11:52

标签: github gitlab webhooks

我想在Gitlab中创建一个webhook,以便在发生push事件时自动更新Github上的镜像存储库。我已经检查了这个page,但我不明白它是如何完成的。

我的Gitlab版本是6.5。这是配置页面:

inserir a descrição da imagem aqui

我应该在网址中添加什么内容?我需要在哪里放置脚本来更新存储库?

3 个答案:

答案 0 :(得分:40)

你不需要webhook。常规的接收后钩子可以很好地工作。

要创建和使用这样的钩子,您只需登录安装了gitlab的服务器,并为git用户创建一个ssh密钥。

sudo -u git ssh-keygen -f /home/git/.ssh/reponame_key

(请勿在提示时输入任何密码短语)

转到您的github帐户,并将公钥(它已创建为/home/git/ssh/reponame_key.pub)作为部署密钥添加到您的项目中。 如果您需要帮助,请查看https://help.github.com/articles/managing-deploy-keys

完成后,您只需配置git服务器和github之间的连接: 为git user的ssh配置添加一个别名(将以下行添加到/home/git/.ssh/config - 如果它不存在则创建它)

Host reponame  
IdentityFile /home/git/.ssh/reponame_key  
HostName github.com  
User git 

现在将新的远程(使用您刚刚创建的别名)添加到您的存储库:

cd /home/git/repositories/namespace/reponame.git

git remote add --mirror github reponame:youruser/reponame.git

现在一切都已到位,你必须创建实际的钩子:

cd /home/git/repositories/namespace/reponame.git/hooks

echo "exec git push --quiet github &" >> post-receive

chmod 755 post-receive

last命令非常重要,因为git会在运行之前检查钩子是否可执行。

就是这样!

(根据您的真实账户替换reponame,名称空间和您的用户并享受)。

最后注意:如果你想在github上提交你的名字andavatar,请确保你在gitlab上使用的电子邮件地址也是你的github帐户的地址之一。否则你会看到你的gitlab用户名。

答案 1 :(得分:29)

如果您没有托管自己的GitLab,GitLab.com已直接引入此功能,无需任何解决方法。

  1. 在项目中使用齿轮图标选择镜像存储库
  2. 向下滚动到推送到远程存储库
  3. 选中标记远程镜像存储库:每小时自动更新远程镜像的分支,标记和提交。
  4. 输入要更新的存储库;对于GitHub,您可以在URL中包含您的用户名和密码,如下所示:https://yourgithubusername:yourgithubpassword@github.com/agaric/guts_discuss_resource.git - 如注释中所述, 更好的安全性在此处使用您的GitHub访问令牌而非登录证书;我会在测试时更新答案。

答案 2 :(得分:1)

对于WebHooks处理,我使用的是sinatra Web服务器。

require 'sinatra'
post '/pew' do
  puts JSON.parse request.body.read
  # here can be placed signal code to run commit processing script
end

在GitLab中将推送事件(或其他)的webhook注册到http://localhost:4567/pew 并且从每次提交的这一刻起,gitlab将向url发送提交信息。