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操作SQLite简明教程
Jul 10 Python
Python内置函数的用法实例教程
Sep 08 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
Python内存管理实例分析
Jul 10 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
Python 寻找局部最高点的实现
Dec 05 Python
keras获得某一层或者某层权重的输出实例
Jan 24 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
pytorch 常用函数 max ,eq说明
Jun 28 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 header 跳转
2013/06/17 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
shiro授权的实现原理
2017/09/21 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python制作CSDN免积分下载器
2015/03/10 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python编写一个闹钟功能
2017/07/11 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
详解python中的线程
2018/02/10 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
python实现根据文件格式分类
2019/10/31 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
美术毕业生求职信
2014/02/25 职场文书
三峡导游词
2015/01/31 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL