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批量读取txt文件为DataFrame的方法
Apr 03 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
python中bytes和str类型的区别
Oct 21 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
tensorboard显示空白的解决
Feb 15 Python
Python开发五子棋小游戏
May 02 Python
Python实现仓库管理系统
May 30 Python
Python编写车票订购系统 Python实现快递收费系统
Aug 14 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
西德产收音机
2021/03/01 无线电
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
js图片预加载示例
2014/04/30 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
js实现烟花特效
2020/03/02 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python3 max()函数基础用法
2019/02/19 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
python多线程并发实例及其优化
2019/06/27 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
人力资源管理专业学生自我评价
2013/11/20 职场文书
高中化学教学反思
2014/01/13 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
天坛导游词
2015/02/02 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
2016国培学习心得体会
2016/01/08 职场文书