Azure DevOps yaml 使用“##vso[task.setvariable”传递变量不起作用

Azure DevOps yaml passing variable using "##vso[task.setvariable" not working

在接下来的 yaml 阶段(下面给出的代码),我试图将参数 envList 转换为特定的环境名称。 例如envList = "NameDevEnv, NameQAEnv, NameStageEnv, NameProdEnv"

我正在尝试传递 NameDevEnv、NameQAEnv、NameStageEnv 和 NameProdEnv 以在 yaml 中分隔 variable/parameters,然后将这些名称传递给模板,以便使用给定的名称创建这些环境。

以下代码未打印变量一的正确值。即我期待最后一条语句,echo $(one) 打印 NameDevEnv.

请指教/协助。 谢谢

stages:
  - stage: preWork
    jobs: 
     - job: convert_input
       continueOnError: false
       steps: 
         - script: |
              htring="${{parameters.envlist}}"
              echo $htring
              IFS=', ' read -r -a array <<< "$htring"
              echo "${array[0]}"
              htringz="${array[0]}"
              
              echo ${{ variables.one }} # outputs initialValue
              echo $(one)
              echo $htringz
             ## $htringz = $htring.split(",")[0]
           displayName: first vairable pass
         - bash: echo "##vso[task.setvariable variable=one;isOutput=true;]$htringz"
           displayName: set new variable value
         - script: |
               echo ${{ variables.one }} # outputs initialValue
               echo $(one)

您在任务“第一个变量传递”中设置 htringz 的值,并在任务更改后立即在另一个任务“设置新变量值”中使用该值,该任务的局部变量不会转移到另一个任务。 如果要将值设置为变量一,请在同一任务中执行。

阶段我用作示例,使用 bash 而不是脚本,因为我更喜欢 bash 用于 echo.

等语句
stages:
  - stage: preWork
    jobs: 
     - job: convert_input
       continueOnError: false
       steps: 
         - bash: |
              htringz="Test"
              echo "##vso[task.setvariable variable=one]$htringz"
           displayName: first vairable pass
         - bash: echo $(one)

输出

另一个阶段,具有获取值的单独任务和设置值的单独任务

stages:
  - stage: preWork
    jobs: 
     - job: convert_input
       continueOnError: false
       steps: 
         - bash: |
              htringz="Test"
           displayName: first vairable pass
         - bash: |
               echo $htringz
               echo "##vso[task.setvariable variable=one]$htringz"
               echo "=================="
               echo $(one)

输出

所以,只需在同一个任务中设置值,它就应该可以工作。 希望这个回答对您有所帮助。