问题需求背景:
jenkins 执行case的时候,需要将最新编译出来的服务app部署到服务器上【包括windows服务器,和linux服务器】然后重启预热服务器,linux上比较好处理,ssh,rsync,还有强大的bash都可以完成同步最新的app还有重启的动作。
本次的服务是个运行在dos窗口上的jar包 启动的命令为 java -jar pcs-server-0.0.1-SNAPSHOT.war --server.port=8004 --spring.profiles.active=dev,converter
jenkins的gitplugin触发执行→更新windows和liunux上相关服务依赖的最新包→在linux上执行case命令
bat需要完成的需求
1、要求在case执行之前【在jenkins的另外一个job执行】更新converter相关的组件
2、重启converter
1、考虑怎么在一个job同时触发windows机器(convertor的重启)和执行Linux上机器的case
目前暂时没找到合适的办法可以在一个job中先后pull代码到两个slave中,再回到第一个slave来处理,
尝试通过ssh登陆到win上 触发重启命令【cywin是个办法,但是要安装软件,尽量希望通过少安装软件的方式】
解决办法:建立两个job,由job-win来做当有新代码提交的时候就让win机器的convertor服务重启
2.最开始是通过taskkill /f /fi "IMAGENAME eq java.exe" 来杀掉java -jar的进程,上了jenkins上发现,会把java -jar slave.jar也杀掉,造成window节点offline
解决办法:查找l下cmd下 可以筛选出具体启动命令的 进程,然后再kill,精确查找
wmic process where "commandline like '%%pcs-server%%'" call terminate
3、发现job-win jenkins执行完毕后会把convertor的进程给杀掉
查下了,jenkins是会杀掉所有的由这次jenkins build产生的所有的进程。除非设置下它的build-id为其他值
解决办法: 在执行 deploy-convertor.bat之前把BUILD_ID设置为其他值
echo $BUILD_ID
:: PITA to keep convertor alive
set ORIG_BUILD_ID=%BUILD_ID%
set BUILD_ID=DoNotKillMe
wmic process where "commandline like '%%pcs-server-0.0.1-SNAPSHOT%%'" get name,commandline
copy /y e:\workspace\IT_Test-Junelan\webapp\tests\jenkins\deploy-convertor.bat e:\cwRsync\
cd ..\..\cwRsync
echo ====================================
cmd /k start deploy-convertor.bat
echo ====================================
set BUILD_ID=%ORIG_BUILD_ID%
set ORIG_BUILD_ID=
echo %PATH%
wmic process where "commandline like '%%pcs-server-0.0.1-SNAPSHOT%%'" get name,commandline
4.jenkins 在执行到java -jar converter的时候会停止在重启完毕的那个log【在dos下执行也是一样,服务是alive状态就不会退出dos窗口】
解决办法:找寻办法让它执行java -jar的的时候需要新的 dos窗口执行,cmd /k start 可以完成这个任务