在我們本地開發(fā)好一個 NodeJS 項目,如果想要給別人看的話一般來說都是需要部署到服務器上面的部默。如果你使用 github 或者 coding 這里代碼托管的服務,只需要在服務器安裝好環(huán)境且安裝好 git 之后松捉,把項目 clone 下來然后使用 pm2 來啟動自己的 NodeJS 項目就行了啸箫。
但是,如果我更新了代碼到了遠程倉庫去了堂鲜,而服務器還是以前的老代碼,你還是需要登錄到服務器上面并且用 git 命令把最新的代碼拉下來护奈,在重啟一次項目缔莲。久而久之,如果更改代碼頻繁的話霉旗,每次都是需要自己登錄到服務器上手動部署也不是一個好辦法痴奏。
如上圖,博主要做兩個入口
1.一個自動化部署最新的代碼
2.一個客戶端專門手動部署歷史提交的代碼
博主1.0的初步想法是當我把編譯后的項目(記住是1.0做的是編譯后的處理)丟到coding中時,那么coding就有一條最新提交的記錄和代碼厌秒,這個時候webhook就會發(fā)出請求读拆,發(fā)送到當前test/pro/dev分支上,然后自動部署到環(huán)境中鸵闪。
本地服務(鉤子函數(shù))
當我把git庫建在本地的時候檐晕,我可以在git中寫一個鉤子函數(shù),創(chuàng)建post-receive ,或者任意action中定義操作辟灰。我們在post-receive中添加任意shell命令个榕,當我提交代碼的時候,git就會緊接著執(zhí)行post-receive中的命令芥喇。
#!/bin/sh
unset GIT_DIR
MYDIR=ipaiban-admin
cd mnt/work/$MYDIR
git pull
git checkout dev
...任意shell
本地服務缺點:
1.需要時間西采。不知道怎么搭建的同學,成本太高了
2.傳輸速度肯定不如coding继控,穩(wěn)定性也不如coding(如果說技術實力比coding好械馆,那就只能說好吧,博主只是個低級程序員武通,好想看看外面的世界O(∩_∩)O哈哈~)
3.沒有倉庫霹崎,提交歷史...現(xiàn)成的api
說到這里,大哥厅须,你就別造輪子了仿畸。
因為博主不打算用在本地服務上,所以就不多講解了朗和!
coding
coding就不多說了错沽,內(nèi)地版的github,有很多方便的功能眶拉,還有就是服務幾乎免費千埃。只是只能兩個項目私有!且有 WebHook 這種好東西忆植,怎么不拿來用一用呢放可。
WebHook
webhook,可以說類似于鉤子函數(shù)朝刊。只不過需要我們專門寫一個服務接受webhook的請求耀里!
這里會用到,代碼貼出來
const http = require('http')
var child_process = require('child_process');
const createHandler = require('coding-webhook-handler')
const handler = createHandler({
path: '/',
token: 'lucifer' // 在 coding 上面可以填寫一個 token
})
const rumCommand = (cmd, args, callback) => {
const child = child_process.spawn(cmd, args)
let response = ''
child.stdout.on('data', buffer => response += buffer.toString())
child.stdout.on('end', () => callback(response))
}
http.createServer((req, res) => {
handler(req, res, function(err) {
res.statusCode = 404
res.end('no such location')
})
}).listen(7777)
handler.on('error', err => {
console.error('Error:', err.message)
})
handler.on('*', event => {
rumCommand('sh', ['./test.sh'], txt => {
console.log("okokoko")
})
})
在這個文件下有一個test.sh文件,就是專門執(zhí)行代碼拉取的
#/bin/sh
cd ../../troublemaker/
rm -rf web-pc-pro
git clone https://git.coding.net/troubleMakerTeam/web-pc-pro.git;
cd web-pc-pro;
cnpm install;
pm2 start test-web-pc-pro.js;