我有一个使用TFS构建和发布的Web应用程序。版本定义包含一个任务组,其中包含部署Web应用程序的所有必要步骤。
我要做的是确定一个特定值并将其存储在变量中,以便以后在其他发行任务的发行过程中使用。
此刻,任务组中的第一步是Powershell任务,该任务确定必需的值并将其存储在使用以下命令的环境变量中:
Write-Output ("##vso[task.setvariable variable=MyVar;]$var")
当我在下一个任务(同样是PowerShell任务)中使用此环境变量时,它可以使用以下命令按预期运行:
Write-Host "Doing stuf for: $env:MyVar"
当我想将变量用作怪异的(多个)不同任务的参数时。当环境变量没有默认值时,将使用第一个PowerShell任务的计算值,一切正常。但是,当环境变量没有默认值,并且在能够再次保存发行版定义之前强制提供一个默认值时,TFS不喜欢它。当我提供默认值时,将变量用作Task参数的任务将使用默认值,而不是计算值。我希望应该使用计算出的值,因为第二个PowerShell任务可确保正确存储计算出的值。
所以,我看到的症状是:
我在做错什么吗,还是我在使用环境变量时错了,应该使用其他方法吗?
答案 0 :(得分:2)
据我了解,您想在任务组中的powershell-task中定义变量,但是您也被迫在环境变量中提供一个值,导致该变量有时在powershell,有时具有在环境变量中定义的值。
解决方案是仅提供环境变量本身的名称,因此它始终会被您在powershell任务中设置的值覆盖。
来源:https://blogs.msdn.microsoft.com/harshillodhi/2016/11/29/vststfs-understanding-task-groups-and-its-various-use-cases-with-setvariable-logging-command/ 在标题“ 什么是setvariable日志记录命令以及如何将其与任务组一起使用?”下,引用了三个方案。听起来第二种情况可能符合您的需求。