zoukankan      html  css  js  c++  java
  • Jenkins H5编译、打包、发布

    记录Jenkins H5编译、打包、发布

    #!/usr/bin/env python3
    # -*- coding:GBK -*-
    # author by Michael Ho
    # contact:rui.he@geekthings.com.cn
    
    import os, shutil, time
    # npm编译
    def npm_compile(npm_path, npm_source, s_dir):
        """
        :param npm_path:
        :param path:
        :return:
        """
        os.chdir(s_dir)
        print("当前工作目录是:{}".format(s_dir))
        print("开始从 {} 下载依赖包... ...".format(npm_source))
        npm_install = npm_path + r" install --registry=" + npm_source
        os.system(npm_install)
        print("开始编译... ...")
        npm_build = npm_path + r" run build"
        os.system(npm_build)
    
    # 加密成.d文件
    def H5_encode(encode_tool, s_dir, d_dir):
        """
        :param encode_tool: H5Encode加密工具
        :param s_path: workspace源代码路径
        :param d_path: 加密后的代码路径
        """
        if os.path.exists(d_dir):
            shutil.rmtree(d_dir)
        os.makedirs(d_dir)
    
        if not os.path.exists(encode_tool):
            print("加密工具不存在,请检查... ...")
            exit(0)
        else:
            H5_Encode_CMD = encode_tool + r" -D " + s_dir + r" " + d_dir + r" 0"
            print(H5_Encode_CMD)
            os.system(H5_Encode_CMD)
    
    # 打包归档
    def zip_file(zip_exe, path, file):
        """
        :param zip_exe: 需要打包的路径
        :param path: 需要打包的路径
        :param file: 压缩包的名称
        :return:
        """
        if os.path.exists(file):
            os.remove(file)
    
        zip_CMD = zip_exe + r" a " + file + r" " + path + r"*"
        print(zip_CMD)
        print("{} 归档中... ...".format(file))
        os.system(zip_CMD)
    
        if not os.path.exists(file):
            print("{} 归档失败, 请检查 Jenkins 上脚本... ...".format(file))
            exit(0)
    
    # 生成小包函数
    def copy_app_H5(x_root, s_dir, d_dir):
        if not os.path.exists(x_root):
            print("小包目录不存在,构建停止 ... ...")
            exit(0)
    
        if os.path.exists(d_dir):
            shutil.rmtree(d_dir)
    
        for root, dirs, files in os.walk(x_root):
            for d in dirs:
                d_name = os.path.join(root, d).rstrip()
                d_dir_name = d_name.replace(x_root, d_dir)
                if not os.path.exists(d_dir_name):
                    os.makedirs(d_dir_name)
    
            for f_name in files:
                f_name = os.path.join(root, f_name).rstrip()
                if(os.path.splitext(f_name)[1] == ".d"):
                    s_file = f_name.replace(x_root, s_dir)
                    d_file = f_name.replace(x_root, d_dir)
                    shutil.copyfile(s_file, d_file)
                    # 判断复制是否成功
                    if(s_file.replace(s_dir, "") == d_file.replace(d_dir, "")):
                        print("{} ---> 拷贝成功 ^.^".format(d_file))
                    else:
                        print("拷贝过程发生错误,请检查...")
    
    # 全量包部署
    def copy_all_file(d_qdymanage, s_dir, d_dir):
    
        if os.path.exists(d_qdymanage):
            for file in os.listdir(d_dir):
                file = os.path.join(d_dir, file)
                if os.path.isfile(file):
                    os.remove(file)
                if os.path.isdir(file) and file != d_qdymanage:
                    shutil.rmtree(file) # 删除除qdymanage目录以外所有的目录和文件
        else:
            print("{} 目录不存在, 请检查! 构建停止... ...".format(d_qdymanage))
            exit(0)
    
        for root, dirs, files in os.walk(s_dir):
            for d in dirs:
                s_dir_name = os.path.join(root, d) # 列出workspace里面的子目录
                d_dir_name = s_dir_name.replace(s_dir, d_dir)
                if not os.path.exists(d_dir_name):
                    os.makedirs(d_dir_name) # 创建zzinfo里面的子目录
    
            for f in files:
                s_file_name = os.path.join(root, f) # 列出workspace里面的所有文件的绝对路径
                d_file_name = s_file_name.replace(s_dir, d_dir) # 列出目标文件的绝对路径
                print("{0}  --->  {1}".format(s_file_name, d_file_name).rstrip())
                shutil.copyfile(s_file_name, d_file_name)
    
    
    # main函数入口
    if __name__ == "__main__":
    
        os.environ['VERSION'] = r"7_06_001"
    
        # 0.编译
        npm_path = r'"C:Program Files
    odejs
    pm"'
        npm_source = r"https://registry.npm.taobao.org"
        s_dir = os.getenv("WORKSPACE")
        npm_compile(npm_path, npm_source, s_dir)
    
        # 1.加密
        encode_tool = r"d:JenkinsH5Encode.exe"
        m_dir = s_dir + r"dest" # %workspace%dist 是H5源代码目录
        d_dir = r"d:Jenkinsfrontend_encrypt"
        H5_encode(encode_tool, m_dir, d_dir)
    
        # 2.打包归档(小包)
        # 2.1 生成小包
        x_root = r"d:H5_app_src"
        xs_dir = d_dir
        xd_dir = r"d:JenkinsH5_app"
        copy_app_H5(x_root, xs_dir, xd_dir)
    
        # 2.2 小包打包
        zip_exe = r'"C:"Program Files"7-Zip7z.exe"'
        src_file = r"H5_" + os.getenv("VERSION") + "_src_" + os.getenv("TEST_ENVIRONMENT") + "_" + time.strftime('%Y%m%d') + ".7z"
        src_dir = xd_dir
        zip_file(zip_exe, src_dir, src_file)
    
        # 3.打包归档(全量包)
        file =  r"H5_" + os.getenv("VERSION") + r"_" + os.getenv("TEST_ENVIRONMENT") + "_" + time.strftime('%Y%m%d') + ".7z"
        zip_file(zip_exe, d_dir, file)
    
    
        # 4.170环境部署全量包
        if os.getenv("TEST_ENVIRONMENT") == "js_test":
            d_qdymanage = r"d:zzinfomszxdownloadqdymanage"
            all_s_dir = d_dir
            all_d_dir = r"d:zzinfomszxdownload"
            copy_all_file(d_qdymanage, all_s_dir, all_d_dir)
     
  • 相关阅读:
    Boost练习程序(multi_index_container)
    mathematica练习程序(图像取反)
    【转】媒体播放器三大底层架构
    CentOS安装中文支持
    Retrofit2文件上传下载及其进度显示
    Andorid面试问题整理
    5分钟实现Android中更换头像功能
    Android中突发情况Activity数据的保存和恢复
    5分钟让你学会用最高效的工具解析所有Json
    android http 和https请求
  • 原文地址:https://www.cnblogs.com/herui1991/p/12718169.html
Copyright © 2011-2022 走看看