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代码片段收集
Jul 12 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
Feb 05 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
Nov 17 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
原生js实现拖拽功能基本思路详解
Apr 18 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
Aug 24 Javascript
layui自定义ajax左侧三级菜单
Jul 26 Javascript
小程序的上传文件接口的注意要点解析
Sep 17 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 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执行速度全攻略
2006/10/09 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
js字符串转成JSON
2013/11/07 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
浅谈js闭包理解
2019/03/28 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
自考生自我评价分享
2014/01/18 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
物控部经理职务说明书
2014/02/25 职场文书
产品设计开发计划书
2014/05/07 职场文书
党员承诺书范文
2014/05/19 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
检讨书范文2000字
2015/01/28 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
Golang入门之计时器
2022/05/04 Golang