interruptible 是什么
interruptible 是 GitLab CI 的作业属性:标记为 true 的作业,在分支出现新提交且存在更新流水线时会被自动取消,节省算力并减少过时结果对合并决策的干扰。它依赖项目级的「自动取消冗余流水线」设置开启;发布路径上的作业不应标记,避免部署被半途取消。
基本信息
| 写法 | interruptible: true(作业级或 default 全局) |
|---|---|
| 前置 | 项目需开启自动取消冗余流水线 |
| 保留 | 部署等发布类作业不应标记 |
| 粒度 | 按作业独立生效,未标记的不会被取消 |
| 场景 | 分支频繁推送、合并请求迭代快的仓库 |
| 风险 | 部署作业被中断可能停在半完成状态 |
| 对比 | 自动取消显示为 canceled 而非 failed,排查时先区分 |
分级设置示例
分级设置示例
default:
interruptible: true # 全局默认可取消
test:
stage: test
script: run-tests.sh # 沿用默认值
deploy:
stage: deploy
interruptible: false # 部署不可中断
script: ./deploy.sh典型使用场景
- 高频推送分支:开发分支每次提交淘汰旧流水线的测试作业
- 合并请求迭代:评审反复改代码时节省重复构建时间
- 资源高峰:Runner 紧张时优先消灭过时作业
- 成本控制:共享或计费 Runner 上减少无效分钟数
- 配置对照:default 全局开启加部署作业显式关闭
- 新人理解:用开关体会冗余流水线的判定逻辑
作业类型与建议
| 作业类型 | interruptible | 原因 |
|---|---|---|
| 构建与测试 | true | 结果只服务于最新提交 |
| 静态检查 | true | 过时结果无参考价值 |
| 部署到预发 | 视情况 | 预发可重建,但要评估中间状态 |
| 生产部署 | false | 中断可能留下半完成状态 |
| 数据迁移类 | false | 执行到一半需要人工处理 |
部署作业被中断可能停在半完成状态:发布路径上的作业保持不可中断。
只标记不开启项目设置:自动取消不会发生,两个开关要一起用。
default 全局开启后,把敏感作业逐个显式改回 false,比逐个开启更不容易遗漏。
被自动取消的作业显示为 canceled:分析流水线失败原因时先看这一类,别把它误判成环境故障。