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 08 Python
Python专用方法与迭代机制实例分析
Sep 15 Python
Python中的闭包详细介绍和实例
Nov 21 Python
用Python写一个无界面的2048小游戏
May 24 Python
Ubuntu 下 vim 搭建python 环境 配置
Jun 12 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
Python管理Windows服务小脚本
Mar 12 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
Python函数的默认参数设计示例详解
Dec 01 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
Python爬虫爬取有道实现翻译功能
Nov 27 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
Terran兵种对照表
2020/03/14 星际争霸
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
写自已的js类库需要的核心代码
2012/07/16 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python工具——Mimesis的简单使用教程
2021/01/16 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
枚举与#define宏的区别
2014/04/30 面试题
团员学习总结的自我评价范文
2013/10/14 职场文书
家长建议怎么写
2014/05/15 职场文书
药店收银员岗位职责
2015/04/07 职场文书
大学运动会通讯稿
2015/07/18 职场文书
同事离别感言
2015/08/04 职场文书
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL