如何在Gitlab CI/CD流程中实现master自动同步合并到develop分支
GitLab CI/CD自动同步master与develop分支解决方案
针对master分支合入hotfix等改动后未同步到develop,导致分支偏差、后续合并冲突的问题,可通过以下两种可落地的方案实现自动化同步:
方案1:CI流水线自动同步(推荐)
前置准备
在GitLab项目「设置-访问令牌」中创建项目访问令牌,勾选write_repository权限,将生成的令牌存入项目「设置-CI/CD-变量」中,命名为GITLAB_TOKEN,勾选「隐藏变量」「仅受保护分支可用」避免泄露。
配置CI任务
在项目根目录的.gitlab-ci.yml中添加如下同步任务,仅当master分支有新代码推送时触发:
sync_master_to_develop: stage: sync # 仅master分支的push事件触发 only: refs: - master variables: - $CI_PIPELINE_SOURCE == "push" before_script: # 配置git用户信息和仓库权限 - git config --global user.name "CI同步机器人" - git config --global user.email "ci-sync@yourcompany.com" - git remote set-url origin "https://oauth2:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git" - git fetch origin --prune script: # 切换到develop分支尝试合并master改动 - git checkout -b develop origin/develop - git merge origin/master --no-ff --no-edit - | if [ $? -eq 0 ]; then # 无冲突直接推送 git push origin develop echo "同步成功:master改动已自动合入develop" else # 有冲突自动创建合并请求通知相关人员处理 echo "存在合并冲突,自动创建同步MR" curl --request POST \ --url "https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/merge_requests" \ --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ --header "Content-Type: application/json" \ --data '{ "source_branch": "master", "target_branch": "develop", "title": "同步master改动到develop(需解决冲突)", "description": "master分支有新改动合入,自动创建此MR进行同步,请解决冲突后合并", "assignee_ids": ['${GITLAB_USER_ID}'] }' fi
如果不需要自动合入,仅想自动提醒同步,可删除合并成功后push的逻辑,无论是否有冲突都直接创建合并请求,由开发人员审核后合入,安全性更高。
方案2:Git Flow流程约束
如果团队严格遵循Git Flow工作流,可在GitLab合并请求规则中添加限制:所有源分支匹配hotfix/*的合并请求,必须同时创建指向master和develop的两个合并请求,仅当两个MR都完成审批后才能执行合并操作,从流程层面避免hotfix合入master后遗漏同步到develop。
注意事项
- 绝对不要在同步脚本中使用
--force强制推送,避免覆盖develop分支上未合入master的功能代码 - 同步逻辑需要先在测试项目验证无误后再应用到生产项目,避免误操作导致代码丢失
- 建议定期检查两个分支的差异,避免特殊场景下同步逻辑失效导致分支偏差过大
内容的提问来源于stack exchange,提问作者Vlad Gheorghe
相关产品推荐
相关产品推荐

