我正在使用TFS内部部署。 我的问题是,在发布期间,我有两个代理阶段由人工干预分开。
在第一个代理阶段,我设置了一个变量:
Write-Verbose $("##vso[task.setvariable variable={0};]{1}" -f $variablename, $variable)
问题是,在第二个代理阶段,即使同一个代理用于第二个发布阶段,该变量也不再存在。
如何在同一版本中在两个代理阶段之间传递变量?
答案 0 :(得分:8)
目前无法在两个代理阶段(和环境)之间保留变量(无论是PowerShell变量或VSTS用户定义变量)。
还有相关问题Variables set via logging commands are not persistent between agents,您可以跟进。
现在的解决方法是在下一个代理阶段再次定义变量。
答案 1 :(得分:0)
我已经使用“可变脱水任务”将值写入构建管道中的工件文件夹。然后我用inline-powershell读取了json。目前,我正在阅读我的发布管道中的每个任务,这对我来说似乎很精神,但它有点奏效。你应该能够设置全局或环境?变量并使用它代替。据称于2017年修复,但我正在使用2015年。
答案 2 :(得分:0)
正确的方法是使用变量组在管道之间持久化:https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=yaml
答案 3 :(得分:0)
您可以使用TFS Rest API并在发行版中创建新变量,从而在代理阶段之间共享变量。
您可以创建一个帮助程序模块来简化此任务。
$Env:Release_ReleaseId
。Add-Member
向步骤1中返回的发行版的变量哈希表中添加一个NoteProperty,其中,名称是您想要的变量名称,值是ConfigurationVariableValue。为了使用这种方法,您需要在第一个代理中设置变量。然后,在第二个代理中,您可以简单地使用$(VariableName)
语义读取TFS变量。