本节摘要:回归测试只在流水线上才有资格成为发布门禁——本地手跑的套件是个人工具,进了流水线才是团队设施。本节讲清嵌入的四个设计点:执行环境怎么与容器化网格对接、触发策略怎么分层、环境变量怎么注入、报告与取证包怎么作为流水线产物流转。它是 4.4 配置体系与 6.3 执行基建的会师点,也是 7.5 度量的数据源。
把套件整体挂上每次代码提交,是流水线集成最常见的翻车姿势:提交触发跑两小时全量,开发者等着着急、流水线排起长队,最后大家学会了一件事——跳过。健康的做法是按反馈速度分层,让每层在对的时机出场。
提交层:每次代码提交触发,只跑冒烟集(几十条核心旅程),目标十分钟内给出"这次提交没把系统搞坏"的结论。日构建层:每日定时触发全量回归加完整兼容矩阵,任务是深度扫描与趋势积累,耗时一两个小时无人等待。发布层:发布候选触发,跑全量加发布相关环境,结果是发布决策的最后一道门禁。三层的用例集合通过标记体系(4.1)切分,流水线只是按标记调用——执行策略写在用例元数据里,流水线配置保持轻薄。
stages: - 准备阶段 步骤: 拉取代码并还原依赖清单 - 执行阶段 步骤: 起容器化网格并等待就绪 步骤: 注入环境变量后按标记调用用例 参数: 冒烟集短超时 · 全量集完整取证 - 汇报阶段 步骤: 汇总报告与失败取证包为构建产物 步骤: 按门禁规则判定通过与否
这个骨架刻意写成平台无关的伪配置——触发、执行、汇报三阶段的职责划分在任一持续集成平台都成立。对接 6.3 时,"执行阶段"的第一步就是起容器网格;对接 4.4 时,环境变量在这一步注入,仓库里的配置文件一概不改。
| 层 | 触发时机 | 执行集合 | 谁消费结果 |
|---|---|---|---|
| 提交层 | 每次提交或合并请求 | 冒烟集 | 提交者本人,分钟级等待 |
| 日构建层 | 每日定时 | 全量加矩阵 | 质量团队,晨会过目 |
| 发布层 | 发布候选建立 | 全量加发布环境 | 发布决策会 |
三层策略的灵魂是"结果要有人当场消费":提交层的结果拖到第二天就没有意义,日构建的结果没人看就退化为定时烧机器。还有一条容易被忽略的纪律——失败即停:提交层红了,合并应当被阻断,修完再进;允许"红着合并"的团队,等于亲手把门禁降级成装饰。配套动作是把 7.1 的重试计数接入流水线:提交层重试后通过的用例要在报告里高亮,重试率连续走高说明时序治理欠账又厚了。
环境注入是流水线与工程的唯一接口。被测地址、环境名、并发档位、云平台凭据,全部经环境变量进入,4.4 的配置合并顺序在此兑现价值:流水线不改仓库文件、不传命令行长参数,同一条流水线定义跑遍开发、预发布与发布环境。凭据类变量要进平台的密钥管理,日志脱敏输出——流水线的执行日志权限通常很宽,明文凭据是常见的事故源。
产物流转决定结果能不能被消费。一次构建的固定产物有四样:机器可读的结果文件(供门禁与趋势系统消费)、人类可读的 HTML 报告(7.5 的看板数据源)、失败取证包(7.2 的归档规范在这里落地)、执行日志。产物要设保留策略——日构建产物滚动保留数周,发布层产物随版本长期归档。流水线平台的产物空间不是无限的,没保留策略的团队迟早收到磁盘告警工单。
流水线集成后会出现一笔新账:回归占用的时间与算力。给它定预算——提交层十分钟、日构建两小时是常见的初始预算——预算超支就是优化信号:该加并行加并行、该砍低价值用例砍用例、该把界面登录前置化就前置化。预算制的本质是给"回归速度"一个与"回归覆盖"对等的地位:慢到没人愿意等的回归,覆盖再全也形同虚设。
坑一:流水线里"偶发失败"高于本地。 常见根因是资源规格差异——本地开发机内存宽裕,流水线节点规格低,多实例并行时浏览器内存吃紧、渲染变慢,等待体系全线承压。绕法:给流水线执行设定与预算匹配的并行度,升级节点规格前先用 7.1 的定性区分"资源型超时"与"时序型超时"。
坑二:报告没人看。 报告链接埋在构建日志深处,等于没产出。绕法:报告与失败清单接入团队日常入口——聊天群机器人推送顶层结论与失败清单,一层结论点开即达明细。消费路径每多一次跳转,流失一半读者。
坑三:密钥与日志的边界。 调试时为了省事把平台密钥打进环境变量又全文打印,日志变成了密钥泄露点。绕法:密钥只走平台的密钥管理,日志输出前统一脱敏,任何"临时打印环境变量"的操作视同事故预演。
坑四:门禁一刀切逼出"绕门禁"文化。 提交层门槛定得过高(要求全绿才可合并),偶发的时序抖动会逼着开发者学会"重跑碰运气"甚至申请豁免——门禁的权威性反被侵蚀。绕法:按 7.1 的定性给门禁留出灰度——缺陷类硬阻断,时序类展示重试率与趋势但不阻断,环境类自动标注等修复。门禁要严格,但严格得有分类学支撑。
四个坑的共同教训:流水线集成是社会技术与纯技术各半的工程,配置只占一半,另一半是让团队的行为与门禁的预期对齐。
把三执行层的设计落成一条具体流水线(以提交层为例,其余两层只是参数不同):
触发: 提交或合并请求 阶段一 准备: - 拉取代码, 按 requirements 还原依赖 - 读取环境变量并合并配置, 打印生效环境摘要 阶段二 执行: - 起容器化网格, 执行冒烟脚本验证环境 - 按标记运行冒烟集, 并行度4, 超时上限10分钟 - 失败用例自动归档取证包 阶段三 汇报: - 汇总报告与取证包为构建产物 - 群机器人推送结论与失败清单 - 缺陷类失败阻断合并, 时序类标注重试率 产物保留: 30天滚动
对照着读能看到前面所有章节的汇流:配置合并来自 4.4,容器网格来自 6.3,冒烟验证来自 2.3,标记分层来自 4.1,取证归档来自 7.2,门禁分类来自 7.1。一条流水线就是全书工程方法论的集成点——它本身不长,长的是背后每一步的功夫。
流水线跑起来了,产物也齐了。最后一步是让人信:报告怎么设计才能回答"这次能不能发"?下一节进入度量与报告。