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