从Jenkinsfile中的函数调用阶段

Dav*_*san 4 groovy jenkins-pipeline

我的Jenkinsfile中有:

def foo = ["1", "2", "3"]

def parallelStagesFromMap = foo.collectEntries {
    ["Build ${it}" : generateStage(it)]
}

def generateStage(bar) {
    return {
        stage("Build ${bar}") {
            echo "Building for ${bar}"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我可以并行使用它们,parallel parallelStagesFromMap但是现在我要特别调用一个,例如:

generateStage("a") 只是被跳过了...我错过了什么吗?

Szy*_*iak 5

您缺少闭包调用。您的generateStage(name)方法返回一个闭包,并且此闭包不会隐式调用。(它与并行阶段一起工作,因为parallelmethod期望一个映射,其中每个条目值都是一个闭合值,因此它会遍历所有映射条目并调用收集的闭合值)。

这是您的示例使用的generateStage(name)方法向管道添加非并行阶段的样子:

def foo = ["1", "2", "3"]

def parallelStagesFromMap = foo.collectEntries {
    ["Build ${it}" : generateStage(it)]
}

def generateStage(bar) {
    return {
        stage("Build ${bar}") {
            echo "Building for ${bar}"
        }
    }
}

node {
    parallel parallelStagesFromMap

    generateStage("skipped") // no invocation, stage is skipped

    generateStage("nonparallel").call()
}
Run Code Online (Sandbox Code Playgroud)

这是运行此示例管道后的Blue Ocean UI外观:

在此处输入图片说明