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函数中的函数(闭包)用法实例
Mar 15 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
Python 错误和异常代码详解
Jan 29 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
Python3非对称加密算法RSA实例详解
Dec 06 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
python常用函数与用法示例
Jul 02 Python
Python paramiko模块使用解析(实现ssh)
Aug 30 Python
Python 切分数组实例解析
Nov 07 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
django rest framework 自定义返回方式
Jul 12 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
apache rewrite_module模块使用教程
2008/01/10 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
python导入模块交叉引用的方法
2019/01/19 Python
python 随机森林算法及其优化详解
2019/07/11 Python
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
英文导游欢迎词
2014/01/11 职场文书
企业业务员岗位职责
2014/03/14 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
建筑结构施工求职信
2014/07/11 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
应聘教师求职信范文
2015/03/20 职场文书
酒店前台岗位职责
2015/04/16 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers