本文介紹如何經過Jenkins的docker鏡像從零開始構建一個基於docker鏡像的持續集成環境,包含自動化構建、發佈到倉庫\並部署上線。html
0. 前置條件
服務器安裝docker,並啓動docker swarmgit
注意docker啓動時,須要開啓tcp端口web
1.Jenkins 安裝
1.1 命令行啓動:
安裝比較簡單,直接運行docker
docker run -p 8080:8080 -p 50000:50000 -d -v /home/jenkins-home-docker:/var/jenkins_home jenkins/jenkins:lts
運行後查看日誌,獲取token,打開ip:8080,輸入token,安裝經常使用插件服務器
1.2 使用swarm集羣管理工具
在services裏,添加服務markdown
2.Jenkins 插件安裝
咱們須要一些插件支持ssh
- Docker plugin : 提供docker 構建和發佈
- SSH plugin : 提供經過SSH在遠程主機執行命令,用於部署服務
- maven plugin: 支持maven
系統管理-插件管理裏進行安裝便可。maven
2.1 docker 配置
「系統管理-系統設置-雲」 裏新增tcp
注意docker host url須要加上tcp://svn
2.2 ssh主機 配置
「系統管理-系統設置-SSH remote hosts」 裏配置SSH遠程主機
2.3 配置下email
在系統設置裏直接設置,配置下smtp
2.4 配置jdk、maven
在系統管理-全局工具配置裏設置JDK自動安裝
maven一樣配置便可
3.Jenkins 項目配置
3.1 新建項目
咱們是maven項目,選擇maven
3.2 配置源碼管理
首先配置源碼,能夠是git或者svn,項目組用的是svn
3.3 配置觸發器
配置自動構建,勾選POLL SCM,配置5分鐘檢查一次,當svn發生變化時,會自動啓動構建
3.4 配置Build
簡單的maven項目,構建使用pom.xml,執行package -DskipTests
3.5 配置Post Steps
Post Steps是指構建完成執行的步驟,咱們會實現構建docker,發佈docker和部署服務
3.5.1 配置docker
點擊add post-build step,選擇Build/publish docker image:
選擇cloud爲先前配置的docker-cloud,image填寫私服發佈地址,勾上push image。
這樣配置,構建完成後會自動push到私服。
3.5.2 配置遠程部署
咱們使用docker stack來部署服務
首先,編寫docker-compose.yml
version: "3" services: backend: image: 192.168.86.8:5000/allinone-service-cicd deploy: replicas: 1 restart_policy: condition: on-failure ports: - "8007:8006" networks: - webnet networks: webnet:
保存到docker服務器,好比/root/allinone/allinone-service/allinone目錄
而後,添加post-build step:
選擇配置好的遠程docker主機:
填入命令:
cd /root/allinone/allinone-service/allinone
docker stack down allinone-cicd docker stack deploy -c docker-compose.yml allinone-cicd
- docker stack down 將原先服務下線
- docker stack deploy -c 從新部署服務
4 開始構建
4.1 手動構建
回到工程,點擊當即構建,第一次構建會自動下載jdk,maven,會比較慢
等待一會,構建成功:
9e70992ebc17: Pushing [===============================================> ] 42.66MB/45.02MB 9e70992ebc17: Pushing [=================================================> ] 44.96MB/45.02MB 9e70992ebc17: Pushing [==================================================>] 45.02MB 9e70992ebc17: Pushed latest: digest: sha256:5df6c97d6173527bc92ddc436fcef063069cd1cd3d0da8a0c74d2238443ae4d6 size: 1582 Docker Build Done [SSH] script: cd /root/allinone/allinone-service/allinone docker stack down allinone-cicd docker stack deploy -c docker-compose.yml allinone-cicd [SSH] executing... Removing service allinone-cicd_backend Removing network allinone-cicd_webnet Creating network allinone-cicd_webnet Creating service allinone-cicd_backend [SSH] completed [SSH] exit-status: 0 Finished: SUCCESS
若是配置了郵件通知,會收到構建成功郵件。
4.2 自動構建
SVN提交一個變動,等幾分鐘,查看Subversion Polling Log,已經有記錄了,發現已經自動構建了一個版本
完美!
做者:Jadepeng
出處:jqpeng的技術記事本--http://www.cnblogs.com/xiaoqi