首页 > 解决方案 > Azure Devops Pipeline:定义变量并将其用作另一步骤的任务输入

问题描述

我有 Azure DevOps 发布管道作业,其中包含 4 个任务。

我想在第一个任务中设置环境变量,并将该值用作第二个任务的参数输入:显示名称。

我们可以假设所有 4 个步骤都是 PowerShell 脚本。

任务 1 Powershell:

Write-Host "##vso[task.setvariable variable=myvariable;]abcdefg"

任务 2 Powershell: 任务2

任务 2 中的 PowerShell:

Write-Host "$(myvariable)"

如何在任务 1 中设置变量并将其作为任务 2 的输入变量访问?

我的输出是:

Task2 - $(myvariable) 作为显示名称

但 PowerShell 脚本本身的输出是:

abcdefg

标签: azure-devopsazure-pipelinesazure-pipelines-release-pipeline

解决方案


写入主机“##vso[task.setvariable variable=myvariable;]abcdefg”

那是因为这个脚本创建的变量不是预定义的变量。

作为执行逻辑,在对管道进行排队后,即使脚本没有执行,也可以看到首先显示管道名称、任务名称。因此,如果这些名称使用变量来定义它们,则该变量可以从预定义的变量中获取值。因为管道/任务名称中变量值的编译总是先于执行的脚本。

另外,task中的脚本只是创建了一个脚本变量,这个脚本变量只存在于Phase的生命周期中,执行后销毁

如何在任务 1 中设置变量并将其作为任务 2 的输入变量访问?

如您所愿,如果在另一个脚本中获取它,只需使用$(xxx)or $env:xxx。但是,对于名称,$()只能获取预定义的变量值,而不是脚本变量值。


推荐阅读