Travis CI 介绍
Travis CI是一个持续集成的托管服务。目前已经集成Github,并支持以下类型的项目:
C C++ Clojure Erlang Go Groovy Haskell Java JavaScript (with Node.js) Objective-C Perl PHP Python Ruby Scala Travis CI构建环境为不同的语言提供多种不同的运行时,如多版本的Ruby,PHP,Node.js。同时,它还提供多种数据库和常用工具,如消息中间件。
你可以很轻松在一种或多种语言甚至多种数据库环境下测试你的项目。
第一步:登录:
首先使用你的Github帐户登录Travis CI。访问Travis CI并点击页面顶部的Sign In连接。
注意,在http://travis-ci.org,你只能看到你的公开仓库,而在http://travis-ci.com,你可以看你的私有仓库。
登录的时候,GitHub会询问是否允许我们访问你的GitHub权限。在这里有更详细的关于Github权限的描述。
第二步:激活GitHub的web钩子(Webhook)
登录后,我们将会从GitHub同步你的仓库,包括你的开源项目或私有项目。
你可以看到你所有的可访问的机构,仓库。只要你是仓库的管理员,你都可以开启服务钩子(service hook)。
接着,开启它们。https://travis-ci.org/profile
译注:开启路径:https://travis-ci.org/profile
第三步:添加.travis.yml文件到你的仓库
为了让Travis CI构建你的项目,你必须告诉它一些必须的信息。你需要在仓库的根目录添加名为.travis.yml的文件。
在本次指南中,我们只涉及基本的.travis.yml选项。其中最重要的就是language了。它用于告诉Travis CI你的项目使用哪种语言环境。
Ruby项目比起Clojure或PHP项目需要用到更多的不同构建工具和实践,所以Travis CI需要知道如何去构建。
如果.travis.yml文件不存在仓库中、拼写错误、不是一个有效的YAML文件,Travis CI会忽略它,同时假设它是使用Ruby语言,所有其它选项也都将使用默认值。
注意
language的值是区别大小写的,如果你这样:language: C,你的Ruby项目一样会被当成Ruby项目。
以下是一些基本的.travis.yml例子:
C
language: c
compiler:
- gcc
- clang
# Change this to your needs
script: ./configure && make
更多C语言的.travis.yml选项
C++
language: cpp
compiler:
- gcc
- clang
# Change this to your needs
script: ./configure && make
更多C++语言的.travis.yml选项
Clojure
使用Leiningen 1的:
language: clojure
jdk:
- oraclejdk7
- openjdk7
- openjdk6
使用Leiningen 2的:
language: clojure
lein: lein2
jdk:
- openjdk7
- openjdk6
更多clojure语言的.travis.yml选项
Erlang
language: erlang
otp_release:
- R15B02
- R15B01
- R14B04
- R14B03
更多Erlang语言的.travis.yml选项
Haskell
language: haskell
更多Haskell语言的.travis.yml选项
Go
language: go
更多Go语言的.travis.yml选项
Groovy
language: groovy
jdk:
- oraclejdk7
- openjdk7
- openjdk6
更多Groovy 语言的.travis.yml选项
Java
language: java
jdk:
- oraclejdk7
- openjdk7
- openjdk6
更多Java语言的.travis.yml选项
Node.js
language: node_js
node_js:
- "0.10"
- "0.8"
- "0.6"
更多Node.js语言的.travis.yml选项
Objective-C
language: objective-c
更多Objective-C语言的.travis.yml选项
Perl
language: perl
perl:
- "5.16"
- "5.14"
- "5.12"
更多Perl语言的.travis.yml选项
PHP
language: php
php:
- "5.5"
- "5.4"
- "5.3"
更多PHP语言的.travis.yml选项
Python
language: python
python:
- "3.3"
- "2.7"
- "2.6"
# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
install: PLEASE CHANGE ME
# command to run tests, e.g. python setup.py test
script: PLEASE CHANGE ME
更多Python语言的.travis.yml选项
Ruby
language: ruby
rvm:
- "1.8.7"
- "1.9.2"
- "1.9.3"
- jruby-18mode # JRuby in 1.8 mode
- jruby-19mode # JRuby in 1.9 mode
- rbx
# uncomment this line if your project needs to run something other than `rake`:
# script: bundle exec rspec spec
更多Ruby语言的.travis.yml选项
Scala
language: scala
scala:
- "2.9.2"
- "2.8.2"
jdk:
- oraclejdk7
- openjdk7
- openjdk6
更多Scala语言的.travis.yml选项
校验.travis.yml
建议你使用travis-lint(命令行工具)或者.travis.yml validation Web app去校验你的.travis.yml文件。
travis-lint需要你已经安装Ruby 1.8.7+和RubyGems。通过以下命令安装:
gem install travis-lint
校验.travis.yml:
# inside a repository with .travis.yml
travis-lint
# from any directory
travis-lint [path to your .travis.yml]
travis-lint会检查以下内容:
是否为有效的YAML文件 是否已经设置language 所定义的运行时环境(Ruby,PHP,OTP等)是否为Travis CI所支持的。 确保你没有使用过时的特性及运行时别名 等等,travis-lint是你的好朋友。
第四步:使用Git Push触发你的第一次构建
只要GitHub的钩子已经安装,你向GitHub Push你的commit,.travis.yml已经加入到你的仓库,Travis CI就会添加一个构建到构建队列中。有针对你项目语言的空闲工作线程时就会执行。
可以通过commit和push来启动构建,或者在GitHub Web钩子(WebHook)及服务页使用"Test Hook"按钮。请注意,你无法使用Test Hook按钮来触发第一次构建,第一次只能通过push触发。
第五步:调整构建配置
你的项目需要一些自定义的构建过程。也许你在运行测试前需要创建数据库或你的构建工具不同于Travis CI提供的。不用担心,Travis CI允许你覆盖所有的选项。
学习自定义构建或安装依赖到你的项目中
当修改.travis.yml后,请确保它是一个有效的YAML文件,同时使用travis-lint来校验它。
第六步:深入学习
Travis CI的工作进程提供的服务的相关信息,你也许会用到。信息包括有MySQL, PostgreSQL,MongoDB,Redis,CouchDB,RabbitMQ,memcached等等。
通过学习Database setup,在测试套件中配置数据库连接。这里有更多的测试变量信息。
第七步:向我们求助
你可以免费加入我们的IRC频道,并提问。我们就在那。 :)
个人总结
前段时间,我也想过做这么一个可以正交测试环境来测试应用的东西。只不过,我想到的是使用Gradle、Docker、Jenkins的结合。呵呵。你想到的,也会有别人想到。
翻译地过程中,我起了一个疑问,多语言的项目,怎么办。当然,多语言的项目的构建会是非常复杂,但真正需要这样的构建的公司世界也没几家。所以,Travis CI目前也没有必要去支持。
前段时间和大学校友交流,发现他还活在手工找Jar包的时代。他说他身边也没有人使用Maven等构建工具。所以,你想推Travis CI这样的工具,难度也非常的大。你首先需要改变人们观点,让他们觉得构建工具可以解决很多问题的,然后再推构建工具,最后才到持续集成。