3

ビルド テンプレートに CopyDirectory ステップがあり、存在しないディレクトリが見つかった場合にエラーがスローされると想定していました。ただし、警告がスローされるだけで、ビルド自体は成功とマークされます。

私はそれを try/catch ブロックにラップしようとしましたが、手動で「スロー」例外ステップを実行しましたが、それでも機能しませんでした。buildStatus を failed に設定しようとしましたが、それもうまくいきませんでした。これを達成できる別の方法はありますか?コピー ディレクトリのいずれかが失敗した場合、ビルドを成功させたくありません。

編集:

これは、コピー ディレクトリがあるスニペットです。サーバーのリストをループして、一連のディレクトリをコピーしています。

<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

CopyDirectory実際、ソース ディレクトリが存在しない場合にのみ警告を発するバグがあります。また、長いパス (>248 文字) にも問題があります。

考えられる回避策:

  1. を使用し、 (より良い) をInvokeCommand実行し、結果コードを確認します。Robocopy.exexcopy
  2. を使用する必要がある場合はCopyDirectory、ソース ディレクトリが存在することを確認してください。
于 2013-09-23T14:44:09.397 に答える
2

では、「InvokeProcess」アクティビティを利用してみませんか?

  1. アクティビティを選択し、下部にある [変数] タブを開きます。
  2. Int32 型の変数「ResultCode」を追加します。この変数には、コピー プロセスからの終了コードが含まれます。
  3. 「InvokeProcess」アクティビティをワークフローに追加します。
  4. 「InvokeProcess」アクティビティを開き、「標準出力の処理」セクション内に「WriteBuildMessage」アクティビティをドロップします。
  5. Importance プロパティを Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High に設定します。Message プロパティを stdOutput に設定します。
  6. WriteBuildError アクティビティのインスタンスを [エラー出力の処理] セクションにドロップします。 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 に答える
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 に答える