如何在 Jenkins Job DSL 中使用 foreach 和 conditionalSteps
How can I use foreach with conditionalSteps in 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
我已经尝试了各种组合方式来完成这项工作,但都无济于事...任何提示都将不胜感激
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'
}
}
}
}
我正在尝试使用 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
我已经尝试了各种组合方式来完成这项工作,但都无济于事...任何提示都将不胜感激
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'
}
}
}
}