Python3使用 GitLab API 进行批量合并分支

作者:麻花不是花花 时间:2023-05-26 08:38:53 

Python3使用 GitLab API 进行批量合并分支

文章前言

每周五上午十二点前需要将项目上各组开发分支合并软集仓库分支, 需要在十个项目上进行 merge

程序员一般都是 很讨厌麻烦, 所以编写此脚本进行 批量 merge, 统一进行合并

另外, 如果项目经历上线或者修复 bug 等情况, 需要合并分支至 uat、release、master 等分支, 也是能够满足此脚本使用情况

类似于这种功能性脚本, 一般习惯使用 Python 来编写, 通过 GitLab 提供的 REST API 进行调用

GitLab 提供了非常丰富的 REST API 操作, 大家可以搜索官方网址查看

脚本思路

参考了网上大家提供的一部分脚本, 结合项目本身提供了此思路

  • 在 GitLab 中获取个人令牌 Token

  • 获取需要合并的项目 ID

  • 获取需要合并项目的来源分支以及目标分支

  • 验证 GitLab 对应的 Token 是否正确

  • 进行合并请求, 失败会删除对应的合并请求

在网上找到的大部分执行不成功, 可能在之前是可以成功的, 但是随着 GitLab 的 API 3->4 升级, 网上大部分脚本都执行失败了

运行前准备

首先, 电脑上需要 安装 python3 运行环境, 将对应的 import 包依赖进行下载, 最重要的就是 获取令牌 Token

登陆进 GitLab 设置页面, 点击访问令牌

我设置了中文, 不过差别不大, Token 还是很好认的

Python3使用 GitLab API 进行批量合并分支

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

Python3使用 GitLab API 进行批量合并分支

具体实现代码


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()

来源:https://blog.csdn.net/qq_37781649/article/details/109055349

标签:Python,GitLab,API,合并分支
0
投稿

猜你喜欢

  • tf.nn.conv2d与tf.layers.conv2d的区别及说明

    2021-03-29 13:36:53
  • 查看Python安装路径以及安装包路径小技巧

    2022-02-24 10:09:51
  • 简单form标准化实例——语义结构

    2007-06-20 16:32:00
  • 揭秘SQL Server 2014有哪些新特性(1)-内存数据库

    2024-01-26 05:42:47
  • MySQL Daemon failed to start错误解决办法

    2024-01-16 23:22:21
  • wxpython中自定义事件的实现与使用方法分析

    2023-02-10 07:50:26
  • vue项目使用md5加密、crypto-js加密、国密sm3及国密sm4的方法

    2024-04-27 15:47:47
  • 使用cx_freeze把python打包exe示例

    2021-06-10 05:36:20
  • Web开发的改良

    2009-06-25 14:34:00
  • Python+Selenium使用Page Object实现页面自动化测试

    2022-09-30 06:09:57
  • Python排序搜索基本算法之堆排序实例详解

    2021-07-10 12:35:30
  • 用Python实现换行符转换的脚本的教程

    2021-12-10 23:25:42
  • python字典DICT类型合并详解

    2023-01-03 07:37:12
  • MySQL5.7.21解压版安装详细教程图解

    2024-01-25 10:23:57
  • Vue路由的懒加载深入详解

    2024-05-28 16:03:58
  • Go语言程序查看和诊断工具详解

    2023-06-22 02:40:38
  • Vue3.0 自己实现放大镜效果案例讲解

    2024-04-09 10:45:54
  • MySQL分表实现上百万上千万记录分布存储的批量查询设计模式详解

    2024-01-17 18:20:01
  • 关于windows下Tensorflow和pytorch安装教程

    2023-06-09 07:35:54
  • vue-element换肤所有主题色和基础色均可实现自主配置

    2024-04-28 09:29:00
  • asp之家 网络编程 m.aspxhome.com