将 groovy 变量分配给 shell 命令中的进程 ID

Assign groovy variable to process ID inside shell command

从管道中,我很简单地尝试将我的模拟器进程 ID 设置为我的变量 EMULATOR_PID 在 shell 脚本中,如下所示:

def EMULATOR_HOME = 'C:/Users/USER/AppData/Local/Android/Sdk/emulator'
def EMULATOR_PID

pipeline {
 agent any

 stages {
    stage('Start emulator') {
        steps {
        sh "$EMULATOR_HOME/emulator -avd Pixel_2_API_29 -port 5554 -wipe-data & $EMULATOR_PID=$!"
      }
}

在下一阶段,我将尝试像这样终止该进程:

stage('Kill process') {
  steps {
    sh "kill $EMULATOR_PID"
}

当我开始构建时,我收到以下错误输出:

+ null=5749 <------ EMULATOR_PID
+ C:/Users/USER/AppData/Local/Android/Sdk/emulator/emulator -avd Pixel_2_API_29 -port 5554 -wipe- 
data
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Kill processes)
[Pipeline] sh
+ kill null <------- "null" IS MY EMULATOR_PID
C:/Users/USER/AppData/Local/Jenkins/.jenkins/workspace/Android Test Pipeline@tmp/durable- 
d7aac378/script.sh: line 1: kill: null: arguments must be process or job IDs

如何在此处将 EMULATOR_PID 变量正确分配给我的模拟器进程 ID?

您可以使用以下选项:

sPID= sh (
      script: "$EMULATOR_HOME/emulator -avd Pixel_2_API_29 -port 5554 -wipe-data & echo $!;",
      returnStdout: true
    ).trim()

您可能需要在变量 sPID 上做一些工作才能得到它的干净数字