Azure 如何在不创建任务组参数的情况下在任务组中使用密钥库机密

Azure 如何在不创建任务组参数的情况下在任务组中使用密钥库机密,azure,azure-devops,azure-pipelines,azure-keyvault,Azure,Azure Devops,Azure Pipelines,Azure Keyvault,我在Azure DevOps中有一个任务组,负责执行以下任务(以及其他任务): 1-从钥匙库中读取秘密 2-将应用程序的设置设置/更新为密钥库中的机密 鉴于上述任务,我希望在任务组中使用的唯一参数是从中获取机密的密钥库的名称。问题是,由于第二个任务使用一个变量(由任务1设置),任务组将创建一个名为“FooKeyVaultKey”的新参数 我试着用不同的方式访问变量,但只有使用括号才有效 $(FooKeyVaultKey) - works, but creates parameter ${{F

我在Azure DevOps中有一个任务组,负责执行以下任务(以及其他任务):

1-从钥匙库中读取秘密

2-将应用程序的设置设置/更新为密钥库中的机密

鉴于上述任务,我希望在任务组中使用的唯一参数是从中获取机密的密钥库的名称。问题是,由于第二个任务使用一个变量(由任务1设置),任务组将创建一个名为“FooKeyVaultKey”的新参数

我试着用不同的方式访问变量,但只有使用括号才有效

$(FooKeyVaultKey) - works, but creates parameter
${{FooKeyVaultKey}} - doesn't work
${FooKeyVaultKey} - doesn't work
$[FooKeyVaultKey] - doesn't work

这是不可能的,你正在努力实现。这是用英文写的

基础任务中的所有“$(变量)”,不包括预定义变量,都将作为新创建的任务组的必需参数出现

例如,假设您有一个任务输入$(foobar),您不打算将其参数化。但是,创建任务组时,任务输入将转换为任务组参数“foobar”。现在,您可以将任务组参数“foobar”的默认值设置为$(foobar)。这确保了在运行时,扩展的任务获得与预期相同的输入


简单的技巧是使用嵌套在变量表达式中的空白表达式(microsoft称之为宏语法):

$($()foo)
这样就不会为任务组创建参数

编辑:
我注意到一些不一致的行为,有时应用程序配置会被设置为字面上的
$($()foo)

,这就是我当时所做的。如果有一个复杂变量
$($(foo)bar)
,其中“foo”的值为空,则运行时将尝试查找变量$(bar)。这也不会创建任务组参数。我想如果这种情况存在,那么一定有一个表达式不会创建参数。在我们的管道中验证了这一点,它工作正常,但看起来很难看。希望有另一个表达能涵盖这个场景。真的很好的发现!这确实是一个令人惊讶的解决方案。感谢您在此处分享您的解决方案,您可以接受它作为答案,这样它可以帮助其他社区成员解决同样的问题,我们可以存档此线程,谢谢。@LeoLiu MSFT我编辑了答案。我发现这个解决方案不能提供一致的结果。除非有人进行彻底的测试或提供更好的解决方案,否则我认为最好现在就保持这个线程。
$($()foo)