公司的前端構建及部署工做都是人工去作,隨着業務擴大,項目迭代速度變快,人員增多,各類問題都暴露出來,本文是對前端自動化工做流進行探索後的一篇經驗分享,將經過一個簡單案例分享一下基於Jenkins的前端自動化工做流搭建的過程,搭建完這套工做流,咱們只須要在本地發起一個git提交,剩下的單元測試,打包構建,代碼部署,郵件提醒等功能所有自動化完成,讓持續集成、持續交付、持續部署變得簡單易操做,真正解決人工構建部署的諸多問題。html
Jenkins 是一款業界流行的開源持續集成工具,普遍用於項目開發,具備自動化構建、測試和部署等功能。前端
本地項目發起一個git提交,剩下的單元測試,打包構建,代碼部署,郵件提醒等所有自動化完成。vue
linux下:ubuntu 14.04中安裝Jenkins
windows下:
java
java -jar jenkins.war
便可。至此,基礎準備工做已經完成,咱們在服務器上安裝了Jenkins並啓動,而後進行了初始化配置,創建了一個新任務。接下來咱們開始配置咱們須要的功能。node
首先咱們要實現一個git鉤子功能,就是咱們向github/碼雲等遠程倉庫push咱們的代碼時,jenkins能知道咱們提交了代碼,這是自動構建自動部署的前提,鉤子的實現原理是在遠端倉庫上配置一個Jenkins服務器的接口地址,當本地向遠端倉庫發起push時,遠端倉庫會向配置的Jenkins服務器的接口地址發起一個帶參數的請求,jenkins收到後開始工做。
linux
http://mirror.xmission.com/jenkins/updates/update-center.json
而且點擊提交和當即獲取。http://<User ID>:<API Token>@<Jenkins IP地址>:端口/generic-webhook-trigger/invoke
userid和api token在jenkins的系統管理-管理用戶-admin-設置裏,這是個人
Jenkins IP地址和端口是你部署jenkins服務器的ip地址,端口號沒改過的話就是8080。gif效果圖: webpack
git push觸發鉤子後,jenkins就要開始工做了,自動化的構建任務能夠有不少種,好比說安裝升級依賴包,單元測試,e2e測試,壓縮靜態資源,批量重命名等等,不管是npm script仍是webpack,gulp之類的工做流,你以前在本地能作的,在這裏一樣能夠作。
做爲演示,這裏只演示三個基本經常使用的工做流程,安裝依賴包->單元測試->打包,也就是下面這三個命令。git
npm install
npm run test
npm run build
複製代碼
至此,咱們已經搭建了一個簡易的構建工做流程,構建完成了,咱們須要自動化部署。github
自動化部署多是咱們最須要的功能了,公司就一臺服務器,咱們可使用人工部署的方式,可是若是公司有100臺服務器呢,人工部署就有些吃力了,並且一旦線上出了問題,回滾也很麻煩。因此這一節實現一下自動部署的功能。web
Passphrase:密碼(key的密碼,沒設置就是空)
Path to key:key文件(私鑰)的路徑
Key:將私鑰複製到這個框中(path to key和key寫一個便可)
SSH Servers的配置:
SSH Server Name:標識的名字(隨便你取什麼)
Hostname:須要鏈接ssh的主機名或ip地址(建議ip)
Username:用戶名
Remote Directory:遠程目錄(上面第二步建的testjenkins文件夾的路徑)
高級配置:
Use password authentication, or use a different key:勾選這個可使用密碼登陸,不想配ssh的能夠用這個先試試
Passphrase / Password:密碼登陸模式的密碼
Port:端口(默認22)
Timeout (ms):超時時間(毫秒)默認300000
複製代碼
配置完成後,點擊Test Configuration測試一下是否能夠鏈接上,若是成功會返回success,失敗會返回報錯信息,根據報錯信息改正便可。
4. 接下來進入咱們建立的任務,點擊構建,增長2行代碼,意思是將dist裏面的東西打包成一個文件,由於咱們要傳輸。cd dist&&
tar -zcvf dist.tar.gz *
複製代碼
5. 點擊構建後操做,增長構建後操做步驟,選擇send build artificial over SSH, 參數說明:
Name:選擇一個你配好的ssh服務器
Source files :寫你要傳輸的文件路徑
Remove prefix :要去掉的前綴,不寫遠程服務器的目錄結構將和Source files寫的一致
Remote directory :寫你要部署在遠程服務器的那個目錄地址下,不寫就是SSH Servers配置裏默認遠程目錄
Exec command :傳輸完了要執行的命令,我這裏執行了解壓縮和解壓縮完成後刪除壓縮包2個命令
複製代碼
6. 如今當咱們在本地將
Welcome to Your Vue.js App
修改成
Jenkins
後發出一個git push,過一會就會發現咱們的服務器上已經部署好了最新的代碼,是否是很6。
至此,咱們的自動化部署也完成了,可是若是過程當中有異常怎麼辦,或是咱們想知道每次Jenkins運行的日誌及運行結果,咱們能夠經過配置郵件服務來讓Jenkins每次完成任務後通知相關人員。
這裏咱們不用E-mail Notification,由於它的郵件服務功能太少,沒法自定義郵件內容及自定義觸發鉤子,並且只能在異常狀況下才能發郵件。咱們使用Editable Email Notification這個。
至此,咱們的郵件提醒功能也配置完了。
經過上面這個案例,咱們搭建了一套簡單的自動化工做流,只須要在本地發起一個git提交,就能夠在雲端自動化構建,自動化部署,部署完成或出現異常後自動郵件通知,讓持續集成、持續交付、持續部署變得簡單易操做,解放了人力構建部署的生產力,也統一了構建環境,真實線上的CI服務配置比這個要複雜,大致流程能夠參考下阮一峯老師的這篇文章:
Jenkins還有不少強大的特性,如Pipeline,slave等,插件也很豐富,社區生態也很好,若是公司暫時沒有自行搭建CI服務的能力,使用免費開源的Jenkins是很好的選擇。另外,若是你的項目是開源項目,也可使用Travis CI作持續集成,這個配置起來比Jenkins簡單,能夠參考百度EFE的這篇文章:
(文章原創整理,轉載請註明出處,若是以爲文章對你有幫助,就點個贊吧,謝~)