0

私は既存のTFSビルドとリリース管理の設定で作業していますが、現在使用されているXAMLビルドシステムについてはほとんど分かりません。テストの失敗時にTFSビルドからの開発を防ぎます

私のプロジェクトの下にあるビルドテンプレートのスニペットでは、テストが実行され、コンパイルされたプロジェクトをTFSリリース管理に渡して展開するシーケンスが開始されます。

<Sequence DisplayName="Overall build process"> 
<mtbac:SetBuildNumber DisplayName="Update build number" BuildNumberFormat="[BuildNumberFormat]" /> 
<mtbwa:AgentScope DisplayName="Run on agent" MaxExecutionTime="[AgentSettings.GetValue(Of TimeSpan)(&quot;MaxExecutionTime&quot;, new System.TimeSpan(0,0,0))]" MaxWaitTime="[AgentSettings.GetValue(Of TimeSpan)(&quot;MaxWaitTime&quot;, new System.TimeSpan(4,0,0))]" ReservationSpec="[AgentSettings.CreateAgentReservationSpec()]"> 
    <mtbac:InitializeEnvironment DisplayName="Initialize environment" /> 
    <mtbat:TfGetSources DisplayName="Get sources from Team Foundation Version Control" CleanWorkspace="[CleanWorkspace]" CreateLabel="[CreateLabel]" VersionOverride="[GetVersion]" /> 
    <mtba:AssociateChanges DisplayName="Associate the changesets that occurred since the last good build" UpdateWorkItems="[UpdateAssociatedWorkItems]" /> 
    <TryCatch DisplayName="Try" mtbwt:BuildTrackingParticipant.Importance="Low"> 
    <TryCatch.Try> 
     <Sequence DisplayName="Compile, Test and Publish"> 
     <mtba:RunScript DisplayName="Run optional script before MSBuild" FilePath="[AdvancedBuildSettings.GetValue(Of String)(&quot;PreActionScriptPath&quot;, String.Empty)]" Arguments="[AdvancedBuildSettings.GetValue(Of String)(&quot;PreActionScriptArguments&quot;, String.Empty)]" /> 
     <mtba:RunMSBuild DisplayName="Run MSBuild" OutputLocation="[OutputLocation]" CleanBuild="[CleanBuild]" CommandLineArguments="[String.Format(&quot;/p:SkipInvalidConfigurations=true {0}&quot;, AdvancedBuildSettings.GetValue(Of String)(&quot;MSBuildArguments&quot;, String.Empty))]" ConfigurationsToBuild="[ConfigurationsToBuild]" ProjectsToBuild="[ProjectsToBuild]" ToolPlatform="[AdvancedBuildSettings.GetValue(Of String)(&quot;MSBuildPlatform&quot;, &quot;Auto&quot;)]" RunCodeAnalysis="[AdvancedBuildSettings.GetValue(Of String)(&quot;RunCodeAnalysis&quot;, &quot;AsConfigured&quot;)]" /> 
     <mtba:RunScript DisplayName="Run optional script after MSBuild" FilePath="[AdvancedBuildSettings.GetValue(Of String)(&quot;PostActionScriptPath&quot;, String.Empty)]" Arguments="[AdvancedBuildSettings.GetValue(Of String)(&quot;PostActionScriptArguments&quot;, String.Empty)]" /> 
     <mtba:RunScript DisplayName="Run optional script before Test Runner" FilePath="[AdvancedTestSettings.GetValue(Of String)(&quot;PreActionScriptPath&quot;, String.Empty)]" Arguments="[AdvancedTestSettings.GetValue(Of String)(&quot;PreActionScriptArguments&quot;, String.Empty)]" /> 
     <mtba:RunAgileTestRunner DisplayName="Run VS Test Runner" Enabled="[Not AdvancedTestSettings.GetValue(Of Boolean)(&quot;DisableTests&quot;, false)]" TestSpecs="[AutomatedTests]" ConfigurationsToTest="[ConfigurationsToBuild]" /> 
     <mtba:RunScript DisplayName="Run optional script after Test Runner" FilePath="[AdvancedTestSettings.GetValue(Of String)(&quot;PostActionScriptPath&quot;, String.Empty)]" Arguments="[AdvancedTestSettings.GetValue(Of String)(&quot;PostActionScriptArguments&quot;, String.Empty)]" /> 
     <mtba:RunTestImpact DisplayName="Get Impacted Tests" Enabled="[AdvancedTestSettings.GetValue(Of Boolean)(&quot;AnalyzeTestImpact&quot;, true)]" /> 
     <Sequence DisplayName="Process the release"> 
      <Sequence.Variables> 
      <Variable x:TypeArguments="x:String" Name="buildDirectory" /> 
      </Sequence.Variables> 
      <mtbwa:GetBuildDirectory DisplayName="Get the Build Directory" Result="[buildDirectory]" /> 
      <If Condition="[ProcessReleaseTokens]" DisplayName="If ProcessReleaseTokens is set"> 
      <If.Then> 
       <Sequence DisplayName="Initialize tokens"> 

現在、テストに失敗した場合、シーケンスステップが実行され、壊れたビルドが展開されます。私は、 "Fail build on test failure"オプションを有効にしました。

テストが失敗した場合、リリース手順を実行しないようにするか、リリース管理でプロセスを修正することによって、展開を防止する必要があります(ビルドに失敗した場合はリリース管理に全く触れないように傾いています)。

+0

TFSに統合されたリリース管理を使用していますか? –

+0

@ Eddie-MSFTこれは、Visual Studio 2015クライアントの以前のバージョンです。私たちは将来、新しいTFS Build vnextにアップグレードするつもりですが、その間の回避策を期待していました。 –

答えて

0

実際の展開を行うpowershellスクリプトを実行するワークフローの最後に、InvokeProcessというWebDeployパッケージ(例:DeployTarget = Package)を作成してビルドさせることができます。

+0

テストが合格したかどうかを確認するにはどうすればよいですか?私はInvokeProcessの時点で、またはpowershellスクリプト内でこれを行うでしょうか? –

+0

XMALビルドの場合、テストに失敗した場合でもビルドは続行されます。フラグ "Fail test on test failure"は、テストが失敗した場合にビルドが失敗することを意味します。このフラグが "false"に設定されている場合、テストが失敗した場合、最終結果は部分的に成功します。 –

+0

私はそのフラグが有効になっているので、失敗したテストがあるときに私のビルドが(期待通りに)失敗します。 InvokeProcessがビルドに失敗した場合に実行されないと言っていますか? –

0

これを実現するために、XAML定義テンプレートを更新することができます。詳細については、この問題の答えを参照してください:それはここのリンクの場合は動作しませんRelease management releasing failed builds also - Triggering release from failed builds

引用:

  1. 「でない場合DisableTests」以下の活動を「ReleaseBuildが設定されている場合は、」移動しました。
  2. に "ReleaseBuildが設定されている場合" の条件を変更:ReleaseBuildと(treatTestFailureAsBuildFailure =虚偽又は (treatTestFailureAsBuildFailureそして(BuildDetail.TestStatus <> Microsoft.TeamFoundation.Build.Client.BuildPhaseStatus.Failed)))そして BuildDetail。 ReleaseBuildのいずれかが設定されていないか、いくつかのテストが失敗したため、「スキップの実行:CompilationStatus <> は「ReleaseBuildが設定されている場合は、」
  3. インサイドは活動のそれ以外の部分は、にWriteBuildMessageのメッセージを変更しMicrosoft.TeamFoundation.Build.Client.BuildPhaseStatus.Failedまたはコンパイルに失敗しました "
  4. 最後にテンプレートをチェックインしてください。失敗したビルドは展開されません。
関連する問題