TFS 生成复制目录错误未停止生成
本文关键字:错误 复制 TFS | 更新日期: 2023-09-27 18:31:19
我的构建模板中有一个 CopyDirectory 步骤,我假设如果它找到一个不存在的目录,它会抛出错误。但是,它只是抛出警告,并且构建本身被标记为成功。
我试图将其包裹在 try/catch 块周围,并手动执行"抛出"异常步骤,但仍然不起作用。我试图将构建状态设置为失败,但这也不起作用。我还有其他方法可以实现这一点吗?如果任何复制目录失败,我不希望构建成功。
编辑:
这是复制目录所在的代码段。我正在循环浏览服务器列表并复制一堆目录。
<ForEach x:TypeArguments="x:String" sap2010:WorkflowViewState.IdRef="ForEach`1_4" Values="[SCCDServers]">
<ActivityAction x:TypeArguments="x:String">
<ActivityAction.Argument>
<DelegateInArgument x:TypeArguments="x:String" Name="server" />
</ActivityAction.Argument>
<Sequence sap2010:WorkflowViewState.IdRef="Sequence_37">
<mtbwa:CopyDirectory Destination="[server]" DisplayName="Copy Code Files" sap2010:WorkflowViewState.IdRef="CopyDirectory_14" Source="[BuildDetail.DropLocation & "'_PublishedWebsites'" & SCWebOutputFolder]" />
<mtbwa:WriteBuildMessage sap2010:WorkflowViewState.IdRef="WriteBuildMessage_16" Importance="[Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High]" Message="["Code Files copied to " & server]" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" />
<mtbwa:CopyDirectory Destination="[server]" DisplayName="Copy Config Files" sap2010:WorkflowViewState.IdRef="CopyDirectory_15" Source="[BuildDetail.DropLocation & "'_PublishedWebsites'" & SCConfigSourceFolder & "'" & SCCDServerRole]" />
<mtbwa:WriteBuildMessage sap2010:WorkflowViewState.IdRef="WriteBuildMessage_17" Importance="[Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High]" Message="["Config Files copied to " & server & Environment.NewLine & "Copied from: " & BuildDetail.DropLocation & "'_PublishedWebsites'" & SCConfigSourceFolder & "'" & SCCDServerRole]" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" />
<mtbwa:CopyDirectory Destination="[server]" DisplayName="Copy Sitecore Files" sap2010:WorkflowViewState.IdRef="CopyDirectory_16" Source="[BuildDetail.DropLocation & "'_PublishedWebsites'" & SCSitecoreFilesSourceFolder]" />
<mtbwa:WriteBuildMessage sap2010:WorkflowViewState.IdRef="WriteBuildMessage_18" Importance="[Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High]" Message="["Sitecore Files copied to " & server & Environment.NewLine & "Copied from: " & BuildDetail.DropLocation & "'_PublishedWebsites'" & SCSitecoreFilesSourceFolder]" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" />
</Sequence>
</ActivityAction>
</ForEach>
CopyDirectory
确实有一个错误,仅在源目录不存在时才发出警告。它还存在长路径(>248 个字符)的问题。
可能的解决方法:
- 使用
InvokeCommand
,运行Robocopy.exe
(比xcopy
更好)并检查其结果代码。 - 如果必须使用
CopyDirectory
,请检查源目录是否存在。
那你为什么不使用"InvokeProcess"活动呢?
- 选择活动,打开底部的"变量"选项卡。
- 添加 Int32 类型的变量"结果代码"。此变量将包含复制过程中的退出代码。
- 将"调用进程"活动添加到工作流中。
- 打开"InvokeProcess"活动,并将"WriteBuildMessage"活动放在"处理标准输出"部分中。
- 将"重要性"属性设置为 Microsoft.TeamFoundation.Build.Client.BuildMessageImportant.High。将"消息"属性设置为"标准输出"。
- 将 WriteBuildError 活动的实例拖放到"处理错误输出"部分将"消息"属性设置为 errOutput
- 现在设置"调用进程"属性 文件名:"xcopy" Agruments: "Source" "Destination" ''s ''e ''y 结果:结果代码
- 检查"结果代码"值。我使用 IF 活动并检查条件"结果代码<> 0"。在"THEN"部分中,添加一个"THROW"活动并添加异常:"新异常("复制文件时出错")
详情请见此处
如果复制失败,请在自定义工作流中将 setbuildproperties 状态设置为失败。
<mtbwa1:SetBuildProperties DisplayName=“Set build status failed“ PropertiesToSet=“Status“ Status=“[Microsoft.TeamFoundation.Build.Client.BuildStatus.Failed]“ />
http://msdn.microsoft.com/en-us/library/bb399143(v=vs.100).aspx