Python调用gitlab接口实现的分支合并脚本

使用的接口文档见:https://python-gitlab.readthedocs.io/en/stable/gl_objects/merge_requests.html

import gitlab

idMap = {
    "A": "111"
}

tokenMap = {
    "A": "glpat-aaa"
}

def merge(prj,source,target):
    title = f'{prj}——同步{source}分支到{target}'
    print(title)
    gl = gitlab.Gitlab('https://gitlab.xx.com', private_token=tokenMap[prj])
    project = gl.projects.get(idMap[prj])
    mr_list = project.mergerequests.list(source_branch=source, target_branch=target, state='opened')
    if(len(mr_list)>0):
        mr = mr_list[0]
    else:
        mr = project.mergerequests.create({
            'source_branch': source,
            'target_branch': target,
            'title': title,
            'description': 'Automatically generated merge request by script'
        })
    if(mr.changes()['changes_count'] is None or mr.changes()['changes_count'] == '0'):
        mr.title = '无变更,忽略'
        mr.save()
    elif(mr.has_conflicts):
        mr.title = title + '存在冲突!'
        mr.save()
    print(mr.title)
    print("")

if __name__ == "__main__":
    merge("A","master","xxx")

    print("结束,按回车键退出!")
    input()

脚本内容说明:
idMap为gitlab上项目对应的项目id,在项目详情中可以看到。
tokenMap为gitlab中项目接口的授权token,在设置中可以生成。
idMap和tokenMap通过key进行关联。

脚本只是自动发起mergerequests请求,遇到分支有冲突则会自动修改title标记冲突(这里存在问题,有时候识别会不准,考虑可能是gitlab在拿到mr对象之后,分支冲突的检测还未处理完毕导致)。
想要真正合并分支还需要手动到gitlab上点合并,或者可以修改脚本,使用mr.merge()方法进行自动合并。(冲突状态调用会报错还是怎样未尝试,考虑分支合并比较严谨,估未开启,手动审阅把一道关)


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍