使用Github的webhooks进行网站自动化部署

相信很多码农都玩过了Git
,如果对Git
只是一知半解,可以移步LV
写的 GIT常用操作总结,下面介绍到的一些关于 Git
的概念就不再赘述。
为啥想写这篇文章?主要是因为部门服务器因为安全性原因不允许SCP
上传文件进行应用部署,然后有一些应用是放在Github上的,然后部署应用的步骤就变成:
1.git clone github项目 本地目录
2.配置一下应用的pm2.json并reload
3.Nginx配置一下反向代理并restart
当然如果只是一次性部署上去就不再修改的话并没啥问题,但是要是项目持续性修改迭代的话,就比较麻烦了,我们就在不断的重复着上面的步骤。作为一个码农,怎么允许不断的重复同样的工作,于是Github webhooks
闪亮登场。
关于Github webhooks
让我们看看 官方 关于Github webhooks的解释:
Webhooks allow you to build or set up integrations which subscribe to certain events on GitHub.com.
提炼出来几个点:
- 必须是Github上面的项目
- 订阅了确定的事件(包括push/pull等命令)
- 自动触发
刚好符合了这几个条件,那接下来就看看如何进行网站自动化部署
,主要会从下面几点来讲解:
1.自动化shell
脚本
2.服务端实现
3.配置github webhooks
自动化脚本
我之前翻译过一篇文章 使用Node.JS创建命令行脚本工具,但是我们现在的自动化脚本直接用 shell
来实现,假设名称为auto_build.sh
:
|
|
Note: 在执行上面shell
脚本之前我们必须第一次手动git clone
项目进去,例如:
|
|
shell脚本其实就跟直接在终端运行命令一样,类似于windows下面的BAT批处理命令,更多详细可以查阅资料。
服务端实现
Github webhooks
需要跟我们的服务器进行通信,确保是可以推送到我们的服务器,所以会发送一个带有X-Hub-Signature
的POST
请求,为了方便我们直接用第三方的库github-webhook-handler来接收参数并且做监听事件的处理等工作。
现在我们可以在shell
脚本的同级目录下面执行下面命令初始化一个package.json
:
|
|
然后执行下面命令安装上面提到的第三方库:
|
|
接下来创建我们的服务主入口文件index.js
:
|
|
紧接着参考github-webhook-handler
的demo
编辑我们的index.js
:
|
|
然后利用node管理工具跑起来服务,这里使用了pm2
:
|
|
到这一步服务已经跑起来了,但是对外网并不能直接访问到,所以还需要配置一下Nginx
做一下反向代理:
|
|
OK,到这里整个服务已经搭建完成,下一步就只需要配置Github webhooks
。
配置github webhooks
我们可以在我们的Github
上面最右边有一个Settings
的Tab,找到Webhooks & services
,如下图:
然后点击新建,输入Payload URL
跟Secret
,确定即可。
验证
绑定成功之后,我们可以试试提交一下代码,然后来到Github
看看是否自动触发了接口,如下图:
然后随便选择一个点击一下,可以看到200
的响应:
小结
上面就是利用Github webhooks
进行网站自动化部署的全部内容了,不难发现其实这项技术还是有局限性的,那就是依赖于github
,一般我们选择的都是免费github账号,所有项目都对外,一些敏感项目是不适合放置上去的。
这个时候就考虑这个组里同事推荐的 backup,自己还没试用,有兴趣可以了解了解。