首页 > 解决方案 > 从 Jenkins Scripted Pipeline 启动多个 jars

问题描述

我正在尝试在 Jeknins 中针对两个不同的 jar 运行一些集成测试。问题是我想从 Jenkis 脚本中操作 jars 的启动/停止,但我不知道具体如何。

目前我有这样的事情:

   stage('Start ZZ&ZZT') {
      dir('workingdir') {
         sh 'java -jar zenzefiT.jar'
         sh 'java -jar zenzefi.jar'
      }
   }

当第一个罐子启动然后挂起时,这不能正常工作。如果我做这样的事情,

   stage('Start ZZ&ZZT') {
      dir('workingdir') {
         sh 'java -jar zenzefiT.jar &'
         sh 'java -jar zenzefi.jar &'
      }
   }

罐子没有启动。

我想要一个启动 jars 的解决方案(可能就像等待 jars 正确启动然后继续),有另一个阶段我可以运行一些测试然后停止 jars(这可以通过我的端口终止进程来完成猜测)。我也尝试在机器上使用 shell 脚本。

请帮忙,谢谢。

标签: javajenkinsjarjenkins-pipelineexecutable-jar

解决方案


已经为感兴趣的人找到了解决方案。还添加了一项检查以确保应用程序正确启动。

   stage('Start ZZ&ZZT') {
      dir('workingdir') {
         withEnv(['JENKINS_NODE_COOKIE=dontKill']) {
            sh 'java -jar jar1.jar &'
            sh 'java -jar jar2.jar &'
         }
         def isZZTrunning = sh(returnStatus:true, script: 'sudo lsof -t -i:62000')
         while(isZZTrunning == 1) {
            isZZTrunning = sh(returnStatus:true, script: 'sudo lsof -t -i:62000')
            echo "Waiting for Jar1 to start"
            sleep(time: 1, unit: "SECONDS")
         }

         def isZZrunning = sh(returnStatus:true, script: 'sudo lsof -t -i:61000')
         while(isZZrunning == 1) {
            isZZrunning = sh(returnStatus:true, script: 'sudo lsof -t -i:61000')
            echo "Waiting for JAr2 to start"
            sleep(time: 1, unit: "SECONDS")
         }
      }
   }

推荐阅读