当咱们在更新迭代 Node 项目的时候,咱们须要作如下几步:javascript
git push
将代码提交至代码仓库html
在服务器中执行 git pull
拉取最新代码前端
pm2 start
运行你的代码java
这样作当然没错,可是一旦项目更新迭代过快,就须要不断的重复着上面的步骤,在各类 bash 面板中来回切换,非常麻烦。git
这时候,Webhooks 闪亮登场!github
对于 Webhooks, Github 给出的解释是:npm
Webhooks allow you to build or set up integrations which subscribe to certain events on GitHub.com.json
简单来讲,利用 Webhooks,咱们就能够实现网站的自动部署,如今就来看看具体该怎么作bash
这段脚本内容是咱们须要服务器自动执行的服务器
# autoBuild.sh
#! /bin/bash
git reset --hard origin/master
git clean -f
git pull
npm start
复制代码
注:这段脚本将会自动在服务器中执行
因为我使用的是 Github 做为代码仓库,因此在这里,咱们使用 github-Webhooks-handler 这个库来实现咱们的脚本自动执行工做
按照文档,咱们按照如下方式来编写 js 文件:
// autoBuild.js
var http = require('http')
var spawn = require('child_process').spawn
var createHandler = require('github-Webhooks-handler')
var handler = createHandler({ path: '/pushCode', secret: '' }) // 在代码仓库的 Webhooks 选项处配置
http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404;
res.end('no such location')
})
}).listen(7777)
handler.on('error', function (err) {
console.error('Error:', err.message)
})
// 监听 push 事件
handler.on('push', function (event) {
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref)
rumCommand('sh', ['./autoBuild.sh'], function( txt ) { // 执行 autoBuild.sh 脚本文件
console.log(txt)
})
})
function rumCommand( cmd, args, callback ) {
var child = spawn( cmd, args )
var response = ''
child.stdout.on('data', function( buffer ){ response += buffer.toString(); })
child.stdout.on('end', function(){ callback( response ) })
}
复制代码
在 app.js 中,咱们将端口设置为 3001,在这里代码就不放出来了,能够在文末的 Github 连接里找到本教程的所有示例代码
因为咱们的示例代码是跑在 3001 端口的,执行自动化部署的 js 文件则跑在 7777 端口,因此咱们须要配置一下 Nginx 来启用这两个端口:
# 启用 7777 端口
server {
listen 7777;
listen [::]:7777
server_name huangxizhou.com; #在这里填上你本身的服务器 ip 地址或者域名
root /var/www/html/auto-build;
}
# 启用 3001 端口
server {
listen 3001;
listen [::]:3001
server_name huangxizhou.com; #在这里填上你本身的服务器 ip 地址或者域名
root /var/www/html/auto-build;
}
复制代码
这样一来,Nginx 就配置完毕了,接下来就是代码仓库的 Webhooks 配置
首先,咱们进入你想实现自动化部署的仓库,点击 settings -> Webhooks 来配置
在右侧,就是配置你的接口地址以及 Secret,对应以前的 js 文件里面的 Secret,选择 Content type 为 application/json
第一次部署项目,仍是须要咱们本身手动操做的。 首先提交代码至代码仓库(这里是Github),而后进入服务器执行 git pull
这样,咱们就成功部署了咱们 Node 实现自动部署的代码了
让咱们修改代码来试试效果怎么样 git push
以后转到服务器内一看,完美,成功运行
再看看 Github
已经自动触发了接口,Node 自动化部署成功
此技术不单单局限于 Node
局限性也是有的,只能单项目自动化部署,且必须依赖代码仓库
最后的最后... 各位大佬有要2019年毕业的前端开发实习生的嘛,个人简历请大佬收下 T T
本项目的源码地址:github.com/HuangXiZhou…
感谢阅读 ; )