在两个代理阶段之间传递释放变量

时间:2017-12-19 16:57:51

标签: tfs azure-devops azure-pipelines-release-pipeline

我正在使用TFS内部部署。 我的问题是,在发布期间,我有两个代理阶段由人工干预分开。

在第一个代理阶段,我设置了一个变量:

Write-Verbose $("##vso[task.setvariable variable={0};]{1}" -f $variablename, $variable)

问题是,在第二个代理阶段,即使同一个代理用于第二个发布阶段,该变量也不再存在。

如何在同一版本中在两个代理阶段之间传递变量?

4 个答案:

答案 0 :(得分:8)

目前无法在两个代理阶段(和环境)之间保留变量(无论是PowerShell变量或VSTS用户定义变量)

还有相关问题Variables set via logging commands are not persistent between agents,您可以跟进。

现在的解决方法是在下一个代理阶段再次定义变量。

答案 1 :(得分:0)

我已经使用“可变脱水任务”将值写入构建管道中的工件文件夹。然后我用inline-powershell读取了json。目前,我正在阅读我的发布管道中的每个任务,这对我来说似乎很精神,但它有点奏效。你应该能够设置全局或环境?变量并使用它代替。据称于2017年修复,但我正在使用2015年。

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以使用TFS Rest API并在发行版中创建新变量,从而在代理阶段之间共享变量。

您可以创建一个帮助程序模块来简化此任务。

  1. Get the release通过使用环境变量$Env:Release_ReleaseId
  2. 使用Add-Member向步骤1中返回的发行版的变量哈希表中添加一个NoteProperty,其中,名称是您想要的变量名称,值是ConfigurationVariableValue
  3. Save the release,并添加了变量。

为了使用这种方法,您需要在第一个代理中设置变量。然后,在第二个代理中,您可以简单地使用$(VariableName)语义读取TFS变量。