В моем случае я создаю в цикле похожие конвейеры, которые различаются по переменным.Например:
prefix = "prefix"
def repos = ['repo1', 'repo2', 'repo3', 'repo4']
for(repo in repos) {
pipelineJob(prefix + "-" + repo) {
definition {
cps {
script("""
pipeline {
agent any
stages {
stage("first") {
steps {
println "${repo}"
}
}
}
}
""".stripIndent())
}
}
}
}
Все хорошо, когда тело конвейеров одинаковое, но иногда я хочу изменить одну маленькую вещь, которая может быть обработана оператором if, но в теле скрипта это невозможно.Например:
prefix = "prefix"
def repos = ['repo1', 'repo2', 'repo3', 'repo4']
for(repo in repos) {
pipelineJob(prefix + "-" + repo) {
definition {
cps {
script("""
pipeline {
agent any
stages {
stage("first") {
steps {
println "${repo}"
}
}
""".stripIndent())
if (repo == 'repo1') {
script("""
stage("stage only for repo1") {
steps {
repo1 only
}
}
}
}
""".stripIndent())
} else {
script("""
stage("stage for other repos") {
steps {
other repo
}
}
}
}
""".stripIndent())
}
}
}
}
}
В этом случае начало конвейеров заменяется вторым предложением сценария, поэтому тела конвейеров являются неполными.Мой первый вопрос звучит так: могу ли я объединить определения этих сценариев?Я пытался объединить оператором "+", но это не работает.Я также пытался создать конвейеры DSL с помощью script(readFileFromWorkspace('project-a-workflow.groovy'))
вместо необработанного определения сценария, но он не работает с переменными.
Мой второй вопрос: каков наилучший подход к управлению конвейерами Jenkins в DSL с помощьюПример использования похож на мой - создание похожих конвейеров в цикле с обработкой переменных.Потому что вставлять необработанные определения конвейера очень уродливо, особенно потому, что мы должны экранировать каждую переменную конвейера Jenkins.