Этап вызова из функции в Jenkinsfile - PullRequest
2 голосов
/ 25 марта 2019

У меня есть в моем 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}"
        }
    }
}

Затем я могу использовать их параллельно parallel parallelStagesFromMap, но сейчас я пытаюсь вызвать один из них, например:

generateStage("a") и это просто пропущено ... Я что-то пропустил?

1 Ответ

3 голосов
/ 25 марта 2019

Вы пропустили закрытие вызова.Ваш 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

...