1. 简介

本文我们将深入了解 Foresight,这是 Thundra 推出的一款新的 CI 流水线监控工具,旨在帮助我们统一监控多个代码仓库的 CI 流水线运行情况。

它不仅提供了流水线执行的可视化数据,还能追踪测试覆盖率、失败原因以及性能瓶颈。尤其适合那些拥有多个微服务或多个仓库的项目团队。


2. Foresight 是什么?

Foresight 是一个用于增强 CI 流水线和测试可视化的监控工具。它能展示流水线的执行性能、测试结果、覆盖率,并支持“变更影响分析(Change Impact Analysis)”,即通过 Pull Request 中的变更,分析其对测试覆盖率和构建稳定性的影响。

目前,Foresight 只支持 GitHub Actions 作为 CI 工具,因此你的代码必须托管在 GitHub 上。未来可能会支持更多平台。同时,它支持多种测试输出格式,包括但不限于 JUnitJaCoCo


3. 将 Foresight 引入项目

在开始之前,你需要:

  • 一个或多个 GitHub 仓库
  • 已配置的 GitHub Actions 流水线

3.1 注册 Foresight 账号

访问 Foresight 注册页面,填写表单完成注册:

注册页面截图

登录后,点击 “Connect Pipeline” 开始连接你的 CI 流水线:

Connect Pipeline

如果尚未安装 Foresight 的 GitHub App,点击 “Install” 安装:

Install GitHub App

接下来选择是否让 Foresight 监控所有仓库或手动选择:

选择监控仓库

最后创建项目并选择要监控的仓库:

创建项目

此时 Foresight 已连接你的 GitHub 项目,并展示了一个简洁的仪表盘:

项目状态


4. 集成 Foresight 到 CI 流水线

目前我们只是让 Foresight 跟踪了仓库状态。要让它发挥更大作用,我们需要将其深度集成到 GitHub Actions 流水线中。

4.1 获取 API Key

进入 Foresight 控制台的 “Integrate your tests” 页面获取 API Key:

获取 API Key

4.2 配置 GitHub Secret

进入你的 GitHub 项目设置页面,添加一个新的 Secret:

添加 Secret

名称为 FORESIGHT_API_KEY,值为你在 Foresight 上复制的 API Key。

4.3 修改 GitHub Actions 流水线

.github/workflows 下的 YAML 文件中添加以下两个步骤:

4.3.1 收集工作流数据

- name: Collect Workflow Telemetry
  uses: runforesight/foresight-workflow-kit-action@v1
  if: success() || failure()
  with:
    api_key: ${{ secrets.FORESIGHT_API_KEY }}

✅ 用于记录整个工作流的执行数据,包括每个步骤的耗时和资源使用。

4.3.2 分析测试与覆盖率结果

- name: Analyze Test and/or Coverage Results
  uses: runforesight/foresight-test-kit-action@v1
  if: success() || failure()
  with:
    api_key: ${{ secrets.FORESIGHT_API_KEY }}
    test_format: JUNIT
    test_framework: JUNIT
    test_path: target/surefire-reports
    coverage_format: JACOCO/XML
    coverage_path: target

✅ 用于上传测试结果和覆盖率报告,便于 Foresight 展示详细测试数据。

⚠️ 注意:test_pathcoverage_path 要根据你的项目结构进行调整。

集成完成后,Foresight 的仪表盘将展示每次测试运行的详细信息:

测试状态

你还可以查看每个步骤的耗时变化:

步骤耗时


5. 分析问题构建

Foresight 提供了强大的问题诊断能力,帮助我们快速定位失败或慢速测试。

5.1 查看测试概览

在 “Test Run Overview” 页面中,可以看到:

  • 最失败的测试套件
  • 最耗时的测试用例

例如,CalculatorTest 中的 testSlow 耗时 8 秒:

测试概览

点击进入某个测试套件,可以看到更详细的测试执行数据:

单个测试套件

点击具体测试用例,可以查看失败原因和历史表现:

测试失败详情

5.2 查看历史性能趋势

在 “Performance” 标签页中,可以查看该测试的历史执行情况:

历史性能

这有助于我们快速定位问题首次出现的时间点,从而缩小排查范围。


6. 分析问题工作流

除了测试,Foresight 还能帮助我们分析整个 CI 工作流的瓶颈。

6.1 查看工作流执行详情

Foresight 显示每个 Job 和 Step 的执行情况,包括耗时和状态:

工作流详情

6.2 查看每个步骤的资源消耗

点击 “Processes” 标签页,可以看到每个步骤的详细执行过程:

流程详情

例如,setup-javabash 是耗时最长的步骤,其中 surefire 占据了主要时间。

6.3 查看资源使用情况

点击 “Metrics” 标签页,可以看到整个流水线执行期间的 CPU、内存、网络和磁盘使用情况:

资源使用

从图中可以看出 CPU 使用率飙升,说明构建过程是 CPU 密集型的。


7. 变更影响分析(Change Impact Analysis)

Foresight 的一个亮点功能是 变更影响分析,它帮助我们评估 Pull Request 中代码变更的测试覆盖情况。

7.1 配置 GitHub Actions 以支持 PR

为了让 Foresight 能分析 PR 中的变更,需要确保 GitHub Actions 流水线在 PR 创建或更新时触发:

on:
  push:
  pull_request:
    types:
      - opened
      - edited
      - reopened
      - synchronize

7.2 在 Foresight 中查看变更覆盖

一旦流水线运行完成,Foresight 会展示测试覆盖率与代码变更的叠加信息:

PR 覆盖详情

可以看到,某个类的 subtract 方法修改了,但没有足够的测试覆盖,提示我们需要补充测试或评估是否需要保留该方法。


8. 总结

Foresight 是一个强大的 CI 流水线监控工具,能够帮助我们:

✅ 深入分析测试执行和覆盖率
✅ 快速定位失败或慢速测试
✅ 查看工作流执行详情与资源消耗
✅ 评估 Pull Request 中变更的测试覆盖情况

如果你正在寻找一个能提升 CI 效率和测试质量的工具,Foresight 值得一试。它不仅能帮你发现问题,还能帮你找到优化方向。

✅ 官网:https://app.runforesight.com
✅ GitHub Action:runforesight/foresight-workflow-kit-action
✅ 测试插件:runforesight/foresight-test-kit-action


原始标题:Using Foresight to Understand our CI Pipeline