GitLab CI/CD 如何做自动停止旧的流水线

在日常的流水线部署中,我们经常会遇到频繁地推送代码的场景。
如:一个分支,3个人在一分钟内都合并了一次,那么就会触发三次流水线,虽然触发三次流水线没有问题,但我们有时想要一个自动取消多余流水线的功能。需求的意思就是 如果当前有pengding或者running的流水线,此时又有新的流水线被触发,那么我们期望能够自动取消旧的流水线,一是保证资源的合理利用,二是保证不会出现部署旧的流水线的内容。

那么在gitlab ci/cd中具体该怎么做那?

一图胜千言。
在这里插入图片描述

设置完这个属性后, 运行一段时间,你又会发现新的问题。
我这一个流水线每次都要跑50分钟,好家伙,快跑完的时候,你突然又来了一个流水线,导致我的流水线被取消了。 这种时候,谁遇到不急啊?

该怎么办那?
开发经验丰富的gitlab人员已经考虑过这个问题了。
他们给出的一个解决方案就是 使用 interruptible 关键词

该关键词,定义到一个具体的job上,表明该任务是否能够被新的流水线打断,取消。默认为false, 即不可取消,不可被打断。

只有在勾选了 Auto-cancel redundant pipelines 才会生效。

下面来看一个例子。

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正在运行或者pending,那么流水线可能会被新流水打断。
但是一旦step-2开始运行后,该流水线就不会再被新的流水线打断。

拿我格子衫来 CSDN认证博客专家 拿我格子衫来 范马勇次郎 琦玉君
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页