Python3 调用 GitLab API 实现批量合并分支自动化脚本
本文介绍如何利用 Python3 结合 GitLab REST API 编写自动化脚本,实现多项目、多分支的批量合并操作。内容涵盖获取个人令牌、配置项目 ID 及分支信息、验证 Token 有效性以及处理合并请求失败时的自动清理逻辑。针对 GitLab API 版本升级导致的兼容性问题,提供了基于 gitlab 库和 urllib 的具体实现代码,适用于软集、UAT 及 Master 分支的日常维护。

文章前言
批量合并分支的背景与需求
每周五上午十二点前需要将项目上各组开发分支合并软集仓库分支,需要在十个项目上进行 merge
程序员一般都是很讨厌麻烦,所以编写此脚本进行批量 merge,统一进行合并
另外,如果项目经历上线或者修复 bug 等情况,需要合并分支至 uat、release、master 等分支,也是能够满足此脚本使用情况
类似于这种功能性脚本,一般习惯使用 Python 来编写,通过 GitLab 提供的 REST API 进行调用
GitLab 提供了非常丰富的 REST API 操作,大家可以搜索官方网址查看
脚本核心逻辑与思路
脚本思路
参考了网上大家提供的一部分脚本,结合项目本身提供了此思路
- 在 GitLab 中获取个人令牌 Token
- 获取需要合并的项目 ID
- 获取需要合并项目的来源分支以及目标分支
- 验证 GitLab 对应的 Token 是否正确
- 进行合并请求,失败会删除对应的合并请求
在网上找到的大部分执行不成功,可能在之前是可以成功的,但是随着 GitLab 的 API 3->4 升级,网上大部分脚本都执行失败了
运行环境准备与 Token 配置
运行前准备
首先,电脑上需要安装 python3 运行环境,将对应的 import 包依赖进行下载,最重要的就是获取令牌 Token
登陆进 GitLab 设置页面,点击访问令牌
我设置了中文,不过差别不大,Token 还是很好认的

依次输入 Token名称、Token有效期、以及对应的权限范围,将对应的 Token 复制到对应的脚本就好了

Python3 批量合并代码实现
具体实现代码
import urllib.request
import gitlab
# ========================================配置开始=================================================
# ⚠️ 项目名, 无实际意义
project_name = "xxxx"
# ⚠️ 代表多个项目 ID, 平常一个项目即可, 多个项目需要保证 source_branch、target_branches 保持一致
project_id_list = ['xxxx']
# ⚠️ 生成 gitlab 对象
gitlab_url = 'xxxx'
# ⚠️ 需要生成自己的令牌 token
token = 'xxxx'
# ⚠️ 将 source_branch 分支 merge target_branches 分支集上
source_branch = 'test'
target_branches = ['master']
# =========================================配置结束================================================
# 验证登录
gl = gitlab.Gitlab(gitlab_url, token)
def main():
for project_id in project_id_list:
project = gl.projects.get(project_id)
print(' >>> 项目ID :: [%s], 项目名称 :: [%s] ' % (str(project.id), project_name))
for target in target_branches:
print(" >>> 正在合并项目 :: [%s] 的 [%s] 分支到 [%s] 分支" % (project_name, source_branch, target))
# mr合并请求的对象
mr = None
try:
# 创建 merge request
mr = project.mergerequests.create({'source_branch': source_branch,
'target_branch': target,
'title': "Merge branch '%s' into '%s'" % (
source_branch, target)
})
# 接受合并请求
url = '%s/api/v4/projects/%s/merge_requests/%s/merge' % (gitlab_url, project.id, mr.iid)
print(' >>> Merge url :: [%s], title :: [%s] ' % (url, mr.title))
# 个人/项目访问令牌, 添加至请求头
headers = {"PRIVATE-TOKEN": token}
req = urllib.request.Request(url=url, headers=headers, method="PUT")
resp = urllib.request.urlopen(req)
if resp.code == 200:
print(" >>> 合并到目标分支 [%s] 成功, 结束... \r\n" % target)
else:
mr.delete()
except Exception as e:
print(" >>> 合并出错, 可能有冲突未解决或者 [%s] 分支并没有更新, 异常信息:: \r\n" % source_branch, str(e))
# 把创建的 merge 请求删除
mr.delete()
if __name__ == "__main__":
main()
总结
到此这篇关于Python3使用 GitLab API 进行批量合并分支的文章就介绍到这了,更多相关Python合并分支内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













