持续集成 Travis CI|博客系列
# 一、什么是持续集成?
Travis CI提供的是持续集成服务(Continuous Integration,简称CI)。它绑定Github上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。- 持续集成指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。确保符合预期以后,再将新代码"集成"到主干。
- 持续集成的好处在于,每次代码的小幅变更,就能看到运行结果,从而不断累积小的变更,而不是在开发周期结束时,一下子合并一大块代码
# 二、.travis.yml
Travis 要求项目的根目录下面,必须有一个
.travis.yml文件。这是配置文件,指定了Travis的行为。该文件必须保存在Github仓库里面,一旦代码仓库有新的Commit,Travis就会去找这个文件,执行里面的命令
- 这个文件采用
YAML格式。下面是一个最简单的Python项目的.travis.yml文件
language: python
script: true
@前端进阶之旅: 代码已经复制到剪贴板
language字段指定了默认运行环境,这里设定使用Python环境script字段指定要运行的脚本,script: true表示不执行任何脚本,状态直接设为成功
面是一个稍微复杂一点的.travis.yml
language: python
sudo: required
before_install: sudo pip install foo
script: py.test
@前端进阶之旅: 代码已经复制到剪贴板
# 三、运行流程
Travis的运行流程很简单,任何项目都会经过两个阶段install阶段:安装依赖script阶段:运行脚本
# 3.1 install 阶段
install字段用来指定安装脚本
install: ./install-dependencies.sh
@前端进阶之旅: 代码已经复制到剪贴板
- 如果有多个脚本,可以写成下面的形式
install:
- command1
- command2
@前端进阶之旅: 代码已经复制到剪贴板
- 上面代码中,如果
command1失败了,整个构建就会停下来,不再往下进行。 - 如果不需要安装,即跳过安装阶段,就直接设为
true。
install: true
@前端进阶之旅: 代码已经复制到剪贴板
# 3.2、script 字段
script字段用来指定构建或测试脚本
script: bundle exec thor build
- 如果有多个脚本,可以写成下面的形式
script:
- command1
- command2
@前端进阶之旅: 代码已经复制到剪贴板
注意,
script与install不一样,如果command1失败,command2会继续执行。但是,整个构建阶段的状态是失败。如果command2只有在command1成功后才能执行,就要写成下面这样。
script: command1 && command2
@前端进阶之旅: 代码已经复制到剪贴板
# 3.3 实例:Node 项目
Node项目的环境需要写成下面这样
language: node_js
node_js:
- "8"
@前端进阶之旅: 代码已经复制到剪贴板
- 上面代码中,
node_js字段用来指定Node版本。 Node项目的install和script阶段都有默认脚本,可以省略install默认值:npm installscript默认值:npm test
# 3.4 部署
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
@前端进阶之旅: 代码已经复制到剪贴板
# 3.5 钩子方法
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
# 3.6 运行状态
- 最后,
Travis每次运行,可能会返回四种状态passed:运行成功,所有步骤的退出码都是0canceled:用户取消执行errored:before_install、install、before_script有非零退出码,运行会立即停止failed:script有非零状态码 ,会继续运行
# 四、使用技巧
# 4.2 加密信息
- 如果不放心保密信息明文存在
Travis的网站,可以使用Travis提供的加密功能

