簡介
前幾天剛剛把Jenkins運行在Docker中识补,想著怎么實現(xiàn)Devops的CI,發(fā)現(xiàn)無法Webhook自動upgrade采转,就想個簡單粗暴的方法實現(xiàn)空骚。
環(huán)境介紹
1.Jenkins運行在Docker里面(docker里面執(zhí)行docker命令請看上一遍文章)剥纷,有Rancher管理Docker,源碼有Gitlab管理牙瓢,Docker Image發(fā)布到Harbor上面酌儒。
Harbor 安裝
Rancher 安裝
SSH無密鑰登錄
- ssh-keygen -t rsa -P '' -P表示密碼,-P '' 就表示空密碼为居,也可以不用-P參數(shù)碌宴,這樣就要三車回車,用-P就一次回車蒙畴。
它在/home/<username>.ssh目錄贰镣,.ssh下有id_rsa和id_rsa.pub呜象。 - 在A機器上,scp id_rsa.pub 到B機器上/home/<username>.ssh目錄下
- B機器上與A機器同用戶下.ssh目錄下執(zhí)行:cat id_rsa.pud >> authorized_keys
- B機.ssh目錄執(zhí)行:chmod 600 authorized_keys
- 在A機器上登錄B機器:ssh B
Jenkins配置
- 安裝Docker Build and Publish 插件
-
Jenkins的Job配置Docker Build and Publish
- 調(diào)用遠程shell升級Docker Containers
圖片中1的遠程腳本為清理Jenkins所在宿主機上舊版本的Docker Images
圖片中2的遠程腳本為清理部署機器上面的舊版本Docker Images和升級Docker Images - shell腳本
1.上步驟圖片1中shell
build_tag=$1
oldtag=$(($build_tag - 2))
docker rmi $(docker images|grep "<docker images name> $oldtag"|awk '{print $3}') 1>/dev/null
if [ $? -eq 0 ];then
echo "Docker RMI Images SUCCESS"
else
echo "Docker RMI Images FAILED"
fi
2.上步驟圖片2中shell
#/bin/sh
build_tag=$1
echo $build_tag
oldtag=$(($build_tag - 1))
v_number=$(docker images|grep "<docker image> $oldtag"|awk '{print $2}')
echo $v_number
docker ps |grep "<containers name>" 1>/dev/null 2>/dev/null
if [ $? -eq 0 ];then
docker stop <containers name> && docker rm <containers name>
if [ $? -eq 0 ];then
docker rmi $(docker images|grep "<docker image> $oldtag"|awk '{print $3}') 1>/dev/null
else
echo "Docker RMI Images FAILED"
fi
else
echo "Docker RMI Images FAILED"
fi
docker pull <docker image>:$build_tag 1>/dev/null
if [ $? -eq 0 ];then
docker run -d --restart=always -e DATABASE_HOST=<db host> \
-e DATABASE=<db-name> \
-e DATAUSER=postgres \
-e DATAPASSWD=<passwd> \
-p 8087:8080 --name <containers name> \
<docker image>:$build_tag
if [ $? -eq 0 ];then
echo "Docker Containers <containers name> RUN SUCCESS"
else
echo "Docker Containers <containers name> RUN FAILED"
fi
else
echo "DOCKER PULL FAILED"
fi