歡迎你來到閱讀我的文章
1. 為什麼我要弄這個?
emmmm,因為有個自己的專案每次釋出到線上,都要登入一下伺服器,然後pull一下程式碼,執行一些專案初始化的命令(諸如:git submoudle update
,php artisan cache:clear
,composer
之類)。感覺繁瑣。
如果程式碼釋出的時候,系統能把這些工作都自動搞掂就好了。所以就有了這個。
2. 環境準備
- github賬號(這裡用github做演示)
- node環境
- pm2
3. 大致流程描述
我們在 github 的專案上設定一個勾子。這個勾子有什麼用呢?作用就是在我們 push 程式碼的時候,github 會觸發這個勾子,向我們的伺服器發起一個通知。然後我們在伺服器收到這個通知,就執行我們們事先設定的命令指令碼。至於伺服器如何捕獲到這個通知呢?我們伺服器事先會開啟一個服務,假如埠是 3000 的來監聽這個通知。只要在設定勾子的時候往這個埠設定就行了。
4.搞起來
當你有了以上環境之後,就可以開搞了。
1. 新建一個專案 mkdir koa
2. 進入到該專案執行 npm install koa && npm install koa-bodyparser
3. 新建 index.js 和 run.sh 檔案 並編輯以下程式碼
index.js
const Koa = require('koa');
const shell = require('child_process');
const app = new Koa();
const bodyParser = require('koa-bodyparser');
app.use(bodyParser());
app.use(async (ctx) => {
if(ctx.url === '/' && ctx.method === 'POST'){
let postData = ctx.request.body;
shell.execFile('./run.sh',function(error, stdout, stderr){
console.log('stdout: ' + stdout);
console.log('error: ' + error);
});
ctx.body = '執行成功';
}else{
ctx.body = '<h1>404<h1>';
}
});
app.listen(3000, () => {
console.log('http://127.0.0.1:3000');
});
run.sh
cd /home/www/你的專案
git reset --hard origin/master
git pull
git submodule update
4. 使用pm2進行程式管理 pm2 start index.js
然後執行 pm2 list
檢視。
當你看到下面資訊,就說明服務已經開啟了。你可以訪問一下對應埠,會得到一個404的提示頁面。
如果過程出現錯誤,可以執行 pm2 logs
檢視錯誤資訊。更多pm2命令
5. github 專案的設定:前往你的 github 專案點選 Settings -> Webhooks 設定勾子。
Payload URL 填寫剛剛開啟的服務地址。
Content type 選擇 x-www-form-urlencoded
Secret 隨便設定一個就可以(這裡我沒弄驗證)
結語
你往了專案push一下程式碼,就可以實現自動釋出了.
最後,如果你在這個過程遇到問題,可留言。
如有錯誤,歡迎指出.
如果喜歡,點個贊再走吧.