【问题标题】:TFS Build workflow custom variable is empty after iniatilization初始化后 TFS 构建工作流自定义变量为空
【发布时间】:2014-08-18 18:08:34
【问题描述】:

我在工作流的最外层创建了一个自定义变量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 活动。

但变量在运行时似乎为空:

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

我有什么想念的吗?

【问题讨论】:

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


    【解决方案1】:

    如果您想在工作流结束时运行某些东西,我建议将您的调用过程放在最后,这是尝试编译、测试和发布的一部分,这将是在代理范围内触发的最后一件事,并且您的变量应该仍然在上下文中

    【讨论】:

    • 谢谢@JustTFS。我设法将 InvokeProcess 活动移动到 Agent 范围内,并使用内置 SourcesDirectory 变量作为活动的输入。现在一切正常。
    【解决方案2】:

    可能是该名称与嵌套范围内的另一个变量发生冲突。

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

    根本原因是假设变量值通过 RunOnAgent 无缝流动,但事实并非如此。 RunOnAgent 范围是与工作流的其余部分完全隔离的上下文。 TFS 负责以一种方式(朝向 RunOnAgent 范围)进行封送处理,但不会以另一种方式进行编组:仅构建信息节点中的数据。见Returning Values From An AgentScope

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

    【讨论】:

    • 我已经查看了工作流的分步执行日志。没有发现名称冲突。
    • 听起来没有推送到代理作用域。假定代理范围与调用者不共享任何内容,因此需要注意一些问题。
    • 我会将您的声明移至代理范围。您使用的是哪个版本的 TFS?
    • TFS 服务器 2010。V​​isual Studio 2012。我无法将 InvokeProcessSonar 活动移动到代理范围,因为它必须在工作流的最后执行。
    • InvokeProcess 与Assign 的作用域相同?
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多