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的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
python 基础教程之Map使用方法
Jan 17 Python
Python requests发送post请求的一些疑点
May 20 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
对Python发送带header的http请求方法详解
Jan 02 Python
python 实现selenium断言和验证的方法
Feb 13 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
python如何读取bin文件并下发串口
Jul 05 Python
扩展Django admin的list_filter()可使用范围方法
Aug 21 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
python 实时调取摄像头的示例代码
Nov 25 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
我的论坛源代码(五)
2006/10/09 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
php绘制一条弧线的方法
2015/01/24 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
js document.write()使用介绍
2014/02/21 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
PHP面试题及答案一
2012/06/18 面试题
了解AppleTalk协议吗
2014/04/01 面试题
简单而又朴实的个人求职信分享
2013/12/12 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
员工工作表现评语
2014/04/26 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL