从Jenkinsfile中的函数调用阶段

时间:2019-03-25 14:26:30

标签: groovy jenkins-pipeline

我的Jenkins文件中有

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

您缺少闭包调用。您的generateStage(name)方法返回一个闭包,并且不会隐式调用此闭包。 (它可用于并行阶段,因为parallel方法期望一个映射,其中每个条目值都是一个闭包,因此它将迭代所有映射条目并调用收集的闭包)。

这是您的示例使用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()
}

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

enter image description here