github 中最强的持续集成工具 ---Travis

1,856 阅读6分钟
原文链接: www.jianshu.com

《Gradle For Android(五)github中最强的持续集成工具---Travis》
转载请注明来自傻小孩b_移动开发www.jianshu.com/users/d388b…喜欢的可以关注我,不定期总结文章!您的支持是我的动力哈!

Gradle For Android 导读

首先,这里也是Gradle For Android系列最后一章文章了,在这里想感谢各位读者哈,的确有时候晚上回来就写文章花了不少时间。但是总觉得是一件特别有意义的事情,虽然有点懒没有很经常的更新~但是,笔者会继续用时间沉淀下去,让自己慢慢发光,抱着是金子一定会被人发现的信念,一步一步让自己成长起来!

前言

关于Travis

集成自动构建近几年比较火,大大地减少了程序猿在开发构建的时间。

当然,在目前公司比较流行是集成开源的基于java web的持续集成工具jenkins,并且提供了丰富的第三方插件。笔者公司就是使用jenkins,在开发过程中,我们开发人员只需要负责提交上传代码至svn(或git)服务器,jenkins可以根据代码版本号不同进行自动化构建,并且支持自动发布到蒲公英网,方便测试拿到最新的测试版本。

当然,今天要讲得主角是Travis,jenkins比较成熟,因此网上的搭建文档也不少,有兴趣的读者可以自己了解下~接下来将继续Travis之旅:

安装 and 配置

由于笔者是直接使用mac os进行安装配置Travis CI的,如果是windows用户,可以自己搜索下windows搭建ruby开发环境,例如传递门

(一)安装ruby

​ 可以先通过命令检测当前是否已经安装了ruby

ruby -v

​ 如果没有安装的开发者,可以参考我N年期记录的坑,有安装ruby教程 安装CocaoaPods遇到的坑

(二) 安装travis
gem install travis -v 1.8.0 --no-rdoc --no-ri

安装结束后,可以查下版本号检验是否已经安装完成

travis version

启用Travis CI 之旅

一、Travis CI的三步走

首先登陆travis-ci.org,这里说明下,Travis有分为开源项目版本与付费项目版本,付费版本域名是:travis-ci.com

。说白了就是免费的持续集成为了开源项目而生,这里我们是为了github来集成,果断选择免费~

待我们通过github账号授权登录到travis官方网站,在主页我们可以大概了解到持续集成只需要简单的三个步骤,如图所示:



![Uploading travis_2_006493.png . . .]

简单说明下

1、在travis中,将显示所有github上的项目,这时候我们需要打开需要持续集成的project

2、将.travis.yml配置文件放到project根目录中,规则后面说明

3、上传代码,开始集成

看到这三个步骤,是不是发现其实很简单?比较麻烦其实就是.travis.yml配置文件,不过也不担心,其实集成一个配置,需要不到30行规则就可以了,还有官方文档也说明的很详细,传递门

写我们的,travis.yml

(一)首先贴下,官方的案例,我直接注释说明。
language: android
android:
  ##########编译需要的组件###########
  components:
    # - platform-tools # Android 中 SDK TOOLS,编译必须
    # - tools

    # 这个应该也很熟悉,这里注意必须和你的gradle配置的相同,编译必须
    - build-tools-19.1.0 

    # 编译的sdk版本,这里注意必须和你的gradle配置的相同,编译必须
    - android-22

    # 而外的组件,可选择
    - extra-google-google_play_services
    - extra-google-m2repository
    - extra-android-m2repository
    - addon-google_apis-google-19

    # 编译的系统架构镜像,可以选择X86 armeabi等架构,可选择
    - sys-img-armeabi-v7a-android-22
    - sys-img-x86-android-17
(二)部分字段说明
  • android : components 表示编译时组件,上面的官方案例都是组件说明,包括 platform-tools、build-tools、compileSdkVersion等组件

    platform-tools
    build-tools-22.0.1
    android-22
    sys-img-armeabi-v7a-android-22
    android-21
    sys-img-armeabi-v7a-android-21
    android-20
    sys-img-armeabi-v7a-android-wear-20
    android-19
    sys-img-armeabi-v7a-android-19
    android-18
    sys-img-armeabi-v7a-android-18
    android-17
    sys-img-armeabi-v7a-android-17
    android-16
    sys-img-armeabi-v7a-android-16
    android-15
    sys-img-armeabi-v7a-android-15
    android-10
    extra-android-support
    extra-google-google_play_services
    extra-google-m2repository
    extra-android-m2repository

  • licenses 表示添加指定的授权证书,在编译的时候

  • jdk 表示使用的jdk版本,例如1.8 : oraclejdk8

  • sudo 表示是否开启基于容器的Travis CI任务,可以让编译效率更高

  • cache: 是否让你的任务支持缓存,一般我们指定.gradle目录下的缓存,如下

    cache:
      directories:
      - "$HOME/.gradle"
  • before_install 表示编译器需要哪些依赖包的安装,例如我们可以更新最新的组件

    before_install:
        "sudo apt-get update"
  • script 表示执行一些脚本,例如我们自动构建release的时候,要通过gradlew执行脚本

    script:
    - "./gradlew assembleRelease"
  • deploy 表示部署,这个常用于自动构建打包后要发送到指定平台,要根据不同的平台进行配置。

(三)自动化构建配置举例

这个案例只是配置github可以持续集成构建,不包含部署第三方平台。当然前提你要打开了travis的集成开关,然后一定要记得push 项目的gradlew文件,别忽略了!

language: android
android:
  components:
  - tools
  - build-tools-24.0.1
  - android-24
  - extra-android-m2repository
jdk: oraclejdk8
sudo: false
cache:
  directories:
  - "$HOME/.gradle"
before_install:
- chmod +x gradlew
script:
- "./gradlew assembleRelease"

二、自动化构建前面证书安全管理

在前面的章节中,我记得有提及到,在自动化构建的时候,我们不应该将签名文件的敏感信息,明文的形式填写在Gradle配置中。尽可能的在持续化构建工具中进行设置进行编译,本地的话则是建议放在gradle.properties,具体可以看下---。这里travis提供了可设置构建时设置环境变量,具体在travis CI控制台可以设置,通过点击项目名称 -> Settings -> Environment Variables中设置环境变量,如图所示:


travis_2.png

最后可以通过System.getenv()获得这些参数,例如:

  releaseConfig {
        storeFile file("../agradle.jks")
        storePassword project.hasProperty("KEY_STORE_PASSWORD") ? KEYSTORE_PASS : System.getenv("KEY_STORE_PASSWORD")
        keyAlias project.hasProperty("KEY_ALIAS") ? ALIAS_NAME : System.getenv("KEY_ALIAS")
        keyPassword project.hasProperty("KEY_PASSWORD") ? ALIAS_PASS : System.getenv("KEY_PASSWORD")
    }

三、自动配置发布github or fir.im

(一)发布github

发布github有两种配置方式,一种通过账号密码,一种通过accessToken。当然,travis.yml是需要明文push到github的,所以直接排除第一个。然后简单说下具体怎么实现。

1、获取github的AccessToken

登录我们自己的github,然后点击头像进入setting,你可以发现右侧的Developer settings 有personal access tokens的选择,如图所示:


travis_3.png

选择generate new token

选择这种权限的token后,便能生成一串token,如图所示:


=

2、执行setup,加密access token,记得在当前文件执行

travis setup releases

3、最后Travis CI会自动在.travis.yml填入加密后的accesstoken

4、最后pust代码即可,贴上配置代码

deploy:
  provider: releases
  api_key:
    secure: //保密~
  file: app/build/sample-debug.apk
  skip_cleanup: true
  on:
    tags: false
    all_branches: true

5、编译结果


travis_5.png

travis_6.png
(二)发布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.im的用户的API Token

四、总结

技术很快,如果一个开发者能够掌握所有最新的技术,那是不可能、也是不科学的。人的精力有限,但是我们依然用有限的时间付出最大的力量的积累总结。总之,记录就是笔者的总结,当然也希望能够把总结分享给其他读者。希望对你们有帮助哈。

也欢迎加入开发交流群哈,详情看个人简介~

傻小孩b
mark共勉,写给在成长路上奋斗的你