You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置VSTS在构建/测试失败邮件中包含详细错误信息?

这个需求太实用了!默认的VSTS(现在叫Azure DevOps)通知邮件确实只给个结果和链接,不够直观。不过要实现带详细错误信息的自定义邮件,有几种靠谱的方案,我给你拆解下:

方案1:优化内置通知订阅(快速上手)

如果不想写代码,可以先试试扩展内置通知的内容:

  • 进入你的Azure DevOps项目,打开项目设置 → 通知
  • 新建一个订阅,触发事件选「构建完成」或「测试运行完成」,并设置只在失败时触发
  • 在「通知内容」编辑界面,尝试添加动态变量,比如$(TestResults.FailedTestsCount)、$(Build.Reason)这类基础变量
  • 不过默认变量能展示的细节有限,如果要拿到具体错误消息和堆栈跟踪,还是得结合下面的方案

方案2:用PowerShell任务发送自定义邮件(灵活度拉满)

这个方法能完全自定义邮件内容,把你想要的所有细节都塞进去:

  1. 在构建/发布管道里添加一个PowerShell任务,设置运行条件为「只有当构建失败时」(条件表达式:eq(variables['Agent.JobStatus'], 'Failed'))
  2. 编写脚本提取测试失败的详细信息,这里提供两种思路:
    • 解析测试结果文件(trx):测试任务默认会生成.trx格式的测试报告,直接解析这个文件就能拿到错误消息和堆栈跟踪
    • 调用Azure DevOps REST API:通过API获取测试运行的详细结果,适合更复杂的场景

下面是一个解析trx文件的示例脚本:

# 找到最新的测试结果trx文件
$trxFiles = Get-ChildItem -Path "$(System.DefaultWorkingDirectory)" -Filter "*.trx" -Recurse
$latestTrx = $trxFiles | Sort-Object LastWriteTime -Descending | Select-Object -First 1

if ($latestTrx) {
    $xml = [xml](Get-Content $latestTrx.FullName)
    $failedTests = $xml.TestRun.Results.UnitTestResult | Where-Object { $_.outcome -eq 'Failed' }

    # 构建邮件HTML内容
    $emailBody = @"
    <h2>⚠️ 构建/测试失败通知</h2>
    <p>构建名称: $(Build.DefinitionName) #$(Build.BuildNumber)</p>
    <p>失败测试总数: $($failedTests.Count)</p>
    <h3>详细失败信息:</h3>
    <ul>
"@

    foreach ($test in $failedTests) {
        $emailBody += @"
        <li>
            <strong>测试名称:</strong> $($test.TestName)<br>
            <strong>错误消息:</strong> $($test.Output.ErrorInfo.Message)<br>
            <strong>堆栈跟踪:</strong> <pre>$($test.Output.ErrorInfo.StackTrace)</pre>
        </li>
        <hr>
"@
    }

    $emailBody += "</ul><p>完整报告: $(Build.BuildUri)</p>"

    # 发送邮件(这里以Office 365 SMTP为例)
    $smtpCredential = New-Object System.Management.Automation.PSCredential `
        ("your-sender-email@domain.com", (ConvertTo-SecureString "$(SmtpPassword)" -AsPlainText -Force))

    Send-MailMessage `
        -From "your-sender-email@domain.com" `
        -To "your-alert-email@domain.com" `
        -Subject "构建失败: $(Build.DefinitionName) #$(Build.BuildNumber)" `
        -Body $emailBody `
        -BodyAsHtml `
        -SmtpServer "smtp.office365.com" `
        -Port 587 `
        -UseSsl `
        -Credential $smtpCredential
} else {
    Write-Warning "未找到测试结果文件"
}
  • 注意:把脚本里的邮箱信息换成你自己的,并且在管道里添加SmtpPassword作为秘密变量,避免泄露凭据

方案3:借助Marketplace扩展(零代码配置)

如果不想写脚本,可以直接用Azure DevOps Marketplace里的第三方扩展,比如「Extended Email」「Custom Notification Tasks」这类:

  • 打开Azure DevOps Marketplace,搜索「email notification」
  • 安装合适的扩展后,在管道里添加对应的任务,配置时选择包含测试失败的详细信息(比如错误消息、堆栈跟踪)
  • 这类扩展通常已经封装好了解析逻辑,配置起来非常省心

内容的提问来源于stack exchange,提问作者Vincent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:02:53