Python调用GitLab API实现Hotfix分支批量合并

顾星河
顾星河
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍如何利用Python的GitLab库自动化执行Hotfix分支向Test、UAT等目标分支的批量合并操作。通过示例代码展示如何创建Merge Request、处理冲突及失败回滚,解决发布后手动合并遗漏的问题,提升运维效率。

本文详细解析如何使用Python调用GitLab API,实现将Hotfix分支批量合并至多个目标分支的自动化流程。文中提供了完整的示例代码,涵盖从创建合并请求到异常处理的全过程,对需要自动化处理发布后分支合并工作的开发者具有重要的参考价值。

批量合并分支的需求与痛点

1. 需求背景:每次大规模上线发布后,通常需要将Hotfix分支合并到Master(此步骤已自动化完成),随后还需将其合并到Test、UAT等测试环境分支。这一系列操作涉及重复性的分支合并工作。

2. 实际痛点:在自动合并至Master后,部分项目成员可能忘记将代码同步合并到其他分支,导致环境不一致。因此,需要一种机制来自动处理这些剩余的合并任务。

Python自动化合并脚本实现


#!/usr/bin/python3
#coding=utf-8
# 自动合并项目dev分支到其他分支,当合并失败删除merge请求
import sys
import datetime
import urllib.request
import gitlab


#项目名和项目ID 
project_name = "python-jmmei"
project_list=[265]

# 生成gitlab对象
gitlab_url = 'http://gitlab.baidu.com'
token = 'xxxxxxxxxxxx'
old_branch="hotfix"
new_branches=["test","uat","uat_match"]
#验证登录
gl = gitlab.Gitlab(gitlab_url, token)


for project_id in project_list:
  project = gl.projects.get(project_id)
  print(project.id)
  for proj in new_branches:
    print("正在合并项目:%s的%s分支到%s分支"%(project_name,old_branch,proj))
    # mr合并请求的对象
    mr = None
    try:
      # 创建mr
      mr = project.mergerequests.create({'source_branch': old_branch,
                      'target_branch': proj,
                      'title': "%s to %s ---"%(old_branch,proj) + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                     })
    
      # 接受合并请求
      url = "%s/api/v3/projects/%s/merge_request/%s/merge"%(gitlab_url,project.id, mr.id)
      headers = {
        "PRIVATE-TOKEN":token
      }
      req = urllib.request.Request(url=url,headers=headers,method="PUT")
      resp = urllib.request.urlopen(req)
      # print(resp)
      print("合并到分支%s成功,结束...\r\n"%(proj))
    except Exception as e:
      print("合并出错,可能有冲突未解决或者%s分支并没有更新,异常信息:\r\n"%(old_branch))
      print(e)
      # 把刚创建的mr请求删除
      #v4版本支持 project.mergerequests.delete(mr.id)
      mr.delete()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表