如何使用jenkins中的管道插件将参数传递给并行进程

时间:2017-03-16 17:22:44

标签: java jenkins parallel-processing jenkins-plugins jenkins-pipeline

我在Jenkinsfile.Step 1中有以下代码:包含值列表。第2步:将该列表传递给函数。第3步:尝试将值动态传递给java jar。但未正确分配值。因为它是在步骤(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它正在工作......我怎么能这样做...请帮我解决这个问题

1 个答案:

答案 0 :(得分:1)

您问题中的管道似乎与您的描述不符,因为java jar TitanRead.jar无效;你需要使用-jar

在任何情况下,您的sh script参数都应使用双引号字符串,否则将不会评估$inputNum,即:

sh script: "java -jar TitanRead.jar ${inputNum}"