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 学习笔记一
Apr 07 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
Webwork 实现文件上传下载代码详解
Feb 02 Javascript
JS实现点击事件统计的简单实例
Jul 10 Javascript
Bootstrap Table使用方法详解
Aug 01 Javascript
Bootstrap select实现下拉框多选效果
Dec 23 Javascript
js实现九宫格拼图小游戏
Feb 13 Javascript
react.js使用webpack搭配环境的入门教程
Aug 14 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
Nov 13 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中str_replace函数使用小结
2008/10/11 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
全面解读Python Web开发框架Django
2014/06/30 Python
python对字典进行排序实例
2014/09/25 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
函授毕业生的自我鉴定
2013/11/26 职场文书
文化产业实施方案
2014/06/07 职场文书
经济贸易系求职信
2014/08/04 职场文书
计划生育证明格式范本
2014/09/12 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书