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判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
jquery struts 验证唯一标识(公用方法)
Mar 27 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
JavaScript中的连字符详解
Nov 28 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
第二章之Bootstrap 页面排版样式
Apr 25 Javascript
laydate日历控件使用方法详解
Nov 20 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
JavaScript展开操作符(Spread operator)详解
Jul 20 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
利用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
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
深入探讨前端框架react
2015/12/09 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
Python中的引用和拷贝浅析
2014/11/22 Python
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
python实现微信远程控制电脑
2018/02/22 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python连接mongodb密码认证实例
2018/10/16 Python
numpy.where() 用法详解
2019/05/27 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
python TCP包注入方式
2020/05/05 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
购房委托书范本
2014/09/18 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
毕业实习单位意见
2015/06/04 职场文书
篮球拉拉队口号
2015/12/25 职场文书
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技