在Jenkinsfile
:
properties([
parameters([
password(name: 'KEY', description: 'Encryption key')
])
])
每次执行管道时,Jenkins都会提示用户提供其值:
我希望屏蔽此参数,以便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管道一起使用,因此使用它不是一种选择。
有没有办法在构建日志中屏蔽这些密码类型的参数?
答案 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块中屏蔽。