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 相关文章推荐
Firefox 无法获取cssRules 的解决办法
Oct 11 Javascript
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
JavaScript中继承用法实例分析
May 16 Javascript
js代码验证手机号码和电话号码是否合法
Jul 30 Javascript
js图片翻书效果代码分享
Aug 20 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
Nov 19 Javascript
关于session和cookie的简单理解
Jun 08 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
Sep 09 Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
Smartour 让网页导览变得更简单(推荐)
Jul 19 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
打造计数器DIY三步曲(下)
2006/10/09 PHP
Display SQL Server Version Information
2007/06/21 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
2012/01/04 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
jquery $("#variable") 循环改变variable的值示例
2014/02/23 Javascript
js读写json文件实例代码
2014/10/21 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
jquery延迟对象解析
2016/10/26 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
python中二维阵列的变换实例
2014/10/09 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
python程序封装为win32服务的方法
2021/03/07 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
介绍一下Java中的static关键字
2012/05/12 面试题
保险专业大专生求职信
2013/10/26 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
nginx 配置指令之location使用详解
2022/05/25 Servers
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis