1年前入職時,公司前端部門的靜態代碼部署都是用ftp工具拖拽部署,沒有記錄,沒有關聯,常常形成許多困擾的問題,前端
好比:今天有沒有其餘人在我要部署的路徑上工做?個人代碼爲啥被蓋掉了?被誰蓋掉的?啥時候蓋掉的?vue
本地build,ftp拖拽部署這種方式,致使git版本與手動的構建、部署沒啥關聯,更有在本地寫完代碼部署上去後,壓根沒傳git這種失誤可能發生。node
靠人去遵照規範來控制工做流,總會有失誤、疏忽的發生。git
要靠機器和代碼去規範工做流,提升效率、準確性,實現真正的前端工程化。shell
不討論通用模板(項目開發層面),只關心構建之後的事情,精確的說,就是從npm run build:xxx 這個腳本開始對接,npm run build:xxx以前的事情不在本文討論範圍內。 實現構建-部署-測試(多個環境)-沙箱-上線(可回滾)的所有半自動化流程把控。npm
爲何選擇jenkins:優先選擇強大的開源工具,避免重複造輪子,主要緣由是插件特別豐富,基本能夠知足全部實際需求json
先把成果貼上來,總體示意圖前端工程化
核心思想是分離構建、部署,因此每一個項目,jenkins會建兩個job。api
jenkins服務部署在公司內網堡壘機上,使用tomcat管理jenkins的war包,佔用系統服務、全量部署定時任務都跑在同一臺堡壘機上(Linux)。tomcat
由於內容不少,因此我直接採用一張圖 + 註釋 來零碎的講解每一個功能的實現,由於每一個公司的前端業務環境都不同,因此我也不打算花太大的筆墨去描述全部的實現。寫這篇文章的目的就是可能某個思想、某一段對jenkins插件的使用等等會幫助到有相似需求的人。註釋會是截圖,或者是關鍵代碼,對應圖中的數字。
先放幾張實際使用的圖
jenkins項目界面部分截圖
構建job部分截圖
部署job部分截圖(使用jenkins-pipeline實現流程圖)
多套測試環境佔用系統部分截圖(佔用環境後別人沒法部署,全量腳本也不會覆蓋)
全量部署腳本日誌展現部分截圖
總體示意圖的註釋(每一條都對應示意圖中的紅色阿拉伯數字):
check_results=`git log $branchName..origin/master`
if [[ ! $check_results = "" ]]
then
echo "【Error】:當前代碼比master落後,須要合併master或更新代碼從新打包以後才能進行構建!"
exit 1
else
echo "【info】:當前代碼正常,能夠部署!"
fi
複製代碼
整篇文章比較零散,主要講了一下我對前端工程化探索的思想和實踐,由於手頭的需求也不少(18年一塊兒工做的好幾個小夥伴被裁了,你猜他們剩下的工做誰來作),斷斷續續搞了兩三個月,目前這套系統已經穩定運行幾個月了,不斷的完善使它如今很好用,線上不再會出現由於忘了某些分支操做致使的bug;這套系統的優勢就是,基於開源jenkins+核心思想,就能夠很快的經過node/shell/pipelinescript搭建起一套完整的系統,成本極低!超級實用的功能卻實現不少!
若是你以爲讀完沒啥收穫或我寫的實在不知所云,那就好好看看說明12,我以爲把這一個小技巧分享出去,而且讓你有所收穫,那也值了,畢竟寫做能力有限~