我的 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")
}
这会在我的控制台日志中打印预期的警告,即秘密值不应以这种方式进行字符串插值,但它看起来并不像官方文档给出了您需要同时使用秘密+非秘密值的任何示例在单个内插字符串中,所以我认为可以做到的唯一方法是使用双引号,这有泄露秘密值的风险。还有其他方法还是我必须冒这个风险?
提出这个问题后,建议的“相关问题”有我需要的答案:
使用双引号,但对秘密值转义 $ 符号
".... \$USERNAME and \$PASSWORD"
。
然后,这对非秘密值使用常规字符串插值,但对忽略的
$
符号不使用常规字符串插值,对于这些符号,它们被设置为环境变量,就像单引号一样。