Jenkins 打包微服务流程优化

之前有写到 Jenkins 打包微服务教程-一个配置文件即可打包所有模块,其中构建后操作使用到了 Publish Over SSH 这个插件,当有很多主机时,会显得很麻烦,而且需要另外页面去配置。

于是就把构建后操作里面的运行镜像修改为只使用 shell 脚本的方式来实现。代码如下:

# 准备工作 -> 1. 定义主机 2.获取工作目录 3. 连接新主机不询问是否添加到known_hosts
cat > hosts.txt <<EOF
172.26.1.21 root xxx dev_test "-e ACTIVE=pro -e NACOS_URL=172.26.1.21"
EOF
current_dir=$(pwd)
grep -q 'StrictHostKeyChecking no' /etc/ssh/ssh_config || echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config

#==========定义远程执行脚本文件开始==========
cat << 'EOF' > script.sh
#!/bin/bash
cd /tmp/robot-patrol-platform
tarName=$(ls *.tar -1t | head -n 1)
imageName=$(docker load -i ${tarName} |  cut -d' ' -f3)
containerName=$(echo ${imageName} | cut -d: -f1)
# 删除原来的容器,并新建一个容器
if docker ps | grep "${containerName}" >/dev/null 2>&1; then docker rm -f ${containerName} ; fi
docker run -d --net host $1 --restart=unless-stopped --name ${containerName} ${imageName}
# 删除无用的镜像,只保留最新的镜像
serviceName=${containerName}
if docker images | grep "${serviceName}" >/dev/null 2>&1; then docker rmi -f $(docker images | grep ${serviceName} |awk 'NR>1 {print $3}'); fi
# 删除临时文件夹
rm -rf /tmp/robot-patrol-platform/${tarName}
rm -rf /tmp/robot-patrol-platform/script.sh
echo "The script has been executed successfully."
EOF
#==========定义远程执行脚本文件结束==========

#==========定义任务函数开始==========
dotask () {
    ip=$1; username=$2; password=$3; environment=$4; param=$5
    echo "===============远程主机 "$ip" 开始执行任务==============="
    sshpass -p $password scp $current_dir/${module}/target/*.tar $username@$ip:/tmp/robot-patrol-platform
    sshpass -p $password scp $current_dir/script.sh $username@$ip:/tmp/robot-patrol-platform
    sshpass -p $password ssh $username@$ip "chmod +x /tmp/robot-patrol-platform/script.sh && /tmp/robot-patrol-platform/script.sh $param"
    echo "===============远程主机 "$ip" 脚本执行完成==============="
}
#==========定义任务函数结束==========

while read -r ip username password environment param; do
  if [ "$host" = "all" ]; then
    dotask $ip $username $password $environment "$param"
  elif [ "$host" = "$environment" ]; then
    dotask $ip $username $password $environment "$param"
  fi
done < hosts.txt
echo "===============所有任务已完成==============="

该 ssh 脚本完全替代了 Publish Over SSH,通过 sshpass 命令免密拷贝文件和在宿主机执行脚本。

脚本最开始,定义了目标主机的ip、用户名、密码以及环境和 docker 执行添加的额外环境变量,其中环境用于匹配$host变量。

其中 $module 还是和之前的变量,$host 是需要打包到的目标机器,如果该字段为 all,打包到所配置的全部机器上。

AD: 【腾讯云服务器大降价】 2核4G 222元/3年 1核2G 38元/年
网站:阿蛮君博客
标题:Jenkins 打包微服务流程优化
链接:https://www.amjun.com/1847.html
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!
THE END
分享
二维码
打赏
海报
Jenkins 打包微服务流程优化
之前有写到 Jenkins 打包微服务教程-一个配置文件即可打包所有模块,其中构建后操作使用到了 Publish Over SSH 这个插件,当有很多主机时,会显得很麻烦,而且……
<<上一篇
下一篇>>