Jenkins管道凭证单引号vs双引号插值



我在这里使用第一个例子得到这个Warning: A secret was passed to "httpRequest" using Groovy String interpolation, which is insecure。我把keyvar = credentials('key_id')作为一个环境变量并把它像这样放在

def response = httpRequest url: "https://url...", 
customHeaders: [[name: 'Authorization', value: "${keyvar}"]]...

这工作,但不是如何正确地完成在本文档中所描述的,所以接下来,我尝试了它在这里的建议,使用单引号和没有括号。

def response = httpRequest url: "https://url...", 
customHeaders: [[name: 'Authorization', value: '$keyvar']]...

这解决了第一个错误,但现在我得到Response Code: HTTP/1.1 401 Unauthorized,这对我来说,意味着插值不能在单引号内工作,如文档所描述的。

为了使Matt Schuchard在评论中的答案更清楚,以便将来的人偶然发现这一点-您需要删除字符串插值并直接传递变量:

def response = httpRequest url: "https://url...", 
customHeaders: [[name: 'Authorization', value: keyvar]]...

这也适用于需要额外前缀的头文件(例如Bearer):

def response = httpRequest url: "https://url...", 
customHeaders: [[name: 'Authorization', value: 'Bearer ' + keyvar]]...

是安全的,而

def response = httpRequest url: "https://url...", 
customHeaders: [[name: 'Authorization', value: "Bearer $keyvar"]]...

代替httpRequest方法,我有aliOssUpload方法。如果直接将实参传递给实参而不将其重转换为字符串,则无法工作。

可以通过转义$keyvar

来解决插值警告。