在两个代理阶段之间传递发布变量

Passing release variables between two agent phases

我在本地使用 TFS。 我的问题是,在发布期间,我有两个代理阶段被手动干预分开。

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

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

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

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

无法持久化变量(无论是 powershell 变量还是 VSTS 用户定义的变量)两个代理阶段(和环境) ) 现在。

还有一个相关的issueVariables set via logging commands are not persistent between agents,可以跟进

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

我已使用 "Variable dehydration task" 将值写入构建管道中的工件文件夹。然后我用 inline-powershell 阅读了 json。目前,我正在阅读发布管道中的每项任务,这对我来说似乎很重要,但它确实有效。您应该能够设置全局或环境?变量并改用它。应该在 2017 年修复,但我使用的是 2015 年。

正确的方法是使用变量组在管道之间持久化:https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=yaml

您可以通过使用 TFS Rest API 并在版本中创建新变量来在代理阶段之间共享变量。

您可以创建一个辅助模块来完成这项任务。

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

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