Создание конвейеров Дженкинса в цикле по DSL - PullRequest
0 голосов
/ 25 сентября 2019

В моем случае я создаю в цикле похожие конвейеры, которые различаются по переменным.Например:

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.

...