Jenkins Pipeline:如何在控制台日志中隐藏密码/字符串?

hxzsmxv2  于 2023-04-29  发布在  Jenkins
关注(0)|答案(1)|浏览(334)

我有一个Jenkins管道,它做了以下事情:

  • 将另一个存储库检出到工作区
  • 在流水线中,它执行一个shell脚本,该脚本:cd到该存储库中,然后执行一个python脚本,该脚本将帐户名(svc_account)和密码/令牌作为args。

这些密码/令牌从凭证(commons)传递到jenkinsfile中,即:

def setupUserPWdBindingVars(credentialsIdToUse = credID) {
    this.steps.withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: credentialsIdToUse, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
        this.env.USERNAME = this.env.USERNAME
        this.env.PASSWORD = this.env.PASSWORD
    }
}

jenkinsfile:

stage('Run shell script') {
        steps {
            script {
                commons.setupUserPWBindingVars(credID)
                catchError(stageResult: 'FAILURE') {
                                          withEnv([
                        "USERNAME=${USERNAME}",
                        "PASSWORD=${PASSWORD}",
                    ]) {
                        commons.executeShellScriptFromFile('run_shell_script.sh')
                    }
                }
            }
        }
    }

run_shell_script。sh:

#!/bin/bash -xe
cd ${WORKSPACE}/my_repo
python3 running_myScript.py ${USERNAME} ${PASSWORD}

我们看到的问题是,当我们打开控制台日志时,我们可以看到密码/令牌。即控制台输出:

12:38:15  + python3 running_myScript.py  svc_account '<<my password/token exposed>>'
ttcibm8c

ttcibm8c1#

我认为,你的问题是由于使用
commons.executeShellScriptFromFile
如果您尝试执行shell命令或脚本的官方步骤

def output = sh(returnStdout: true, returnStdoutTrim: true, script: 'cat foo.txt')
echo "Output: '${output}'"

不打印值。

示例

def bashScript = """
#!/bin/bash -xe
python3 running_myScript.py \${USERNAME} \${PASSWORD}                   
"""

def pythonScript = """
print("Im the python")
"""

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                script {
                    writeFile(file: 'run_shell_script.sh', text: bashScript)
                    writeFile(file: 'running_myScript.py', text: pythonScript)
                    
                    def USERNAME="foo"
                    def PASSWORD="bar"
                    sh "chmod +x run_shell_script.sh"
                    sh "./run_shell_script.sh"
                }
            }
        }
    }
}

输出

正如您所看到的,日志不包含可感知的数据,只包含执行结果

Im the python

相关问题