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 寻找错误方法整理
Jun 15 Javascript
js实现div闪烁原理及实现代码
Jun 24 Javascript
JS不能跨域借助jquery获取IP地址的方法
Aug 20 Javascript
node.js中的fs.closeSync方法使用说明
Dec 17 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
js实现Tab选项卡切换效果
Jul 17 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
May 27 Javascript
学习jQuery中的noConflict()用法
Sep 28 jQuery
微信小程序引入Vant组件库过程解析
Aug 06 Javascript
ES6函数实现排它两种写法解析
May 13 Javascript
JS实现电脑虚拟键盘的操作
Jun 24 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
全文搜索和替换
2006/10/09 PHP
对Session和Cookie的区分与解释
2007/03/16 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
php与js的区别是什么
2013/08/05 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python编程实现蚁群算法详解
2017/11/13 Python
Numpy数组的保存与读取方法
2018/04/04 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
python调用私有属性的方法总结
2020/07/24 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
介绍一下linux的文件权限
2012/02/15 面试题
大学生职业生涯规划书范文
2014/01/04 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
倡议书格式
2014/08/30 职场文书
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
mysql函数全面总结
2021/11/11 MySQL
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js