Travis CI 是目前新兴的开源持续集成构建项目,越来越大的大公司也在使用Travis CI, Github每天构建量都在4000以上。我们为什么不试试呢。
前言
我们平常的发布流程大概如下:
使用Travis CI,可以简化如下:
想象这样的场景:马上要发布内测版本了,合并代码之后,开始用IDE打包,打包完成之后再发布到fir,这样整个流程下来估计要10几分钟,电脑被占用其他事情也做不了,(⊙﹏⊙)b。使用Travis CI,你只需要提交代码,创建tag,再提交tag,还可以通过在Travis CI中加上几个通知邮箱(比如测试经理,产品经理,项目经理),而你可以什么都不用管了,安安心心做你自己的事情,这样不要太爽。
接下来介绍下如何使用Travis CI
1.配置Travis CI项目
首选进入Travis CI 官网,你会看到下面图标
用github账户登录之后,选择哪个项目使用Travis CI自动构建, 开关打开就行了。
2.安装ruby和Travis Ci
因为Travis CI是使用ruby开发的,所以需要先安装ruby,安装完后,使用命令
E:\code\Transitions-Everywhere>ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]
安装Travis CI
gem install travis -v 1.8.0 --no-rdoc --no-ri
查看Travis CI版本
E:\code\Transitions-Everywhere>travis -v
1.8.2
3.项目启动Travis CI
在第一步中,我们已经把一些项目在Travis CI打开了,选择其中一个git checkout到电脑本地,并切换到项目的根目录,先创建一个空的”.travis.yml文件”,然后使用命令travis setup releases
E:\code\LikeWechatPhotoViewer>travis setup releases
Username: sherchen
Password for sherchen: ***************
File to Upload:
Deploy only from Sherchen/LikeWechatPhotoViewer? |yes|
Encrypt API key? |yes|
执行上面的命令之后,”.travis.yml”文件多了一些东西
deploy:
provider: releases
api_key:
secure: aIdot0oreg3u92HOW5QXpmBq2EjPOTDS5t3DnbMu9wBsQiMdvtaKtJkmJ4lPvB1hE2kPPeJFFCvqr1Gj/chpTocXIIPurHjSrO7Heez16aJDd86oFK1ySBCFLgwy6XVuM7VlTTWzfg4Eo2NnMvRI/W/b4SkyCEZgubsNPd8H0EJ6+epGlV3riEvG3JrHVxGo+FDZhW6mzLKdLha0vMn73JdfXMkQoioTsObdI/mck+SbqtOieuSwfwY5IIJefDAE1BgAEZbfqogKyNZ95okY8iPGkXfuFYBk8QDKBRo/VXOIlMrMgSKwR7/060fMmVEkDO6al7AN33CIeBUSPO0mznB+z5TMyDJVfvhEcKpltIC5vnn9X3G6rjN3sjY7w5KeMUpeIgUigGzTaCjhUFi00ZulWtu4mWPbNzG5O4uGFZBGApK9+vIO4DKHxROVxzP+drxZLMksLRGGsEOtcWCWnD7X93ZMwzOgWr7w5LP/QZeQhGLxupkZNMq4PTg/mYKOop/9fvIXkCQkp/nRZaUXNg5LPFlpBUHlB1rF6W+vrW1juCI9z+23R09mPKJ0zEba9VWPZvv4NDkwj4y4mh6zylQYjYJLiJ78nGA/BGbqKlQN7J/Epdci7PKcyXo2BOxxTPIoJYH+JZ4vqm91pUj2Mc6X5o7su+9avqmCJZr5RiA=
file: ''
on:
repo: Sherchen/LikeWechatPhotoViewer
这是travis自动给我们配置的,是为了后面把releases提交到github上。
做完了这些之后,需要去了解下travis的脚本语言。
上面是我画的travis自动构建的生命周期,其中
- 可选的意思是,如果我们在.travis.yml加了就会执行,不加构建器就会忽略
- 没有可选标志,就意味着你可以自定义,没有自定义,构建器会使用默认的。
更多详细信息可以去travis 文档了解。
4.需要注意
4.1 可以给构建器配置环境变量
回到travis网站 ,比如我选择其中一个项目
找到我配置的环境变量
这些环境变量可以在两个地方用
- 在gradle文件中使用,通过System.getenv()
signingConfigs {
releaseConfig {
storeFile file("../sherchen20170602.keystore")
storePassword project.hasProperty("KEYSTORE_PASS") ? KEYSTORE_PASS : System.getenv("KEYSTORE_PASS")
keyAlias project.hasProperty("ALIAS_NAME") ? ALIAS_NAME : System.getenv("ALIAS_NAME")
keyPassword project.hasProperty("ALIAS_PASS") ? ALIAS_PASS : System.getenv("ALIAS_PASS")
}
}
- 在.travis.yml文件使用,通过$获取,比如
fir publish sample/build/outputs/apk/sample-release.apk -T $FIR_TOKEN -c "`git cat-file tag $TRAVIS_TAG`"
4.2 给keystore文件加密
使用如下命令加密
travis encrypt-file xx.keystore --add
执行完命令,会有一些提示信息,按照它的提示做就行
NOTE: 只支持Linux, Mac, 不支持Windows
4.3 使用lint检查
有些时候我们很容易.travis.yml,导致构建器构建失败,为了避免浪费时间,可以使用lint 检查。
5.自动发布到fir.im
需要添加如下
before_install:
- gem install fir-cli
after_deploy:
- fir p app/build/outputs/apk/app-release.apk -T $FIR_TOKEN -c "`git cat-file tag $TRAVIS_TAG`"
FIR_TOKEN是fir的apiToken,copy到travis成环境变量
但是安装fir-cli需要ruby 2.0以上,所以要添加如下
- rvm install 2.1.5 //安装ruby 2.1.5
6. 提交代码和发布版本
6.1 提交代码
和正常情况一样
git add .
git commit -m "注释"
git push origin
我这里贴下日志
The command "./gradlew :sample:assembleRelease" exited with 0.
Skipping a deployment with the releases provider because this is not a tagged commit
上面的意思是:如果没有tag的代码提交,就不会走deploy,所以after_deploy也不会走,所以也就不会发布到fir.
6.2发布版本
我们需要一个tag commit
dave@Dave-PC MINGW64 /e/code/Transitions-Everywhere (master)
$ git tag -a v1.0.5 -m "1.测试tag 2.新的节点 3.测试AccessToken 4.去除多余的-"
dave@Dave-PC MINGW64 /e/code/Transitions-Everywhere (master)
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 222 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/Sherchen/Transitions-Everywhere.git
* [new tag] v1.0.5 -> v1.0.5
看下是否发布到fir了。。
太好了,发布成功了!^_^
有兴趣的同学,可以看看我是怎么写的,代码地址:
Transitions-Everywhere
为了方便分析问题,我上传了成功执行的日志,地址:
log.txt