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 中文字符串的处理实现代码
Oct 25 Python
Python 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
MySQL适配器PyMySQL详解
Sep 20 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
VSCode Python开发环境配置的详细步骤
Feb 22 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
python绘制雷达图实例讲解
Jan 03 Python
Elasticsearch 聚合查询和排序
Apr 19 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带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
php7 新增功能实例总结
2020/05/25 PHP
mailto的使用技巧分享
2012/12/21 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
js Array.slice的8种不同用法示例
2019/07/10 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
Python编程中的反模式实例分析
2014/12/08 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
露营世界:Camping World
2017/02/02 全球购物
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
美国家居装饰店:Pier 1
2019/09/04 全球购物
若干个Java基础面试题
2015/05/19 面试题
学生党员思想汇报
2013/12/28 职场文书
犯错检讨书
2014/02/21 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
蓬莱阁导游词
2015/02/04 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
毕业证明书
2015/06/19 职场文书
婚宴父亲致辞
2015/07/27 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
mysql事务对效率的影响分析总结
2021/10/24 MySQL
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记