如何在Jenkins管道项目中屏蔽密码字段?

时间:2017-10-10 06:24:14

标签: jenkins jenkins-plugins jenkins-pipeline

Jenkinsfile

中定义密码属性时
properties([
    parameters([
        password(name: 'KEY', description: 'Encryption key')
    ])
])
每次执行管道时,Jenkins都会提示用户提供其值:

Build parameters

我希望屏蔽此参数,以便echo ${KEY}不会打印用户传递的实际值。但是,在回显时它会逐字打印提供的值:

properties([
    parameters([
        password(name: 'KEY', description: 'Encryption key')
    ])
])

node {
    stage('Stage 1') {
        # Will print the actual value of the KEY, verbatim
        sh "echo ${KEY}"
    }
}

似乎Mask Passwords插件无法与Jenkins管道一起使用,因此使用它不是一种选择。

有没有办法在构建日志中屏蔽这些密码类型的参数?

2 个答案:

答案 0 :(得分:4)

您想要使用mask passwords plugin。这是Jenkinsfile取自my shared pipeline library的示例。

properties([
    parameters([
        password(name: 'KEY', description: 'Encryption key')
    ])  
])  

node {
    stage('Stage 1') {
       // Will print the masked value of the KEY, replaced with ****
       wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: [[var: 'KEY', password: KEY]], varMaskRegexes: []]) {
            sh "echo ${KEY}"
        }   
    }   
}

withCredentials的现有建议外,其他内容并不多。但是,如果您通过模板自动生成工作并且设置了默认密码,则可能需要使用hudson.util.Secret来保护模板。

答案 1 :(得分:1)

您可以使用Jenkins Credentials plugin。使用此插件,您可以创建一个带有ID的凭据,以便在您的管道中使用:

代码将是:

withCredentials([string(credentialsId: 'pass', variable: 'password1')]) {
     echo "My password is '${password1}'!"
}

在您的用户案例中:

node {
    stage('Echo') {
        withCredentials([string(credentialsId: 'pass', variable: 'password1')]) {
            echo "'${password1}'!"
        }
    }
}
  

注意:密码只会在withCredentials块中屏蔽。