在Travis CI中持续构建Android项目
持续集成,单元测试,当你需要用到这些东西的时候,CI来了。
Travis CI,是一个专门为开源项目打造的持续集成环境,配合GitHub使用,赶脚非常好!另外还有GitLab CI(使用GitLab时候可能用到,官方如是介绍Let GitLab CI test, build, deploy your code),详见https://about.gitlab.com/gitlab-ci/。这里主要记录Travis CI。 开始使用很简单,不多介绍,详见http://ju.outofmemory.cn/entry/27581这篇文章。
对于GitHub上的开源项目,当你关联上Travis CI后,并且已经打开了相应的Repository的Service Hook开关,那么每次你的push、pull等操作就会触发相应的Service Hook,Tracis CI就会进行build等服务。
这里说一说.travis.yml文件,位于项目根目录下,Tracis CI进行相关集成操作时,就是根据此文件的配置进行,先看一看文件代码:
|
|
.yml是一种YAML格式的文件,主要用于告诉Travis CI应该做些什么操作。
• language说明项目的编译运行环境,此处为Android,支持的预言有Java、C/C++、JavasScript等,详细的戳:http://docs.travis-ci.com/user/languages/;
• android中说明了当前Android项目的一些配置信息:比如有BuildTools version、SDK version、Additional components等信息,Travis CI提供Gradle、Maven、Ant等环境的支持。更多可参考官方文档:http://docs.travis-ci.com/user/languages/android/;
• before_install告诉Travis CI在开始install你的项目之前要做些什么,比如可以chmod +x gradlew命令改变项目文件下gradlew文件的权限,sudo apt-get update更新软件包等。
• install用于安装软件包,如添加pip install -U PackageName安装某个软件包。
• before_script告诉Travis CI进行构建之前进行的操作。
• script构建某条命令,如执行./gradlew assembleDebug这条命令将执行Gradle脚本编译并打Debug包,与在Android Studio中类似。执行成功返回0,否则失败,同Unix返回值标准。
• branches指定要做持续集成的分支,可以有多个分支(添加多行即可)。
除了这些命令之外,还有类似after_success、after_failure、after_script、before_deploy等很多步骤操作说明符,说明及使用见文档:http://docs.travis-ci.com/user/customizing-the-build/。
完成了以上的操作,每次发起各种push、pull等请求时,Tracis CI就会对你的项目进行集成。
集成构建成功后,提示如下图:
在自己的Travis CI中,也可以看到信息,如下图:
成功↓
失败↓
使用过程中遇到的问题:
1. This job is running on container-based infrastructure, which does not allow...,如下图
这里提示的是关于使用sudo操作的相关提示,详见http://docs.travis-ci.com/user/workers/container-based-infrastructure/
2. 当我构建Android项目时,构建失败,打印的信息是/home/travis/build.sh line 41 ./gradle permission denied...
这个原因很折腾人,特别诡异,最终又上谷歌又上SO很久才解决。
因为我是在WIN7下进行的开发,在我的项目中gradlew文件的权限对于guest用户来说没有添加任何权限,而在Travis CI构建中,使用的是一个Linux VM的guest账户进行的,所以没有权限执行gradlew这个文件,从而报错。
解决办法:
a:在.travis.yml文件before_install中添加chmod +x gradlew,改变gradlew的访问权限,这个方法来自https://joerglenhard.wordpress.com/2013/10/01/using-travis-ci-with-gradle-wrapper/。
b:从根源上解决问题,在原始的本地仓库中,就改变gradlew文件的权限,在提交上去。git中更改文件权限(添加可执行权限)命令:git update-index --chmod=+x filename(注意:chmod前面有两个 -)。具体可参考http://stackoverflow.com/questions/6476513/git-file-permissions-on-windows-7、http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html。
文中使用Travis CI集成示例项目:AndroidElasticView
参考:
http://ju.outofmemory.cn/entry/27581
https://joerglenhard.wordpress.com/2013/10/01/using-travis-ci-with-gradle-wrapper/
http://stackoverflow.com/questions/6476513/git-file-permissions-on-windows-7
http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html