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 相关文章推荐
File文件控件,选中文件(图片,flash,视频)即立即预览显示
Apr 09 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
Aug 06 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
Sep 09 Javascript
JS 非图片动态loading效果实现代码
Apr 09 Javascript
javascript 在firebug调试时用console.log的方法
May 10 Javascript
jquery用data方法获取某个元素上的事件
Jun 23 Javascript
JQuery做的一个简单的点灯游戏分享
Jul 16 Javascript
JavaScript控制table某列不显示的方法
Mar 16 Javascript
JavaScript中window.open用法实例详解
Apr 15 Javascript
JS运动相关知识点小结(附弹性运动示例)
Jan 08 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
浅谈JS和jQuery的区别
Mar 27 jQuery
利用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
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PDO::getAttribute讲解
2019/01/28 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
js对象的复制继承实例
2015/01/10 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
vue实现信息管理系统
2020/05/30 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
卫校护理专业毕业生求职信
2013/11/26 职场文书
工厂搬迁方案
2014/05/11 职场文书
干部对照检查材料范文
2014/08/26 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
2014年财政所工作总结
2014/11/22 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
高中运动会广播稿
2015/08/19 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python