一、需求

app打包需要打入一些H5进去,以便更快的加载页面。这些H5文件是散落在各个文件夹中的【如下列所示】,偶尔各个文件夹还需新增文件,每次新增一个文件,需要改动jenkins上job脚本,比较麻烦,所以换一种思路来解决这个问题。

tmp/
├── c
│   ├── cmd.js.d
│   ├── TZT2..js.d
│   ├── TZT.js.d
│   └── TZT\\\\\\\\\\\\.json.d
├── c_modules
│   ├── config.js.d
│   ├── css
│   │   ├── base-min2..css.d
│   │   ├── base-min.css.d
│   │   ├── base-min-white.css.d
│   │   ├── images
│   │   │   └── arrow.png.d
│   │   ├── jskj-elementUI.css.d
│   │   ├── scroller.css.d
│   │   ├── skin
│   │   │   └── bg.css.d
│   │   └── skin01
│   │   └── bg.css.d
│   ├── debuggap.js.d
│   ├── fastclick.js.d
│   ├── heatmap.min.js.d
│   ├── jquery-1.7..min.js.d
│   ├── jquery.min.js.d
│   ├── loadData.js.d
│   ├── loadSel.js.d
│   ├── onscroll.js.d
│   ├── pop
│   │   ├── images
│   │   │   └── icon_closeBtn.png.d
│   │   ├── pop.css.d
│   │   ├── pop.js.d
│   │   ├── pop-zdycx.css.d
│   │   └── pop-zdycx.js.d
│   ├── proint.js.d
│   ├── sea.js.d
│   └── sensorsdata.min.js.d
├── config
│   └── index.js.d
├── dist
│   ├── src
│   │   ├── common
│   │   │   ├── iconClick.js.d
│   │   │   └── md5.js.d
│   │   ├── home
│   │   │   ├── app.js.d
│   │   │   ├── images
│   │   │   │   ├── close.png.d
│   │   │   │   ├── default.png.d
│   │   │   │   ├── down.png.d
│   │   │   │   ├── dxsq.png.d
│   │   │   │   ├── fxng.png.d
│   │   │   │   ├── gpcc.png.d
│   │   │   │   ├── gpkh.png.d
│   │   │   │   ├── guide1.png.d
│   │   │   │   ├── guide2.png.d
│   │   │   │   ├── guide3.png.d
│   │   │   │   ├── guide4.png.d
│   │   │   │   ├── header_bg.png.d
│   │   │   │   ├── jftoast.png.d
│   │   │   │   ├── mid_xgsgts.png.d
│   │   │   │   ├── myzc.png.d
│   │   │   │   ├── new.png.d
│   │   │   │   ├── news.png.d
│   │   │   │   ├── nodata.png.d
│   │   │   │   ├── oper_activity_pop.png.d
│   │   │   │   ├── register_tel.png.d
│   │   │   │   ├── right.png.d
│   │   │   │   ├── rmzt_one.png.d
│   │   │   │   ├── rmzt_three.png.d
│   │   │   │   ├── rmzt_two.png.d
│   │   │   │   ├── selected.png.d
│   │   │   │   ├── select.png.d
│   │   │   │   ├── shadow.png.d
│   │   │   │   ├── tougu_bg.png.d
│   │   │   │   ├── up.png.d
│   │   │   │   ├── user.png.d
│   │   │   │   ├── voice.gif.d
│   │   │   │   ├── yszb.png.d
│   │   │   │   └── ywbl.png.d
│   │   │   ├── index.html.d
│   │   │   ├── js
│   │   │   │   ├── home_index.js.d
│   │   │   │   └── Sortable.js.d
│   │   │   ├── routes
│   │   │   │   └── routes.js.d
│   │   │   ├── skin01
│   │   │   │   └── home_index.css.d
│   │   │   └── template
│   │   │   └── home_index.html.d
│   │   ├── mine
│   │   │   ├── api
│   │   │   │   └── function.js.d
│   │   │   ├── app.js.d
│   │   │   ├── css
│   │   │   │   └── index.css.d
│   │   │   ├── img
│   │   │   │   ├── arrow_account.png.d
│   │   │   │   ├── cao.png.d
│   │   │   │   ├── common_used.png.d
│   │   │   │   ├── crown.png.d
│   │   │   │   ├── detail.png.d
│   │   │   │   ├── dui.png.d
│   │   │   │   ├── flow.png.d
│   │   │   │   ├── guide1.png.d
│   │   │   │   ├── guide2.png.d
│   │   │   │   ├── guide3.png.d
│   │   │   │   ├── guide4.png.d
│   │   │   │   ├── guide5.png.d
│   │   │   │   ├── hide_assets.png.d
│   │   │   │   ├── jcsc.png.d
│   │   │   │   ├── ka.png.d
│   │   │   │   ├── not_login.png.d
│   │   │   │   ├── show_assets.png.d
│   │   │   │   ├── sign.png.d
│   │   │   │   ├── transfer_accounts.png.d
│   │   │   │   ├── tui.png.d
│   │   │   │   ├── vip_arrow.png.d
│   │   │   │   ├── vip.png.d
│   │   │   │   ├── wei.png.d
│   │   │   │   └── wen.png.d
│   │   │   ├── index.html.d
│   │   │   ├── js
│   │   │   │   └── index.js.d
│   │   │   ├── routes
│   │   │   │   └── routes.js.d
│   │   │   ├── skin
│   │   │   │   └── index.css.d
│   │   │   ├── skin01
│   │   │   │   └── index.css.d
│   │   │   └── template
│   │   │   └── index.html.d
│   │   └── public-images
│   │   ├── cccb.png.d
│   │   ├── dkxh.png.d
│   │   ├── dpjl.png.d
│   │   ├── dtzq.png.d
│   │   ├── dxsq.png.d
│   │   ├── dzjy.png.d
│   │   ├── fhsp.png.d
│   │   ├── fxng.png.d
│   │   ├── fxspg.png.d
│   │   ├── gdrs.png.d
│   │   ├── ggcg.png.d
│   │   ├── ggtjy.png.d
│   │   ├── ggt.png.d
│   │   ├── gpcc.png.d
│   │   ├── gpkh.png.d
│   │   ├── gpqq.png.d
│   │   ├── gsrl.png.d
│   │   ├── gszx.png.d
│   │   ├── gznhg.png.d
│   │   ├── jcsc.png.d
│   │   ├── jfsc.png.d
│   │   ├── jgdy.png.d
│   │   ├── jjzt.png.d
│   │   ├── lcsc_new.png.d
│   │   ├── lhb.png.d
│   │   ├── mfjg.png.d
│   │   ├── myzc.png.d
│   │   ├── nrzt.png.d
│   │   ├── qbfw.png.d
│   │   ├── rmzt.png.d
│   │   ├── rzrq.png.d
│   │   ├── sczd.png.d
│   │   ├── sjjj.png.d
│   │   ├── ssnc.png.d
│   │   ├── tfp.png.d
│   │   ├── tgsq.png.d
│   │   ├── xsjj.png.d
│   │   ├── xskx.png.d
│   │   ├── xyjy.png.d
│   │   ├── yjyg.png.d
│   │   ├── ywbl_old.png.d
│   │   ├── ywbl.png.d
│   │   ├── yzzz.png.d
│   │   ├── zlcc.png.d
│   │   ├── znxg.png.d
│   │   ├── znyj.png.d
│   │   └── znzg.png.d
│   └── static
│   ├── css
│   │   ├── base.css.d
│   │   ├── base-min.css.d
│   │   ├── base-min-sea-vue.css.d
│   │   ├── mobiscroll.custom-2.6..min.css.d
│   │   └── swiper.css.d
│   ├── jquery
│   │   ├── jquery-1.11..min.js.d
│   │   ├── jquery-1.8..min.js.d
│   │   └── jquery-range.js.d
│   ├── lib
│   │   ├── action.js.d
│   │   ├── flexible.js.d
│   │   ├── mobiscroll.custom-2.6..min.js.d
│   │   └── swiper.js.d
│   ├── sea
│   │   ├── sea.js.d
│   │   └── seajs-text.js.d
│   └── vue
│   ├── vue.js.d
│   ├── vue-router.min.js.d
│   ├── vue-scroller.min.js.d
│   └── vue-scroller.min.js.map.d
├── frontend_7_06_js_test_0303.7z
└── jy
└── ggqq
├── function
│   └── function.js.d
├── ggqq_index.html.d
├── image
│   ├── add.png.d
│   ├── delete.png.d
│   ├── drcj.png.d
│   ├── fall.png.d
│   ├── ggqq_chicang.png.d
│   ├── ggqq_cljy.png.d
│   ├── ggqq_index_b.png.d
│   ├── ggqq_index.png.d
│   ├── ggqq_kcwt.png.d
│   ├── ggqq_ksxd.png.d
│   ├── ggqq_minus.png.d
│   ├── ggqq_nologin.png.d
│   ├── ggqq_plus.png.d
│   ├── ggqq_sybg.png.d
│   ├── ggqq_xq.png.d
│   ├── gou.png.d
│   ├── kcwt.png.d
│   ├── loading.gif.d
│   ├── minus.png.d
│   ├── mymoney.png.d
│   ├── notselect.png.d
│   ├── others@2x.png.d
│   ├── reset.png.d
│   ├── right2.png.d
│   ├── right.png.d
│   ├── rise.png.d
│   ├── select.png.d
│   ├── shoppingcar.png.d
│   └── zhcl@2x.png.d
├── js
│   └── ggqq_index.js.d
├── skin
│   ├── bdq.css.d
│   ├── chedan.css.d
│   ├── ggqq_bdsx.css.d
│   ├── ggqq_chicang.css.d
│   ├── ggqq_edcx.css.d
│   ├── ggqq_hylist.css.d
│   ├── ggqq_hysx.css.d
│   ├── ggqq_index.css.d
│   ├── ggqq_notice.css.d
│   ├── ggqq_qindex.css.d
│   ├── ggqq_xq.css.d
│   ├── ggqq_xycx.css.d
│   ├── ggqq_xyxq.css.d
│   ├── jsd.css.d
│   ├── login_mesg.css.d
│   ├── qchicang.css.d
│   ├── revisepassword.css.d
│   └── zjcc.css.d
└── skin01
├── bdq.css.d
├── ggqq_bankcr.css.d
├── ggqq_bdsx.css.d
├── ggqq_chicang.css.d
├── ggqq_edcx.css.d
├── ggqq_hylist.css.d
├── ggqq_hysx.css.d
├── ggqq_index.css.d
├── ggqq_notice.css.d
├── ggqq_qindex.css.d
├── ggqq_xq.css.d
├── ggqq_xycx.css.d
├── ggqq_xyxq.css.d
├── jsd.css.d
├── login_mesg.css.d
├── revisepassword.css.d
└── zjcc.css.d

二、思路

让前端开发把需要打入app的H5文件放入D:\scripts\src目录上  --->  读取该目录下文件的绝对路径  --->  在workspace中寻找对应的文件 ---> 并将这些文件复制到新的目录中,进行7za打包

python代码如下:

 #!/usr/bin/env python3
#-*- coding:GBK -*-
# author by Michael Ho
# contact:rui.he@geekthings.com.cn
import os, shutil def copy_app_H5_file(x_root, x_dir, src_dir, dst_dir):
if os.path.exists(dst_dir):
shutil.rmtree(dst_dir)
for root, dirs, files in os.walk(x_root):
for d_name in dirs:
d_name = os.path.join(root, d_name).rstrip()
d_dir = d_name.replace(x_dir, dst_dir)
if not os.path.exists(d_dir):
os.makedirs(d_dir)
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_dir, src_dir)
d_file = f_name.replace(x_dir, dst_dir)
shutil.copyfile(s_file, d_file)
# 判断复制是否成功
if(s_file.replace(src_dir, "") == d_file.replace(dst_dir, "")):
print(d_file + "->" + "拷贝成功")
else:
print("拷贝过程发生错误,请检查...") if __name__ == '__main__':
# 上传的小包根目录,默认是d:\scripts,不要去动它!!!
x_root = "d:\\scripts" # 小包目录,默认是src,需要把小包的文件放在一个叫src目录里面!!!
x_dir = "d:\\scripts\\src" # 从gitlab上获取的目录
src_dir = "d:\\Jenkins\\frontend_encrypt" # 需要复制到目标目录,一般对其目录进行打包
dst_dir = "d:\\Jenkins\\H5_APP" copy_app_H5_file(x_root, x_dir, src_dir, dst_dir)

三、说明

1.在Jenkins客户端在Windows上,python编码格式要设定成    # -*- coding:GBK -*-  (笔者当时写的是 # -*- coding: utf-8 -*-)不然Jenkins会报以下错误

SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte

2.python调系统级的接口不算太友好,个人认为没有批处理方便。如果整个文件夹复制的话,还是 xcopy  src_dir dst_dir /s /e /f方便,所以Jenkins上打包的脚本,笔者为了打包速度,Windows打包机采用batch+python【以上个人见解、水平有限】

最新文章

  1. java基础练习 字符串,控制流,日历,日期等
  2. hdu3635 Dragon Balls(带权并查集)
  3. SHGetFileInfo函数详解
  4. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)
  5. [翻译]观察变换View Transform (Direct3D 9)
  6. Eclipse Indigo 3.7.0 安装GIT插件提示 requires 'bundle org.eclipse.team.core(转)
  7. DHTMLX 前端框架 建立你的一个应用程序 教程(十)--保存表单中的数据
  8. [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下)
  9. VS OpenCV imread imwrite nameWindow等相关报错问题
  10. kali linux 配置嵌入式开发环境
  11. angular post 带参数 导出excel
  12. 谈谈 git 撤销操作
  13. servlet邮箱激活验证实例含代码
  14. shell expect权威指南和实战
  15. web前端基本开发手册
  16. JavaScript 对象Array,Map,Set使用
  17. java appium客户端 6.1.0android长按及滑动变更
  18. python的几个注意事项
  19. ActiveMQ学习--002--Topic消息例子程序
  20. 把thinkphp项目拷贝到其他电脑上报错

热门文章

  1. redis day02 下
  2. Random variable
  3. day41-进程-管道
  4. King of the Waves
  5. js使用心得——避免全局变量冲突的小技巧
  6. UMLet的使用与类图的设计
  7. docker 不同引擎导致历史垃圾镜像无法自动清除,致硬盘空间报警
  8. springboot学习笔记:2.搭建你的第一个springboot应用
  9. 接口测试 requests的身份认证方式
  10. linux centos的安装及一些相关知识的整理