将变量值从Powershell任务中的一个Powershell脚本传递到Azure DevOps发布管道中下一个Powershell任务中的另一个脚本

gmxoilav  于 2022-11-25  发布在  Shell
关注(0)|答案(1)|浏览(127)

我正在处理Azure DevOps发布管道。发布管道中的第一个任务是Powershell任务。此任务具有Powershell脚本内联。以下是该任务的内容:

steps:
- powershell: |
$repo = '$(Release.TriggeringArtifact.Alias)'

switch ( $repo )
{
   _repo-health { $result = 'Health'    }

}

$result
$Repo_Name = $result

Write-Output "$Repo_Name"

displayName: 'PowerShell Script'

因此,从上面的任务通过Powershell脚本,我尝试使用预定义的变量获取Repository名称,并将其分配给一个变量。
管道中的第二个任务是Powershell任务,其中包含Powershell脚本,内容如下-

# Write your PowerShell commands here.

Write-Output "$Repo_Name"

因此,当我尝试在正在打印的同一个任务中打印**"$Repo_Name”**时,如果我尝试在同一管道的另一个任务或阶段中打印或获取变量值,我无法打印它。因此,在此需要帮助。

vngu2lb8

vngu2lb81#

您使用第一个powershell脚本的特殊格式输出,这将告诉构建代理您要将一个变量设置为给定值:

Write-Host "##vso[task.setvariable variable=Repo_Name;]$Repo_Name"

从那时起,变量"Repo_Name"将具有powershell变量"$Repo_Name"的值。
然后,您可以在以下脚本/任务中引用该变量:

Write-Host "I got the value of $(Repo_Name) for the Repo_Name variable."

更多here的详细信息,尤其是检查isoutput=true修饰符,您可能需要根据变量应该具有的"作用域"添加该修饰符。
例如,如果您需要在下一阶段读取变量,则必须将其设置为:

Write-Host "##vso[task.setvariable variable=Repo_Name;isoutput=true]$Repo_Name"

相关问题