kubernetes 无法查看Jenkins凭据值

pgky5nke  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(5)|浏览(142)

我试图利用Jenkins credentials插件来存储我想注入到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'
        }
    }
    ...
}

字符串
然而,无论何时运行,我得到的都是被屏蔽的 * 值,即使我将它传递给shell脚本。下面是构建日志的一部分:
x1c 0d1x的数据
我需要配置什么才能访问未屏蔽的值吗?

myss37ts

myss37ts1#

将变量写入jenkins中的一个文件。转到jenkins工作区并查看文件内部。令牌将以纯文本形式显示在那里。
更新
更简单的方法是打印凭证的base64编码值,然后对其进行解码。

mm9b1k5b

mm9b1k5b2#

就像上面添加的其他人一样,你可以把它写进一个文件,然后在withCredentials之外cat这个文件。你应该可以做到这一点。如下所示。

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

字符串
这将打印实际的凭据值

o7jaxewo

o7jaxewo3#

直接从文件中回显对我不起作用,所以我这样欺骗Jenkins,让他在调试过程中看到秘密:显然,在调试后立即删除它!

stage('Build') {

            azureKeyVault(
            credentialID: 'my-sp', 
            keyVaultURL: 'https://my-kv.vault.azure.net', 
            secrets: [
                [envVariable: 'MY_SECRET', name: 'my-secret-name-in-azure-kv', secretType: 'Secret']
            ]
          ) {
                sh '''
                    echo -n $MY_SECRET | base64 > tmpp
                    cat tmpp
                '''
            }
        }

字符串

yizd12fk

yizd12fk4#

考虑操作字符串
第一个月

stages {
    stage('Build') {
        steps {
           withCredentials([usernamePassword(credentialsId: 'creds-test', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
               script {
                  echo env.USERNAME.toCharArray().join(' ');
                  echo env.PASSWORD.toCharArray().join(' ');
               }
               sh '''
                  chmod +x secrets-replace.sh
                  ./secrets-replace.sh USERNAME_PLACEHOLDER $USERNAME
                  ./secrets-replace.sh PASSWORD_PLACEHOLDER $PASSWORD
                '''
              }
              echo 'Building...'
              sh './gradlew build --refresh-dependencies'
        }
    }
    ...
}

字符串

j2datikz

j2datikz5#

如何在脚本控制台中查看所有secret值:

import jenkins.*
import jenkins.model.* 
import hudson.*
import hudson.model.*
def jenkinsCredentials = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
        com.cloudbees.plugins.credentials.Credentials.class,
        Jenkins.instance,
        null,
        null
);
for (creds in jenkinsCredentials) {
  println("${creds.id} = ${creds.secret}")
}

字符串

相关问题