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 相关文章推荐
python 爬虫 批量获取代理ip的实例代码
May 22 Python
python统计多维数组的行数和列数实例
Jun 23 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
python绘制玫瑰的实现代码
Mar 02 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
python非标准时间的转换
Jul 25 Python
python的html标准库
Apr 29 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
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
HTML DOM的nodeType值介绍
2011/03/31 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
浅析return false的正确使用
2013/11/04 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
Vue.js用法详解
2017/11/13 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
Django admin美化插件suit使用示例
2017/12/12 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
办公设备采购方案
2014/03/16 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
刑事和解协议书范本
2014/11/19 职场文书
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python