在Jenkins作业中的Bash脚本中引用全局凭据

Cpp*_*ner 20 jenkins

我创建了全局凭据(用户名,密码)并提供了自定义ID.如何在Bash脚本中引用此ID?我已经在我的工作配置中检查了"注入全局密码".

我尝试过Jenkins:在PowerShell中访问全局密码但不起作用.

假设全局凭证的ID是"USER_PASSWORD",我的bash脚本尝试过:

echo ${USER_PASSWORD}
echo ${env:USER_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

不行.我阅读了一些在线帖子,我需要查询Jenkins API以获取凭据.这听起来不对.

Chr*_*ker 21

使用凭据绑定插件,可以将全局凭证注入到构建上下文中.这可以通过选中作业配置页面的Build Environment部分中标记为Use secret text(s)或files(s)的复选框来完成.添加用户名和密码(已分隔)绑定,选择您创建的特定凭据,并定义用户名和密码变量.

下面是使用Credentials Binding Plugin的示例,但是使用冒号分隔的用户名/密码变量而不是两个单独的变量:

凭据绑定插件示例

然后,您可以使用在shell脚本中定义的用户名和/或密码变量.假设用户名值为,foo密码值为bar...

用户名和密码绑定,变量名称USER_CREDENTIALS:

echo $USER_CREDENTIALS # -> foo:bar
Run Code Online (Sandbox Code Playgroud)

用户名和密码(分隔)绑定,变量名称USER_ID和USER_PASSWORD:

echo $USER_ID          # -> foo
echo $USER_PASSWORD    # -> bar
Run Code Online (Sandbox Code Playgroud)


Jus*_*der 15

如果您的凭据ID为“ USER_PASSWORD”,则必须使用例如读取。下面的命令:USER_CREDENTIALS = credentials('USER_PASSWORD')。完成此操作后,用户名和密码将在以下环境变量中可用:USER_CREDENTIALS_USR和USER_CREDENTIALS_PSW。詹金斯总是在变量名的末尾添加_USR和_PSW结尾。

管道示例(我没有完全测试它,但应该可以工作):

pipeline {
    agent any

    environment {
        USER_CREDENTIALS = credentials('USER_PASSWORD')
    }

    stages {
        stage('Run') {
            steps {
                sh "echo $USER_CREDENTIALS_USR"
                sh "echo $USER_CREDENTIALS_PSW"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果得到****(四个星号)作为输出,就可以了-詹金斯会自动在控制台输出中屏蔽用户名和密码。

更多信息:https : //jenkins.io/doc/book/pipeline/jenkinsfile/#usernames-and-passwords。


小智 9

对于如何在bash脚本中使用参数化凭据参数用户名和密码作为环境变量,我找不到直接答案。以下为我工作:

  1. 添加凭据参数。我称它为“ CREDENTIALS”。凭据类型“用户名和密码”。 凭证参数截图
  2. 在构建环境中,选中“用户机密文本或文件。
  3. 添加一个“用户名和密码(分开的)绑定。我将用户名变量设置为USER,将密码变量设置为PW。对于凭据,请选择“参数表达式”,然后输入第一步中的名称。在这种情况下,它将是$ {CREDENTIALS} 。 凭证绑定屏幕截图
  4. 现在$ {USER}和$ {PW}可用于bash脚本。

  • 这应该被接受为答案。 (2认同)

Deu*_*ira 5

就我而言,我使用 withCredentials Credentials Binding Plugin解决了问题。

stage('Commit') {
   withCredentials([usernamePassword(credentialsId: 'hash', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
      sh 'svn commit xxx.ear -m "Comment" --username $USERNAME --password $PASSWORD'
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 他提到他想要 bash 脚本中的凭据,而不是管道中的凭据 (4认同)