Python+gitlab实现分支批量合并打tag

摘要:
最近,公司代码托管中的SVN已迁移到Gitlab。每个版本发布都需要将代码合并到主分支并进行标记。应用程序更加重复和繁琐,因此使用Python+gitlab来实现分支批处理合并和标记;参考python-gitlab文档环境来准备:1.python 32.pipingsstallpython gitlabtoken:gitlab用户令牌,其生成方式如下:在设置中--gitlab的用户的accesstoken

  最近公司代码托管有SVN迁移到Gitlab,每次版本发布都要将代码合并至master分支且打tag,应用较多重复且繁琐,于是使用Python+gitlab实现分支批量合并打tag;

参考 python-gitlab文档

环境准备:

1.Python3

2.pip install python-gitlab

token:gitlab用户令牌,生成如下:

在gitlab用户的setting--access token--填写name+api+read_repository--create personal access token,会生成一个字符串
import gitlab, time


url = 'XXXXXXXXXX'    # gitlab地址
token = 'XXXXXXXXXX'    # gitlab用户令牌

# 登录
gl = gitlab.Gitlab(url, token)

dec_message = str(time.localtime().tm_year) + "" + str(time.localtime().tm_mon) + "" + str(
    time.localtime().tm_mday) + "日发布"


class gitlab_operation(object):
    
    def __init__(self):
        self.merge_tag = False

    def gitlab_merge(self, project_name, merge_tile):
        # 根据id获得project对象
        project = gl.projects.get(app_dic[project_name])

        # 创建一个merge request
        try:
            mr = project.mergerequests.create({'source_branch': 'test',
                                               'target_branch': 'master',
                                               'title': merge_tile, })

            # 更新一个merge request 的描述
            mr.description = merge_tile
            mr.save()
            mr.merge()
        except Exception as e:
            print(project_name + "出现错误,错误如下:
" + str(e))
            self.merge_tag = False
        else:
            print(project_name + "合并成功,合并标题为:" + merge_tile)
            self.merge_tag = True
        # 1表示合并成功,可以后续打tag,0则表示合并失败,后续不打tag
        return self.merge_tag

    def gitlab_tag(self, project_name, tag_description):
        project = gl.projects.get(app_dic[project_name])
        tags = project.tags.list()

        # 如果有历史tag
        if tags:
            last_tag_name = tags[0].attributes["name"]

            # 最后需要加1
            version_num = int(last_tag_name[18:20]) + 1
            # 拼接,满足 tag_202008010_V1.0.01 格式
            new_tag_name = "tag_" + time.strftime("%Y%m%d") + "_V1.0." + "{0:0>2}".format(version_num)
            tag = project.tags.create({'tag_name': new_tag_name, 'ref': 'master'})
            tag.set_release_description(tag_description)
            print(project_name + "打tag成功" + new_tag_name)

        # 如果第一次打tag
        else:
            new_tag_name = "tag_" + time.strftime("%Y%m%d") + "_V1.0.01"
            tag = project.tags.create({'tag_name': new_tag_name, 'ref': 'master'})
            tag.set_release_description(tag_description)
            print(project_name + "打tag成功" + new_tag_name)


if __name__ == "__main__":
    # git工程格式为"app_name":app_dic[project_name] ,
    app_dic = {

        "app_name":app_id,
        ...
    }
    gitlab_handle = gitlab_operation()
    for i, j in app_dic.items():
        print("开始处理" + i + str(j) + "项目")
        if gitlab_handle.gitlab_merge(i, dec_message):
            gitlab_handle.gitlab_tag(i, dec_message)
        else:
            print(i + "合并失败,请手动打tag")

免责声明:文章转载自《Python+gitlab实现分支批量合并打tag》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇QTableView 固定列宽度(鼠标拖动后,仍可固定)Flink 读写 iceberg下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

利用ARCGIS和LocaSpace Viewer无限制免费下载高清的谷歌卫星影像

卫星影像可以当做我们内业成图时的工作参考。目前市面上出现的几款好用的卫星图片下载工具,比如91卫图助手、bigemap等软件,都可以自定义导出坐标系及参数,但存在使用限制,比如限制了单次下载大小或者每日下载大小等。 也有无限制下载卫星地图的软件,比如LocaSpace Viewer,但是该软件最终导出只能是WGS84坐标系下的卫星影像,无法直接导出北京5...

HBuilder wap2app提示版本过旧

目前HBuilder的Html5plus在Android5.0(targetSdkVersion=21)环境下完整测试过的。 现在手机已经是Android10.0,在运行targetSdkVersion=21的打包软件时候,会提示如下截图 如果,你的H5APP使用的硬件不多,比如摄像头,定位等等,那么可以通过配置将打包版本提高,5+app在manifes...

使用jmeter HTTP代理服务器录制APP脚本

使用jmeter HTTP代理服务器录制APP脚本 步骤一、jemter设置 1、启动JMeter,双击运行jmeter.bat,启动jmeter jmeter运行主界面 2、添加线程组:右键测试计划-》添加-》Threads(Users)-》线程组 3、HTTP代理服务器 1)添加HTTP代理服务器:右键工作台-》添加-》非测试元件-》HTTP代理...

【转】Win7注册表的使用(更新中)

一、注册表的存储结构和数据类型 1、基本概念:   Windows 7的注册表主要由“键”和“键值”构成,称HKEY为根键(RootKey),SubKey为子键。   键(Key):“位于左侧窗格如同文件夹图标一样的就是键”,类似于我的电脑中的文件夹。   键值(Value):“而在右侧窗格中一行行的选项,就称它为键值”,每个键值都有名称、类型、数据三项信...

Java:程序开机自启动

一、加到开机自动启动程序的注册表: package com.zit; import java.io.IOException; public classStart { public static voidChangeStart(boolean isStartAtLogon) throws IOException{ String...

Android Monkey压力测试使用

一、Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试。monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。只针对Activity做测试,不能对Servic...