[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

相关推荐
独断万古他化1 天前
AI 赋能自动化测试实战:从用例生成到 CI/CD 全流程落地
人工智能·ci/cd·测试
郝学胜-神的一滴4 天前
CMake赋能持续集成|自动化测试落地的进阶指南 ✨
c++·ci/cd·软件工程·软件构建
AI成长日志5 天前
【GitHub开源项目】Harness CI/CD平台深度解析:架构设计、核心功能与实战指南
ci/cd·开源·github
清水白石0085 天前
Python 项目 CI/CD 信心模型:证据驱动部署,从“勇敢上线”到“零风险发版”实战指南
驱动开发·python·ci/cd
alan07215 天前
【持续集成、持续交付】jenkins实现CI/CD
运维·ci/cd·jenkins
Gazer_S5 天前
【GitLab npm Registry 非标准端口安装问题解决方案】
前端·npm·gitlab
龙智DevSecOps解决方案5 天前
TESSY v5.1 新功能详解 :引入 Hyper Coverage 与基于变更的测试,大幅缩短 CI 测试时间
自动化测试·软件测试·ci/cd·单元测试·嵌入式开发·tessy
-KamMinG5 天前
Gitlab版本升级方案-13.x到17.x
gitlab
Rabbit_QL5 天前
【CI/CD】01_为什么手动部署是个危险游戏
游戏·ci/cd
亚马逊云开发者5 天前
告别手动部署:在 Amazon EKS 上用 CodePipeline + Argo CD 搭建 GitOps CI/CD
elasticsearch·ci/cd·kubernetes