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

GitLab CI配置:为部署阶段添加指定用户审批(非付费替代方案)

GitLab CI 无付费版环境保护的审批替代方案

针对你的需求,在GitLab免费版中可以通过以下两种方案实现部署阶段的指定用户审批:

方案一:手动触发作业(Manual Job)+ 用户权限规则限制

GitLab免费版原生支持manual类型的作业,结合CI规则可以限制只有指定用户/用户组能触发部署作业,同时允许任何人触发通知阶段。

示例 .gitlab-ci.yml 配置

stages:
  - notify
  - deploy

# 第一阶段:发送流水线触发通知邮件
send_admin_notification:
  stage: notify
  script:
    # 示例:用mail命令发送邮件,需确保runner环境配置了邮件服务
    - echo "流水线已触发,触发用户:$CI_USER_LOGIN,分支:$CI_COMMIT_BRANCH" | mail -s "GitLab流水线启动通知" admin@your-domain.com
  rules:
    # 允许所有触发源(push、web手动触发等)自动执行此阶段
    - if: '$CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web"'
      when: always

# 第二阶段:需指定用户审批的部署作业
deploy_to_prod:
  stage: deploy
  script:
    # 替换为实际的部署命令
    - echo "开始执行生产环境部署..."
    - ./deploy-scripts/prod-deploy.sh
  # 设置为手动触发,需用户点击执行
  when: manual
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web"'
      # 限制只有指定用户能触发此作业
      only:
        variables:
          # 单个用户示例
          - $CI_USER_LOGIN == "admin-user-1" || $CI_USER_LOGIN == "admin-user-2"
          # 如果用用户组,可替换为:$CI_USER_GROUPS =~ /your-admin-group-slug/
      # 未审批则流水线标记为失败
      allow_failure: false

方案说明

  • 通知阶段:任何人触发流水线后会自动执行,发送邮件给管理员。
  • 部署阶段:会处于"等待手动触发"状态,只有符合规则中指定的用户登录GitLab后,才能看到并点击"运行"按钮执行部署作业;普通用户看不到该作业的触发选项。

方案二:自定义审批标记检查(支持多人审批)

如果需要更灵活的审批流程(比如多人签字审批),可以通过检查代码仓库中的审批标记(如管理员提交的特定评论、Issue审批记录)来控制部署。

示例配置

stages:
  - notify
  - deploy

send_admin_notification:
  stage: notify
  script:
    - echo "流水线已触发,触发用户:$CI_USER_LOGIN" | mail -s "GitLab流水线启动通知" admin@your-domain.com
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web"'
      when: always

deploy_to_prod:
  stage: deploy
  script:
    # 检查是否有指定管理员提交了包含"DEPLOY-APPROVE"的commit评论
    - |
      APPROVED=false
      # 指定允许审批的用户列表
      ADMIN_USERS=("admin-user-1" "admin-user-2")
      for USER in "${ADMIN_USERS[@]}"; do
        # 检查最近提交中是否有该用户的审批标记
        if git log --author="$USER" --grep="DEPLOY-APPROVE" --oneline -n 1 | grep -q "."; then
          APPROVED=true
          break
        fi
      done
      if [ "$APPROVED" != "true" ]; then
        echo "错误:未获得指定管理员的审批标记"
        exit 1
      fi
    # 执行部署
    - ./deploy-scripts/prod-deploy.sh
  when: manual

方案说明

  • 管理员需要在部署前,提交一条包含DEPLOY-APPROVE关键词的commit(或在对应Issue中添加审批评论,可修改脚本适配API调用)。
  • 部署作业执行前会检查该标记,只有存在指定用户的审批记录时才会继续执行。

注意事项

  • 确保GitLab Runner环境配置了邮件服务(方案一的邮件通知需要),或替换为GitLab API发送用户通知。
  • 对于用户组权限的规则,需确保用户已加入目标组,且CI_USER_GROUPS变量能正确获取组信息(GitLab默认会暴露该变量)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:45