IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> python3使用gitlab拉取项目用于部署 -> 正文阅读

[开发工具]python3使用gitlab拉取项目用于部署

python3使用gitlab拉取项目

说明

公司项目管理会自己搭建gitLab管理代码,一般我们拉取项目,通过git工具。由于有完善整个部署流程的想法,所以有直接用gitlab拉取代码的想法。参考别的文章,完善该代码,作为记录,希望可以帮到需要的人。
参考文章:
如何进入python3.7的git(master)_python-gitlab拉取git项目(python3)

安装gitlab

pip install python-gitlab

拉取项目代码如下

# -*- coding: UTF-8 -*-
# Desc   :使用gitlab包从gitLab上拉取项目代码
import os
import gitlab

GIT_URL = "gitLab地址"
PRIVATE_TOKEN = "your private token"
# PROJECT_NAME = "项目名称"
PROJECT_ID = 408 # 项目ID
PROJECT_BRANCH = "分支名称"
DES_PATH = "目标拉取路径"

class MyGitLabClone(object):
    def __init__(self, git_url: str, private_token: str):
        """
        :param git_url: gitLab地址(必传) example:"http://172.27.2.115/"
        :param private_token: gitlab 私有token (必传) example: "trTKyyyXK-y5CUrBkBzT"
        """
        self.git_url = git_url
        self.private_token = private_token
        self._check()

    def _check(self):
        if not self.git_url:
            raise Exception("请传入gitlab地址!")
        if not self.private_token:
            raise Exception("请传入private_token!")

    def _project_check(self, project_id, project_name, branch, to_path):
        if not branch:
            branch = "master"
            print("当前项目使用分支为master分支!")
        else:
            print(f"当前项目使用分支为{branch}分支!")
        if not project_name and not project_id:
            raise Exception("请传入项目ID或项目名称!")
        if not to_path:
            to_path = os.path.dirname(os.path.abspath(__file__))
            print(f"当前项目clone路径为: {to_path}")
        return project_id, project_name, branch, to_path

    def _get_project(self, project_id, project_name):
        self.git = gitlab.Gitlab(self.git_url, self.private_token)
        if project_id:
            return self.git.projects.get(project_id)
        if project_name:
            projects = self.git.projects.list()
            for project in projects:
                if project.name == project_name:
                    return project

    def _makedirs(self, dir_name):
        if not os.path.isdir(dir_name):
            print(f"创建目录: {dir_name}")
            os.makedirs(dir_name, exist_ok=True)

    def _get_full_path(self, to_path, origin):
        """获取目标路径"""
        return os.path.join(to_path, origin)

    def clone(self, project_id: int = None, project_name: str = None, branch: str = "master", to_path: str = None):
        """
        :param project_id: 项目Id
        :param project_name: 项目名称 (项目ID和项目名称必须传一个参数)
        :param branch: 分支名称 (默认master)  example: dev-gmj
        :param to_path: 克隆地址(如果不传该参数,默认在当前文件目录路径)
        :return:
        """
        project_id, project_name, branch, to_path = self._project_check(project_id, project_name, branch, to_path)
        project = self._get_project(project_id, project_name)
        repository_tree = project.repository_tree(all=True, ref=branch, recursive=True, as_list=True)
        for item in repository_tree:
            if item['type'] == "tree":
                self._makedirs(self._get_full_path(to_path, item['path']))
            else:
                file = project.files.get(file_path=item['path'], ref=branch)
                print(f"下载文件: {item['path']} ")
                with open(self._get_full_path(to_path, item['path']), 'wb') as fw:
                    fw.write(file.decode())
                print(f"下载完成: {item['path']} ")


if __name__ == '__main__':
    git = MyGitLabClone(GIT_URL, PRIVATE_TOKEN)
    git.clone(project_id=PROJECT_ID, branch=PROJECT_BRANCH, to_path=DES_PATH)
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:48:06  更:2022-03-10 22:49:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:40:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码