前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GitLab CI/CD 如何做自动停止旧的流水线

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

作者头像
拿我格子衫来
发布2022-01-24 15:29:41
1.7K0
发布2022-01-24 15:29:41
举报
文章被收录于专栏:TopFETopFE

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

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

一图胜千言。

在这里插入图片描述
在这里插入图片描述

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

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

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

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

下面来看一个例子。

代码语言:javascript
复制
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开始运行后,该流水线就不会再被新的流水线打断。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档