github actions 的 matrix 是通过声明变量维度及其取值范围,自动生成笛卡尔积作业组合,支持 exclude 排除无效组合、include 为特定组合定制参数,并要求每项任务独立完成全流程验证。

GitHub Actions 的 Matrix 不是“多开几个 job”,而是用一份配置,让系统自动展开所有你关心的环境组合,每个组合独立运行、独立反馈——这才是真正可控的多版本测试。
明确声明维度,让 CI 看懂你的兼容边界
Matrix 的核心是定义变量及其取值范围。比如同时测 Python 和操作系统,就写两个维度:
- python-version: ['3.9', '3.10', '3.12']
- os: ['ubuntu-latest', 'macos-latest', 'windows-latest']
GitHub Actions 会自动计算笛卡尔积,生成 3 × 3 = 9 个作业实例。每个实例中,${{ matrix.python-version }} 和 ${{ matrix.os }} 都能被正确注入到 runs-on 或 setup-python 等步骤中。
排除无效组合,避免无意义失败
不是所有组合都合理。比如 Python 3.12 在 Windows 上可能暂不支持,或某个 Node.js 版本与特定 PHP 版本存在已知冲突。这时用 exclude 主动剔除:
- os: windows-latest, python-version: '3.12'- os: ubuntu-latest, node-version: '20', php-version: '7.4'
这样既节省资源,也防止因环境不兼容导致的误报,让失败真正指向代码问题而非配置漏洞。
按需扩展与定制单个实例
用 include 可为特定组合添加专属字段,比如启用实验特性、延长超时或标记调试标识:
- 为 Ubuntu + Python 3.13 添加
experimental: true标志 - 给 PHP 7.4 单独设
timeout-minutes: 15(因其编译扩展更耗时) - 对 macOS 实例加
env: { SKIP_SLOW_TESTS: '1' }
这些字段只作用于匹配的组合,不影响其他实例,灵活又安全。
配合工具链,让每个版本真正“独立验证”
矩阵只是调度层,关键在每项任务里是否完整执行门禁:
- PHP 项目中,
setup-php的php-version必须走 matrix,不能靠环境变量传入(语法不支持) - Python 项目中,
setup-python的python-version支持'>=3.9 这类范围写法,但生产环境建议列明具体小版本以保可重现 - 静态检查如
phpcompatibility或pylint,必须显式指定目标版本区间(如--runtime-set testVersion 8.0-8.5),否则默认只查老版本兼容性
每个矩阵项都应完成安装、检查、测试、报告全流程,失败即阻断,不跨版本“借光”通过。











