3

我的构建模板中有一个 CopyDirectory 步骤,我假设如果它找到一个不存在的目录,它会抛出错误。但是,它只是发出警告,并且构建本身被标记为成功。

我试图将它包裹在一个 try/catch 块中,并手动执行了一个“抛出”异常步骤,但仍然没有用。我试图将 buildStatus 设置为失败,但这也不起作用。我可以通过其他方式实现这一目标吗?如果任何复制目录失败,我不希望构建成功。

编辑:

这是复制目录所在的片段。我正在遍历服务器列表并复制一堆目录。

<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 &amp; &quot;\_PublishedWebsites\&quot; &amp; SCWebOutputFolder]" />
                    <mtbwa:WriteBuildMessage sap2010:WorkflowViewState.IdRef="WriteBuildMessage_16" Importance="[Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High]" Message="[&quot;Code Files copied to &quot; &amp; 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 &amp; &quot;\_PublishedWebsites\&quot; &amp; SCConfigSourceFolder &amp; &quot;\&quot; &amp; SCCDServerRole]" />
                    <mtbwa:WriteBuildMessage sap2010:WorkflowViewState.IdRef="WriteBuildMessage_17" Importance="[Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High]" Message="[&quot;Config Files copied to &quot; &amp; server &amp; Environment.NewLine &amp; &quot;Copied from: &quot; &amp; BuildDetail.DropLocation &amp; &quot;\_PublishedWebsites\&quot; &amp; SCConfigSourceFolder &amp; &quot;\&quot; &amp; 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 &amp; &quot;\_PublishedWebsites\&quot; &amp; SCSitecoreFilesSourceFolder]" />
                    <mtbwa:WriteBuildMessage sap2010:WorkflowViewState.IdRef="WriteBuildMessage_18" Importance="[Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High]" Message="[&quot;Sitecore Files copied to &quot; &amp; server &amp; Environment.NewLine &amp; &quot;Copied from: &quot; &amp; BuildDetail.DropLocation &amp; &quot;\_PublishedWebsites\&quot; &amp; SCSitecoreFilesSourceFolder]" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" />
                  </Sequence>
                </ActivityAction>
              </ForEach>
4

3 回答 3

2

那你为什么不使用“InvokeProcess”活动呢?

  1. 选择活动,打开底部的变量选项卡。
  2. 添加一个 Int32 类型的变量“ResultCode”。此变量将包含复制过程的退出代码。
  3. 将“InvokeProcess”活动添加到您的工作流程中。
  4. 打开“InvokeProcess”活动并将“WriteBuildMessage”活动放入Handle Standard Output 部分。
  5. 将 Importance 属性设置为 Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High。将 Message 属性设置为 stdOutput。
  6. 将 WriteBuildError 活动的实例拖放到 Handle Error Output 部分 将 Message 属性设置为 errOutput
  7. 现在设置 "InvokeProcess" 属性 FileName: "xcopy" Agruments: "Source" "Destination" \s \e \y 结果:ResultCode
  8. 检查“ResultCode”值。我使用 IF 活动并检查条件“ResultCode <> 0”。在“THEN”部分中添加“THROW”活动并添加异常:“New Exception(“Error copying files”)

详情在这里

于 2013-09-16T18:42:38.147 回答
2

CopyDirectory确实有一个错误,仅在源目录不存在时才发出警告。它还存在长路径(> 248 个字符)的问题。

可能的解决方法:

  1. 使用InvokeCommand、运行Robocopy.exe(优于xcopy)并检查其结果代码。
  2. 如果必须使用CopyDirectory,请自行检查源目录是否存在。
于 2013-09-23T14:44:09.397 回答
0

如果复制失败,请在您的自定义工作流程中将 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

于 2013-09-17T05:54:59.623 回答