拷贝jfrog目录至另外的存储库

发布于 2024年03月07日

将jfrog一个目录中的所有文件夹拷贝到另外一个存储库下,不拷贝其中的文件。
脚本如下:

from requests.auth import HTTPBasicAuth  # 导入HTTP基本身份验证模块
import requests, json  # 导入请求库和JSON模块

# 脚本内容: 将JFrog存储库中的目录(不包括文件)全部在另一个存储库中创建出来
class PhraseArt():
    def __init__(self, username, password, port, jfrog_url):
        self.username = username  # 用户名
        self.password = password  # 密码
        self.port = port  # 端口
        self.jfrog_url = jfrog_url  # JFrog的URL
        self.url_items = jfrog_url + port + "/artifactory/api/storage/"  # 存储项的URL
    
    def create_folder(self, src_repo, dest_repo):  # 创建目录的方法
        dest_url = self.jfrog_url + self.port + "/artifactory/" + dest_repo + '/' + src_repo.split('/')[-1] + '/'  # 目标目录URL
        requests.put(dest_url, auth=HTTPBasicAuth(self.username, self.password))  # 发送PUT请求以创建目录
        items_test = requests.get(self.url_items + src_repo, auth=HTTPBasicAuth(self.username, self.password))  # 发送GET请求以获取源目录内容
        if items_test.status_code == 200:  # 如果请求成功
            data = items_test.content.decode()  # 解码响应内容
            datait = json.loads(data)  # 将JSON数据解析为Python字典
            items = datait['children']  # 获取子项列表
            for item in items:  # 遍历子项
                if item.get('folder') == True:  # 如果是目录
                    folder_uri = item.get('uri').strip('/')  # 获取目录的URI
                    self.create_folder_structure(src_repo + '/' + folder_uri, dest_repo + '/' + src_repo.split('/')[-1] + '/' + folder_uri)  # 递归调用create_folder_structure方法创建子目录
        
    def create_folder_structure(self, src_path, dest_path):  # 创建目录结构的方法
        dest_url = self.jfrog_url + self.port + "/artifactory/" + dest_path + '/'  # 目标目录URL
        requests.put(dest_url, auth=HTTPBasicAuth(self.username, self.password))  # 发送PUT请求以创建目录
        src_url = self.url_items + src_path  # 源目录URL
        items_test = requests.get(src_url, auth=HTTPBasicAuth(self.username, self.password))  # 发送GET请求以获取源目录内容
        if items_test.status_code == 200:  # 如果请求成功
            data = items_test.content.decode()  # 解码响应内容
            datait = json.loads(data)  # 将JSON数据解析为Python字典
            items = datait['children']  # 获取子项列表
            for item in items:  # 遍历子项
                if item.get('folder') == True:  # 如果是目录
                    folder_uri = item.get('uri').strip('/')  # 获取目录的URI
                    self.create_folder_structure(src_path + '/' + folder_uri, dest_path + '/' + folder_uri)  # 递归调用create_folder_structure方法创建子目录

if __name__ == '__main__':
    ou = PhraseArt("admin", "Saic@1234", "8084", "http://10.30.4.56:")  # 创建PhraseArt对象,传入必要参数
    ou.create_folder("Product/AVN_Application_A11", "Test")  # 调用create_folder方法,将源目录中的目录结构创建到目标目录中