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使用Apriori算法进行关联性解析
Dec 21 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
Python中sort和sorted函数代码解析
Jan 25 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
python验证身份证信息实例代码
May 06 Python
python字符串查找函数的用法详解
Jul 08 Python
Python简易计算器制作方法代码详解
Oct 31 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
python中如何使用insert函数
Jan 09 Python
Django用户认证系统如何实现自定义
Nov 12 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
mysql时区问题
2008/03/26 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
JavaScript修改css样式style
2008/04/15 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
React Native 环境搭建的教程
2017/08/19 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python入门篇之数字
2014/10/20 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
详解Python3 pickle模块用法
2019/09/16 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
Python笔记之工厂模式
2019/11/20 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
pytorch中index_select()的用法详解
2021/01/06 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
英语翻译系毕业生求职信
2013/09/29 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
详解Laravel制作API接口
2021/05/31 PHP
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python