Как я могу использовать 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'
      }
    }
  }
}
Другие вопросы по тегам