环境变量作为 Azure DevOps 管道中类型对象的参数

问题描述 投票:0回答:1

我正在开发一个 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 对象并将其传递给脚本的最佳方法是什么。对此设置的任何指导或改进将不胜感激!

azure-devops azure-pipelines azure-pipelines-yaml
1个回答
0
投票

我不想将这些环境变量作为单个字符串传递,而是将它们作为对象传递以实现更好的可管理性。

为了满足您的需求,您可以使用以下参数格式来定义对象环境值。

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

它将显示以下错误:

enter image description here

作为解决方法,您可以在 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 }}

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.