Jenkins 基于参数';环境选择

Jenkins 基于参数';环境选择,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我们有一个管道脚本,它有一个基于环境的choices参数。例如: parameters { choice(choices: 'Development\nStaging\nProduction', description: "Select an environment to run tests against.", name: 'Environment') } 基于此选择,我想加载几个由环境表示的变量,但我很难选择“参数化凭据”。我正在尝试做这样的事情: stage("Run

我们有一个管道脚本,它有一个基于环境的choices参数。例如:

parameters {
    choice(choices: 'Development\nStaging\nProduction', description: 
    "Select an environment to run tests against.", name: 'Environment')
}
基于此选择,我想加载几个由环境表示的变量,但我很难选择“参数化凭据”。我正在尝试做这样的事情:

stage("Run tests") {
  environment {
    ENV="${params.Environment}"
    DBPASS=credentials("$ENV:dbpass") # <-- this doesn't work!
    MQPASS=credentials("$ENV:mqpass")
    ...
    ...
    5 more credentials here based on environment
    }
}
阶段(“运行测试”){
环境{
ENV=“${params.Environment}”
DBPASS=credentials(“$ENV:DBPASS”)#根据doc,在声明性管道中,参数的值在steps上下文中可用(这意味着它们在任何其他上下文中都不可用,例如环境)

您可以使用步骤,而不是使用environment指令公开cred,该步骤允许您将凭据分配给变量,并且由于这是一个步骤,因此您可以在步骤上下文中调用它,在该上下文中还可以访问参数的值

例如:

pipeline {
    agent any
    parameters {
        choice(choices: 'Development\nStaging\nProduction', 
               description: "Select an environment to run tests against.",
               name: 'Environment')
    }
    stages {
        stage ('Run tests') {
            steps {
                withCredentials([string(credentialsId: "${params.Environment}:dbpass", variable: 'DBPASS',
                                 string(credentialsId: "${params.Environment}:mqpass", variable: 'MQPASS')]) {
                        // Do stuff
                    }
                }
            }
        }
    }
}