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 splitlines使用技巧
Sep 06 Python
python BeautifulSoup使用方法详解
Nov 21 Python
python实现复制整个目录的方法
May 12 Python
python导入时小括号大作用
Jan 10 Python
Python创建xml文件示例
Mar 22 Python
python中的set实现不重复的排序原理
Jan 24 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
python Pandas如何对数据集随机抽样
Jul 29 Python
flask开启多线程的具体方法
Aug 02 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 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
延长phpmyadmin登录时间的方法
2011/02/06 PHP
优化PHP程序的方法小结
2012/02/23 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
探寻PHP脚本不报错的原因
2014/06/12 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
使用python实现画AR模型时序图
2019/11/20 Python
浅析python 字典嵌套
2020/09/29 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
普师专业个人自荐信范文
2013/11/26 职场文书
出纳岗位职责模板
2013/11/27 职场文书
工商管理本科生求职信
2014/07/13 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
现场施工员岗位职责
2015/04/11 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书