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()
欢迎有更多 IT 朋友一起多交流学习.......
来源: https://www.cnblogs.com/Jame-mei/p/11939175.html