自动化程序部署方案

自动化程序部署方案

原理:当我们在github开启Webhooks服务后,每次我们触发动作后,github就会向我们指定的服务器发送POST请求,然后我们的接收webhook请求的服务器就执行我们定义的shell程序,更新我们的APP。下面是具体的步骤。

安装 nginx

sudo apt-get install nginx

nginx是我们转发请求的代理服务器,我们接收webhook的服务器监听的一般不是80端口,但是绑定域名的A记录是不可以指定端口的。

所以,这里使用nginx其实是把某个域名发过来的请求,转发到我们指定的端口。

配置 nginx 转发规则

首先,找到nginx的配置文件位置

1
2
3
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

执行上面的命令就可以看到我的配置文件是位于/etc/nginx/nginx.conf

打开配置文件,我们可以看到有一句话是说引入/etc/nginx/conf.d/这个文件夹下所有的.conf文件

1
include /etc/nginx/conf.d/*.conf;

所以,我们可以在这个文件夹下新建一个配置文件,比如叫做webhook.conf

接下来需要在配置文件中添加我们接收webhook请求的转发规则,填入一下内容:

1
2
3
4
5
6
7
8
9
10
server {
listen 80; # 监听80端口
server_name webhook.application.com; # 转发这个域名的请求
location / {
proxy_pass http://127.0.0.1:5000; # 转发到这个端口
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

启动 nginx 相关命令

1
2
3
/etc/init.d/nginx start # 开启服务
/etc/init.d/nginx restart # 重启服务
/etc/init.d/nginx stop # 停止服务

启动一个接收webhook的服务

  1. 在任意位置新建app.py文件,输入一下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
# encoding: utf-8
from flask import Flask, request
import sh
app = Flask(__name__)
@app.route('/webhook/git_hook', methods=['POST']) # 注册路由
def git_hook():
if request.method == 'POST': # 如果是POST请求,这重新部署程序
sh.cd('/root/Code/Python/Lx.Website.API/') # 进入程序目录
sh.git.pull(['origin', 'master']) # 拉取master分支
return '<pre>pull</pre>'
else:
return r'<pre>Wrong method:' + request.method + ' </pre>'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

这里需要注意的是,最后一行的端口号必须是nginx配置的那个端口号,这里只是最简单程序

  1. 然后需要安装python的三方库
1
pip install flask sh
  1. 运行app.py
1
nohup python app.py

在github开启webhooks服务

在仓库的设置里面找到webhooks,点击添加服务,然后开始配置

注意这里链接是nginx里面配置的域名,加上app.py里面注册的路由

测试

现在可以push一点改动,查看是否成功