Jenkins,Multibranch Pipeline:如何迭代参数映射

时间:2018-12-04 17:52:08

标签: jenkins jenkins-pipeline

我在詹金斯有一条多分支管道。 我为要传递给脚本的每个参数定义了多个复选框(超过20个),然后该脚本将启动我的应用程序并运行相应的测试用例(这可能不是最佳解决方案,但此框架是在我加入当前公司之前创建的,不会重构它):

booleanParam(name: 'cluster_number', defaultValue: false, description: '')
booleanParam(name: 'post_cluster_wu', defaultValue: false, description: '') 
etc.

我需要收集每个复选框的用户选择(true-false)。我更喜欢像这样循环执行

sh """

for (element in params) {
// testing:
    echo "${element.key} ${element.value}"
}
"""

但不断出现错误:

[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: element for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:264)
    at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)

还尝试将循环放在shell脚本之外。到目前为止没有运气。

steps {
        echo "username: ${params.OWNER_USERNAME}"

        for (element in params) {
            echo "${element.key} ${element.value}"
        }
...

想知道是否有人可以遍历参数吗? 提前致谢!

1 个答案:

答案 0 :(得分:2)

这有效:

pipeline {
    agent any
    parameters {
        booleanParam(name: 'alpha', defaultValue: true)
        booleanParam(name: 'beta', defaultValue: true)
        booleanParam(name: 'gamma', defaultValue: false)
    }
    stages {
        stage('only') {
            steps {
                script {
                    params.keySet().each {
                        echo "The value of the ${it} parameter is: ${params[it]}"
                    }
                }
            }
        }
    }
}