简介
前几天刚刚把Jenkins运行在Docker中,想着怎么实现Devops的CI,发现无法Webhook自动upgrade,就想个简单粗暴的方法实现。
环境介绍
1.Jenkins运行在Docker里面(docker里面执行docker命令请看上一遍文章),有Rancher管理Docker,源码有Gitlab管理,Docker Image发布到Harbor上面。
Harbor 安装
Rancher 安装
SSH无密钥登录
ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
它在/home/<username>.ssh目录,.ssh下有id_rsa和id_rsa.pub。在A机器上,scp id_rsa.pub 到B机器上/home/<username>.ssh目录下
B机器上与A机器同用户下.ssh目录下执行:cat id_rsa.pud >> authorized_keys
B机.ssh目录执行:chmod 600 authorized_keys
在A机器上登录B机器:ssh B
Jenkins配置
安装Docker Build and Publish 插件
Jenkins的Job配置Docker Build and Publish
image.png
调用远程shell升级Docker Containers
image.png
图片中1的远程脚本为清理Jenkins所在宿主机上旧版本的Docker Images
图片中2的远程脚本为清理部署机器上面的旧版本Docker Images和升级Docker Imagesshell脚本
1.上步骤图片1中shell
build_tag=$1oldtag=$(($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/shbuild_tag=$1echo $build_tagoldtag=$(($build_tag - 1)) v_number=$(docker images|grep "<docker image> $oldtag"|awk '{print $2}')echo $v_numberdocker ps |grep "<containers name>" 1>/dev/null 2>/dev/nullif [ $? -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" fielse echo "Docker RMI Images FAILED"fidocker pull <docker image>:$build_tag 1>/dev/nullif [ $? -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" fielse echo "DOCKER PULL FAILED"fi
作者:Aapon
链接:https://www.jianshu.com/p/a53b38f79364
共同学习,写下你的评论
评论加载中...
作者其他优质文章