Jenkins+Docker 持續集成、部署(CI/CD)項目實踐

簡介

前端項目Vue,後端項目egg.js
傳統作法,前端項目打包獲得dist靜態文件,而後人肉複製到後端項目的靜態目錄下,打包整個後端工程並放到服務器,安裝依賴啓動服務,整個過程不只繁瑣還容易出錯,還易出現"明明我本地沒問題的啊,怎麼線上不行了"、「運維這你的問題」前端

使用Jenkins+Docker進行部署
1.前端項目構建,在Docker容器中打包,對dist靜態文件歸檔
2.後端項目構建,拿到上次歸檔靜態文件,打包、安裝依賴,並把整個後端工程打包成一個鏡像
3.進行鏡像發佈,通常使用docker-compose進行發佈git

整個過程都在Jenkins流水線中完成,運維只須要在線上機器上pull指定的鏡像並進行容器熱更新便可,減小了人工犯錯的可能,大大的提升了效率github


準備

一臺Linux機器,並安裝Git,Jenkins和Docker,網上教程不少,此處再也不搬磚web

新建Jenkins多分支流水線任務

可參考 Jenkins 配置多分支流水線項目(github)docker

配置郵件提醒

可參考 Jenkins Pipeline配置自動發送QQ郵件npm

編寫Jenkinsfile

項目根目錄下必須包含Jenkinsfile文件
Jenkinsfile基本語法,語法比較簡單,可參考 Jenkins Pipeline語法
個人前端Jenkinsfile:

流程:後端

  • 檢查參數
  • 安裝依賴並打包成靜態文件(Docker中)
  • 歸檔靜態文件

withDockerContainer 聲明該管道在Docker內執行,會啓動容器並把當前工做目錄掛載映射到Docker容器內,在Docker容器內操做不會污染到宿主機,如爲了加速能夠在容器內安裝cnpm而不影響到宿主機。該管道執行後,容器會自動中止

使用archiveArtifacts artifacts 對靜態文件歸檔
歸檔的靜態文件在:
${JENKINS_URL}job/${project_name}/job/${GIT_BRANCH}/${BUILD_NUMBER}/artifact/${tar_file_name}服務器

後端Jenkinsfile:

流程:運維

  • 檢查參數
  • 安裝依賴,由於用了ts,所有轉爲js
  • 拿到前端歸檔文件移動到指定目錄
  • 構建鏡像(使用Dockerfile)
  • 發佈鏡像
  • 發送郵件通知

使用 copyArtifacts filter 得到上一次成功歸檔的靜態文件,注意須要先安裝Copy Artifact 插件gitlab

構建項目

點擊對應分支並點擊構建即開始構建項目,構建完成後,會發送郵件通知
能夠設置web-hook 進行自動化構建,即push或者merge代碼後,會對指定分支進行自動構建gitlab 已經實現,後續會放上教程github 目前還沒是實現(努力ing......)

相關文章
相關標籤/搜索