欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Node 自动化部署的方法

程序员文章站 2022-03-21 21:52:07
当我们在更新迭代 node 项目的时候,我们需要做以下几步: git push 将代码提交至代码仓库 在服务器中执行 git pull 拉取最新代码...

当我们在更新迭代 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。