如何在Azure Devops bash任务中使用可能未定义的秘密变量

如何在Azure Devops bash任务中使用可能未定义的秘密变量,bash,azure-devops,azure-pipelines,azure-keyvault,Bash,Azure Devops,Azure Pipelines,Azure Keyvault,我试图在Azure Devops中使用bash任务创建配置文件。这些变量来自azure keyvault,所以我不知道哪些变量已定义,哪些未定义 -脚本:| touch config.txt echo“1.$(MyDefinedVariable)”>>config.txt echo“2.$(MyUndefinedVariable)”>>config.txt cat config.txt 由于未定义MyUndefinedVariable,因此管道不会替换$(MyUndefinedVariable

我试图在Azure Devops中使用bash任务创建配置文件。这些变量来自azure keyvault,所以我不知道哪些变量已定义,哪些未定义

-脚本:|
touch config.txt
echo“1.$(MyDefinedVariable)”>>config.txt
echo“2.$(MyUndefinedVariable)”>>config.txt
cat config.txt
由于未定义
MyUndefinedVariable
,因此管道不会替换
$(MyUndefinedVariable)
,从而导致bash错误
MyUndefinedVariable:command not found

我曾尝试使用
env
参数来使用bash变量,但由于“$(MyUndefinedVariable)”被传递到bash环境中,我得到了相同的错误

-脚本:|
touch config.txt
echo“1.$MY_DEFINED_VARIABLE”>>config.txt
echo“2.$MY\u未定义的\u变量”>>config.txt
cat config.txt
环境:
MY_定义的_变量:$(MyDefinedVariable)
MY_UNDEFINED_变量:$(MyUndefinedVariable)

我只想将未定义的变量解析为空字符串,但找不到合理的方法。从Azure KeyVault映射的所有变量都被视为机密,因此有必要进行如下映射:

env:
MY_定义的_变量:$(MyDefinedVariable)
MY_UNDEFINED_变量:$(MyUndefinedVariable)
我担心,如果您不知道KeyVault中的值,则需要使用来检查此项。要检查您可以使用的所有密钥,请执行以下操作:


您可以将此CLI与相结合。

从Azure KeyVault映射的所有变量都被视为机密,因此有必要进行如下映射:

env:
MY_定义的_变量:$(MyDefinedVariable)
MY_UNDEFINED_变量:$(MyUndefinedVariable)
我担心,如果您不知道KeyVault中的值,则需要使用来检查此项。要检查您可以使用的所有密钥,请执行以下操作:


您可以将此CLI与。

如何“不知道哪些变量已定义,哪些未定义”?这是非常重要的信息。@daniu我有一些不同的环境,有单独的密钥库,有些环境根本不需要所有的秘密。我可以为没有值的环境将空值添加到keyvault中,但我正在寻找一种解决方案,其中未定义的值会导致空字符串,而不是错误或意外地将“$(UndefinedVariable)”保留为值。@Mike Monteith没有获得您的最新信息,如果下面的答案有帮助,您可以,因此,它可以帮助其他社区成员谁得到同样的问题,我们可以存档此线程。或者,如果您有任何问题,请随意分享,谢谢。您如何“不知道哪些变量已定义,哪些变量未定义”?这是非常重要的信息。@daniu我有一些不同的环境,有单独的密钥库,有些环境根本不需要所有的秘密。我可以为没有值的环境将空值添加到keyvault中,但我正在寻找一种解决方案,其中未定义的值会导致空字符串,而不是错误或意外地将“$(UndefinedVariable)”保留为值。@Mike Monteith没有获得您的最新信息,如果下面的答案有帮助,您可以,因此,它可以帮助其他社区成员谁得到同样的问题,我们可以存档此线程。或者,如果您有任何问题,请随意分享,谢谢。好的,这样我就可以用这种方式手动将缺少的变量设置为空字符串。我曾认为,通过KeyVault任务和单独的bash script.IMHO,可以有一种更简单的方法来实现这一点。是或否。如果您知道可以使用哪些变量,则可以通过cli从密钥库获取所有密钥,比较并设置密钥库中不存在的密钥。但使用密钥vault任务获取其他密钥。记住关于env-mapping。好的,这样我就可以手动将缺少的变量设置为空字符串。我曾认为,通过KeyVault任务和单独的bash script.IMHO,可以有一种更简单的方法来实现这一点。是或否。如果您知道可以使用哪些变量,则可以通过cli从密钥库获取所有密钥,比较并设置密钥库中不存在的密钥。但使用密钥vault任务获取其他密钥。还记得环境映射吗。
az keyvault secret list [--id]
                        [--maxresults]
                        [--query-examples]
                        [--subscription]
                        [--vault-name]