Динамически генерируемый параллельный блок в конвейере jenkins

Я использую конвейер Jenkins для одновременного выполнения некоторых задач сборки/развертывания с использованием «параллельной» конструкции:

stage('tasks')
  parallel('task1': {someFunction(arg=1)}, 
           'task2': {someFunction(arg=2)},
           'task3': {someFunction(arg=3)}
  )
}

иногда я хотел бы построить эту конструкцию динамически во время выполнения. Является ли это возможным ?

пример: файл для копирования для выбранных целей из списка 10.

когда пользователь выбирает 4 элемента, я хочу создать «параллельную» структуру с 4 элементами, а затем выполнить ее.


person chenchuk    schedule 19.09.2019    source источник


Ответы (1)


По сути, вы можете создать функцию, которая возвращает карту заводных замыканий, содержащих задачи для ваших элементов.

Имейте в виду, что вам нужно отключить groovy песочницу, чтобы запустить это.

#!/usr/bin/env groovy

def getSomeFunction = { arg ->
    // returns the closure with your task, function, run with the chosen parameter
    return {
        println(arg)
    }
}

def getParalellBlock = { number ->
    def  myList =  ['a', 'b', 'c', 'd'] // your list of items
    def blockMap = [:]
    1.upto(number, {
        // Make sure to handle 'index out of range' kind of problems
        blockMap.put(it.toString(), getSomeFunction(myList[it-1]))
    })
    return blockMap
}

node() {
    stage('tasks') {
        // you can supply the parameter from job parameters
        parallel(getParalellBlock(3))
    }
}
person lenkovi    schedule 19.09.2019