前言
具体步骤是:在目标服务器上编写一个脚本,改脚本的主要内容是
1、要拉取那个镜像
2、判断当前服务器是否正在运行此容器有则停止并且删除
3、判断当前服务器是否存在该镜像有则删除
4、登录harbor仓库并拉去镜像运行
第一步:新建一个名为deploy.sh的shell脚本文件,并写入要拉取的镜像地址;
内容为:
harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
port=$5
imagesName=$6
echo $imagesName
依次为:harbor地址-harbor仓库-镜像名称-镜像版本-项目运行时的端口号-拼接的路径
最后把拼接成镜像地址并打印出来;
测试:
为新建成的deploy.sh添加全部用户可执行权限:
chmod a+x deploy.sh
这里拼接的镜像网址提前写好了,因为本来是要在脚本里写的但是脚本里总是打印不出‘’/‘’所以就直接传值的了;
第二步:查看当前镜像是否正在运行,是的删除
harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
port=$5
imagesName=$6
echo $imagesName
containerId='docker ps -a | grep ${project} | awk '{print $1}''
echo $containerId
if ["$containerId" != "" ] ; then
docker stop $containerId
docker rm $containerId
追加:
containerId='docker ps -a | grep ${project} | awk '{print $1}'' ##根据当前的镜像名称查询该镜像id echo $containerId ##打印该容器id if ["$containerId" != "" ] ; then ##判断该id是否为空 如果不为空就停止并且删除 docker stop $containerId docker rm $containerId
第三步:删除存在的当前镜像
harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
port=$5
imagesName=$6
echo $imagesName
containerId='docker ps -a | grep ${project} | awk '{print $1}''
echo $containerId
if ["$containerId" != "" ] ; then
docker stop $containerId
docker rm $containerId
fi
imageTag='docker images -a | grep ${project} | awk '{print $2}''
echo $imageTag
if [[ "$imageTag" =- "$version" ]] ; then
docker rmi $imagesName
fi
追加:imageTag='docker images | grep ${project} | awk ‘{print $2}’ ’ ###查询该镜像的版本
echo KaTeX parse error: Expected 'EOF', got '#' at position 11: imageTag #̲##打印该镜像的版本 if […imageTag" =~ “$version” ]] ; then ###判断该镜像的版本是否包含传进来version 有则删除
docker rmi $imagesName
fi
第四步:拉去镜像并运行
harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
port=$5
imagesName=$6
echo $imagesName
containerId='docker ps -a | grep ${project} | awk '{print $1}''
echo $containerId
if ["$containerId" != "" ] ; then
docker stop $containerId
docker rm $containerId
fi
imageTag='docker images | grep ${project} | awk '{print $2}''
echo $imageTag
if [[ "$imageTag" =~ "$version" ]] ; then
docker rmi $imagesName
fi
docker login -u admin -p 2220946265lisi $harbor_addr
docker pull $imagesName
docker run -d -p $port:$port --name $project $imagesName
echo "SUCCESS"
追加:docker login -u admin -p 2220946265lisi $harbor_addr ###登录harbor docker pull $imagesName #####拉取镜像 docker run -d -p $port:$port --name $project $imagesName #####运行镜像 echo "SUCCESS"
#####输出成功
执行 ./deploy.sh 8.142.86.121:8098 firsth-harbor hellojk v3.0.0 8080 8.142.86.121:8098/firsth-harbor/hellojk:v3.0.0
成功!!!
配置jenkins去通知目标服务器执行改脚本:
将deploy.sh移动到/usr/bin设置为全局环境脚本,这样在任何目录下都可以直接运行
mv deploy.sh /usr/bin
应用保存;再次构建;
成功!!!;