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


Posted in Python onOctober 15, 2020

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

总结

到此这篇关于Python3使用 GitLab API 进行批量合并分支的文章就介绍到这了,更多相关Python合并分支内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python2.x与Python3.x的区别
Jan 14 Python
Python中字符串的格式化方法小结
May 03 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
python实现简易数码时钟
Feb 19 Python
Python中collections模块的基本使用教程
Dec 07 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
Python数据类型之List列表实例详解
May 08 Python
python实现统计代码行数的小工具
Sep 19 Python
pandas 空数据处理方法详解
Nov 02 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
Python代码需要缩进吗
Jul 01 Python
Python配置pip国内镜像源的实现
Aug 20 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 #Python
matplotlib教程——强大的python作图工具库
Oct 15 #Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 #Python
详解pycharm配置python解释器的问题
Oct 15 #Python
详解查看Python解释器路径的两种方式
Oct 15 #Python
几款Python编译器比较与推荐(小结)
Oct 15 #Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 #Python
You might like
介绍php设计模式中的工厂模式
2008/06/12 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
深入浅析php json 格式控制
2015/12/24 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
python str与repr的区别
2013/03/23 Python
python实现无证书加密解密实例
2014/10/27 Python
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python列表解析配合if else的方法
2018/06/23 Python
python自动化生成IOS的图标
2018/11/13 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
python写日志文件操作类与应用示例
2019/07/01 Python
Python 如何对文件目录操作
2020/07/10 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
三星印度官网:Samsung印度
2019/08/03 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
工程资料员岗位职责
2015/04/13 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
导游词之山东八大关
2019/12/18 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python