Travis 要求项目的根目录下面,必须有一个
.travis.yml
文件。这是配置文件,指定了Travis
的行为。该文件必须保存在Github
仓库里面,一旦代码仓库有新的Commit
,Travis
就会去找这个文件,执行里面的命令
YAML
格式。下面是一个最简单的 Python
项目的.travis.yml
文件language: python
script: true
面是一个稍微复杂一点的.travis.yml
language: python
sudo: required
before_install: sudo pip install foo
script: py.test
Travis
的运行流程很简单,任何项目都会经过两个阶段install
阶段:安装依赖script
阶段:运行脚本install字段用来指定安装脚本
install: ./install-dependencies.sh
install:
- command1
- command2
command1
失败了,整个构建就会停下来,不再往下进行。true
。install: true
script: bundle exec thor build
script:
- command1
- command2
注意,script与install不一样,如果command1失败,command2会继续执行。但是,整个构建阶段的状态是失败。如果command2只有在command1成功后才能执行,就要写成下面这样。
script: command1 && command2
language: node_js
node_js:
- "8"
node_js
字段用来指定 Node
版本。Node
项目的install
和script
阶段都有默认脚本,可以省略install
默认值:npm install
script
默认值:npm test
script
阶段结束以后,还可以设置通知步骤(notification)和部署步骤(deployment),它们不是必须的部署的脚本可以在
script
阶段执行,也可以使用Travis
为几十种常见服务提供的快捷部署功能。比如,要部署到Github Pages
,可以写成下面这样
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
on:
branch: master
Travis 为上面这些阶段提供了7个钩子
before_install
:install 阶段之前执行before_script
:script 阶段之前执行after_failure
:script 阶段失败时执行after_success
:script 阶段成功时执行before_deploy
:deploy 步骤之前执行after_deploy
:deploy 步骤之后执行after_script
:script 阶段之后执行完整的生命周期,从开始到结束是下面的流程
before_install
install
before_script
script
aftersuccess or afterfailure
[OPTIONAL] before_deploy
[OPTIONAL] deploy
[OPTIONAL] after_deploy
after_script
下面是一个before_install钩子的例子
before_install:
- sudo apt-get -qq update
- sudo apt-get install -y libxml2-dev
上面代码表示
before_install
阶段要做两件事,第一件事是要更新依赖,第二件事是安装libxml2-dev
。用到的几个参数的含义如下:-qq表示减少中间步骤的输出,-y表示如果需要用户输入,总是输入yes
Travis
每次运行,可能会返回四种状态passed
:运行成功,所有步骤的退出码都是0canceled
:用户取消执行errored
:before_install
、install
、before_script
有非零退出码,运行会立即停止failed
:script
有非零状态码 ,会继续运行.travis.yml
的env字段可以定义环境变量,然后,脚本内部就使用这些变量了env:
- DB=postgres
- SH=bash
- PACKAGE_VERSION="1.0.*"
有些环境变量(比如用户名和密码)不能公开,这时可以通过 Travis 网站,写在每个仓库的设置页里面,Travis 会自动把它们加入环境变量。这样一来,脚本内部依然可以使用这些环境变量,但是只有管理员才能看到变量的值,具体操作文档