如何使用 jenkins 中的管道插件将参数传递给并行进程
How to pass parameters to parallel process using pipeline plugin in jenkins
我在 Jenkinsfile.Step 中有以下代码 1:有值列表。第 2 步:将该列表传递给函数。第 3 步:尝试将值动态传递给 java jar.But 值未正确分配。因为它在步骤 (4) 中分配,然后同时触发该过程 (5)。
def numToEcho = [1,10,20,27] ---(1)
def stepsForParallel = [:]
for (int i = 0; i < numToEcho.size(); i++) {
def s = numToEcho.get(i)
def stepName = "echoing ${s}"
stepsForParallel[stepName] = transformIntoStep(s) --(4)
}
parallel stepsForParallel --(5)
def transformIntoStep(inputNum) { ---(2)
return {
node {
echo inputNum
def tb = sh script:' java -jar titanRead.jar $inputNum', returnStdout:true --(3)
}
}
}
现在我想将列表值传递给 jar。就像下面的并行过程一样。
Sh ‘java -jar TitanRead.jar 1’
Sh ‘java -jar TitanRead.jar 10’
Sh ‘java -jar TitanRead.jar 20’
Sh ‘java -jar TitanRead.jar 27’
我在 jar 里面读起来像 arg[0]..它正在抛出 ArrayIndexOutOfBoundException..但是如果我 运行 jar 在终端中分开它正在工作..我该怎么做..请帮我解决这个问题。
您问题中的管道似乎与您的描述不符,因为 java jar TitanRead.jar
无法正常工作;你需要使用 -jar
.
在任何情况下,您的 sh
script
参数应该使用双引号字符串,否则 $inputNum
将不会被计算,即:
sh script: "java -jar TitanRead.jar ${inputNum}"
我在 Jenkinsfile.Step 中有以下代码 1:有值列表。第 2 步:将该列表传递给函数。第 3 步:尝试将值动态传递给 java jar.But 值未正确分配。因为它在步骤 (4) 中分配,然后同时触发该过程 (5)。
def numToEcho = [1,10,20,27] ---(1)
def stepsForParallel = [:]
for (int i = 0; i < numToEcho.size(); i++) {
def s = numToEcho.get(i)
def stepName = "echoing ${s}"
stepsForParallel[stepName] = transformIntoStep(s) --(4)
}
parallel stepsForParallel --(5)
def transformIntoStep(inputNum) { ---(2)
return {
node {
echo inputNum
def tb = sh script:' java -jar titanRead.jar $inputNum', returnStdout:true --(3)
}
}
}
现在我想将列表值传递给 jar。就像下面的并行过程一样。
Sh ‘java -jar TitanRead.jar 1’
Sh ‘java -jar TitanRead.jar 10’
Sh ‘java -jar TitanRead.jar 20’
Sh ‘java -jar TitanRead.jar 27’
我在 jar 里面读起来像 arg[0]..它正在抛出 ArrayIndexOutOfBoundException..但是如果我 运行 jar 在终端中分开它正在工作..我该怎么做..请帮我解决这个问题。
您问题中的管道似乎与您的描述不符,因为 java jar TitanRead.jar
无法正常工作;你需要使用 -jar
.
在任何情况下,您的 sh
script
参数应该使用双引号字符串,否则 $inputNum
将不会被计算,即:
sh script: "java -jar TitanRead.jar ${inputNum}"