前端項目Vue,後端項目egg.js
傳統作法,前端項目打包獲得dist靜態文件,而後人肉複製到後端項目的靜態目錄下,打包整個後端工程並放到服務器,安裝依賴啓動服務,整個過程不只繁瑣還容易出錯,還易出現"明明我本地沒問題的啊,怎麼線上不行了"、「運維這你的問題」前端
使用Jenkins+Docker進行部署
1.前端項目構建,在Docker容器中打包,對dist靜態文件歸檔
2.後端項目構建,拿到上次歸檔靜態文件,打包、安裝依賴,並把整個後端工程打包成一個鏡像
3.進行鏡像發佈,通常使用docker-compose進行發佈git
整個過程都在Jenkins流水線中完成,運維只須要在線上機器上pull指定的鏡像並進行容器熱更新便可,減小了人工犯錯的可能,大大的提升了效率github
一臺Linux機器,並安裝Git,Jenkins和Docker,網上教程不少,此處再也不搬磚web
可參考 Jenkins 配置多分支流水線項目(github)docker
可參考 Jenkins Pipeline配置自動發送QQ郵件npm
項目根目錄下必須包含Jenkinsfile文件
Jenkinsfile基本語法,語法比較簡單,可參考 Jenkins Pipeline語法
個人前端Jenkinsfile:
流程:後端
withDockerContainer 聲明該管道在Docker內執行,會啓動容器並把當前工做目錄掛載映射到Docker容器內,在Docker容器內操做不會污染到宿主機,如爲了加速能夠在容器內安裝cnpm而不影響到宿主機。該管道執行後,容器會自動中止
使用archiveArtifacts artifacts 對靜態文件歸檔
歸檔的靜態文件在:${JENKINS_URL}job/${project_name}/job/${GIT_BRANCH}/${BUILD_NUMBER}/artifact/${tar_file_name}
服務器
後端Jenkinsfile:
流程:運維
使用 copyArtifacts filter 得到上一次成功歸檔的靜態文件,注意須要先安裝Copy Artifact 插件gitlab
點擊對應分支並點擊構建即開始構建項目,構建完成後,會發送郵件通知能夠設置web-hook 進行自動化構建,即push或者merge代碼後,會對指定分支進行自動構建gitlab 已經實現,後續會放上教程github 目前還沒是實現(努力ing......)