当詹金斯运行管道时,我正在尝试在Groovy中交换字符串的一部分。这就是我所拥有的:
def secrets = [
'abc-${env}' : [secret('my-api', 'MY_API_URL')],
'xyz${my_env}kv' : [secret('my-other-api', 'MY_OTHER_API_URL')
]
env
旁边的abc
变量似乎已正确换出,但my_env
和xyz
之间的kv
却未正确替换。
詹金斯给我这个错误:
原因: org.jenkinsci.plugins.azurekeyvaultplugin.AzureKeyVaultException: 无法从金库https://xyz中检索秘密的my-other-api $ {my_env} kv.vault.azure.net/,错误消息:命名捕获组为 缺少结尾的'}'
有什么主意为什么不能替换my_env
?
答案 0 :(得分:0)
似乎您正在尝试使用带内插${my_env}
变量的字符串。为了使其正常工作,您需要使用双引号而不是单引号。例如,如果my_env
变量设置为dev
,则以下构造:
def secrets = [
"abc-${env}" : [secret('my-api', 'MY_API_URL')],
"xyz${my_env}kv" : [secret('my-other-api', 'MY_OTHER_API_URL')]
]
将产生如下图:
def secrets = [
'abc-dev': [secret('my-api', 'MY_API_URL')],
'xyzdevkv': [secret('my-other-api', 'MY_OTHER_API_URL')]
]
(单引号始终表示规则的Java字符串,而内部带有变量的双引号将编译为GString,并且变量会正确插值。)