2017-06-30 19 views
1

に失敗したときにビルドを失敗する方法https://msdn.microsoft.com/en-us/powershell/dsc/dsccicdTFS 2017 - 公表テストは

で説明したように、私は、ビルド定義は、4つのステップが含まCI/CDのデモを使用して、TFS 2017での簡単なビルドプロセスを持っている:

  • ファイル名を指定して実行パワーシェルスクリプト。スクリプトの一部として、せがむテストは、エージェント上で実行され、その結果がNUnitの形式
  • を使用して、フォルダに保存されているアーティファクトに
を公開ディレクトリ
  • のステージングにそのフォルダから
  • ファイルのコピーを使用してテスト結果を公開

    Pesterテストが失敗すると、ビルド全体が失敗することがあります。現時点では、公開されたテストの結果が失敗として表示されてもビルドは成功します(ビルドの詳細の問題のセクション)。 ビルド定義のパラメータを見てビルド全体を強制的に失敗させる方法がわかりません。

  • 答えて

    1

    私はTFSを使用していませんが、私のビルドプロセスでは、エラーが出力されてビルドが失敗するようにテストが失敗します。

    これはInvoke-Peter-PassThruスイッチを追加し、変数にコマンドの結果を送信することにより行われます。いずれかがある場合は、書き込みエラー

    $TestResults = Invoke-Pester -Path .\Tests -PassThru 
    

    は、テストに失敗しました:

    if($TestResults.FailedCount -gt 0) 
    { 
        Write-Error "Failed '$($TestResults.FailedCount)' tests, build failed" 
    } 
    

    使用後のスクリプトでは、Invoke-PSake

    exit ([int](-not $psake.build_success)) 
    
    +0

    ありがとう、私はすでにこのようなことをしています。 Pesterテストが失敗した場合、スクリプトはTFSにエラーを返します。 'Write-Output' ## vso [task.logissue type = error] $ errorMessage "。しかし、これはビルド全体で失敗しません。 – Sergei

    +0

    'Write-Output'は例外をトリガーしていません。デフォルトの出力ストリーム(ホスト)にテキストを送信するだけです。 'Write-Output'を' Write-Error'に変更し、それが役立つかどうかを確認します(ホストエラーストリームにテキストを送信している間に例外が発生するはずです)。 –

    +0

    私は21行目のWrite-Output by Write-Errorをhttps://github.com/PowerShell/Demo_CI/blob/master/InfraDNS/Build.ps1に置き換えましたが、残念ながらこれは役に立ちません。 UnitTestが失敗し、ビルドステータスで失敗したと表示されますが、ビルド全体がまだうまく完了しています – Sergei

    1

    Logging Commandsを使用してコードを終了すると、ビルドタスクが失敗し、ビルド全体が失敗する可能性があります。

    Write-Error ("Some error") 
    exit 1 
    

    タスクを失敗する必要があるかどうかを判断するために、公開テストのログやステータスをキャッチするためにPowerShellのタスクを追加します。 vNextビルドに失敗する方法の詳細については、この質問を参照してください。How to fail the build from a PowerShell task in TFS 2015

    +0

    ありがとうございます!私は読んだり深く掘り下げたりします。 – Sergei

    関連する問題