服务器(三):利用github的webhooks实现自动部署

  实现自动部署的关键就是利用github的webhooks,我们在github建立一个项目之后,在项目主页点击Settings,看到Webhooks点击打开可以添加一个链接,这里的意思是,github可以帮你监听一些项目发生的事件,当指定事件发生时,会向你指定的链接发一个post请求,然后你就可以知道自己的哪个项目发生了什么事情,再去做一些具体的操作,那么这时就可以利用shell脚本实现项目自动pull并且重新部署,最后实现的效果就是在本地push代码,一段时间过后,效果就展示在了网站上面。

  自动部署的工具有很多,但是现在咱们不使用工具,自己造一个简单的轮子,这个轮子只实现一个webhooks接口,配合shell脚本,然后将另一个项目重新启动。

  首先是webhooks要点,使用express-generate生成一个项目结构,在里面添加一个post接口,这个接口只需要做一件事情,调用事先写好的shell脚本,shell脚本里面要做两件事情,一个是将当前正在运行的项目kill掉,然后拉新代码将项目重新启动,node执行shell命令的模块是child_process。

下面看一下shell脚本里面需要的简要几步:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh

export APP_PATH=/usr/share/nginx/test
cd $APP_PATH && git checkout master
cd $APP_PATH && git pull origin master
cd $APP_PATH && npm i

data=`ps -ef | grep "node test" | awk 'print $2}'`

for i in $data;
do
kill $i;
done

cd $APP_PATH && node test.js > log &

  首先是拉取新代码,接着是咱们需要重新部署的项目的进程号,然后kill掉,接着启动即可。

  如果项目需要在域名中被访问,那么就需要配置 nginx 代理和子域名解析。