Jenkins Job DSL Параметр из списка - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь создать задание DSL, которое будет создавать задания из списка карт, повторяя их, как показано ниже:

def git_branch = "origin/awesomebranch"
def credential_id = "awesomerepocreds"
def jobs = [
  [
    title: "AwesomePipeline",
    description: "This pipeline is awesome.",
    directory: "awesomepath",
    repo: "ssh://git@bitbucket.XXX.XX.XX:XXXX/repo/repo.git"
  ]
]

jobs.each { i ->
    pipelineJob(i.title) {
        description("${i.description}\n\n__branch__: ${git_branch}")
        parameters {
            stringParam('branch', defaultValue='origin/develop', description='Branch to build')
        }
        definition {
            cpsScm {
                scm {
                    git {
                        branch('$branch')
                        remote {
                            url(i.repo)
                            credentials(credential_id)
                        }
                    }
                    scriptPath("jenkins/${i.directory}/Jenkinsfile")
                }
            }
        }
    }
}

Для заданий без параметров это прекрасно работает, но я не знаю как передать список в карту задания, которое будет использоваться блоком параметров, что-то вроде

....
def jobs = [
  [
    title: "AwesomePipeline",
    description: "This pipeline is awesome.",
    directory: "awesomepath",
    repo: "ssh://git@bitbucket.XXX.XX.XX:XXXX/repo/repo.git",
    params: [
        stringParam('branch', defaultValue='origin/develop', description='Branch to build'),
        stringParam('sawesomeparam', defaultValue='awesomevalue', description='awesomething')
    ]
  ]
]
...

, которое может быть каким-то образом использовано в качестве своего рода каждого, но не уверен, как правильно сформулировать это.

....
jobs.each { i ->
    pipelineJob(i.title) {
        description("${i.description}\n\n__branch__: ${git_branch}")
        parameters {
            i.params.each { p ->
                p
            }
        }
....

Заранее спасибо

1 Ответ

0 голосов
/ 22 марта 2020

Вы можете попробовать наш подход:

//  Jobs and parameters
def JobSets = [
    ['jobName': 'JobCreatedWithDSL1','Category': 'MyTestCategory1', 'Environment': 'Env1'],
    ['jobName': 'JobCreatedWithDSL2','Category': 'MyTestCategory2', 'Environment': 'Env2'],
]

JobSets.each { testSet ->
  job("${testSet['jobName']}") {
    description "This job ${testSet['jobName']} is DSL created and updated."

    wrappers {
    //Delete workspace before build starts
    preBuildCleanup()
    parameters {
        // Define parameters that should be passed to the runner script
        stringParam('Category', "${testSet['Category']}", "Executed tests category")
        stringParam('Environment', "${testSet['Environment']}", "Environment, applicable always")
        // Define on what label job can run
        label('MyTestAgent')
    }
    // delete files after a build
    wsCleanup()
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...