Jenkins项目实战之-Android基于Gradle参数化打不同环境安装包(二)
前面一篇,我介绍了如何实现打包,但是有一个问题,就是无法根据实际需要打不同环境的包。很多公司至少有测试环境包和线上环境包这两种。到底如何来控制打不同环境包,每个公司基本上都是控制修改配置文件的对应网站的URL来实现。很有可能,除了一个URL不一样,其他的代码都保持一样。先来看看我们公司安卓开发是如何写这个环境控制的代码到build.gradle文件。1.下面这图是在jenkins的worksp
前面一篇,我介绍了如何实现打包,但是有一个问题,就是无法根据实际需要打不同环境的包。很多公司至少有测试环境包和线上环境包这两种。到底如何来控制打不同环境包,每个公司基本上都是控制修改配置文件的对应网站的URL来实现。很有可能,除了一个URL不一样,其他的代码都保持一样。先来看看我们公司安卓开发是如何写这个环境控制的代码到build.gradle文件。
1.下面这图是在jenkins的workspace下的
左边这张图是SVN代码拉取后生成的,我们项目的源码主要在app这个文件夹,构建打包的build.gradle也在app文件夹下,我想每个公司这个还是一样的。上面这张图右侧,为什么还贴出了buildtools下的文件结构呢?原来,开发把一些环境切换和版本名称信息,写在了buildtools\script.gradle文件,app\build.gradle中的控制打测试环境还是准生产环境,还是线上环境的变量是从script.gradle读取的。
先看看script.gradle内容
为了防止写URL出错,开发人员把这个环境变量设置成数字0,1,2,分别代表测试环境,准生产环境,和线上环境。然后看看build.gradle中如何获取这个环境变量。
从上面很明显看出rootProject.ext.env读取的值是来自buildtools\script.gradle中的0,1或者2.所以,我们在Android studio上手动打包一般是这个工作流程。先到buildtools文件夹下的script.gradle中把env改成想要打包的环境对应的0还是1或者2,然后点击Build。那么,这个换到Jenkins上打包,核心问题就是如何把jenkins上的变量,通过某种方式来修改build.gradle中rootProject.ext.env的值,如果想要测试环境包,就把这个值改成0,同理,准生产就改成1,线上就改成2。这个过程就是,动态参数化构建。我看网上也有人写过这个文章,说实话,我看不懂,没有讲明白,jenkins上的参数是如何传入到build.gradle文件中的。下面,我来开始描述整个过程。
1.修改这个Job,在General选择参数化构建。
勾选参数化构建,我这里选择了两个选择型的变量,选择总比让用户输入的出错概率要少很多。一个2参数来控制打Release还是Debug包,这个前面文章提到过。第二个参数才是关键,才是重点。第二个参数是用来直接给switch语句传变量的。变量只有三种情况,为0或者为1或者为2.
第一个变量,控制打包类型,变量名称不要有空格,更不要是中文字符。
第二个变量,用来控制打包环境,这个完全参照我们收到在AS上打包的思路。
2. 源码管理和构建触发器都不变,和前面一篇一样设置。
3. 构建
点击Gradle构建下高级设置。
先看看第一个变量引用,在jenkins中引用变量都是这样格式 ${变量名称}
继续下拉,接着看设置。
到这里,感觉没有看到第二个变量对不对。不着急,在Jenkins上的gradle的插件暂时设置成上面这样就可以。接下来,我们需要去拉取代码的工程下修改几个文件,添加两行代码,让我们的第二个参数ENVTYPE能够通过Jenkins入侵到build.gralde中替代一些变量。
3.1 Notepad++打开app\build.gradle文件添加两行代码。
ext.systemProperties= System.properties,这样代码建议添加该文件的开始区域,如下图效果。
第二行代码就是给switch语句传值。
这个变量名称,我们在该job下的General下参数化构建添加的变量名称要保持一致。点击保存这个文件的修改。
4.拷贝打包文件到其他目录
你应该注意到,每次打包之前都会做clean,意味着会把前一次生成的包给删除。如果打包后没有拷贝走,下次打包会清除文件。实际工作中,我们需要保留某一段时间内的安装包。所以,我们在构建区域,添加一个构建步骤,这里由于是windows,所以选择批处理脚本。linux的shell脚本也是一样道理。
解释下,第一个文件路径是android自动打包生成的,第二个路径,我拷贝到了tomcat管理的一个文件夹,其实这个你随意拷贝到哪里。这里需要提出,第二个路径,我是在tomcat上做了相关配置。点击这个路径,会在浏览器上显示这个路径下的文件清单,点击一个文件,可以触发下载。应该能明白,为什么要这样做了吧。
5.构建后操作
构建后操作,一般选择发送邮件结果。我在前面一篇文章提到,我们安装了extent email plugin这个插件。这里我们在系统管理-系统设置,来添加一个邮件模板。主要是学习下如何写html内容的邮件。
然后回到这个Job的配置页面的构建后部分设置,添加一个邮件提醒,记得选择Editable Email Notification
这个我设置触发器是Aways,默认是Failed,也就是说默认是只有构建失败,才给相关人员发邮件通知。这里我选择Aways,不管构建失败还是成功,都能收到邮件提醒。
6. 构建成功的邮件效果
自己可以根据需要,添加和修改邮件内容和样式。
7.点击下载链接效果
需要打包人员点击对应包就可以进行下载到本地,然后安装测试。名称名称保存了打包时间的,精确到小时和分钟,可以快速找到那个包是自己刚刚build的。
总结:
Jenkins+gradle打安卓包基本上实现了功能。至于,二维码下载和钉钉群机器人发送消息提示,这个就花哨的东西,不是打包重点,有时间可以去尝试下,如果成功,会更新相关文章到博客。android参数化打包就介绍到这里,不同公司的android打包逻辑肯定是不相同,我这里举例的第二个参数,应该对你有点帮助。能实现一个参数入侵build.gradle,也就能实现多个参数。
更多推荐
所有评论(0)