如何从Jenkins管道作业中的凭证参数获取密码

时间:2018-11-06 18:49:06

标签: jenkins jenkins-plugins jenkins-pipeline

我有一个Jenkins管道作业,并且它的凭据参数类型为“带密码的用户名”。我们将其称为凭据参数DB_USER_CRED

现在,我已经在Jenkins上存储了2个类型为“带密码的用户名”的凭据,分别称为DB_USER1DB_USER2。因此,我的工作是这样的:

withCredentials([
            usernamePassword(credentialsId: 'DB_USER1', usernameVariable: 'DB_USER1_NAME', passwordVariable: 'DB_USER1_PASSWORD'),
            usernamePassword(credentialsId: 'DB_USER2', usernameVariable: 'DB_USER2_NAME', passwordVariable: 'DB_USER2_PASSWORD')
            ]){

因此,当用户运行作业时,他/她可以选择DB_USER1DB_USER2来填充参数DB_USER_CRED。然后,我可以通过检查$DB_USER_CRED来确定使用了哪个用户。但是,是否有办法从DB_USER_CRED获取密码?我不想将$DB_USER_CRED$DB_USER1_NAME$DB_USER2_NAME进行比较,以找出要使用的密码,即$DB_USER1_PASSWORD$DB_USER2_PASSWORD。原因是可能有10个可能的数据库用户可以访问此作业,因此必须将$DB_USER_CRED与所有用户进行比较是不现实的。谢谢。

1 个答案:

答案 0 :(得分:0)

找到了解决方案:https://support.cloudbees.com/hc/en-us/articles/204897020-Fetch-a-userid-and-password-from-a-Credential-object-in-a-Pipeline-job-

因此,使用上面的示例,解决方案是:

withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: env.DB_USER_CRED, usernameVariable: 'DB_USER_CRED_USERNAME', passwordVariable: 'DB_USER_CRED_PASSWORD']])
{
// The password is $DB_USER_CRED_PASSWORD
}

我的工作还使用其他存储在Jenkins中的凭证,可以通过以下方式附加它们:

withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: env.DB_USER_CRED, usernameVariable: 'DB_USER_CRED_USERNAME', passwordVariable: 'DB_USER_CRED_PASSWORD'],
usernamePassword(credentialsId: 'OTHER_CRED', usernameVariable: 'OTHER_CRED_NAME', passwordVariable: 'OTHER_CRED_PASSWORD')
])