Как я могу использовать foreach с conditionalSteps в Jenkins Job DSL
Я пытаюсь использовать conditionalSteps
добавьте в Jenkins Job DSL для условного запуска шага сборки. Я хочу, чтобы этот шаг срабатывал, если существует какой-либо файл в данном наборе. Я могу получить эту работу, явно вызывая несколько fileExists
и or
, Однако я хотел бы динамически создать это, используя foreach.
Вот что я играл на http://job-dsl.herokuapp.com/
def files = ["file1", "file2", "file3"]
job('SomeJob') {
steps {
conditionalSteps {
condition {
/* This works fine:
or {
fileExists("file1.jenkinsTrigger", BaseDir.WORKSPACE)
}{
fileExists("file2.jenkinsTrigger", BaseDir.WORKSPACE)
}{
fileExists("file3.jenkinsTrigger", BaseDir.WORKSPACE)
}
*/
//But I want to create the Or clause from the array above
or {
files.each {
fileExists("${it}.jenkinsTrigger", BaseDir.WORKSPACE)
}
}
}
runner('Unstable')
steps {
gradle 'test'
}
}
}
}
Вышеупомянутое получает
javaposse.jobdsl.dsl.DslScriptException: (script, line 17) No condition specified
и я перепробовал все виды комбинаций, чтобы получить эту работу безрезультатно... любые советы будут высоко оценены
1 ответ
Решение
or
Метод DSL ожидает массив замыканий. Поэтому вам необходимо преобразовать коллекцию имен файлов в массив замыканий.
Пример:
def files = ["file1", "file2", "file3"]
job('example') {
steps {
conditionalSteps {
condition {
or(
(Closure[]) files.collect { fileName ->
return {
fileExists("${fileName}.jenkinsTrigger", BaseDir.WORKSPACE)
}
}
)
}
runner('Unstable')
steps {
gradle 'test'
}
}
}
}