Node 自動化部署

當咱們在更新迭代 Node 項目的時候,咱們須要作如下幾步:javascript

  1. git push 將代碼提交至代碼倉庫html

  2. 在服務器中執行 git pull 拉取最新代碼前端

  3. pm2 start 運行你的代碼java

這樣作當然沒錯,可是一旦項目更新迭代過快,就須要不斷的重複着上面的步驟,在各類 bash 面板中來回切換,非常麻煩。git

這時候,Webhooks 閃亮登場!github

對於 Webhooks, Github 給出的解釋是:npm

Webhooks allow you to build or set up integrations which subscribe to certain events on GitHub.com.json

簡單來講,利用 Webhooks,咱們就能夠實現網站的自動部署,如今就來看看具體該怎麼作bash

配置腳本

這段腳本內容是咱們須要服務器自動執行的服務器

# 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 來配置

Webhooks

在右側,就是配置你的接口地址以及 Secret,對應以前的 js 文件裏面的 Secret,選擇 Content type 爲 application/json

初始化項目

第一次部署項目,仍是須要咱們本身手動操做的。 首先提交代碼至代碼倉庫(這裏是Github),而後進入服務器執行 git pull

這樣,咱們就成功部署了咱們 Node 實現自動部署的代碼了

讓咱們修改代碼來試試效果怎麼樣 git push 以後轉到服務器內一看,完美,成功運行

再看看 Github

已經自動觸發了接口,Node 自動化部署成功

最後

此技術不單單侷限於 Node

侷限性也是有的,只能單項目自動化部署,且必須依賴代碼倉庫

最後的最後... 各位大佬有要2019年畢業的前端開發實習生的嘛,個人簡歷請大佬收下 T T

本項目的源碼地址:github.com/HuangXiZhou…

感謝閱讀 ; )

相關文章
相關標籤/搜索