我的 Jenkins 盒子需要通过 REST api 访问 Stash 和 Jira。为此,我需要存储他们的凭据。
我所做的方式是通过凭据参数,它要求我提供名称、凭据类型、必需、默认值和说明。
我将名称定义为 CREDENTIAL_PARAMETER,在类型中将其设置为“带密码的用户名”,然后从默认值的列表中选择一个凭据。
接下来在“构建”部分中,我定义应该执行一个 shell,类似于
echo $CREDENTIAL_PARAMETER
我期望得到类似“用户名:密码”的内容作为 CREDENTIAL_PARAMETER。但是,我得到了一个哈希值,我认为这就是检索用户名和密码的方法。
如何使用 bash 根据哈希值获取凭据?
作为给自己的注释,希望这能对其他人有所帮助,我将比@Alexandre Santos 更深入一些,尽管他的回答非常有帮助。
需要注意的重要一点是,Credentials Parameter 和 Credentials Binding 之间存在差异。
如果您使用参数化构建,则可以添加引用凭据绑定的凭据参数。当您运行构建时,您会注意到有一个环境变量与您的凭证存储中的凭证 GUID 相关。
要使其真正有用,您必须将“凭据绑定”注入您的环境中。
前往作业定义的构建环境部分。选中使用秘密文本或文件。这将实际上将秘密注入到您的构建环境中。此处可以使用之前创建的“凭据参数”来让您选择不同的凭据参数。
对于文件,它将把文件拖放到工作区中的某个位置(?),然后注入一个带有文件完整路径的秘密环境变量。
Cloudbees 的这个博客应该可以帮助解决剩下的问题。
可以,但是需要安装插件 https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Binding+Plugin。如果没有它,您得到的只是可以找到凭证的哈希值。
一旦您拥有凭据,Jenkins 会将它们放置为会话环境,可以检索..
请注意,仅当在“构建环境”部分中启用“使用秘密文本或文件”时,凭据才可用。
定义完所有内容后,用户名和密码可以作为两个不同的字段传递,也可以作为仅一个由“:”分隔的字段传递
作业配置中“凭据参数”附近的问号按钮(?)显示以下线索:
> 出于安全原因,凭证不会直接公开,而是公开凭证的 ID。
在执行期间,“CREDENTIAL_PARAMETER”的值将公开为环境变量 env.CREDENTIAL_PARAMETER,其中将包含所选凭证的凭证 ID。
credential-ID 可用于使用 usernamePassword(credentialsId: env.CREDENTIAL_PARAMETER, ..) 将实际的用户名/密码作为自定义变量提供给作业脚本,请参见下面的示例:
#!/bin/groovy
pipeline {
stages {
stage('Provide "Credentials Parameter" to my shell script') {
steps {
withCredentials([usernamePassword(
credentialsId: env.CREDENTIAL_PARAMETER,
usernameVariable: 'MY_USERNAME',
passwordVariable: 'MY_PASSWORD')]) {
script {
sh( script: "./my_shell_script.sh" ) // echo "$MY_USERNAME, $MY_PASSWORD"
}
}
}
}
}
}
参考文献(查找“credentialsId”):