捕获组中的Groovy交换字符串

时间:2019-04-30 10:58:32

标签: jenkins groovy

当詹金斯运行管道时,我正在尝试在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_envxyz之间的kv却未正确替换。

詹金斯给我这个错误:

  

原因:   org.jenkinsci.plugins.azurekeyvaultplugin.AzureKeyVaultException:   无法从金库https://xyz中检索秘密的my-other-api   $ {my_env} kv.vault.azure.net/,错误消息:命名捕获组为   缺少结尾的'}'

有什么主意为什么不能替换my_env

1 个答案:

答案 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,并且变量会正确插值。)