GitHub 持续集成工具 Travis 学习笔记

正式项目中持续集成功能比不可少,但个人在编写简单开源项目(比如 Android 自定义 View)的时候,常见 CI 工具稍显笨重。为此 GitHub 提供了丰富的接口,方便第三方提供简单易用的 CI 工具,其中最常见的就是 Travis

免费的 Travis 服务使用的网址为 https://travis-ci.org ,面向开源项目,提供的服务足够个人使用。同时,Travis 和 GitHub 联系紧密,可以直接使用 GitHub 账号注册 Travis 用户。

添加 CI 服务的方式很简单:

add.PNG
之后,进入同步页面:
sync.PNG
选择 “Sync account” 按钮,可以浏览所有 GitHub 上托管的项目,在对应项目前选择是否开启 CI 服务。

而后,就是编写 Travis 的 CI 服务需要的配置文件,即在项目的根目录下新建文件 .travis.yml

一般配置文件的结构为:

1
2
3
4
5
6
7
8
# 项目语言
language:
# 项目构建脚本
script:
# 构建缓存设置
cache:
# 部署脚本
deploy:

官方文档页面提供了不同语言项目的不同配置文件参考文档。以 Android 项目为例,常见的配置文件为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
language: android
jdk: oraclejdk8

android:
  components:
  - platform-tools
  - tools
  - build-tools-25.0.2
  - android-25
  - android-16
  - extra-android-support
  - sys-img-armeabi-v7a-android-16
  - extra-android-m2repository

before_script:
- echo no | android create avd --force -n test -t android-16 --abi armeabi-v7a
- emulator -avd test -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
- chmod +x gradlew

script:
- "./gradlew clean connectedAndroidTest --stacktrace"

notifications:
  email: true

before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/

cache:
  directories:
  - "$HOME/.m2"
  - "$HOME/.gradle"
  - "$HOME/.gradle/caches/"
  - "$HOME/.gradle/wrapper/"

这其中 components 部分需要参考自己项目的构成按照需要添加,其余的代码基本是不变的,可以直接复制黏贴。 特别要注意的是 chmod +x gradlew 命令添加执行权限是不可少的,不然之后的 gradlew 脚本会报错。而且在测试或构建等动作之前最好先执行 gradlew clean 任务,能保证排除错误上传多余文件或者构建失败残留文件等的影响。

Android 项目部署到 GitHub Release 的步骤也比较简单,需要在配置文件的脚本 script 项后加入如下语句:

1
- "./gradlew assembleRelease"

而后,编写 deploy 功能配置信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
before_deploy:
- mv clearableedittext/build/outputs/aar/clearableedittext-release.aar clearableedittext/build/outputs/aar/clearableedittext.aar

deploy:
  provider: releases
  api_key:
    secure: ... # 由 CLI 程序生成
  file: clearableedittext/build/outputs/aar/clearableedittext.aar
  skip_cleanup: true
  on:
    tags: true

before_deploy 设置一般把生成的文件改名或移动到其他位置,而后在 deploy 设置中的子项 file 指定需要发布到 GitHub Release 的文件。

这里要注意的是发布功能需要验证,虽然也可以通过在配置文件中提供 GitHub 用户名和密码的方式实现,但是实在很不安全,也没有多少人使用。一般是使用 Travis 官方提供的 CLI 工具生成安全验证码填入 secure 项目。 CLI 程序是 Ruby 实现的需要使用 RubyGems 安装:

1
gem install travis --no-rdoc --no-ri

而后在项目根目录(有 .travis.yml 的目录)的地方运行命令:

1
travis setup releases

之后,安装命令行的提示一步步输入内容即可,程序会自动生成相应的安全码填入配置文件中。

另外,使用 travis lint 还能验证配置文件的格式。