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 相关文章推荐
Javascript打印网页部分内容的脚本
Nov 17 Javascript
jquery任意位置浮动固定层插件用法实例
May 29 Javascript
JS基于Ajax实现的网页Loading效果代码
Oct 27 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
Nov 27 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
Mar 08 Javascript
微信小程序实现写入读取缓存详解
Aug 30 Javascript
关于JS模块化的知识点分享
Oct 16 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 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
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php Undefined index的问题
2009/06/01 PHP
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php模板原理讲解
2013/11/13 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
Python中logging模块的用法实例
2014/09/29 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
python读取mysql数据绘制条形图
2020/03/25 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
HTML5通用接口详解
2016/06/12 HTML / CSS
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
会计顶岗实习心得
2014/01/25 职场文书
调查研究项目计划书
2014/04/29 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
2016年感恩节寄语
2015/12/07 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书