TFS 2017 - 如何在发布测试失败时失败

时间:2017-06-30 09:05:54

标签: powershell tfs build continuous-integration tfs2017

我在TFS 2017中使用CI / CD演示进行了简单的构建过程,如https://msdn.microsoft.com/en-us/powershell/dsc/dsccicd

中所述

构建定义包含四个步骤:

  • 运行powershell脚本。作为脚本的一部分,Pester测试在代理上运行,结果使用NUnit格式保存到文件夹
  • 使用该文件夹发布测试结果
  • 将文件复制到登台目录
  • 发布工件

当Pester测试失败时,我希望整个构建失败。即使发布的测试结果显示为失败(在“构建详细信息”的“问题”部分中),此时构建也会成功。 我不知道如何强制整个构建失败,无法查看构建定义参数。

3 个答案:

答案 0 :(得分:4)

我没有使用TFS,但在我的构建过程中,测试失败会通过输出错误触发构建失败。

这是通过将-PassThru开关添加到Invoke-Peter并将命令结果发送到变量来完成的:

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

如果测试失败,则写入错误:

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

然后在使用Invoke-PSake后的脚本中<:p>

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

答案 1 :(得分:2)

您可以使用Logging Commands并退出代码以使构建任务失败,然后使整个构建失败。

 Write-Error ("Some error")
 exit 1

添加powershell任务以捕获已发布的测试日志或状态,以判断是否必须使任务失败。有关如何使vNext构建失败的更多详细信息,请参阅此问题:How to fail the build from a PowerShell task in TFS 2015

答案 2 :(得分:1)

VSTS和TFS 2017为当前作业状态设置环境变量。

因此,将“发布测试结果”任务设置为“始终运行”,然后添加以下PowerShell任务以使构建失败:

https://docs.microsoft.com/en-us/vsts/pipelines/build/variables?view=vsts&tabs=batch

    $hasTestFailed = [Environment]::GetEnvironmentVariable("agent.jobstatus")
    if ( $hasTestFailed -ne 'Succeeded')
    {
      exit 666
    }