Jenkins Groovy 字符串插值使用秘密和非秘密值的组合[重复]

问题描述 投票:0回答:1

我的 Jenkins 脚本中有一个 shell 命令,它对非秘密值和秘密值使用字符串插值。

对于非秘密值,您应该使用双引号,并且字符串应如下所示:

def variable = 'myValue'
sh("echo variable has value: ${variable}")

对于秘密值(例如,使用凭据时),您应该使用单引号,这样就不会暴露秘密值:

withCredentials([usernamePassword(credentialsId: 'myCreds', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
    sh('echo username: $USERNAME, password: $PASSWORD')
}

但是,我有一个用例,我在同一个 shell 命令中使用秘密 + 非秘密值。在这种情况下,字符串插值的最佳实践是什么?

def variable = 'myValue'
withCredentials([usernamePassword(credentialsId: 'myCreds', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
    sh("variable has value: ${variable} and your creds are: username: $USERNAME, password: $PASSWORD")
}

这会在我的控制台日志中打印预期的警告,即秘密值不应以这种方式进行字符串插值,但它看起来并不像官方文档给出了您需要同时使用秘密+非秘密值的任何示例在单个内插字符串中,所以我认为可以做到的唯一方法是使用双引号,这有泄露秘密值的风险。还有其他方法还是我必须冒这个风险?

jenkins groovy string-interpolation
1个回答
0
投票

提出这个问题后,建议的“相关问题”有我需要的答案:

使用双引号,但对秘密值转义 $ 符号

".... \$USERNAME and \$PASSWORD"

然后,这对非秘密值使用常规字符串插值,但对忽略的

$
符号不使用常规字符串插值,对于这些符号,它们被设置为环境变量,就像单引号一样。

© www.soinside.com 2019 - 2024. All rights reserved.