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 测试及效验工具
Apr 18 Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
js查错流程归纳
May 04 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
原生js简单实现放大镜特效
May 16 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
jQuery使用each遍历循环的方法
Sep 19 jQuery
Vue全局loading及错误提示的思路与实现
Aug 09 Javascript
NUXT SSR初级入门笔记(小结)
Dec 16 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
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python中logging模块的用法实例
2014/09/29 Python
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python实现的计数排序算法示例
2017/11/29 Python
python查看列的唯一值方法
2018/07/17 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
python中bytes和str类型的区别
2019/10/21 Python
安装PyInstaller失败问题解决
2019/12/14 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
css3实现动画的三种方式
2020/08/24 HTML / CSS
大学生职业规划前言模板
2013/12/27 职场文书
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
大学班长的职责
2014/01/27 职场文书
医生见习报告范文
2014/11/03 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
2015年项目工作总结
2015/04/29 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
2015年推普周活动方案
2015/05/06 职场文书