- 小清新: 配置简单
language: cpp
env:
matrix:
- PLATFORM=linux DEBUG=1
script:
- $CXX helloworld.cpp -o helloworld
- ./helloworld
before_install:
compiler:
- clang
- gcc
- 和Github非常暧昧:)
- 提供免费的服务器
- 网络速度非常快,平均10m/s以上
- 每次的构建都是干净的,排除历史构建的干扰
- **其他ci(Jenkins)**都是在历史的基础上pull最新代码
- 动态分配VM,使用完删除
- 支持的语言很多: C, C++, Clojure, Erlang, Go, Groovy, Haskell, Java, Javascript(with
Node.js), Objective-C, Perl, PHP, Python, Ruby, Scala
- 这些支持的语言是指默认在Host机器上安装好了
开发环境
,其实没有安装也是可以进行构建的,cocos2d-x 的android环境就是人为配置的,需要下载对应的ndk, 其实直接把travis当成一个正常的ubuntu和osx机器使用 也是没任何问题的。
- 这些支持的语言是指默认在Host机器上安装好了
- Windows被鄙视,O(∩_∩)O哈哈~
- 虽然编译环境支持
OSX
和Ubuntu
,但是一次构建不同任务无法分别使用不同的平台,OSX
和Ubuntu
二者选一Travis-CI
是根据language选择对应的host,除了objective-c
是用OSX
,其他都是用Ubuntu
作为Host
CI=true
TRAVIS=true
DEBIAN_FRONTEND=noninteractive
HAS_JOSH_K_SEAL_OF_APPROVAL=true
USER=travis (do not depend on this value)
HOME=/home/travis (do not depend on this value)
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
RAILS_ENV=test
RACK_ENV=test
MERB_ENV=test
JRUBY_OPTS="--server -Dcext.enabled=false -Xcompile.invokedynamic=false"
Additionally, Travis sets environment variables you can use in your build, e.g. to tag the build, or to run post-build deployments.
TRAVIS_BRANCH
: 当前构建分支名称TRAVIS_BUILD_DIR
: 仓库在构建host机器上的绝对路径TRAVIS_BUILD_ID
: Travis内部使用的当前构建的唯一IDTRAVIS_BUILD_NUMBER
: 当前构建号 e.g. 2TRAVIS_COMMIT
: 当前构建commit的SHA-1TRAVIS_COMMIT_RANGE
: 当前构建的commit范围TRAVIS_JOB_ID
: travis内部使用的当前任务IDTRAVIS_JOB_NUMBER
: 当前任务编号 e.g. 2.1TRAVIS_PULL_REQUEST
: 若是PullRequest触发的构建,则为Pull Request编号,否则为falseTRAVIS_SECURE_ENV_VARS
: 值为true或者false, 是否用到了加密变量TRAVIS_REPO_SLUG
: 当前仓库,格式为owner_name/repo_name
语言相关的变量
TRAVIS_RUBY_VERSION
TRAVIS_JDK_VERSION
TRAVIS_NODE_VERSION
TRAVIS_PHP_VERSION
TRAVIS_PYTHON_VERSION
sudo apt-get install -qq
- 用github账户登陆 Travis-CI, 授权travis-ci访问github仓库
- Accounts --> Repositories --> 开启需要支持travis-ci的仓库
- 编写.travis.yml文件,放置项目根目录
Travis VMs are 64 bit and currently provide
gcc 4.6
clang 3.1
core GNU build toolchain (autotools, make), cmake, scons
参考 Configuring your Travis CI build with .travis.yml
- 构建生命周期
- 切换到当前语言的运行时(比如Ruby 1.9.3 or CPP)
- clone 整个项目,包含更新子模块(无法在clone前执行用户script)
- 执行before_install脚本(若存在)
- 进入clone好的仓库目录,执行对应的安装命令(若无指定,命令依赖于当前语言)
- 执行before_script脚本(若存在)
- 执行并测试script命令(若无指定,则依赖当前语言),exit code为0表示成功,反之失败
- 执行after_success/after_failure脚本(若存在)
- 执行after_script脚本(若存在)
构建结果被放置在TRAVIS_TEST_RESULT
变量中,可用在after_script脚本中
before_script:
- before_command_1
- before_command_2
- sh -c "if [ '$DB' = 'pgsql' ]; then psql -c 'DROP DATABASE IF EXISTS doctrine_tests;' -U postgres; fi"
after_script:
- after_command_1
- after_command_2
before_install:
install: sudo apt-get install -qq 软件包名
rvm:
- 1.9.3
- rbx-18mode
env:
- FOO=foo BAR=bar
- FOO=bar BAR=foo
将触发四个构建:
Ruby 1.9.3 with FOO=foo and BAR=bar
Ruby 1.9.3 with FOO=bar and BAR=foo
Rubinius in 1.8 mode with FOO=foo and BAR=bar
Rubinius in 1.8 mode with FOO=bar and BAR=foo
- 构建在50分钟后还继续运行
- 10分钟内没有任何log输出
当有push或者PR时,默认为所有分支(除了gh-pages
)执行构建操作
当然这也是可以定制的:
黑名单
branches:
except:
- legacy
- experimental
白名单
branches:
only:
- master
- stable
只能指定黑名单
或白名单
,若两个都指定,except
将被忽略
支持正则表达式:
branches:
only:
- master
- /^deploy-.*$/
env:
matrix:
- GEN_JSB=YES
- PLATFORM=linux DEBUG=1
执行多少构建?
目前还比较简陋。检查功能不强
-
cpp工程默认编译命令:
./configure && make && make test
, 可以使用script
字段覆盖默认命令 -
cpp工程默认导出两个环境变量:
CXX
和CC
,他们的值由使用的编译器决定
compiler:
- clang
- gcc
Travis CI
能通过email
,IRC
, Campfire
, Flowdock
, HipChat
和webhooks
来发送构建结果的通知
他默认发送email给
- 添加新commit的作者
- 这个仓库的所有者
可以完全关闭email通知
notifications:
email: false
也可以定制发送email地址和条件(Success or Faiure)
notifications:
email:
recipients:
- [email protected]
- [email protected]
on_success: [always|never|change] # default: change
on_failure: [always|never|change] # default: always
always
: 每次构建成功(或失败)的时候发送通知
never
: 每次构建成功(或失败)都不发送通知
change
: 当编译状态改变的时候发送通知,success -> failure 或者 failure -> success
Cocos2d-x
travis-ci
含有三组加密数据,分别是GH_USER, GH_PASSWORD, GH_EMAIL 他们是CocosRobot
的账户、密码和邮件- 用于
bindings-generator
生成的新jsbindings glue代码产生变化的时候push 到 auto-gen-jsb-repo CocosRobot
向cocos2d-x
发送jsbindings
自动绑定代码的Pull Request
- 用于
gem install travis
travis encrypt github用户名/仓库名称 "GH_USER=xxx GH_PASSWORD=xxx"
Then you need to add them as ENV variable in .travis.yml:
env:
global:
- secure: ".... encrypted string here ....."
And use them in your script:
export REPO="$(pwd | sed s,^/home/travis/builds/,,g)"
ssh -o StrictHostKeyChecking=no
if [ "$TRAVIS_BRANCH" == "travis" ]; then
git branch -D gh-pages
git checkout -B gh-pages
git add -f dist/.
git commit -m "Add built output"
git push https://$(GH_USER):$(GH_PASSWORD)@github.com/${REPO} gh-pages
fi
题外话:如何通过命令行发送Pull Request
curl --user "${GH_USER}:${GH_PASSWORD}" --request POST --data "{ \"title\": \"$COMMITTAG : updating submodule reference to latest autogenerated bindings\", \"body\": \"\", \"head\": \"${GH_USER}:${COCOS_BRANCH}\", \"base\": \"${TRAVIS_BRANCH}\"}" https://api.github.com/repos/cocos2d/cocos2d-x/pulls 2> /dev/null > /dev/null