我们有一个管道脚本,该脚本具有基于环境的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
选项。
有人对如何设置凭据名称有任何建议吗?
答案 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
}
}
}
}
}
}