我想在Gitlab中创建一个webhook,以便在发生push
事件时自动更新Github上的镜像存储库。我已经检查了这个page,但我不明白它是如何完成的。
我的Gitlab版本是6.5。这是配置页面:
我应该在网址中添加什么内容?我需要在哪里放置脚本来更新存储库?
答案 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已直接引入此功能,无需任何解决方法。
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发送提交信息。