jenkins - 具有声明性 Jenkins 管道的主动选择参数

标签 jenkins jenkins-pipeline jenkins-declarative-pipeline


我正在尝试将主动选择参数与声明性 Jenkins 流水线脚本一起使用。

这是我的简单脚本:


environments = 'lab\nstage\npro'

properties([
    parameters([
        [$class: 'ChoiceParameter',
            choiceType: 'PT_SINGLE_SELECT',
            description: 'Select a choice',
            filterLength: 1,
            filterable: true,
            name: 'choice1',
            randomName: 'choice-parameter-7601235200970',
            script: [$class: 'GroovyScript',
                fallbackScript: [classpath: [], sandbox: false, script: 'return ["ERROR"]'],
                script: [classpath: [], sandbox: false, 
                    script: """
                        if params.ENVIRONMENT == 'lab'
                            return['aaa','bbb']
                        else
                            return ['ccc', 'ddd']
                    """
                ]]]
    ])
])

pipeline {
    agent any
    tools {
        maven 'Maven 3.6'
    }
    options {
        disableConcurrentBuilds()
        timestamps()
        timeout(time: 30, unit: 'MINUTES')
        ansiColor('xterm')
    }
    parameters {
        choice(name: 'ENVIRONMENT', choices: "${environments}")
    }
    stages {
        stage("Run Tests") {
            steps {
                sh "echo SUCCESS on ${params.ENVIRONMENT}"
            }
        }
    }
}

但实际上第二个参数是空的

enter image description here

是否可以同时使用脚本化的主动选择参数和声明性参数?

UPD 有没有办法将列表变量传递给脚本?例如

List<String> someList = ['ttt', 'yyyy']
...
script: [
    classpath: [], 
    sandbox: true, 
    script: """
        if (ENVIRONMENT == 'lab') { 
            return someList
        }
        else {
            return['ccc', 'ddd']
        }
    """.stripIndent()
]

最佳答案

您需要使用 Active Choices Reactive Parameter 使当前作业参数能够引用另一个作业参数值

environments = 'lab\nstage\npro'

properties([
    parameters([
        [$class: 'CascadeChoiceParameter', 
            choiceType: 'PT_SINGLE_SELECT',
            description: 'Select a choice',
            filterLength: 1,
            filterable: true,
            name: 'choice1',
            referencedParameters: 'ENVIRONMENT',
            script: [$class: 'GroovyScript',
                fallbackScript: [
                    classpath: [], 
                    sandbox: true, 
                    script: 'return ["ERROR"]'
                ],
                script: [
                    classpath: [], 
                    sandbox: true, 
                    script: """
                        if (ENVIRONMENT == 'lab') { 
                            return['aaa','bbb']
                        }
                        else {
                            return['ccc', 'ddd']
                        }
                    """.stripIndent()
                ]
            ]
        ]
    ])
])

pipeline {
    agent any

    options {
        disableConcurrentBuilds()
        timestamps()
        timeout(time: 30, unit: 'MINUTES')
        ansiColor('xterm')
    }
    parameters {
        choice(name: 'ENVIRONMENT', choices: "${environments}")
    }
    stages {
        stage("Run Tests") {
            steps {
                sh "echo SUCCESS on ${params.ENVIRONMENT}"
            }
        }
    }
}

关于jenkins - 具有声明性 Jenkins 管道的主动选择参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63057793/

相关文章:

git - Jenkins 创建一个工作来构建许多 repo

Jenkins Pipeline 条件阶段成功,但 Jenkins 显示构建失败

jenkins - 将参数从for循环传递到jenkins管道中的多行sh

java - 如何在 Jenkins 上运行 TestNG 测试

Jenkinsfile 归档步骤 : allow missing artifacts

ios - Jenkins Pipeline 在多个模拟器和 sdk 版本上测试 iOS 应用程序

jenkins-pipeline - 在声明性 Jenkinsfile 之前运行脚本以使用扩展选择参数插件

jenkins - 在并行阶段之前的 Jenkins 声明性管道中创建顺序步骤

jenkins - 具有动态矩阵轴值的声明式管道

java - Jenkins Slave Groovy 定义 : How to set "Usage" parameter