前端專案nodejs自動部署指令碼
幫助開發者更加高效的工作,提供圍繞開發者全生命週期的工具與資源
https://developer.aliyun.com/tool/?spm=a1z389.11499242.0.0.65452413KFoX5Y&utm_content=g_1000295017
背景
前端專案分開發、測試、生產環境,開發及測試已接入 jenkins 自動部署,生產環境依然還是手動。每次都需要進行本地打包, 手動壓縮上傳到伺服器目錄,ssh 登入伺服器後備份舊檔案, 手動刪除檔案再將包解壓到指定目錄,操作流程比較繁瑣,需要提前瞭解伺服器部署目錄,不太友好,所以就寫了個指令碼簡化部署操作。
依賴安裝
部署包含壓縮檔案、ssh 登入、檔案上傳等幾個步驟,所以需要安裝如下依賴:
- archiver,壓縮檔案使用。
- node-ssh,ssh 操作。
- silly-datetime,時間處理。
關鍵程式碼
在專案根目錄新建 deploy.js 指令碼,作用是上傳壓縮包至伺服器、備份舊檔案,解壓程式碼壓縮包。
const fs = require('fs'); const path = require('path'); const archiver = require('archiver'); const { NodeSSH } = require('node-ssh'); const sd = require('silly-datetime'); let args = process.argv.splice(2), isRollback = args.includes('rollback'); // 當前時間 let curTime = sd.format(new Date(), 'YYYYMMDDHH'); // 當前時間格式化 console.log((isRollback ? '回滾' : '部署') + '時間:' + curTime); // 設定本地 dist 檔案路徑 const distPath = path.resolve(__dirname, 'dist'); const ssh = new NodeSSH(); // 遠端伺服器配置資訊 const config = require('./config'); // 本地檔案上傳至遠端伺服器 function uploadFile() { ssh .connect({ host: config.host, username: config.username, password: config.password, port: 22, }) .then(() => { console.log('SSH login success'); ssh .putFile( `${__dirname}/dist${curTime}.zip`, `${config.pathUrl}/dist${curTime}.zip` ) .then(() => { console.log('The zip file is upload successful'); remoteFileUpdate(); }) .catch((err) => { console.log('the file upload fail:', err); process.exit(0); }); }) .catch((err) => { console.log('SSH conneting fail:', err); process.exit(0); }); } // 遠端檔案更新 const remoteFileUpdate = () => { let cmd = isRollback ? `rm dist && mv dist.bak${curTime} dist` : `mv dist dist.bak${curTime} && unzip dist${curTime}.zip`; ssh .execCommand(cmd, { cwd: config.pathUrl, }) .then((result) => { console.log(`The update message is: ${result.stdout}`); if (!result.stderr) { console.log('Gratefule! update success!'); process.exit(0); } else { console.log('Something wrong:', result); process.exit(0); } }); }; // 本地檔案壓縮 const zipDirector = () => { const output = fs.createWriteStream(`${__dirname}/dist${curTime}.zip`); const archive = archiver('zip', { zlib: { level: 9 }, }).on('error', (err) => { throw err; }); output.on('close', (err) => { if (err) { console.log('something error width the zip process:', err); return; } uploadFile(); console.log(`${archive.pointer()} total bytes`); console.log( 'archiver has been finalized and the output file descriptor has closed.' ); }); output.on('end', () => { console.log('Data has been drained'); }); archive.pipe(output); archive.directory(distPath, '/dist'); archive.finalize(); }; // 回滾程式碼 if (isRollback) { remoteFileUpdate(); } else { // 更新程式碼 zipDirector(); }
伺服器上的備份,解壓等操作是透過執行 shell 命令做的,你也可以自己預先寫好相關指令碼去執行。
使用方法
在根目錄新建一個
config.js
用於存放伺服器 IP、使用者名稱、密碼、部署目錄等資訊,然後就可以在 package.json 中追加命令去呼叫上面的 node 指令碼。
"scripts": { "deploy": "node deploy.js", "rollback": "node deploy.js rollback"}
執行命令執行相應操作:
-
npm run deploy
,部署 + 備份。 -
npm run rollback
,回滾程式碼 。
原文連結:https://developer.aliyun.com/article/791886?spm=a2c6h.12873581.0.0.6b4c767d2HYlDs&groupCode=othertech
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2793220/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python定時任務前端專案本地自動打包遠端部署指令碼實現Python前端指令碼
- LNMP自動部署指令碼LNMP指令碼
- 使用jenkins進行前端專案自動部署Jenkins前端
- vue自動化部署指令碼Vue指令碼
- 實現指令碼自動部署docker指令碼Docker
- svn and maven 自動部署shell指令碼Maven指令碼
- Git Webhook自動部署專案GitWebHook
- MySQL8.0的自動部署指令碼MySql指令碼
- Nodejs專案線上部署NodeJS
- 微服務專案Git倉庫自動化指令碼微服務Git指令碼
- 前端專案部署前端
- 前端專案自動化部署——超詳細教程(Jenkins、Github Actions)前端JenkinsGithub
- 使用 Docker 部署 NodeJS + MongoDB 專案DockerNodeJSMongoDB
- 快速部署tomcat專案的Shell指令碼Tomcat指令碼
- 使用 CODING 自動部署 Hyperf 專案
- Github-Pages自動部署VuePress專案GithubVue
- 使用GitHub Actions和GitHub pages實現前端專案的自動打包部署Github前端
- ubuntu部署使用pm2部署nodejs專案 + pm2和nginx開機自啟動UbuntuNodeJSNginx
- Nginx部署Vue前端專案,部署多個Vue專案NginxVue前端
- 使用Jenkins自動化部署Java專案JenkinsJava
- jenkins自動化專案部署實戰Jenkins
- 通過GitHub Action自動部署Maven專案GithubMaven
- 使用GithubAction自動構建部署專案Github
- 微前端專案部署方案前端
- nodejs 自動程式碼提示NodeJS
- Jenkins自動化前端專案構建Jenkins前端
- 專案啟動指令碼的編寫指令碼
- 高效前端專案自動化構建部署實踐——使用webhook鉤子運維前端WebHook運維
- shell 備份檔案指令碼+自動清理指令碼
- 自動ftp指令碼FTP指令碼
- jenkins + GitHub 實現專案自動化部署JenkinsGithub
- 使用 Git 實現 專案的自動化部署Git
- 使用pm2自動化部署node專案
- 用nodejs指令碼幫你自動領取Epic的贈送遊戲NodeJS指令碼遊戲
- webpack+nodejs+npm構建前端專案WebNodeJSNPM前端
- 使用Jenkins持續整合前端專案並自動化部署到Nginx伺服器Jenkins前端Nginx伺服器
- jenkins自動構建前端專案(window,vue)Jenkins前端Vue
- 在Linux系統中部署NodeJS專案LinuxNodeJS