利用Github的Webhook功能和Node.js完成項目的自動部署

本文大部分內容來自https://www.lovelucy.info/auto-deploy-website-by-webhooks-of-github-and-gitlab.html

本文對任何提供Webhookgit倉庫都適用

2016-06-29_14635623250348.jpg

首先完成Node.js服務器的代碼構建,先上代碼猾担,再解釋

var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/', secret: 'root' })
// 上面的 secret 保持和 GitHub 后臺設置的一致

function run_cmd(cmd, args, callback) {
  var spawn = require('child_process').spawn;
  var child = spawn(cmd, args);
  var resp = "";

  child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
  child.stdout.on('end', function() { callback (resp) });
}

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)
})

handler.on('push', function (event) {
  console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
    run_cmd('sh', ['./deploy.sh',event.payload.repository.name], function(text){ console.log(text) });
})

上面的代碼中用到了一個github-webhook-handler的中間價袭灯,你可以用npm install -g github-webhook-handler來全局安裝

還有代碼這行:

var handler = createHandler({ path: '/', secret: 'root' }) 

其中secret后的參數(shù)是你在github的項目中添加webhook時設置的secret值,替換成自己的就行了

完成deploy.sh腳本

deploy.sh腳本負責進入項目的目錄绑嘹,然后利用git命令拉取最新的代碼稽荧,還是直接貼代碼:

 #!/bin/bash

WEB_PATH='/root/tools/'$1
WEB_USER='root'
WEB_USERGROUP='root'

echo "Start deployment"
cd $WEB_PATH
echo "pulling source code..."
git reset --hard origin/master
git clean -f
git pull
git checkout master
echo "changing permissions..."
chown -R $WEB_USER:$WEB_USERGROUP $WEB_PATH
echo "Finished."

deploy.sh 會接受第一個參數(shù)當做項目名字,然后進入這個項目的目錄執(zhí)行git操作工腋,這個參數(shù)是在deploy.js中根據(jù)hook返回的項目名字來的姨丈,代碼應該比較容易懂,都是些簡單的git命令擅腰。

如果是全新的項目蟋恬,需要在你的服務器上先clone要部署的項目
你需要根據(jù)自己的實際項目位置,修改WEB_PATH的值

后臺運行deploy.js

利用Linux提供的nohup命令趁冈,讓deploy.js運行在后臺

nohup node deploy.js > deploy.log &

去Github后臺添加webhook

進入你需要自動部署的項目的github地址歼争,進入項目的設置頁面,點擊左側的Webhooks & services

2016-06-29_14635620989191.jpg

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末渗勘,一起剝皮案震驚了整個濱河市沐绒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旺坠,老刑警劉巖乔遮,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異价淌,居然都是意外死亡申眼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門蝉衣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來括尸,“玉大人,你說我怎么就攤上這事病毡”舴” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長有送。 經(jīng)常有香客問我淌喻,道長,這世上最難降的妖魔是什么雀摘? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任裸删,我火速辦了婚禮,結果婚禮上阵赠,老公的妹妹穿的比我還像新娘涯塔。我一直安慰自己,他們只是感情好清蚀,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布匕荸。 她就那樣靜靜地躺著,像睡著了一般枷邪。 火紅的嫁衣襯著肌膚如雪榛搔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天东揣,我揣著相機與錄音践惑,去河邊找鬼。 笑死救斑,一個胖子當著我的面吹牛童本,可吹牛的內容都是我干的。 我是一名探鬼主播脸候,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绑蔫!你這毒婦竟也來了运沦?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤配深,失蹤者是張志新(化名)和其女友劉穎携添,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篓叶,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡烈掠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缸托。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片左敌。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俐镐,靈堂內的尸體忽然破棺而出矫限,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布叼风,位于F島的核電站取董,受9級特大地震影響,放射性物質發(fā)生泄漏无宿。R本人自食惡果不足惜茵汰,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孽鸡。 院中可真熱鬧经窖,春花似錦、人聲如沸梭灿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堡妒。三九已至配乱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皮迟,已是汗流浹背搬泥。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伏尼,地道東北人忿檩。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像爆阶,于是被迫代替她去往敵國和親燥透。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理辨图,服務發(fā)現(xiàn)班套,斷路器,智...
    卡卡羅2017閱讀 134,699評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評論 25 707
  • 人靜時故河,躺下來仔細想想吱韭,人活著真不容易,明知以后會死鱼的,還要努力的活著理盆,人活一輩子到底是為什么?復雜的社會凑阶,...
    _璋閱讀 134評論 0 0
  • 今天愚人節(jié)晌砾,是一個考驗智商的日子坎拐;是一個開玩笑的日子;是一個歡樂的日子,今天這個日子哼勇,怎么樣也不該和“愛情”沾邊都伪,...
    六玄月閱讀 688評論 0 1
  • 毒膽:7 三膽:247 復式: 24578 024578 0124578 精選:742..782..785..70...
    福中仙閱讀 181評論 0 2