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中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
对于Python中线程问题的简单讲解
Apr 03 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
Python如何定义接口和抽象类
Jul 28 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实现给图片加灰色半透明效果的方法
2014/10/20 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
jQuery选择器之子元素选择器详解
2017/09/18 jQuery
Vue组件化开发思考
2018/02/02 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
javascript中join方法实例讲解
2019/02/21 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
python中的colorlog库使用详解
2019/07/05 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
Pycharm修改python路径过程图解
2020/05/22 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
中国最大的团购网站:聚划算
2016/09/21 全球购物
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
半年思想汇报
2013/12/30 职场文书
公司办公室岗位职责
2014/03/19 职场文书
出国留学计划书
2014/04/27 职场文书
施工工地安全标语
2014/06/07 职场文书
综合素质评价自我评价
2015/03/06 职场文书
安全学习心得体会范文
2016/01/18 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers