Node 自动化部署的方法


Posted in Javascript onOctober 17, 2017

当我们在更新迭代 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;
}

这样一来,Nginx 就配置完毕了,接下来就是代码仓库的 Webhooks 配置

Webhooks 配置

首先,我们进入你想实现自动化部署的仓库,点击 settings -> Webhooks 来配置

Node 自动化部署的方法

在右侧,就是配置你的接口地址以及 Secret,对应之前的 js 文件里面的 Secret,选择 Content type 为 application/json

初始化项目

第一次部署项目,还是需要我们自己手动操作的。

首先提交代码至代码仓库(这里是Github),然后进入服务器执行 git pull

这样,我们就成功部署了我们 Node 实现自动部署的代码了

让我们修改代码来试试效果怎么样

git push 之后转到服务器内一看,完美,成功运行

Node 自动化部署的方法

再看看 Github

Node 自动化部署的方法

已经自动触发了接口,Node 自动化部署成功

最后

此技术不仅仅局限于 Node

局限性也是有的,只能单项目自动化部署,且必须依赖代码仓库

本项目的源码地址:https://github.com/HuangXiZhou/auto-build

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
Feb 19 Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 Javascript
jquery插件jSignature实现手动签名
May 04 Javascript
JavaScript中各种引用类型的常用操作方法小结
May 05 Javascript
Vue.js每天必学之过渡与动画
Sep 06 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
Feb 02 Javascript
工作中常用js功能汇总
Nov 07 Javascript
token 机制和实现方式
Dec 15 Javascript
利用JS实现scroll自定义滚动效果详解
Oct 17 #Javascript
jquery实现图片跟随鼠标的实例
Oct 17 #jQuery
vue获取input输入值的问题解决办法
Oct 17 #Javascript
node.js 用socket实现聊天的示例代码
Oct 17 #Javascript
Bootstrap图片轮播效果详解
Oct 17 #Javascript
vue组件之Alert的实现代码
Oct 17 #Javascript
JS实现按钮添加背景音乐示例代码
Oct 17 #Javascript
You might like
我的论坛源代码(三)
2006/10/09 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
jquery 图片轮换效果
2010/07/29 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
layui导航栏实现代码
2017/05/19 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python多线程和队列操作实例
2015/06/21 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
python操作oracle的完整教程分享
2018/01/30 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
职专应届生求职信
2013/11/16 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
公司领导班子对照材料
2014/08/18 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
欢迎词范文
2015/01/27 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
学术会议领导致辞
2015/07/29 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书