如何配置GitLab CI仅在合并请求批准并合并后触发部署?
解决方案
要实现仅在合并请求批准并完成合并后执行部署脚本,你需要调整.gitlab-ci.yml中的rules配置,让作业只在合并完成后触发的目标分支流水线中运行:
deploy_to_prelive: artifacts: {} tags: - mytag stage: deploy script: - echo "Deploy" environment: name: prelive url: https://example.com rules: # 仅当代码推送到prelive分支时触发(MR合并后会触发该事件) - if: '$CI_COMMIT_BRANCH == "prelive" && $CI_PIPELINE_SOURCE == "push"'
关键说明:
- 移除原有的
merge_request_event条件:该条件会在MR创建、更新时触发流水线,不符合合并后执行的需求。 - 使用
$CI_COMMIT_BRANCH == "prelive":确保作业只在prelive分支的流水线中运行。 - 搭配
$CI_PIPELINE_SOURCE == "push":限定触发源为代码推送事件,MR合并完成后GitLab会自动向目标分支发起一次push,从而触发该流水线。
额外建议:
如果要严格限制只能通过MR合并到prelive分支(禁止直接push代码到prelive),可以在项目设置中开启分支保护:
- 进入项目「Settings」→「Repository」→「Protected branches」
- 把prelive分支设置为受保护分支,仅允许通过MR合并,禁止直接push操作。这样就能确保触发该作业的push事件都是来自MR合并,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Titus
相关产品推荐
相关产品推荐

