文章前言

每周五上午十二点前需要将项目上各组开发分支合并软集仓库分支, 需要在十个项目上进行 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 还是很好认的

依次输入 Token名称、Token有效期、以及对应的权限范围, 将对应的 Token 复制到对应的脚本就好了

具体实现代码

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合并分支内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: Python3使用 GitLab API 进行批量合并分支

本文地址: http://www.cppcns.com/jiaoben/python/354392.html

python调用gitlab api自动合并分支_Python3使用 GitLab API 进行批量合并分支相关推荐

  1. python办公自动化(七)xlwt和xlrd实现excel表格的批量合并和拆分

    批量合并 需求 同事进行团建,指定人员用调查问卷的形式统计其他人员的娱乐倾向和可接受的费用.如下图所示 每位员工回答答案的位置如下图,第一题答案在E5处,第二题答案在E11处. 每位员工的选择结果保存 ...

  2. python调用stitcher类自动实现多个图像拼接融合

    使用stitcher需要注意,图像太大会报错而且计算慢. 特点和适用范围:图像需有足够重合相同特征区域. 优点:适应部分倾斜/尺度变换和畸变情形,拼接效果好,使用简单,可以一次拼接多张图片. 缺点:需 ...

  3. python调用百度地图画轨迹图_百度地图 API 绘制路线

    后台拿到数据返回给了jsp页面,并且显示到了地图上 . 现在要根据两个位点.绘制出他们之间的路线. 有实现过这个功能的大神,给指点一下,如果有实例,那当热是最好了. 下面是 : 我显示坐标的代码: v ...

  4. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  5. Python调用大恒相机采集图片(Ubuntu16.04)

    Python调用大恒相机(Ubuntu16.04) 文章目录 Python调用大恒相机(Ubuntu16.04) 下载API文件 环境配置 验证 采集图片 下载API文件 wget http://gb ...

  6. arcpy脚本工具开发:批量合并文件地理数据库(gdb)

    文章目录 前言 一.ArcPy是什么? 二.GDB批量合并工具开发思路 三.GDB批量合并工具代码 四.GDB批量合并工具截图 总结 前言 有多个文件地理数据库(即.gdb格式的数据库),数据库内有多 ...

  7. Git-骚操作-批量删除分支

    前言 一个业务一个业务开发过去,少的是头发,留下的还有超多的本地分支. 某一天,我的强迫症突然发作了,我就只想保留当前开发的本地分支,该怎么办呢?当然也可以逐条人肉删除,但是我不是很喜欢,不仅累,还显 ...

  8. python调用gitlab api自动合并分支_Python3 如何使用 GitLab API 进行批量的合并分支

    文章前言 每周五上午十二点前需要将项目上各组开发分支合并软集仓库分支, 需要在十个项目上进行 merge 程序员一般都是 很讨厌麻烦, 所以编写此脚本进行 批量 merge, 统一进行合并 另外, 如 ...

  9. 利用Python调用pastebin.com API自动创建paste

    在上一篇文章中,已经实现了模拟pastebin.com的账号登录,并且获取了api_dev_key,这一篇文章主要讲一下调用API创建paste 登录之后,进入API页面,发现网站已经提供了几个API ...

最新文章

  1. android jar 电子书下载,【Android】Gradle project sync jar包长时间下载不下来的解决办法...
  2. python全栈开发 * 22 面向对象 知识点汇总 * 180703
  3. 【知识总结】回文自动机(Palindrome_Automaton)
  4. java中redis原理_Redis字符串键的底层原理
  5. 前端---JavaScript基础3
  6. 重庆理工大学两江校区计算机学院,重庆理工大学两江校区国际项目9月开学
  7. Spark集群运行jar包程序里的print日志哪里去了?
  8. SpringBoot项目@Email不起作用
  9. 用matlab设计滤波器实验报告,数字信号出来实验报告--matlab滤波器设计
  10. stm32代码_MATLAB(STM32MATTARGET) 自动生成STM32工程代码
  11. 【ICLR2020】通过强化学习和稀疏奖励进行模仿学习
  12. 360安全路由器外网连内网(端口映射)的设置方法
  13. Android 版本对应 Version Code
  14. 电离释放型动态水处理器
  15. Office Word如何设置页码(MacOS中为例)
  16. XMind基础教程-主题篇
  17. 查询国际学术会议的信息
  18. php抢购问题,PHP并发抢购解决方案
  19. 中文的括号和英文的括号区别_小括号、中括号、大括号,英文怎么说?
  20. 在线去雾开发,使用阿贝云服务器

热门文章

  1. 【MyBatis框架】MyBatis入门程序第一部分
  2. exp()用法和点乘的原因
  3. 基于Vue+Nodejs实现宿舍管理系统
  4. linux求文件共有行。多个文件求共有行交集完全匹配-w
  5. PermutationImportance
  6. 机器学习基础专题:样本选择
  7. 地理投影展开(近似多边形体)
  8. java多线程--死锁
  9. office文档、图片、音/视频格式转换工具
  10. sublime Text3快捷键使用大全