如何让GitLab job等待前序流水线的同名运行job完成后再执行?
GitLab 部署作业防并发原生解决方案
GitLab官方原生提供了无需自定义脚本的实现,直接配置即可解决跨流水线同名部署作业的并发冲突问题,有两种可选方案:
方案1:资源组(推荐,Job粒度控制)
这是专门为同环境部署这类需要串行执行的Job设计的功能,所有指定了同一个资源组标识的Job,无论属于哪条流水线,GitLab都会保证同一时间仅运行一个,后续同组Job会自动排队,等待前序作业完全结束后再启动,完全匹配你的需求。
仅需给对应部署Job加一行配置即可,示例:
# 你的DEV部署作业原有配置 deploy_dev: stage: deploy script: - 清理数据 - 执行部署 # 新增资源组配置,同名部署作业使用相同的资源组名称即可 resource_group: dev_deployment
如果需要自动跳过旧的排队部署,只运行最新提交的部署作业,可以扩展配置:
deploy_dev: stage: deploy script: - 清理数据 - 执行部署 resource_group: name: dev_deployment # 自动取消同资源组中排队的旧作业 cancel_outdated_jobs: true
方案2:项目级流水线并发限制(全流水线粒度控制)
如果你需要的是整个项目同一时间仅运行一条流水线,不需要按Job单独控制,可以直接在页面配置:
- 进入对应项目的「设置」→「CI/CD」→「通用管道」
- 找到「管道并发限制」选项,设置数值为1即可,后续触发的流水线会自动排队等待前序流水线完全结束后再运行。
内容的提问来源于stack exchange,提问作者Akash Kashyap
相关产品推荐
相关产品推荐

