網站應用自動部署系統分享
自動部署系統的初步實現
簡單而言,自動部署方案有以下幾個部分。
使用 Google Drive 作為中轉。Google Drive 是高效的云存儲服務,周邊產品眾多。免費的15G空間足夠應付一般的需求。同時,可以對服務器上的重要數據進行備份。
在個人開發機器上,使用 Google 出品的Back and Sync 應用云存儲映射為本地一個目錄。我使用的是Mac版的Back and Sync。要發布新版本時,直接將它拷貝到這個目錄即可自動上傳到云端。
在Linux 服務器上,使用 rclone 拉取云端的更新到服務器發布目錄。
rclone 的安裝比較簡單,不需要圖形界面,在SSH終端即可安裝。其安裝和配置步驟可以參考 官方的安裝文檔 和 Google Drive 配置說明 。
拉取通過 rclone 的 sync 命令來實現。rclone 的同步是增量同步,每次只會抓取變更的文件。開始的時候,我直接在linux的crontab中加入一個定時任務來做這件事:
0/ 5* * * * /usr/bin/rclone sync gdrive:web_deploy /opt/web
上面這個配置意思是,從每小時的0分,每隔5分鐘調用 rclone 的 sync 將Google Drive 中的 web_deploy 同步到 /opt/web 目錄。
所以現在的發布流程是,將要發布的版本扔到本地的Google Drive 目錄,然后6分鐘左右后在瀏覽器中訪問網站確認新版本。
使用機器人來提高部署效率
上面的方案已經不錯,不過還有兩個問題:
因為依賴于定時任務,會有一個延時;
不夠強大,不夠靈活,比如不能自動幫忙重啟Node/pm2服務,部署出現錯誤的時候不能及時反應等;
所以,我決定用機器人(bot)來改善部署。
現在有很多即時通信工具都提供了bot服務。我選用了Telegram的bot。
首先, 需要創建一個bot賬號。在Telegram上創建bot比較簡單,你只需要在telegram上找到botfather ,然后給他發一個/newbot命令,它就開始了創建bot的過程,會讓你給你的bot起一個名字和賬號,賬號必須以bot結尾。創建完后botfather會給你一個token。
接下來,我們需要創建一個bot程序。你可以使用任何你喜歡的開發語言來完成這個程序。我選擇Node.js。
主要程序只有三個文件。
package.json 定義了項目的基本信息,包括依賴的包等,代碼如下。
{ “name”: “appguardbot”, “version”: “1.0.0”, “deion”: “”, “main”: “index.js”, “s”: { “start”:“node index.js”}, “author”: “marknote”, “license”: “MIT”, “dependencies”: { “telebot”:“^1.2.3”} }
config.js 中是配置信息:
module.exports = { config: function(){return( { adminUsers:[ 3000000], //這里是admin用戶的telegram ID,多個用戶用西文逗號隔開botToken:‘430000000:XXXXXXXXXXXXXXXXXXX’, //這里是chatbot的tokendeployCmd:‘/usr/bin/rclone sync’, //要執行的Linux命令deployCmdOptions:[ ‘sync’, ‘gdrive:web_deploy’,‘ /opt/web’], //命令參數,是一個數組} ); } };
index.js 主要邏輯實現:
constconfig = require( ‘。/config’).config(); constTeleBot = require( ‘telebot’); constbot =newTeleBot(config.botToken); const{ spawn } = require( ‘child_process’);constadminUsers = config.adminUsers; bot.on([ ‘/deploy’, ‘/d’], (msg) =》 { //響應deploy/d命令constid = msg.from.id; if(adminUsers.indexOf(id) 《 0) { //如果當前用戶不是admin則拒絕發布msg.reply.text( ‘你沒有權限!’); return; } msg.reply.text(`開始執行部署任務。。.`);constshell = spawn(config.deployCmd, config.deployCmdOptions); shell.stdout.on( ‘data’, (data) =》 { //顯示執行的輸出msg.reply.text(`stdout: ${data}`); }); shell.stderr.on( ‘data’, (data) =》 { //顯示錯誤msg.reply.text(`stderr: ${data}`); }); shell.on( ‘close’, (code) =》 { msg.reply.text(`報告主人,任務執行完畢,任務代碼 ${code}`); }); } ); bot.on( ‘text’, (msg) =》 { constid = msg.from.id; console.log( ‘當前用戶ID:’+ id); msg.reply.text(msg.text) } ); bot.start();
不到百行代碼,一個功能完備的bot程序就完成了。將它部署到服務器上,之后就可以用它來部署了。
效果
現在,每次要發布新版本,我只需要將發布包放到Google Drive 對應目錄,然后對bot喊一聲/d,機器人就會開始執行任務。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
網站應用自動部署系統分享下載
相關電子資料下載
- nodemcu和esp8266是什么關系? 115
- LinkedBlockingQueue基于單向鏈表的實現 115
- RA-RTT RA2L1 PM2.5采集顯示器 522
- 怎么去解決服務器存儲inode耗盡的問題呢? 274
- PM2.5空污偵測器方案:采用新唐Cortex-M4微控制器 132
- 詳解如何在鋇錸技術ARM嵌入式控制器鋇錸技術BL302上配置和使用Node-RED 119
- 新品|PM2.5空氣檢測模塊&可穿戴手表套件 305
- 基于單片機的瓦斯氣體PM2.5溫度風速檢測報警系統 322
- 溫濕度、PM2.5值、二氧化碳監控實時采集關鍵環境數據 235
- 地平線RDK系列再升級,NodeHub驚喜發布 226