第三章.python脚本gitLab多个账号下,所属项目下载到excel

一、背景

日常工作中,代码管理会用到gitLab,而因种种原因,可能会涉及从gitLab将代码迁移的情景发生。针对这种情况,特整理如下代码迁移方案,该方案只针对代码从一个服务器gitLab迁移到其它gitLab的代码迁移方案。该方案利用python语言,python-gitlab库实现。该方案通过两步实现,第一步:获取源账号下所属的项目信息。第二步:将确认获取的信息导入到目标账号对应的组下。

二、插件安装

  pip install python-gitlab pandas

API文档:
Deployments - python-gitlab v3.15.0

三、 登录源gitLab账号获取token

在这里插入图片描述
全部勾选,创建对应的token即可。同样目标账户也这样操作,并且,本地设置SSHKey,如下图所示
SSHkey设置

ssh-keygen -t rsa -C "你的邮箱"

上面,源账号和目标账号均要设置。设置完成之后,即可进入下一步,导出操作

四、开始导出操作

代码如下,其中源文件账号有两个,根据自己需求调整:

import gitlab
import pandas as pd
import json

def get_projects_info(gl):
    """
    获取账号下所有项目列表信息
    """
    projects = gl.projects.list(visibility="private", all=True)
    project_info = []

    for project in projects:
        project_info.append({
            'ID': project.id,
            'Name': project.name,
            'path_with_namespace':project.path_with_namespace,
            'Description': project.description,
            'Web URL': project.web_url,
            'SSH URL': project.ssh_url_to_repo,
            'HTTP URL': project.http_url_to_repo,
            'Visibility': project.visibility,
            'Default Branch': project.default_branch,
        })

    return project_info

# 合并jsonlist 对象
def merge_lists(json_list1, json_list2):
    # 转换为字符串
    json_str_list1 = [json.dumps(obj, sort_keys=True) for obj in json_list1]
    json_str_list2 = [json.dumps(obj, sort_keys=True) for obj in json_list2]

    # 使用集合去重
    unique_json_str_set = set(json_str_list1).union(json_str_list2)

    # 将字符串转换回 JSON 对象
    unique_json_list = [json.loads(obj) for obj in unique_json_str_set]

    return unique_json_list

# 导出到excel
def export_to_excel(project_info, excel_file):
    """
    将项目信息导出到 Excel
    """
    df = pd.DataFrame(project_info)
    df.to_excel(excel_file, index=False)

# 在目标 GitLab 仓库的指定组下创建新项目
def create_project_in_target_gl(gl, target_group_id, project_name, project_description):
    """
    在目标 GitLab 仓库的指定组下创建新项目
    """
    target_group = gl.groups.get(target_group_id)
    new_project = target_group.projects.create({
        'name': project_name,
        'description': project_description
    })
    return new_project



if __name__ == "__main__":
    # 替换以下变量为实际值
    source_gitlab_url = "source_gitlab_url"
    target_gitlab_url = "target_gitlab_url "
    private_token_cl = "上面获取的源文件token,第一个账号"
    excel_file_path_cl = "E:/data/file/gitlab_info2.xlsx"

    private_token_st = "上面获取的源文件token,第二个账号"
    excel_file_path_st = "E:/data/file/gitlab_info3.xlsx"

    #目标账号下token
    target_private_token ="上面获取的目标文件token"

    excel_file_path_merge = "E:/file/logs/gitlab_info_merge.xlsx"

    target_group_name = "research"  # 目标组的名称,确保该组已存在
    target_branch = "main"  # 目标分支的名称

    # 创建 GitLab 实例
    gl_cl = gitlab.Gitlab(source_gitlab_url, private_token=private_token_cl, api_version=4)

    gl_st = gitlab.Gitlab(source_gitlab_url, private_token=private_token_st, api_version=4)

    # 获取账号下所有项目信息
    projects_info_cl = get_projects_info(gl_cl)

    projects_info_st = get_projects_info(gl_st)

    projects_info_merge = merge_lists(projects_info_cl, projects_info_st)

    # 导出到 Excel 文件
    export_to_excel(projects_info_cl, excel_file_path_cl)

    export_to_excel(projects_info_st, excel_file_path_st)

    export_to_excel(projects_info_merge, excel_file_path_merge)



    print(f"Project information exported to {excel_file_path_merge}")

执行之后效果如下:
导出excel
文件说明:
1.gitlab_info.xlsx:所有项目
2.gitlab_info2:账号一下的项目
3.gitlab_info3.xlsx:账号二下的项目
4.gitlab_info_merge.xlsx:要合并的项目

五、总结

该项目主要实现第一步,获取所有想到从源文件导入到目标文件的文件信息获取,如有任何疑问,请留言。而具体导入,则需要执行下一步,请继续关注,下一章:python脚本gitLab多个账号下,所属源项目导入到目标项目

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值