[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

相关推荐
IAR Systems13 天前
松下电工借助IAR CI/CD解决方案,实现品质与效率双重飞跃
ci/cd
Cherry的跨界思维13 天前
【AI测试全栈:质量】47、Vue+Prometheus+Grafana实战:打造全方位AI监控面板开发指南
vue.js·人工智能·ci/cd·grafana·prometheus·ai测试·ai全栈
Aliex_git13 天前
Dockerfile 优化实践笔记
笔记·学习·gitlab
成为你的宁宁13 天前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven
古斯塔夫歼星炮13 天前
Dify + Jenkins 实现AI应用持续集成与自动化部署
ci/cd·jenkins·dify
codingWhat13 天前
手把手系列之——前端工程化
ci/cd·devops·前端工程化
测试渣14 天前
持续集成中的自动化测试框架优化实战指南
python·ci/cd·单元测试·自动化·pytest
sunshinebo14 天前
一次 GitLab 无法启动的排查:Docker 日志把 500G 磁盘打满
docker·eureka·gitlab
何以不说话14 天前
DevOps、Git 和 GitLab
git·gitlab·devops
我的xiaodoujiao15 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 51--CI/CD 4--推送本地代码到Git远程仓库
python·学习·测试工具·ci/cd·pytest