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的兼容各种浏览器的iframe自适应高度的脚本
Aug 13 Javascript
用Javascript来生成ftp脚本的小例子
Jul 03 Javascript
JS继承用法实例分析
Feb 05 Javascript
Jquery使用val方法读写value值
May 18 Javascript
AngularJS中实现动画效果的方法
Jul 28 Javascript
AngularJS控制器详解及示例代码
Aug 16 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
vue之nextTick全面解析
May 17 Javascript
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 27 Javascript
Vue监视数据的原理详解
Feb 24 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
JS高级运动实例分析
2016/12/20 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
关于vue面试题汇总
2018/03/20 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
用python做游戏的细节详解
2019/06/25 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
玩具公司的创业计划书
2013/12/31 职场文书
2014年保育员工作总结
2014/12/02 职场文书
k-means & DBSCAN 总结
2021/04/27 Python