You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用GitLab成功流水线任务的重新运行选项?

阻止GitLab成功流水线任务被手动重跑的解决方案

1. UI层面直接禁用单个任务重跑权限

在项目的「设置」→「CI/CD」→「流水线」配置中,找到**“允许手动重跑单个作业”**的开关,关闭后所有用户都无法看到单个任务的重跑选项,从根源上阻止手动重跑操作。

2. 通过自定义角色限制权限

如果需要更精细化的权限控制(比如仅禁止部分用户重跑),可以创建自定义角色:

  • 进入项目「设置」→「成员」→「角色」→「新建角色」
  • 取消勾选**“重跑流水线”和“重跑单个作业”**的权限
  • 将需要限制的开发者/维护者从默认的「Developer」角色切换为这个自定义角色

3. 在CI配置中添加重跑拦截逻辑

如果无法修改权限,可通过CI脚本阻止重跑任务执行:

方式一:用CI_RETRY_COUNT变量判断重跑

该变量首次运行时值为0,每重跑一次递增1。在job中加入判断,非首次运行直接终止:

your_merge_request_job:
  script:
    # 拦截手动重跑
    - if [ "$CI_RETRY_COUNT" -gt 0 ]; then echo "禁止手动重跑该任务" && exit 1; fi
    # 原任务执行脚本
    - echo "执行实际任务逻辑"
  only:
    - merge_requests

方式二:用rules过滤重跑场景

通过流水线规则仅允许首次运行的任务执行:

your_merge_request_job:
  script:
    - echo "执行实际任务逻辑"
  rules:
    # 仅当merge_request触发且是首次运行时执行
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_RETRY_COUNT == 0'
      when: always
    # 其他情况直接跳过任务
    - when: never

关于区分自动/手动触发的问题

虽然手动重跑后CI_PIPELINE_SOURCE仍为merge_request_event,但可以通过CI_RETRY_COUNT变量区分:值为0是流水线自动触发,值大于0则是手动重跑的任务。

内容的提问来源于stack exchange,提问作者Yogesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:16:07