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
相关产品推荐
相关产品推荐

