首页/开发/CI/CD 与发布速查/GitLab CI interruptible 与自动取消
工具链要点63 条

GitLab CI interruptible 与自动取消

标记作业可被更新的流水线取代:分支出现新提交时,旧流水线中的可中断作业自动取消,节省算力并减少过时结果干扰。

CI/CD 与发布速查开发更新于 2026-10-13

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:分析流水线失败原因时先看这一类,别把它误判成环境故障。

易错点

  • 全量开启 interruptible:新提交取消掉正在进行的部署,只能重跑恢复。
  • 只标记不开启项目设置:自动取消不会发生。
  • 数据迁移作业被取消:中间状态需要人工修复。
  • 依赖旧流水线产物做发布:产物随作业取消而缺失。

数据来源与参考

  • GitLab Docs《Auto-cancel redundant pipelines》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌