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中zip()函数用法实例教程
Jul 31 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 Python
Python中按值来获取指定的键
Mar 04 Python
django将数组传递给前台模板的方法
Aug 06 Python
Pyqt5自适应布局实例
Dec 13 Python
pymysql的简单封装代码实例
Jan 08 Python
Python 文件数据读写的具体实现
Jan 24 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
Python远程方法调用实现过程解析
Jul 28 Python
python 数据类型强制转换的总结
Jan 25 Python
Python 线程池模块之多线程操作代码
May 20 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 !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
JavaScript关于select的相关操作说明
2010/01/13 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
React实现全选功能
2020/08/25 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
Python栈类实例分析
2015/06/15 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
深入了解python中元类的相关知识
2019/08/29 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
python 通过文件夹导入包的操作
2020/06/01 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
经典商业广告词
2014/03/13 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
军事博物馆观后感
2015/06/05 职场文书
小学见习报告
2015/06/23 职场文书