在今年的Google I/O大会上,Google曾透漏了进军VR的战略计划,其中提到了自己的虚拟现实平台Daydream。而就在本月的10号,Google将会对外正式发布自己的高端VR眼罩Daydream View。Daydream View可以搭配符合Daydream标准的手机使用,不过目前好像只有Google自家的Pixel手机才能达到Daydream的标准。另外,Daydream View作为高端VR眼罩,定价还算亲民,只要70美元就可以买到了。
又是周五,这里提前祝大家周末愉快!本篇投稿来自 剑西,分享了他是如何使用 Jenkins 实现自动打包并发布的。持续集成在多人员开发的项目中必不可少,希望本文能对你们有所帮助。
剑西 的博客地址:
http://blog.csdn.net/mabeijianxi
先看一眼效果图:
功能描述:
可以选择不同的环境与不同的渠道,可以输入显示在App上的版本号,打包完成后可自动上传并且生成安装二维码
总体步骤可为:
下载新版Jenkins挂载到Tomcat
编写Python脚本拉取蒲公英上Apk二维码(可选)
配置项目build.gradle里面的脚本
安装Jenkins里面需要用到的一些插件并且配置Jenkins参数
脚本配置地址:
https://github.com/mabeijianxi/android-automation
下载新版Jenkins挂载到Tomcat
到 Jenkins下载适合的版本后点击安装,之后在 Tomcat 的 webapps目录 下新建一个 Jenkins目录,再把刚安装好的 Jenkins目录 打开找到 war目录,拷贝目录下全部数据到 webapps 下新建的 Jenkins目录 中。还有种启动方式是通过命令启动 jenkins.war 就行了,java -jar jenkins_located_path/jenkins.war。我们可以先为工作空间配置个环境变量。
我使用的是第一种方式,再 启动Tomcat 后访问 http://localhost:8080/jenkins 就会进入引导进入页面,如果有选择安装插件界面进去后点击安装就行,一会儿就能进入主界面。
安装Jenkins里面需要用到的一些插件
这里也没什么技术含量,系统管理->插件管理->管理插件->可选插件: 勾选如下插件:
1. Branch API Plugin
2. build timeout plugin
3. build-name-setter
4. Credentials Binding Plugin
5. description setter plugin
6. Dynamic Parameter Plug-in
7. Environment Injector Plugin
8. fir-plugin(可选)
9. Git plugin(可选)
10. GIT server Plugin(可选)
11. Gradle Plugin
12. Pipeline: Basic Steps
13. Pipeline: Build Step
14. Pipeline: Input Step
15. Pipeline: Nodes and Processes
16. Pipeline: Stage Step
17. Post-Build Script Plug-in
18. SSH Slaves plugin
19. Subversion Release Manager plugin(可选)
20. Timestamper
21. Workspace Cleanup Plugin
22. Subversion Plug-in(可选)
由于有些插件之间有依赖关系所以没全部列出来,如过有我问题可以对比我的截图。
配置build.gradle
上面都是枯燥的准备工作,好玩的才刚刚开始,下面的参数传入很有意思,也是我踩了很多坑以后想到的。 进入 Android Studio->打开 主Module 的 build.gradle:
配置签名信息,不然打的包就没意义了
以参数化构建你想动态写入的数据。我自己需要动态写入的参数有 versionName、打包时间戳、是来自Jenkjins运行还是我们本地打包的标识符,这里很重要,如果是来自Jenkins打包那么我们的生成路径肯定是服务器上的路径,否则是我们本地电脑上的路径。把这三个参数与其在本地的默认值定义在 gradle.properties 中,然后在 build.gradle 便能引用。
动态修改生成的Apk路径与名称,因为如果是Jenkins打包发包那么名称必须是Jenkins传递过来的,不能写死,且唯一,不然没法上传
废话不多说,程序员就哪需要看这么多文字,直接干代码(一下是项目中部分代码):
配置Jenkins参数
回到 主界面->系统管理->Global Tool Configuration: 配置好JDK与Gradle。由于我本地已安装好JDK与Gradle所以只需为其指定路径即可。
然后回到主界面->新建->构建一个自由风格的项目->ok:
1. 勾选上参数化构建过程,先点击Choice可为其配置可选参数。我的项目需要配置的可选参数有API环境、打包渠道、是否来自Jenkins打包的标识。
2. 点击 String Parameter,让使用者可以自定义显示在App上的版本号,方便测试。可以再添加一个可输入的标签:
最后把这个标签加到构建页的构建名称中。
3. 点击Dynamic Parameter,注入Groovy脚本,主要是生成时间戳。
4. 如果是SVN用户可选择 List SubVersion tags,然后写地址帐号密码等,这个选项可以让你选择打包SVN上不同版本的代码。
如果是Git用户可参照:
http://birdinroom.blog.51cto.com/7740375/1404930
上面的配置来拉取不同的版本。
5. 勾选源码管理中自己所用的管理工具 Git 或者 Subversion,填写好相关信息,当然我们的地址是动态的,所以需要引用上一步所选择的版本,如图。(如果是Linux后面得加上/,不然拉取的其目录下的内容不包含TAG_SVN这个目录)
6. 在构建环境中勾选上Set Build Name,主要是动态生成每次显示在构建页上的名称方便查看。
7. 在构建栏里面选择 Invoke Gradle Script->选择配置好的Gradle Version->在Tasks中输入Gradle命令(没了解过的建议先看下Gradle的基本命令),我们先执行一个clean,然后开始编译,这时候就可以用引用上面配置的一些参数了,这里可以用 -P命令 把参数传入,也可以更方便的把下面的 Pass jod parameters as Gradle properties 勾选上,其实内部也是用 -Pkey=Value的命令->在Root Build script中动态指定你项目的目录,为什么是动态的呢?这是因为我们上面提供了可选版本的功能,所以拉取的每个版本所放目录是不一样的,想要编译相应的版本就得动态指定编译目录。
8. 上面的操作如果成功那么其实这时候构建已经可以在build.gradle所配置的输出路径中找到相应的Apk了,但是这还不够酷,我想把生成的Apk放到托管平台,一般用fir.im与蒲公英。如果选择fir.im那么本步骤略过,我个人推荐蒲公英,因为其可用命令行上传比较方(装)便(B)。下面是蒲公英上传的步骤。
简单的实现方式:参照官方文档
https://www.pgyer.com/doc/view/jenkins
这种方式可以可以简单的通过命令行上传,方便使用,且后续可以动态拿到Apk的下载连接,与最新版本的二维码。但是想要拿到每个版本的二维码确实不行的。其实上传成功后返回的json数据中Apk的下载地址与二维码地址是写死的一个短网址,后续说明解决办法。这里按照官方的步骤,如果是Linux 那么在增加构建步骤中选择Execute Shell,而Windows环境的需要先下载curl工具,然后选择Execute Windows batch command。get地址与使用方法都在里面:
http://www.2cto.com/os/201205/131164.html
需要注意这里的上传文件的名称也是动态引用的方式,因为每次生成的名称是唯一的。如果是Shell那么引用方式是${NAME},而batch引用方式是%NAME%。
比较装逼的方式: 我不只想要每个版本的下载长链接,我还想要每个版本二维码的长链接。但是就算通过浏览器打开最新上传的Apk地址,里面的二维码也只有短链接,不管是Apk的短链接还是二维码的它们其实是写死的,永远指向最新版的地址,这就有个问题,当在Jenkins中打开非最新版本的Apk地址或者二维码图片地址那么都会指向最新的,这就比较蛋疼了。
经过仔细观察发现蒲公英Apk长链接生成的规则其实是 固定字符串+appKey。Apk在返回的json串中可以找到。于是可以利用python脚本来执行上传,然后正则配置到AppKey,然后再拼上静态字符串就拿到了本次存放Apk的长链接。当然如果只是为了Apk安装长链接用第一种方式即可。现在需要的是二维码的长链接,用Apk的长链接发起Http请求然后就可以拿到页面数据,通过正则匹配可以匹配到里面二维码的img标签地址,但是是短地址,蒲公英只有非最新Apk才会在这个页面的img标签中返回长地址。于是我打了一个包名与签名同上传Apk相同的Apk,里面没东西,大小只有几十K。在第一个Apk上传完成后马上上传这个小的Apk,这样再去拉取页面里面的img标签就可以得到二维码的长网址了。具体实现看下面python代码。
命令中执行如图代码:
9. 经过上面的操作后大业马上就成了,接下来就是收集成果的时候了,在增加构建后操作步骤中选择 Set build description,在 Regular expression 中填写正则,然后 Description 中可以引用,这里去匹配的是构建日志中的内容,Description 的内容将显示到构建页面。我们这里如果需要插入下载链接或者二维码的话那么就需要用到Html标签,这时候需要去先设置下。步骤:系统管理->Configure Global Security-> Markup Formatter->Safe HTML。如果是选择上面的简单实现方式那么Regular expression的正则可以用:"appKey":"(.*)","userKey",如果用我的pyhton脚本上传,那么正则可以是:appKey#(.*)#appKeysoon#(.*)#soon,然后在Description中通过\1或者\2引用即可。
到这里那么最感动的时刻来了,轻轻的点击下保存按钮,这时候你会来到构建界面,轻击 Build with Parameters,就会出现这个界面
配置好参数,按下时代性的构建。从这一刻起谁向你要包你可以点根烟淡淡的说道:妈的,撸着呢,一边自己打去。我反正是受够了要包岁月。
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都会有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: