我正在开发一个 Azure DevOps 管道,需要将环境变量传递到作业模板。我不想将这些环境变量作为单个字符串传递,而是将它们作为对象传递以获得更好的可管理性。
作为字符串(当前方法 - 有效,但很hacky):
parameters:
- name: envVars
type: string
default: ""
...
- script |
${{ parameters.envVars}} <rest of command>
...
作为一个对象:
parameters:
- name: envVars
type: object
default: { ENV_VAR: "value_example" }
- script |
<rest of command>
env:
${{ parameters.envVars }}
在第二种情况下,我希望 Azure DevOps 正确解开 envVars 对象,并且相当于拥有
env:
ENV_VAR: "value_example"
ENV_VAR_B: "other_value"
...
# can still have other environment variables here that are not present in envVars
但是,我没有从 Azure DevOps 中找到任何与此相关的正确文档,并且不确定解开 envVars 对象并将其传递给脚本的最佳方法是什么。对此设置的任何指导或改进将不胜感激!
我不想将这些环境变量作为单个字符串传递,而是将它们作为对象传递以实现更好的可管理性。
为了满足您的需求,您可以使用以下参数格式来定义对象环境值。
parameters:
- name: envVars
type: object
default:
ENV_VAR: "value_example"
ENV_VAR_B: "other_value"
steps:
- script: |
echo $ENV_VAR
echo $ENV_VAR_B
env:
${{ parameters.envVars }}
但是如果使用
env
字段中的参数,则不支持添加额外的env值。
例如:
- script: |
echo $ENV_VAR
echo $ENV_VAR_B
env:
${{ parameters.envVars }}
test: test1
它将显示以下错误:
作为解决方法,您可以在 YAML 管道中定义变量,该变量将自动映射到环境变量。
例如:
variables:
test: test1
parameters:
- name: envVars
type: object
default:
ENV_VAR: "value_example"
ENV_VAR_B: "other_value"
steps:
- script: |
echo $ENV_VAR
echo $ENV_VAR_B
echo $test
env:
${{ parameters.envVars }}
结果: