inItiltilization后,TFS Build工作流自定义变量为空

时间:2014-08-18 18:08:34

标签: visual-studio tfs workflow-foundation-4 tfsbuild

我在工作流程的最高级别创建了自定义变量SourcesPathCreate Custom Variable SourcesPath

然后我初始化了它。 Initializes SourcesPath

我甚至在查看日志时看到了它的值。

00:00
Initialize Sources Directory
Initial Property Values
Value = C:\Builds\3\Project Demo\Sources
Final Property Values
To = C:\Builds\3\Project Demo\Sources
Value = C:\Builds\3\Project Demo\Sources

00:00
Initialize SourcesPath For Later Use
Initial Property Values
Value = C:\Builds\3\Project Demo\Sources
Final Property Values
To = C:\Builds\3\Project Demo\Sources
Value = C:\Builds\3\Project Demo\Sources

后来它被用在InvokeProcess活动中。 Later Use of SourcesPath

但是变量在运行时似乎是空的:

00:02
InvokeProcessSonar
Initial Property Values
Arguments = -X
EnvironmentVariables = 
FileName = c:\\Scan.bat
OutputEncoding = System.Text.SBCSCodePageEncoding
WorkingDirectory = \\Src\\Solution
c:\\Scan.bat
Final Property Values
Arguments =
EnvironmentVariables = 
FileName = c:\\Scan.bat
OutputEncoding = System.Text.SBCSCodePageEncoding
Result = 0
WorkingDirectory = \\Src\\Solution
Final Property Values
AgentSettings = Use agent where Name=* and Tags is empty; Max Wait Time: 04:00:00
AssociateChangesetsAndWorkItems = True
BuildNumberFormat = $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)
BuildSettings = Build $/ProjectDemo/Src/Solution/ProjectDemo.sln with default platform and configuration
CleanWorkspace = All
CreateLabel = True
DisableTests = False
DropBuild = False
GetVersion = 
MSBuildArguments = 
MSBuildPlatform = Auto
PerformTestImpactAnalysis = True
PrivateDropLocation = 
RunCodeAnalysis = AsConfigured
SourceAndSymbolServerSettings = Index Sources
TestSpecs = Run tests in assemblies matching **\*test*.dll
Verbosity = Diagnostic
 The directory name is invalid

我会错过什么吗?

2 个答案:

答案 0 :(得分:0)

该名称可能与嵌套作用域中的另一个变量发生冲突。

我通常会添加一个前缀(比如一个下划线_)来标记我的变量和活动,这样就可以很容易地发现标准内容和定制内容。

根本原因是假设变量值通过RunOnAgent无缝流动,而不是。 RunOnAgent范围是与工作流的其余部分完全隔离的上下文。 TFS负责单向编组(朝向RunOnAgent范围)但不反过来:只编译“构建信息”节点中的数据。请参阅Returning Values From An AgentScope

在您的情况下,您唯一的机会是在RunOnAgent范围内移动InvokeProcess。

答案 1 :(得分:0)

如果你想在工作流程结束时运行一些东西,我建议你把你的调用过程放在最后一步,这是Try Compile,Test和Publish的一部分,这将是代理范围内最后一件事。 ,你的变量应该仍然在上下文中