当我们在更新迭代 Node 项目的时候,我们需要做以下几步:
- git push 将代码提交至代码仓库
- 在服务器中执行 git pull 拉取最新代码
- pm2 start 运行你的代码
这样做固然没错,但是一旦项目更新迭代过快,就需要不断的重复着上面的步骤,在各种 bash 面板中来回切换,很是麻烦。
这时候,Webhooks 闪亮登场!
对于 Webhooks, Github 给出的解释是:
Webhooks allow you to build or set up integrations which subscribe to certain events on GitHub.com.
简单来说,利用 Webhooks,我们就可以实现网站的自动部署,现在就来看看具体该怎么做
配置脚本
这段脚本内容是我们需要服务器自动执行的
# autoBuild.sh #! /bin/bash git reset --hard origin/master git clean -f git pull npm start
注:这段脚本将会自动在服务器中执行
编写 js 文件执行脚本
由于我使用的是 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 链接里找到本教程的全部示例代码
Nginx 配置
由于我们的示例代码是跑在 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; }
内容版权声明:除非注明,否则皆为本站原创文章。