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中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
python实现机器人行走效果
Jan 29 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
Flask框架web开发之零基础入门
Dec 10 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Python matplotlib实时画图案例
Apr 23 Python
django中related_name的用法说明
May 20 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
pandas中DataFrame重置索引的几种方法
May 24 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函数in_array()使用详解
2014/08/20 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
Python内置函数reversed()用法分析
2018/03/20 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
地理科学专业毕业生求职信
2013/10/15 职场文书
应届毕业生个人自荐信范文
2013/11/30 职场文书
高中军训感言600字
2014/03/11 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
学校运动会开幕词
2016/03/03 职场文书
详解Python牛顿插值法
2021/05/11 Python
详解Vue的sync修饰符
2021/05/15 Vue.js
Python自动化测试PO模型封装过程详解
2021/06/22 Python
SQL Server 中的事务介绍
2022/05/20 SQL Server