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中list循环语句用法实例
Nov 10 Python
Python分析学校四六级过关情况
Nov 22 Python
Python实现求数列和的方法示例
Jan 12 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
python斐波那契数列的计算方法
Sep 27 Python
使用Scrapy爬取动态数据
Oct 21 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
python实现数字炸弹游戏
Jul 17 Python
python time()的实例用法
Nov 03 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 Python
Python办公自动化之Excel(中)
May 24 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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代码
2006/12/06 PHP
PHP 危险函数全解析
2009/09/09 PHP
PHP模块化安装教程
2016/06/01 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
Python模块学习 re 正则表达式
2011/05/19 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
Python selenium如何设置等待时间
2016/09/15 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
python:动态路由的Flask程序代码
2019/11/22 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
python可以用哪些数据库
2020/06/22 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
党员承诺书格式
2014/05/21 职场文书
检讨书怎么写
2015/01/23 职场文书
基于Python实现对比Exce的工具
2022/04/07 Python