首页 > 解决方案 > Azure 管道:基于 OS 的条件环境变量

问题描述

我正在尝试使我的环境变量依赖于代理操作系统

我写了以下内容test.yml,但它不起作用:

jobs:
  - job: Test
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - pwsh: |
          echo $env:TestVar
          echo $env:OS
        env:
          OS: $[variables['Agent.OS']]
          ${{ if eq(variables['Agent.OS'], 'Windows_NT') }}:
            TestVar: "I am Windows"
          ${{ if eq(variables['Agent.OS'], 'Linux') }}:
            TestVar: "I am Linux"

我的 YAML 缩进有问题吗?

标签: powershellazure-devopsazure-pipelinesazure-pipelines-yaml

解决方案


根据 Cece Dong 的回答,在这种语法中不能使用代理变量。达到相同效果的最简洁的方法就是使用 shell 来管理环境变量。

jobs:
  - job: Test
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - pwsh: |
           if ($env:AGENT_OS -eq "Windows_NT") {
             $env:TestVar="I am Windows"
           }
           if ($env:AGENT_OS -eq "Linux") {
             $env:TestVar="I am Linux"
           }

如果TestVar应该在另一个步骤中使用,则在之后使用:

           echo "##vso[task.setvariable variable=env:TestVar]$env:TestVar"


推荐阅读