从GitHub到Travis

Travis简介

从GitHub到Travis_第1张图片
图片源于[GitHub上Travis CI的介绍][1]

Travis CI lets your team test and deploy with confidence. Trusted by 250,000 users, on over 300,000 open source projects, Travis CI is the leading hosted continuous integration system.

Travis是一个为GitHub服务的CI,支持多数主流语言。

CI即持续集成系统。对个人而言,就是让你的代码在提交到远程——这里是GitHub——后,立即自动编译,并且在失败后可以自动给你发邮件的东西。当然,除了编译,还能做自动化测试、自动部署等。对团队或企业而言,这意味着更多的东西,是敏捷开发的一种践行。

目前大多数中、大型的软件公司里都有类似系统,最流行的应该是Jenkins。

Travis有两个网址:

  • https://travis-ci.org/
  • https://travis-ci.com/

如果对域名有基本的了解,应该立刻就可以猜个八九不离十:org的那个是非盈利的,为GitHub上public的repository提供免费服务;com的那个是盈利的,可以对private的提供付费服务。com前100次build是免费的,此后按月收费。

二者的账户是相互独立的,但都可以用GitHub账户注册、登录。

只需三步

(以下,以public为例。)

  1. 在travis-ci.org上以GitHub账户注册、登录。

  2. 在主页点加号【Add new repository】,添加需要CI的那个库。

  3. 在那个库的根目录下,添加一个.travis.yml文件。

流程很简明,但绝大多数复杂度都集中在这个.travis.yml文件。这是一个YAML文件,主要用来做CI的配置。Travis会按照这个文件配置的方式来运行。

Travis运行流程

可以把Travis看做一个远程服务器,目前(2016)默认为Ubuntu 12.04.5 LTS。它会监控你添加的GitHub库。如果有新的提交或Pull Request,就会触发一次在线编译。

这台服务器每次都从近乎裸机状态,把你的库clone过来,然后执行其中的.travis.yml

除了首行的language指定语言类型以外,其它可选的有10个步骤:

  1. Install apt addons
  2. before_install
  3. install
  4. before_script
  5. script
  6. after_success or after_failure
  7. OPTIONAL before_deploy
  8. OPTIONAL deploy
  9. OPTIONAL after_deploy
  10. after_script

最重要的步骤就是第5步的script,这步通常是测试、编译、打包。前面的步骤都是为了成功执行第5步而执行的裸机环境配置,后面的步骤都是在执行第5步后而做出的应对。

所有这些步骤,在language设置后基本都有默认值。所以,即使只有一行language: LANG,很多项目也可以build。

另外,如果多次提交同时push,默认只在最新提交执行一次build;在git commit中如果包含[skip ci][ci skip],该提交就不会触发一次build。

两个例子

比如,这就是一个简单的Groovy小项目的CI配置:

language: groovy

jdk:
    - oraclejdk8
    - openjdk7

script:
    ./gradlew build

Travis会让这个库在oraclejdk8和openjdk7两个环境下,分别做一次./gradlew build

再比如,这是一个稍微复杂点的Android项目的CI配置:

language: android

jdk: oraclejdk8

android:
  components:
    - tools
    - android-24
    - build-tools-24.0.2
    - platform-tools

script: ./gradlew build

after_success:
  - for name in $(find $TRAVIS_BUILD_DIR -name '*.apk'); do ls -hl $name;  done
  - date

after_failure:
  for name in $(find $TRAVIS_BUILD_DIR -name lint-results*.xml); do echo $name; cat -n $name; done

# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab:

(复杂到,即使指定为yaml,也不知道怎么配置高亮。ಥ_ಥ)

详细解释下:

  • jdk:之前有介绍过。对Android项目,大多没必要设置多个JDK,因为一个就已经足够了。
  • android: 作为一台裸服务器,当然是没有Android SDK的。由于Android SDK各组建、版本既多且杂,这里就是指定下载哪些些SDK组建的。
    此处坑多,我就多介绍两句:
    • tools:这个推荐放在最前面。Travis其实会在指定编译方式为android后,预置一个tools,它也是通过tools/android这个命令行工具来安装SDK的。
      比如,更新它自己:android update sdk --no-ui --all --filter tools
      如果没有先更新它自己,那么很有可能导致其它组建无法更新至最新指定版本,造成环境缺失,引起build error。
    • android-24:Android主体,API level为24。
    • 其它:基本上与你本地安装的Android SDK目录差不多,后面-24.0.2则是指定版本。
    • 另外:如果使用了v7包、Google Play Services等组件,可能还需要添加几个extra:
      • extra-android-support
      • extra-google-google_play_services
      • extra-google-m2repository
      • extra-android-m2repository
  • after_success:编译成功后,执行那两行Bash脚本。(打印APK大小等信息。)
  • after_failure:编译失败后,执行那一行Bash脚本。(查看Android Lint的遗留问题。)
  • # vim:这个是注释,不用在意。(Vim配置脚本,当Vim读取此文件时执行。)

配置要按需添加,过多配置会极度影响Travis的执行时间。比如,第一个脚本其实要执行两个build,总共不足3分钟;而第二个由于需要下载整个Android SDK,至少需要5分钟;如果再加上那几个extra,10分钟也是会有的。

README中的“勋章”

Build Status

在Travis网站上,点击上面那样的Status图标,可以在弹出界面中得到该项目的状态图标链接。选择Markdown版本的连接,放到repository的README.md中,就可以在GitHub页面得到编译状态的展示了。

这个链接通常是这种形式:

[![Build Status](https://travis-ci.org/YOUR/PROJECT.svg?branch=master)](https://travis-ci.org/YOUR/PROJECT)

上次编译是成功还是失败,从此一目了然。有了这个“勋章”的开源项目,看上去瞬间高大上了。

另外,如果只是想要各类“勋章”装点一下门面,可以去shield.io、progressed.io定制。

参考

整篇文章,都只是为官网文档抛砖引玉。

Travis Docs: https://docs.travis-ci.com/

除了Travis,GitHub还支持很多其它CI。

甚至,你也可以自行建立GitHub的CI服务:Building a CI server。

相关文章:

  • 下一篇:《从GitHub到Travis》
  • 最终篇:《从Travis到bintray》

后记

匿:build一连挂十几次,你也好意思写文章充高手?
蟒:Android就是无数坑,我只能踩一个填一个。
匿:人家没给你钱,辛苦写这种文章干嘛?
蟒:免费用了人家的产品,吃人嘴短嘛!
匿:人家愿意免费提供给开源项目,你开源不就是回馈吗?
蟒:我那点水平的项目,还回馈不了开源世界。这篇文章就算一点回馈吧。

你可能感兴趣的:(从GitHub到Travis)