DevOps发布管道中Write-Host设置变量的部署组作用域问题
关于Azure DevOps发布管道中
task.setvariable变量作用域的问题解答 问题结论
默认情况下,你用Write-Host "##vso[task.setvariable variable=ReleasePipelineRunTime]"设置的变量仅作用于当前部署组内的后续任务,无法自动传递到后续部署组,所以后续部署组中变量恢复默认值是符合预期的行为。
实现跨部署组共享变量的两种方法
方法1:使用isoutput选项
这个选项完全适用于发布管道,发布任务同样有唯一ID,步骤如下:
- 获取任务ID:编辑发布管道,进入设置变量的PowerShell任务配置页,点击右上角的「查看任务ID」;或者直接查看浏览器地址栏,找到
taskId=后面的字符串(比如PowerShell_12345)。 - 修改设置变量的脚本:添加
isoutput=true参数:
$now=$(Get-Date -Format "yyyyMMddHHmm"); "now: $now" Write-Host "##vso[task.setvariable variable=ReleasePipelineRunTime;isoutput=true]$now"
- 在后续部署组中读取变量:使用
$(任务ID.ReleasePipelineRunTime)的格式调用,比如任务ID是PowerShell1,就写$(PowerShell1.ReleasePipelineRunTime)。
方法2:设置为发布级全局变量
如果需要变量在整个发布管道的所有部署组中直接可用,可以将变量设置为发布级变量,用以下命令替换原脚本中的设置语句:
$now=$(Get-Date -Format "yyyyMMddHHmm"); "now: $now" Write-Host "##vso[release.setvariable variable=ReleasePipelineRunTime]$now"
设置完成后,后续所有部署组的任务都可以直接用$(ReleasePipelineRunTime)读取该变量的新值。
内容的提问来源于stack exchange,提问作者kevins1966
相关产品推荐
相关产品推荐

