Jenkins - 如何在同一 shell 字符串中使用凭据和参数?

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

我目前面临一个问题,我必须在同一个 shell 字符串中使用参数和凭据,这给我带来了很多麻烦。

在 Jenkins 中处理密码时,文档强调使用单引号以避免敏感变量的插值:

双引号示例: enter image description here

单引号示例:

enter image description here

但是,使用单引号会导致我的参数没有被插值,如下图所示:

String interpolation

因此,我找不到一个可以同时拥有两者的解决方案,正如我所见,这给我留下了以下选项之一:

  1. 我可以选择使用单引号,这会导致我的凭据 被屏蔽,但我的参数没有被插值。
  2. 我可以选择使用双引号,但是我的用户名和密码 不再被屏蔽,但我的参数正在被插值。

有人知道是否可以将两者放在同一个字符串中或知道某种解决方法吗?

jenkins groovy string-interpolation
2个回答
2
投票

您可以使用双引号,但要对秘密变量转义

$
,如下所示:

sh("curl -u \$USERNAME:\$PASSWORD ${url}")

您还可以使用单引号:

sh('curl -u $USERNAME:$PASSWORD ' + url)

您可以与

withCredentials()
一起使用。


0
投票

我不喜欢转义,所以我使用局部变量作为我的凭据:

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 以任何必要的格式同时包含用户名和密码。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.