基于参数的环境选择的凭证

时间:2018-09-17 20:46:01

标签: jenkins jenkins-pipeline

我们有一个管道脚本,该脚本具有基于环境的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:variable”格式。我也尝试了这种变体(例如"${ENV}:dbpass"),但似乎都没有用。

有了这个,我想避免在credentials部分中创建10个parameters选项。

有人对如何设置凭据名称有任何建议吗?

1 个答案:

答案 0 :(得分:1)

根据this文档,在声明式管道中,参数的值在步骤上下文中可用(这意味着它们在任何其他上下文(例如环境)中均不可用。

您可以使用withCredentials步骤来代替使用环境指令公开凭据,它可以为变量分配凭据,并且由于它是一个步骤,因此可以在步骤上下文中调用它,您也可以访问您的参数值。

例如:

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
                    }
                }
            }
        }
    }
}