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 相关文章推荐
教您去掉ie网页加载进度条的方法
Dec 09 Javascript
Javascript面向对象之四 继承
Feb 08 Javascript
Extjs Gird 支持中文拼音排序实现代码
Apr 15 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
jquery制作select列表双向选择示例代码
Sep 02 Javascript
JavaScript实现LI列表数据绑定的方法
Aug 04 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
Nov 16 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
May 10 Javascript
BootStrap3学习笔记(一)之网格系统
May 20 Javascript
Bootstrap CSS布局之代码
Dec 17 Javascript
js判断手机系统是android还是ios
Mar 07 Javascript
vue实现Excel文件的上传与下载功能的两种方式
Jun 28 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中抽象类和接口的概念以及区别
2013/06/27 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
DEFER怎么用?
2006/07/01 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
node.js基础知识汇总
2020/08/25 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
初步理解Python进程的信号通讯
2015/04/09 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
python flask中动态URL规则详解
2019/11/22 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
tensorflow常用函数API介绍
2020/04/19 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
python asyncio 协程库的使用
2021/01/21 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
安全月宣传标语
2014/10/07 职场文书
2015年质检工作总结
2015/05/04 职场文书
农村婚庆主持词
2015/06/29 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书