无法看到 Jenkins 凭据值

Pad*_*ddy 3 jenkins jenkins-plugins kubernetes

我正在尝试利用 Jenkins 凭证插件来存储我想注入到我的 Kubernetes 集群中的 Secrets 中的敏感数据。我有一个 JenkinsFile ,它在我的项目中用于定义步骤,并且我添加了以下代码以从凭证中提取用户名/密码并传递给 shell 脚本以将文件中的占位符替换为实际文件:

stages {
    stage('Build') {
        steps {
           withCredentials([usernamePassword(credentialsId: 'creds-test', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
               sh '''
                  echo $USERNAME
                  echo $PASSWORD

                  chmod +x secrets-replace.sh
                  ./secrets-replace.sh USERNAME_PLACEHOLDER $USERNAME
                  ./secrets-replace.sh PASSWORD_PLACEHOLDER $PASSWORD
                '''
              }
              echo 'Building...'
              sh './gradlew build --refresh-dependencies'
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然而,每当它运行时,我得到的只是被屏蔽的 **** 值,即使我将它传递给 shell 脚本也是如此。这是构建日志的一部分:

詹金斯日志

我需要配置什么才能访问未屏蔽的值吗?

jos*_*eph 8

将变量写入 jenkins 中的文件。转到 jenkins 工作区并查看文件内部。令牌将以纯文本形式出现在那里。

更新

更简单的方法是打印base64凭证的编码值,然后对其进行解码。


小智 6

与上面添加的其他内容一样,您实际上可以将其写入文件,然后在 withCredentials 之外捕获该文件。你应该对此没问题。如下..

withCredentials([usernamePassword(credentialsId: 'creds-test', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
           sh '''
              echo $USERNAME > tmp
              echo $PASSWORD >> tmp
            '''
          }
          sh 'cat tmp'
Run Code Online (Sandbox Code Playgroud)

这会打印实际的凭证值

  • 这有效。请记住将 cat 命令保留在 Withcredentials 部分之外。 (2认同)