我目前面临一个问题,我必须在同一个 shell 字符串中使用参数和凭据,这给我带来了很多麻烦。
在 Jenkins 中处理密码时,文档强调使用单引号以避免敏感变量的插值:
单引号示例:
但是,使用单引号会导致我的参数没有被插值,如下图所示:
因此,我找不到一个可以同时拥有两者的解决方案,正如我所见,这给我留下了以下选项之一:
有人知道是否可以将两者放在同一个字符串中或知道某种解决方法吗?
您可以使用双引号,但要对秘密变量转义
$
,如下所示:
sh("curl -u \$USERNAME:\$PASSWORD ${url}")
您还可以使用单引号:
sh('curl -u $USERNAME:$PASSWORD ' + url)
您可以与
withCredentials()
一起使用。
我不喜欢转义,所以我使用局部变量作为我的凭据:
withCredentials([usernamePassword(
credentialsId: 'vcs_manage',
passwordVariable: 'SECRET',
usernameVariable: 'USERNAME')]
) {
// Single quotes only used when necessary.
def secret = '$USERNAME:$SECRET'
// Can interpolate it with other vars.
sh("curl -u ${secret} ${url}")
}
通常我的
secret
var 以任何必要的格式同时包含用户名和密码。