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"> 

현재 테스트에 실패하면 시퀀스 단계가 계속 실행되고 깨진 빌드가 배포됩니다. "테스트 실패시 빌드 실패"옵션을 사용할 수 있습니다.

테스트 실패가있을 때 릴리스 단계를 중지하거나 릴리스 관리에서 프로세스를 수정하여 배포를 방지해야합니다 (빌드가 실패한 경우 릴리스 관리에 전혀 신경 쓰지 않는쪽으로 기울이고있었습니다).

+0

TFS에 통합 된 릴리스 관리를 사용하고 있습니까? –

+0

@ Eddie-MSFT 그것은 Visual Studio 2015 클라이언트가있는 이전 버전입니다. 우리는 앞으로 새로운 TFS Build vnext로 업그레이드 할 예정이지만 그 동안이 문제를 해결하기위한 희망을 갖고있었습니다. –

답변

0

빌드를 WebDeploy 패키지 (예 : DeployTarget = Package)에 놓은 다음 실제 배포를 수행 할 워크 스테이션의 끝 부분에 InvokeProcess이 있어야합니다.

+0

테스트가 통과되었는지 어떻게 확인하나요? InvokeProcess 시점이나 powershell 스크립트 내에서이 작업을 수행할까요? –

+0

XMAL 빌드의 경우 테스트가 실패하면 빌드가 계속 진행됩니다. "테스트 실패시 빌드 실패"플래그는 테스트가 실패하면 빌드가 실패 함을 의미합니다. 이 플래그가 "false"로 설정되면 테스트가 실패하면 최종 결과가 부분적으로 성공합니다. –

+0

그래, 실패한 테스트가있을 때 (예상대로) 빌드가 실패합니다. InvokeProcess가 빌드가 실패한 경우 실행되지 않는다고 말하는 것입니까? –

0

이렇게하려면 XAML 정의 템플릿을 업데이트 할 수 있습니다. 자세한 내용은이 질문에 대답을 참조하십시오 여기 Release management releasing failed builds also - Triggering release from failed builds

견적을 링크의 경우에는 작동하지 않습니다 이전

  1. "그렇지 않으면 DisableTests"아래의 활동을 "ReleaseBuild이 설정되어있는 경우". ReleaseBuild 그리고 (treatTestFailureAsBuildFailure = 거짓 또는 (treatTestFailureAsBuildFailure 그리고 (BuildDetail.TestStatus <> Microsoft.TeamFoundation.Build.Client.BuildPhaseStatus.Failed))) 그리고 BuildDetail :
  2. 는에 "ReleaseBuild가 설정되어있는 경우"의 조건을 변경. ReleaseBuild 중 하나가 설정되지 않았거나 몇 가지 테스트가 실패했기 때문에 '건너 뛴 실행 : CompilationStatus <> 는 "ReleaseBuild이 설정되어있는 경우"
  3. 내부 활동의 그렇지 않은 부분에 WriteBuildMessage의 메시지를 변경 Microsoft.TeamFoundation.Build.Client.BuildPhaseStatus.Failed 또는 컴파일이 완료되었습니다. "
  4. 마지막으로 템플릿을 체크인하면됩니다. 실패한 빌드는 배포되지 않습니다.