本文介紹如何通過Jenkins的docker鏡像從零開始構建一個基於docker鏡像的持續集成環境,包含自動化構建、發布到倉庫\並部署上線。
0. 前置條件
服務器安裝docker,並啟動docker swarm
注意docker啟動時,需要開啟tcp端口
1.Jenkins 安裝
1.1 命令行啟動:
安裝比較簡單,直接運行
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里,添加服務
2.Jenkins 插件安裝
我們需要一些插件支持
- Docker plugin : 提供docker 構建和發布
- SSH plugin : 提供通過SSH在遠程主機執行命令,用於部署服務
- maven plugin: 支持maven
系統管理-插件管理里進行安裝即可。
2.1 docker 配置
“系統管理-系統設置-雲” 里新增
注意docker host url需要加上tcp://
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
您的支持是對博主最大的鼓勵,感謝您的認真閱讀。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。