jenkins发布指定jar包分发具体机器

jenkins发布指定jar包分发具体机器

一、需求说明

  线上有一个微服务系统,由各种jar包组成,当时给过来的服务器配置都是统一的2核8G,想着先交付再优化的原则,而且jar包才5个也不多,所以直接部署在一台服务器上。后来随着系统功能的完善,又加了2、3个jar包。

  之后,发现这台服务器有点撑不住,内存使用率经常到95%左右,偶尔还出现系统内存不足,把几个占用系统内存过高的java进程杀掉。曾经调过JVM参数优化,但效果不尽如人意,所以就有了拆分一些jar包到别的服务器需求,只要注册中心nacos能连上,jar包放不同的服务器是没有关系的。

 

二、实现

  主要利用jenkins去实现。

       大致交代下未拆分前的发布机制。下图的DEPLOY_JAR是要发布的jar包,我这里做了优化,能根据开发需要,发想发的jar包(利用一个maven构建完jar包的路径位置文件),jar包之间用逗号分隔,然后打包dst.tar.gz文件,发布到具体机器。

  实现这个需求,上面这块没有变化,改的主要是Post Step部分,先规划好哪几个jar包需要从服务器A放到服务器B,假设是jar1,jar2还是在原服务器A,其他jar包放到新服务器B,其中outfiles文件用于记录jar包名字,dst目录用于放发布的jar包

 

1、Post Step的“执行shell”配置如下:

 

##1、获取要发布的jar包名,写入out文件
echo $DEPLOY_JAR | xargs -d, -n2 -I {} echo {} | sed '/^$/d' > out

touch outfiles_服务器A
touch outfiles_服务器B
mkdir dst_服务器A
mkdir dst_服务器B

##2、遍历out文件,根据jar包,放到不同目录下
cat out | while read line
do
   jar_name=`echo $line.jar`
   src_jar=`cat deploy.txt |grep ${jar_name} |awk -F'=' '{print $2}'`
   #假设发布jar1 和 jar2到服务器A, 其他到服务器B
   if [ $line == 'jar1包名' ] || [ $line == 'jar2包名' ]; then 
        echo ${jar_name} >> outfiles_服务器A
       /bin/cp $src_jar dst_服务器A/
   else
        echo ${jar_name} >> outfiles_服务器B
       /bin/cp $src_jar dst_服务器B/
   fi
done

/bin/mv outfiles_服务器A dst_服务器A/
/bin/mv outfiles_服务器B dst_服务器B/


#打包到远程
tar -zcf dst_服务器A.tar.gz dst_服务器A
tar -zcf dst_服务器B.tar.gz dst_服务器B

 

2、构建后操作

SSH Server写两个,分别是服务器A和服务器B

posted @ 2022-01-29 18:50  windysai  阅读(499)  评论(0编辑  收藏  举报