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

    选择参数,执行构建

更多相关文章

  1. android中LinearGradient线性渐变
  2. andorid平板中安装完整的ubuntu系统
  3. Android中8个常用的操作
  4. Android--Animation动画介绍和实现
  5. Android(安卓)NDK开发(二)——CMake脚本构建项目
  6. android 预装第三方apk的方法
  7. android中的三种适配器
  8. 接着归纳Android(安卓)from 《第一行代码》
  9. ListView中的ArrayAdapter

随机推荐

  1. Android上定义一个懒人专用的log
  2. API接口JWT方式的Token认证(下),客户端(Andr
  3. Android:修图技术之滤镜效果实现及原理分
  4. Android绘图机制(一)——自定义View的基础
  5. Android优雅地处理按钮重复点击
  6. android字体样式
  7. Android(安卓)NDK 开发入门环境配置与小
  8. Android视频播放器实现小窗口和全屏状态
  9. 【Bugly干货分享】TRIM:提升磁盘性能,缓解A
  10. Android图形图画学习(11)——颜色相关