我有一个基于 Jenkinsfile
的参数化 Jenkins 管道.一些参数包含我不想出现在作业的构建日志中的敏感密码。
所以我的问题是:我可以以某种方式在 Jenkinsfile
中注册一个字符串吗?然后被替换 - 比方说 **********
- 每当它出现在日志输出中?
我知道 withCredentials
步骤,但我无法使用它,因为凭据未存储在 Jenkins 凭据存储中(但在运行时作为参数提供)。
我在这里找到了这个答案 https://stackoverflow.com/a/42372859/1549950并像这样尝试:
def secrets = [
[password: firstPassword, var: 'SECRET'],
[password: secondPassword, var: 'SECRET'],
[password: thirdPassword, var: 'SECRET']
]
node() {
wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: secrets]) {
// my stages containing steps...
}
}
哪里
firstPassword
, secondPassword
, thirdPassword
是包含我的密码的变量。但我仍然得到了 firstPassword
的内容...在日志输出中显示纯文本。我有 Mask Password plugin安装在我的 Jenkins 版本 2.12.0 上。
基本上我正在寻找这样的东西:https://issues.jenkins-ci.org/browse/JENKINS-27486 - 票已解决,但没有给出最终实现的示例片段。
最佳答案
实际上我不知道为什么这首先不起作用,但这是问题的解决方案。
定义一个包含要隐藏的 secret 的数组,如下所示:
def splunkPassword = 'verySecretPa55w0rd'
def basicAuthPassword = 'my8asicAuthPa55w0rd'
def getSecrets() {
[
[password: splunkPassword, var: 'SECRET'],
[password: basicAuthPassword, var: 'SECRET']
]
}
免责声明:我不知道
SECRET
value 有重要作用,从某个片段复制并粘贴它,它按预期工作:)之后,您可以在 中包裹任何电话。脚本化管道 像这样:
node {
wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: getSecrets()]) {
stage 'First Stage' { ... }
stage 'Second Stage' { ... }
}
}
getSecrets()
中提供的所有密码数组将在您的构建输出中像这样被屏蔽:SPLUNK_PASSWORD: ********
BASIC_AUTH_ADMIN_PASSWORD: ********
关于jenkins - 在 Jenkins Pipeline 日志输出中隐藏密码而不使用 WithCredentials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52551232/