Jenkins 如何动态触发构建作业?

Jenkins 如何动态触发构建作业?,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我有一个Jenkins管道,可以在一个项目上触发多个构建作业。每个构建作业都有在作业期间动态生成的不同参数。还有一个字符串参数,作业应在其上运行。该列表是一个多行字符串,由\n拆分 这就是我得到的: def projectName = "${PROJECT_NAME}" def slaveList = "${SLAVE_LIST}".split("\n") def gradleTasks = "${GRADLE_TASKS}" def slaveClosure = { slaveNum -&

我有一个Jenkins管道,可以在一个项目上触发多个构建作业。每个构建作业都有在作业期间动态生成的不同参数。还有一个字符串参数,作业应在其上运行。该列表是一个多行字符串,由\n拆分

这就是我得到的:

def projectName = "${PROJECT_NAME}"
def slaveList = "${SLAVE_LIST}".split("\n")

def gradleTasks = "${GRADLE_TASKS}"

def slaveClosure = { slaveNum ->
    build job: projectName, parameters: [
                    [$class: 'LabelParameterValue', name: 'slaveAol', label: slaveList[slaveNum]],
                    [$class: 'StringParameterValue', name: 'gradleTasks', value: gradleTasks]
                ]
}

def parallelSlaveMap = [:]
for (int i = 0; i < slaveList.size(); i++) {
    parallelSlaveMap.put("slave${i}", slaveClosure(i))
}

parallel(parallelSlaveMap)
作为参考,脚本中的第44行是“平行”行


我做错了什么?我不确定是否有一种更简单的方法可以基于从属参数列表动态创建并行构建作业。

调用
slaveClosure(I)
初始化对象并将其分配给映射,这是jenkins意想不到的。如果要使用此模式,可能需要在闭包周围使用一个外部函数,该函数返回闭包而不对其求值。相反,我使用以下方法生成并行作业。在每次迭代中存储索引值很重要,因为闭包是在运行时计算的

def projectName = "${PROJECT_NAME}"
def slaveList = "${SLAVE_LIST}".split("\n")
def slaveMap = [:]
def gradleTasks = "${GRADLE_TASKS}"

for (int i = 0; i < slaveList.size(); i++) {
    def index = i
    slaveMap['slave' + index] = {build job: projectName, parameters: [
                    [$class: 'LabelParameterValue', name: 'slaveAol', label: slaveList[index]],
                    [$class: 'StringParameterValue', name: 'gradleTasks', value: gradleTasks]
                ]
    }
}

parallel slaveMap
def projectName=“${PROJECT\u NAME}”
def slaveList=“${SLAVE_LIST}”.split(“\n”)
def slaveMap=[:]
def gradleTasks=“${GRADLE_TASKS}”
对于(int i=0;i
def projectName = "${PROJECT_NAME}"
def slaveList = "${SLAVE_LIST}".split("\n")
def slaveMap = [:]
def gradleTasks = "${GRADLE_TASKS}"

for (int i = 0; i < slaveList.size(); i++) {
    def index = i
    slaveMap['slave' + index] = {build job: projectName, parameters: [
                    [$class: 'LabelParameterValue', name: 'slaveAol', label: slaveList[index]],
                    [$class: 'StringParameterValue', name: 'gradleTasks', value: gradleTasks]
                ]
    }
}

parallel slaveMap