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实现将文本转换成语音的方法
May 28 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
详解python的webrtc库实现语音端点检测
May 31 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
解决Python对齐文本字符串问题
Aug 28 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
Python是什么 Python的用处
May 26 Python
Python+Tkinter制作专属图形化界面
Apr 01 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
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
javascript查询字符串参数的方法
2015/01/28 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
js运动事件函数详解
2016/10/21 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
Python contextlib模块使用示例
2015/02/18 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
用Python写一个for循环的例子
2016/07/19 面试题
介绍一下Ruby的特点
2013/01/20 面试题
医生爱岗敬业演讲稿
2014/08/26 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
乐山大佛导游词
2015/02/02 职场文书
试用期自我评价范文
2015/03/10 职场文书
工地食品安全责任书
2015/05/09 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
《观潮》教学反思
2016/02/17 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript