要完成自动部署,大致有以下几个步骤:
1、告知目标服务器拉取哪个镜像。
2、判断当前服务器是否正在运行容器,需要删除。
3、如果目标服务器已经存在当前镜像,需要删除。
4、目标服务器拉取harbor上的镜像。
5、将拉取下来的镜像运行成容器。
1、目标服务器准备脚本文件
1.1、删除原有容器
如何判断指定容器是否在运行,可通过以下脚本,如果有对应的容器ID返回,证明是有在运行的。
docker ps -a | grep ${project} | awk '{print $1}'
存在则停止容器,并删除容器
containerId=`docker ps -a | grep ${project} | awk '{print $1}'`
echo $containerId
if [ "$containerId" != "" ] ; then
docker stop scontainerId
docker rm ScontainerId
fi
1.2、删除原有镜像
如果判断指定镜像是否存在,类似判断容器是否存在,如下脚本,注意有可能返回多个镜像tag
docker images | grep ${project} | awk '[print $2]'
由于有可能存在多个tag,因此判断稍微有不同,如下“
tag=`docker images | grep ${project} | awk '{print $2}'`
echo $tag
if [[ "$tag" =~ "$version" ]] ; then
docker rmi $imageName
fi
1.3、从Harbor上拉取镜像
首先登录Harbor,然后拉取,脚本如下
登录Harbor
docker login -u admin -p Harbor12345 $harbor_addr
拉取镜像
docker pull $imageName
1.4、编写完整的脚本
1.4.1、完整脚本
vi deploy.sh
完整的脚本如下,注意宿主机端口和容器端口是否对应得上,否则访问不了
#测试脚本:./deploy.sh 192.168.88.125:80 repo devops-test v1.1.0 8081 8080
harborAddr=$1
harborRepo=$2
project=$3
version=$4
#宿主机端口
hostPort=$5
#容器端口
containerPort=$6
imageName=$harborAddr/$harborRepo/$project:$version
echo -e "当前镜像信息:$imageName \n"
#停止并删除原有容器
containerId=`docker ps -a | grep ${project} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
echo "停止并删除原有的容器:$containerId ……"
docker stop $containerId
docker rm $containerId
echo -e "删除容器完毕。\n"
fi
#删除原有镜像
tag=`docker images | grep ${project} | awk '{print $2}'`
if [[ "$tag" =~ "$version" ]] ; then
echo "删除原有镜像:$version ……"
docker rmi $imageName
echo -e "删除镜像完毕。\n"
fi
#登录Harbor
docker login -u admin -p Harbor12345 $harborAddr
#拉取镜像
echo "开始拉取镜像:$imageName ……"
docker pull $imageName
echo -e "拉取镜像完毕。\n"
#部署镜像
echo "开始部署镜像 ……"
docker run -d -p $hostPort:$containerPort --name $project $imageName
echo "部署镜像成功。"
1.4.2、给脚本赋予权限
赋予文件可执行权限
chmod a+x deploy.sh
1.4.3、测试脚本
执行以下命令验证脚本
./deploy.sh 192.168.88.125:80 repo devops-test v3.0.0 8081 8080
看到以下日志:
运行
docker ps
可看到镜像已经部署上去了
2、Jenkins基于Harbor完成部署
2.1、将脚本文件放到$PATH路径下
echo $PATH
移动到/user/bin下,这样就可以在任何地方都可以执行
mv deploy.sh /usr/bin
2.2、Jenkins配置执行脚本
现在构建参数加一个工程名project和两个端口参数宿主机端口hostPort,containerPort容器端口,后面脚本会用到这些参数。
接着在构建后操作选择Send build artifacts over SSH选择
在Exec command文本框中增加执行脚本,如下
deploy.sh 192.168.88.125:80 repo $project $tag $hostPort $containerPort
最后点击保存按钮。
3、构建任务部署
最后,我们点击Jenkins构建按钮进行构建,构建完成之后访问项目,发现已经是我们最新部署的项目。
http://192.168.88.125:8081/test/test文章来源:https://www.toymoban.com/news/detail-776636.html
文章来源地址https://www.toymoban.com/news/detail-776636.html
到了这里,关于DevOps搭建(十二)-Jenkins推送镜像到Harbor详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!