使用git實現程式碼自動部署

git.jpg
利用git來做版本控制和團隊協作開發是一個不錯的選擇,這裡做一下記錄。
實現原理
利用git的hook機制,當每次使用者提交了程式碼後觸發一個動作去請求我們自己的伺服器,伺服器收到通知後將程式碼重新拉取一下,實現程式碼的自動部署。
所需環境條件
- 本地安裝
git
和SourceTree
客戶端 - 服務端安裝
git
和nodejs
環境以及PM2
管理器 - 註冊碼雲賬戶
具體實現
-
在服務端建立一個站點,用來響應hook動作
在這個站點目錄下用npm
安裝koa
然後新建一個
index.js
檔案,和一個run.sh
檔案
index.js
const Koa = require('koa'); const shell = require('child_process'); const app = new Koa(); app.use(async (ctx) => { if(ctx.url === '/' && ctx.method === 'POST'){ let postData = await parsePostData(ctx); if(postData.password=='定義你的密碼'){ shell.execFile('./run.sh',function(error, stdout, stderr){ console.log('stdout: ' + stdout); console.log('error: ' + error); }); ctx.body = '執行成功'; } }else{ ctx.body = '<h1>404<h1>'; } function parsePostData() { return new Promise((resolve, reject) => { try { let postData = ''; ctx.req.addListener('data', (data) => { // 有資料傳入的時候 postData += data; }); ctx.req.on('end', () => { let parseData = JSON.parse(postData); resolve(parseData); }); } catch (e) { reject(e); } }); } }); app.listen(3000, () => { console.log('http://127.0.0.1:3000'); });
run.sh
cd /www/wwwroot/www.XXXXXXXXXXX.com git reset --hard origin/master git pull chmod -R 777 runtime
注意:目錄的許可權設定
目錄截圖

mulu.png
這些都搞定之後,就在 PM2
中把入口檔案 index.js
加進去

WX20190313-165429.png
這樣我們的響應程式就配置好了,接下來去碼雲建立一個倉庫。
-
新建倉庫,將倉庫設定為私有,並新增開發者。
WX20190313-165848.png
然後去你的伺服器上生成一個SSH公鑰,新增到這裡。
ssh-keygen -t rsa -C "郵箱地址" 三次回車後生成,然後用下面的命令檢視 cat ~/.ssh/id_rsa.pub

WX20190313-170126.png
最後配置WebHooks,填寫那個nodejs的站點地址

WX20190313-180239.png
-
再建立一個你專案的站點,在目錄中用命令把倉庫克隆下來。
注意:一定要用這個SSH的方式
WX20190313-182142.png
4.在本地用 SourceTree
拉取倉庫,修改一些檔案,【提交】--> 【推送】
再回頭去看你伺服器上的站點,檔案也跟著變動了。

WX20190313-181523.png