Bitbucket中如何取消等待manual trigger的pipeline及清理记录
Bitbucket Pipelines 暂停状态流水线相关问题解答
你使用的官方默认starter流水线配置如下:
# This is an example Starter pipeline configuration # Use a skeleton to build, test and deploy using manual and parallel steps # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: atlassian/default-image:3 pipelines: default: - parallel: - step: name: 'Build and Test' script: - echo "Your build and test goes here..." - step: name: 'Lint' script: - echo "Your linting goes here..." - step: name: 'Security scan' script: - echo "Your security scan goes here..." - step: name: 'Deployment to Staging' deployment: staging script: - echo "Your deployment to staging script goes here..." - step: name: 'Deployment to Production' deployment: production trigger: 'manual' script: - echo "Your deployment to production script goes here..."
卡在手动步骤时查询到的状态字段:
"state": { "name": "IN_PROGRESS", "type": "pipeline_state_in_progress", "stage": { "name": "PAUSED", "type": "pipeline_state_in_progress_paused" } },
针对你提的三个问题,解答如下:
1. 如何直接取消等待手动触发的pipeline
- UI操作不要在流水线列表页找取消按钮,列表页不会对暂停状态的流水线显示取消入口。点进对应流水线的详情页,定位到那个等待手动触发的生产部署步骤卡片,点卡片右上角的三点更多菜单,里面的Stop pipeline选项就可以直接终止整条流水线,终止后流水线会进入终态,不再显示为进行中。
- 嫌找UI入口麻烦可以直接调API:给对应流水线地址发POST请求调用停止接口,路径为
/2.0/repositories/{工作区标识}/{仓库标识}/pipelines/{流水线ID}/stopPipeline,用有仓库写权限的账号Token鉴权就行,调用后几秒内流水线就会被终止。
你之前试的重跑再停止没用,重跑会生成新的流水线实例,原来卡在暂停状态的旧实例不会被自动替换或终止。
2. 是否支持配置pipeline运行达到指定时长后自动取消
- Bitbucket默认有单步执行超时机制,普通步骤最长跑120分钟、大内存步骤最长180分钟,超时会自动失败终止整条流水线,但这个超时规则不覆盖等待手动触发的暂停步骤,暂停状态不会计算执行时长,放多久都不会自动触发超时终止。
- 目前没有原生配置项可以给手动步骤的等待时长设置超时自动取消,要实现这个效果只能自己挂外部定时任务:定时拉取流水线列表,筛选出处于PAUSED阶段、暂停时长超过你设定阈值的实例,批量调用上面说的停止接口终止就行。
- 从源头减少这类无效暂停实例的话,可以调整流水线配置,不要给所有默认分支的提交都加上手动生产部署步骤,比如加规则只有打版本tag、或者指定分支提交时才加载生产部署步骤。
3. 是否有方法彻底删除、清理这类处于暂停状态的pipeline运行记录
- 暂停状态的流水线不能直接删除,必须先按第一个问题的方法把它终止,等状态变成STOPPED/FAILED/SUCCESS这类终态之后,才能操作删除。
- 单条记录删除可以进流水线详情页,点右上角三点菜单选Delete,也可以直接调DELETE接口,路径为
/2.0/repositories/{工作区标识}/{仓库标识}/pipelines/{流水线ID}。 - 批量清理就写个简单脚本跑:先拉取所有状态为IN_PROGRESS、stage为PAUSED的流水线,先逐个调停止接口,等半分钟确认所有实例都进入终态后,再逐个调删除接口就行。删掉的记录不会再出现在状态筛选结果里,不会影响你后续筛选进行中流水线的操作。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

