Git用webhook实现自动更新网站

最近公司大部分项目从SVN过渡到Git。所以代码自动化部署也有了更多的想象空间。

之前使用SVN更新代码到开发环境的时候,都是用crontab定时svn update。间隔是一分钟,虽然一分钟不算长,甚至有时候等待并不需要这么久。

但是总归是无法做到及时更新。算是自动主动更新,而Git有webhook的存在,就可以做到触发式更新。

我们代码是放在 git.oschina.net 码云上。

原理

每次git提交的时候,都会触发webhook,webhook会访问我们设置的URL。

URL触发我们的更新代码。

所以,我们还需要架一个网站,提供一个webhook访问的URL,访问的时候触发代码。

实践

时间原因,轮子就不自己造了,所以,我找到一份还不错的webhook管理平台。

安装git-webhook

环境: Centos7

这里用docker部署

1
2
3
4
5
6
7
8
9
10
11
12
# 安装启动docker
# yum install docker
# systemctl restart docker
# systemctl enable docker
# 安装 Docker Compose
# yum install docker-compose
# 下载源码
# git clone https://github.com/NetEaseGame/git-webhook.git
# 修改配置
# cd git-webhook
# cp app/config_docker_example.py app/config.py
# vim app/config.py

GITHUB: GitHub 登陆配置,可以到 OAuth applications 自行申请,登陆 Callback 地址为: your_domain/github/callback.

配置好后,就可以执行

1
# docker-compose up

第一次启动的时候会docker会pull几个需要的镜像,所以时间要长点。

以后启动的话,可以用docker-compose up -d 用deamon方式启动。

Nginx配置

启动后,docker 暴露出来的端口是 18340.访问的话,就是 http://ip:18340

所以我打算给它绑定一个域名,让它访问要更方便一点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name webhook.xxx.com;

root html;
index index.html index.htm index.php;

location / {
proxy_pass http://127.0.0.1:18340/;

#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

至此git-webhook就安装好了。

用github账号登录进去,先添加服务器,再添加git仓库。得到的url填到git.oschina.net webhook那里就行了。

  • 添加好项目后,在箭头方向复制URL

复制路径

  • 登录码云,填写URL到webhook那里

填写URL

参考资料

关注公众号 尹安灿