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)
输出
所以,只需在同一个任务中设置值,它就应该可以工作。
希望这个回答对您有所帮助。
在接下来的 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)
输出
所以,只需在同一个任务中设置值,它就应该可以工作。 希望这个回答对您有所帮助。