首页 > 解决方案 > 禁止来自 Jenkins 日志的敏感信息

问题描述

我想禁止显示在日志中的一些敏感信息。

代码:

    pipeline {
    parameters {
    string(defaultValue: '', description: '', name: 'pki_client_cacert_password', trim: true)
    string(defaultValue: '', description: '', name: 'db_url', trim: true)
    }
    stages {
        stage('DeployToDev') {
                steps {
                    script{
                        env.artifacts = sh(
                        returnStdout: true, 
                        script: "/var/lib/jenkins/python_jobs/venv/bin/python3 /var/lib/jenkins/python_jobs/encrypter_creds.py --db_url=${env.db_url} --pki_client_cacert_password='${env.pki_client_cacert_password}'"
                        )
                    }

                }
            }
    }
}

输出:

+ /var/lib/jenkins/python_jobs/venv/bin/python3 /var/lib/jenkins/python_jobs/encrypter_creds.py --db_url=<hide this from jenkins logs> '--pki_client_cacert_password=<hide this from jenkins logs>'

标签: jenkinsjenkins-pipeline

解决方案


第一个选项是将其设置为环境变量:

withEnv(["MYSECRET=${params.pki_client_cacert_password}", 
         "MYURL=${env.db_url}"]) {
    env.artifacts = sh(
        returnStdout: true, 
        script: '.. python3 .. encrypter_creds.py --db_url=$MYURL ' +
            ' --pki_client_cacert_password=$MYSECRET'
)

注意命令周围的单引号以防止任何 Groovy 字符串插值。

第二种选择是将类似pki_client_cacert_password(希望不会有太大变化)之类的东西保存到 Jenkins Credentials Store 中并使用它withCredentials

withCredentials([usernamePassword(
  credentialsId: 'MY_PKI_CLIENT_CREDENTIALS',
  passwordVariable: 'DB_URL',
  usernameVariable: 'PKI_USER')]) {
  env.artifacts = sh(
        returnStdout: true, 
        script: '.. python3 .. encrypter_creds.py --db_url=$DB_URL' +
            ' --pki_client_cacert_password=$PKI_PASSWORD'

}

您还可以推出您自己的第三个选项,例如,将您需要的信息写入文件并修改您的脚本以从该文件中读取参数。


推荐阅读