Python如何使用Gitlab API实现批量的合并分支


Posted in Python onNovember 27, 2019

这篇文章主要介绍了Python如何使用Gitlab API实现批量的合并分支,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.需求:每次大批量上线完成后,都会进行将hotfix合并到Master,合并到test/uat等等重复操作(上线发布后自动合并master已完成)。

2.现实:在完成发布后自动合并master后,可能还有的项目人员忘记合并到其他分支的情况,so

#!/usr/bin/python3
#coding=utf-8
# 自动合并项目dev分支到其他分支,当合并失败删除merge请求
import sys
import datetime
import urllib.request
import gitlab


#项目名和项目ID 
project_name = "python-jmmei"
project_list=[265]

# 生成gitlab对象
gitlab_url = 'http://gitlab.baidu.com'
token = 'xxxxxxxxxxxx'
old_branch="hotfix"
new_branches=["test","uat","uat_match"]
#验证登录
gl = gitlab.Gitlab(gitlab_url, token)


for project_id in project_list:
  project = gl.projects.get(project_id)
  print(project.id)
  for proj in new_branches:
    print("正在合并项目:%s的%s分支到%s分支"%(project_name,old_branch,proj))
    # mr合并请求的对象
    mr = None
    try:
      # 创建mr
      mr = project.mergerequests.create({'source_branch': old_branch,
                      'target_branch': proj,
                      'title': "%s to %s ---"%(old_branch,proj) + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                     })
    
      # 接受合并请求
      url = "%s/api/v3/projects/%s/merge_request/%s/merge"%(gitlab_url,project.id, mr.id)
      headers = {
        "PRIVATE-TOKEN":token
      }
      req = urllib.request.Request(url=url,headers=headers,method="PUT")
      resp = urllib.request.urlopen(req)
      # print(resp)
      print("合并到分支%s成功,结束...\r\n"%(proj))
    except Exception as e:
      print("合并出错,可能有冲突未解决或者%s分支并没有更新,异常信息:\r\n"%(old_branch))
      print(e)
      # 把刚创建的mr请求删除
      #v4版本支持 project.mergerequests.delete(mr.id)
      mr.delete()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解python脚本自动生成需要文件实例代码
Feb 04 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
Python进程间通信之共享内存详解
Oct 30 Python
python爬虫超时的处理的实例
Dec 19 Python
Python检查ping终端的方法
Jan 26 Python
FFrpc python客户端lib使用解析
Aug 24 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
python异常处理和日志处理方式
Dec 24 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
python如何处理程序无法打开
Jun 16 Python
Python建造者模式案例运行原理解析
Jun 29 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
python [:3] 实现提取数组中的数
Nov 27 #Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 #Python
python中的数组赋值与拷贝的区别详解
Nov 26 #Python
使用python切片实现二维数组复制示例
Nov 26 #Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 #Python
Python实现随机取一个矩阵数组的某几行
Nov 26 #Python
Python 求数组局部最大值的实例
Nov 26 #Python
You might like
php和editplus正则表达式去除空白行
2015/04/17 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
js性能优化技巧
2015/11/29 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
python截取两个单词之间的内容方法
2018/12/25 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
门卫班长岗位职责
2013/12/15 职场文书
24岁生日感言
2014/01/13 职场文书
承办会议欢迎词
2014/01/17 职场文书
铁路个人事迹材料
2014/01/30 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
springboot临时文件存储目录配置方式
2021/07/01 Java/Android