看到这个问题,https://issues.jenkins-ci.org/browse/JENKINS-27392,你应该可以做到以下几点:
node {
wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: [[password: '123ADS', var: 'SECRET']]]) {
echo env['SECRET'];
}
}
但是,如果您查看该问题中的最后一个 cmets,它不起作用,似乎是一个错误。但是,如果您知道秘密并在日志中意外打印了 int ,则它会被隐藏,如下所示:
node {
wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: [[password: '123ADS', var: 'SECRET']]]) {
echo "123ADS";
}
}
这会产生:
[Pipeline] node
Running on master in workspace/pl
[Pipeline] {
[Pipeline] wrap
[Pipeline] {
[Pipeline] echo
********
[Pipeline] }
[Pipeline] // wrap
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
关于你得到的错误,No such DSL method '$' found among steps ...,我只是猜测,但你可能直接在管道脚本中使用${VAR},${...} 仅与 groovy 中的字符串内部相关。
编辑:
或者您可以使用Credentails Plugin 和管道步骤withCredentials:
// Credential d389273c-03a0-45af-a847-166092b77bda is set to a string secret in Jenkins config.
node {
withCredentials([string(credentialsId: 'd389273c-03a0-45af-a847-166092b77bda', variable: 'SECRET')]) {
bat """
if ["${SECRET}"] == ["123ASD"] echo "Equal!"
""";
}
}
这会导致:
[Pipeline] node
Running on master in workspace/pl
[Pipeline] {
[Pipeline] withCredentials
[Pipeline] {
[Pipeline] bat
[pl] Running batch script
workspace/pl>if ["****"] == ["****"] echo "Equal!"
"Equal!"
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
请注意,此插件将变量直接绑定到闭包,而不是其他环境,例如我可以直接使用变量SECRET。