Динамически генерируемый параллельный блок в конвейере Дженкинса - PullRequest
0 голосов
/ 19 сентября 2019

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

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

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

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

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

1 Ответ

1 голос
/ 19 сентября 2019

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

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

#!/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))
    }
}
...