Docker搭建微服務自動部署 <架構探險之路>,讓咱們來看看如何實現基於Docker的Jenkins自動化部署。html
構建思路linux
鏡像的自動構建分兩種狀況:git
jenkins所在容器中已部署docker服務github
直接在構建中利用shell腳本完成Dokcerfile文件的複製和執行,進而在jenkins所在容器內完成鏡像的構建
複製代碼
jenkins所在容器中未部署docker服務web
- jenkins中利用Docker插件實現鏡像構建
- jenkins 全局工具配置中安裝docker[自動安裝]
- 將jenkins部署在宿主機上,重複上述關聯步驟。gitlab可切換爲github、gitee
複製代碼
爲了提高鏡像的自動構建速度,最終採用本地部署jenkins的方式,由於宿主機是有docker運行環境的。docker
jenkins環境 [相對版本較低]shell
docker pull jenkins
docker run -d -p 8002:8080 -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always jenkins
查看容器日誌
docker logs -f jenkins
查看容器運行
docker ps
複製代碼
界面訪問`127.0.0.1:8080`,自動跳轉至登陸界面
複製代碼
觀察日誌獲取初始密碼
複製代碼
jenkins安裝
複製代碼
訪問
admin:jenkins
複製代碼
jenkinsci/jenkins [最新版本]api
鏡像緩存
docker pull jenkinsci/jenkinstomcat
啓動
docker run -d -p 8002:8080 -m 1024m -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always jenkinsci/jenkins
日誌
docker logs -f jenkins
jenkis 綁定gitlab
docker run -d -p 8002:8080 -m 1024m -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always --link gitlab:gitlab.yiyuery.com jenkinsci/jenkins
maven構建項目
gitlab's project 配置
此處ssh鑑權失敗須要生成key添加到gitlab中,和github同樣,例外,不能使用ssh,只能用http 點擊Add,輸入帳戶root
,密碼Abc23++,此爲gitlab管理員帳號和訪問gitlab時設置的密碼
構建後的maven命令配置
下方的爲構建後的須要存檔的文件配置 [Ant風格] pom.xml
文件對應工程目錄msa-api-hello/pom.xml
構建結果
本地映射jenkins工做空間
> 定時構建
複製代碼
表示每10分鐘執行一次,用H不用*,是爲了下降同一時間執行多個構建所帶來的性能開銷,使用H能夠將具體的構建時間進行Hash
shell腳本自動化構建Docker鏡像
可用環境變量
# 定義變量
API_NAME="msa-api-hello"
API_VERSION="0.0.1"
API_PORT="8101"
IMAGE_NAME="127.0.0.1:5000/com.msa/$API_NAME:$BUILD_NUMBER"
CONTAINER_NAME=$API_NAME-$API_VERSION
# 進入target目錄並複製Dockerfile文件
cd $WORKSPACE/target
cp classes/Dockerfile .
# 構建Docker鏡像
docker build -t $IMAGE_NAME .
# 推送Docker鏡像
docker push $IMAGE_NAME
# 刪除Docker容器
cid=$(docker ps | grep $CONTAINER_NAME |awk '{print $1}')
if [ x"$cid" != x ]
then
docker rm -f $cid
fi
# 啓動Docker容器
docker run -d -p $API_PORT:8080 --name $CONTAINER_NAME $IMAGE_NAME
# 刪除Dockerfile文件
rm -f Dockerfile
複製代碼
提高maven構建速度
maven clean install -Dmaven.test.skip=true 跨過測試類的執行
jenkins 沒法經過shell腳本進行docker鏡像的構建
解決方案:
- 不使用任何Jenkins鏡像,宿主機安裝Jenkins [宿主機有Docker服務]
- 不使用官方Jenkins鏡像,本身構造帶有Docker服務的Jenkins鏡像
- Docker-in-Docker [DinD]
- Docker-outside-of-Docker [DooD]
- 使用Jenkins的Docker插件
複製代碼
考慮到本地筆記本開發環境,多個dokcer的運行效率原本就低,所以,爲提升構建速度,下載war包後在本地tomcat中運行,須要對jenkins進行構建的話,啓動tomcat便可。
tomcat 部署項目
直接放在tomcat的webapp目錄下後在bin目錄下直接啓動也是能夠的。此處主要是由於idea中開發演示項目,直接放在一塊兒,方便管理。
安裝maven插件
不安裝插件則沒法構建maven項目,jenkins默認是不支持maven的
配置後拉取項目代碼進行構建
tag使用的是構建次數做爲版本標記
自動發佈
備註: