Jenkins奇技淫巧 — Python打包篇(Android自动化构建)
Jenkins奇技淫巧 — 安装篇(mac)
Jenkins奇技淫巧 — 配置篇
Jenkins奇技淫巧 — 安全篇
Jenkins奇技淫巧 — 发送邮件篇
Jenkins奇技淫巧 — 全局变量篇
Jenkins奇技淫巧 — 新建任务篇
Jenkins奇技淫巧 — 插件篇
Jenkins奇技淫巧 — 问题篇
Jenkins奇技淫巧 — 命令篇
Jenkins奇技淫巧 — 环境配置篇(Android自动化构建)
Jenkins奇技淫巧 — 参数化构建篇(Android自动化构建)
Jenkins奇技淫巧 — 第一次实战篇(Android自动化构建)
Jenkins奇技淫巧 — Python打包篇(Android自动化构建)
Jenkins奇技淫巧 — Python发送邮件和上传蒲公英(Android自动化构建)
Jenkins奇技淫巧 — 乐固,多渠道打包篇(Android自动化构建)
Jenkins奇技淫巧 — 节点管理篇
Jenkins奇技淫巧 — 优秀文章篇
简介
Jenkins奇技淫巧 — 第一次实战篇(Android自动化构建)通过Jenkins配置,调用Android工程目录下的gradlew文件,实现了简单的Android自动化打包。这一篇将使用Jenkins +Python的方式实现Android的打包,有人或许会觉得,Jenkins已经实现了自动化过程,为什么还要用Python呢,其实,通过Python脚本我们能够实现更多的自动化功能,能够更加细粒度的控制打包过程,而且将很多控制统一放到Python脚本中,第一可以提高自动化打包的维护,二是,对于会Python的人来说,在开发效率上都有很大的提升,而且可以开发出很多好用的功能。
环境
- 安装Python环境
我安装了python3和python2,执行脚本的时候用的python3,python3和python2在有些语法上会存在差异,所以,书写时请注意。 - 安装vscode(非必须)
vscode是微软的一款开发软件,可以写python,rn,h5等等,配上几款合适的插件,其实就够用了,当然,也可以不安装,用文本工具编写,但是python脚本有一定的格式要求,如果达不到,是不能够运行的,pythom有款专门的ide——PyCharm。
不同
使用Python和用Android Studio,Jenkins有什么不同呢?其实本质都一样,python打包,通过在python脚本里面,调用gradle相关命令,gradlew执行文件等达到相同的相关。
脚本
- 创建python文件
在你Android工程目录下,新建一个用于存放python脚本的目录(当然,你可以在任何地方创建这个目录,只要能够python脚本能够被执行到,打包需要的环境能够访问得到,都是ok的),新建一个python文件——Android.py。 - 实现一个可以控制环境(线上or测试),版本(debug or release)
import osimport sys, getoptimport platformimport subprocesstest = 1online = 2# 获取帮助信息def getUsageStr(): tipStr = (' \n============Android.py================\n' + ' -m, --msg 说明信息 \n' + ' -p, --platform 平台信息,默认test\n') return(tipStr)# 执行命令def exeShellCmd(cmd): popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) cmdRetBytes = popen.stdout.read() cmdRetStr = str(cmdRetBytes, encoding='utf-8') print(cmdRetStr) return cmdRetStr# 更新工程代码def updateGitRepo(): print('update git repo start') ret = exeShellCmd('git pull') hasError = 'error' in ret if(hasError): raise ValueError('git pull failed') # ret = exeShellCmd('cd android && git pull') print('update git repo end') return# 开始构建应用def startBuild(platformService): # 获取平台信息 sysstr = platform.system() cmdPrefix = './gradlew' print (sysstr) if(sysstr =="Windows"): cmdPrefix = 'gradlew' # Gradle加入自定义参数,比如我们想根据不同的参数来进行不用的编译配置, # 可以在 ./gradlew中加入自定义参数./gradlew assembleDebug - Pcustom=true # 就可以在 build.gradle中使用下面代码来判断: # if (project.hasProperty('custom')){ # } suffix = '-PplatformService=%s'%test assemble = 'assembleDebug' if(platformService == 'online'): suffix = '-PplatformService=%s'%online assemble = 'assembleRelease' cmdStr = '%s clean %s %s' %(cmdPrefix, assemble, suffix) print (cmdStr) os.system(cmdStr) returnif __name__ == '__main__': # 获取命令行参数,不明白的可以参考我的文章:Python-解析命令行参数的两中方式。 argv = sys.argv[1:] print (argv) # 打包附加信息 msg = '' # 平台信息,测试平台,灰度平台,线上平台 platformService = 'test' try: # 这里的 h 就表示该选项无参数,冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。 opts, args = getopt.getopt(argv, "hm:p:",["msg=", "platformService="]) except getopt.GetoptError: print (getUsageStr()) sys.exit(2) for opt, arg in opts: if opt == '-h': print (getUsageStr()) sys.exit() elif opt in ("-m", "--msg"): msg = arg print('-m arg =%s'%arg) elif opt in ("-p", "--platformService"): buildEnv = arg print('-e arg =%s'%arg) print('msg = %s, platformService = %s'%(msg, platform)) updateGitRepo() startBuild(platform)
上面代码没有控制是打debug还是release版本的app,可以自己添加一个参数来控制,上面platformService的参数可以在我们的build.gradle文件获取,从来控制应用使用测试or线上环境,至于为什么可以获得到,请查看gradle相关知识。
//获取命令行输入参数,获取后控制使用测试环境,还是线上环境def urlType = project.hasProperty('platformService') ? Integer.parseInt(platformService) : TEST
Jenkins
写好了Python脚本,我们还需要修改Jenkins配置,执行我们编写的脚本
-
添加参数
屏幕快照 2019-05-04 下午6.22.31.png -
修改构建shell脚本
屏幕快照 2019-05-04 下午6.23.13.png
选择参数,执行构建
更多相关文章
- android中LinearGradient线性渐变
- andorid平板中安装完整的ubuntu系统
- Android中8个常用的操作
- Android--Animation动画介绍和实现
- Android(安卓)NDK开发(二)——CMake脚本构建项目
- android 预装第三方apk的方法
- android中的三种适配器
- 接着归纳Android(安卓)from 《第一行代码》
- ListView中的ArrayAdapter