[Gitlab CI] 自动取消旧流水线

提交Commit触发新流水线

当某一分支开启Merge Request后只要提交一次commit就会自动创建一个新的流水线,此时之前的Pipeline不会被取消,经过下面的设置后可以实现自动取消旧流水线的功能。

❗️通过提交(commit)触发的同一分支流水线可以自动冗余取消,但是通过手动触发的同一分支流水线不会进行自动冗余取消。

  • 在项目中选择设置 > CI/CD
  • 进入流水线通用设置, 选中自动取消多余的流水线
  • gitlab-ci.yaml配置文件中通过interruptible关键字搭配使用

如果禁用自动取消冗余流水线,则此关键字无效。启用后,在为同一分支上的新更改启动流水线时,会取消正在运行的具有interruptible: true的作业。

yaml 复制代码
stages:
  - stage1
  - stage2
  - stage3

step-1:
  stage: stage1
  script:
    - echo "Can be canceled."
  interruptible: true

step-2:
  stage: stage2
  script:
    - echo "Can not be canceled."

step-3:
  stage: stage3
  script:
    - echo "Because step-2 can not be canceled, this step can never be canceled, even though it's set as interruptible."
  interruptible: true

如果按上面的配置参数运行流水线,一个新的流水线被创建后:

  • 旧流水线step-1正在运行或刮起时,旧流水线会被取消
  • 旧流水线step-2正在运行时,旧流水线不会被取消
  1. 如果有构建Job,最好不要设置可取消,避免出现部署不完整的情况。
  2. 要完全取消流水线,需要在每个Job中设置interruptible: true

手动触发新流水线

Job中通过gitlab api请求取消流水线。

详见:
Pipelines · Api · Help · GitLab

Reference:

https://docs.gitlab.cn/jh/ci/yaml/index.html#interruptible

相关推荐
AlbertS11 小时前
记一次推送lfs失败不能迁移git仓库到新的gitlab的问题
git·ai·gitlab·lfs·rejected
日更嵌入式的打工仔12 小时前
Windows 下 GitLab 完整使用指南
windows·gitlab
亚马逊云开发者13 小时前
从 SDLC 到 AIDLC:用 Kiro + OpenClaw 构建 AI 驱动的开发流程,CI&T 实践经验拆解
人工智能·ci/cd
会飞的大可13 小时前
Jenkins vs GitLab CI/CD:2026 企业级 CI/CD 工具深度选型评测
ci/cd·gitlab·jenkins
信创DevOps先锋14 小时前
国内DevOps生态崛起:Gitee CI/CD如何赋能中小企业数字化转型
ci/cd·gitee·devops
庭風1 天前
让 AI 从需求直接走到 MR:我开源了一个面向 GitLab 的工作流 MCP
gitlab
Sakuyu434682 天前
Git-GitLab-JenKins
git·gitlab·jenkins
Java后端的Ai之路2 天前
从 7 天发布到 15 分钟上线:我用 CI/CD 重构了研发流程
ci/cd·重构·持续集成·持续交付·自动化研发
Aaron_dw2 天前
基于 Jenkins + GitLab + 自动化测试的 CI/CD 自动化系统方案(IaC + 弹性构建节点)
ci/cd·gitlab·jenkins
虎头金猫2 天前
自建 GitLab 没公网?用内网穿透技术,远程开发协作超丝滑
运维·服务器·网络·开源·gitlab·开源软件·开源协议