Bootstrap

使用Travis CI为工程搭建一个持续集成服务。

1. 概述

Travis CI提供的是持续集成的服务。它绑定GitHub上的项目,只要代码有变更,就自动运行构建和测试,反馈运行结果。确保符合预期以后,再将新代码“集成”到主干。它的好处是,能够快速发现错误,防止分支大篇幅偏离主干。而实现这方式的核心措施是:代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

Travis CI只支持GitHub,不支持其他代码托管服务。

2. 使用Travis CI

1. 使用准备
2. 使用流程

3. 配置文件.travis.yml

Travis要求项目底下存在.travis.yml配置文件,它描述了Travis的行为。该文件需保持在GitHub仓库,当代码存在新的commit,Travis将查找此配置文件,并执行其中的命令。

以下我们以Node项目为例,说明下配置。

language: node_js  // 指定运行环境
sudo:false      // 是否需要sudo权限
node_js:      // 指定node版本,值还可为:node:最新稳定的Node.js版本;lts/*: 最新的LTS Node.js版本
  - "8"     
  - "10"
1. install 字段

用于指定安装脚本

// 安装单个脚本
install: ./install-dependencies.sh

// 安装多个脚本,但若command1失败了,整个构建就停止,不再往下进行
install:
 	- command1
	- command2

// 不需要安装,即跳过安装
install:true
2. script字段:

指定构建或测试脚本

// 执行单个脚本
script: command1

// 执行多个脚本,若command1失败,command2仍会执行,但整个构建阶段是失败的
script:
	- command1
	- command2

// 命令先后执行,command2只能在command1执行后执行
script: command1 && command2

在Node项目中,install的默认值是:,script的默认值是:。但是如果package.json根文件夹中没有文件,则默认的构建脚本为:。下面区别下这俩指令的执行。

3.

命令执行时,会执行package.json的配置的指令,此方式常见,不详述。如下:

{
	"scripts":{
  	"test":" "test": "node ./node_modules/tad/bin/tad" // 执行特定的测试脚本
  }		
}
4. make test

:make是一个根据指定的Shell命令进行构建的工具。它的构建规则都写在Makefile文件里。

4. 集成案例

这里我们以测试isarray为例,说明下。

.travis.yml  // travis配置文件
index.js // 项目代码入口文件
Makefile  // make命令的构建规则文件
test.js  // 构建测试脚本
package.json // 此处的scripts没有配置test命令脚本
language: node_js
node_js:
  - "0.8"
  - "0.10"
// test.js 文件
var isArray = require('./');
var test = require('tape');

test('is array', function(t){
  t.ok(isArray([]));
  t.notOk(isArray({}));
  t.notOk(isArray(null));
  t.notOk(isArray(false));

  var obj = {};
  obj[0] = true;
  t.notOk(isArray(obj));

  var arr = [];
  arr.foo = 'bar';
  t.ok(isArray(arr));

  t.end();
});
test:
	@node_modules/.bin/tape test.js  // 描述执行测试文件
.PHONY: test

假设

5. 部署

script阶段结束后,可以设置通知步骤(notification)和部署步骤(deployment)。部署的脚本可以在script阶段执行,也可以使用Travis提供的几十种常见部署服务。这里以部署到Github Pages为例子:

访问令牌的作用是:授权仓库操作权限。

点击【Generate new token】则进入创建新token,部分配置截图如下:

配置的环境变量可以直接在配置文件中访问到。如若配置私密的环境变量,则一定要加密,因为会在日志中显示出来,被他人看到。

// 部署到github
deploy:
  provider: pages
  skip_cleanup: true
  github_token: $GH_TOKEN  // travis.org面板配置的变量
  on:
    branch: master
// 通知
notifications: 
  email:
    - ***@**.com  // 通知邮箱
 /** 
 	*  [更多的配置信息]
 	*
local_dir:要推送到GitHub Pages的目录,默认为当前目录。可以指定为当前目录的绝对路径或相对路径。
repo:仓库回购,默认为当前仓库。注意: slug由用户名和仓库名称组成,格式如user/repo-name。
target_branch:分支到(强制,请参阅keep_history:)将local_dir 内容推送到,默认为gh-pages。
keep_history:可选,创建增量提交而不是执行推力,默认为false。
fqdn:可选,为您的网站设置自定义域,默认为不支持自定义域。
project_name:默认为fqdn用于元数据的值或存储段值。
email:可选,提交者信息,默认为deploy@travis-ci.org。
name:可选,提交者,默认为Deployment Bot。
committer_from_gh:可选,默认为false。允许您使用令牌的所有者名称和电子邮件进行提交。替代email和name选项。
allow_empty_commit:可选,默认为false。如果启用仅 keep_history是true。
github_url:可选,自托管的GitHub企业的网址默认为github.com。
verbose:可选,请在内部步骤中详细说明,默认为false。
deployment_file:可选,默认为false,启用创建部署信息文件。
*/

本地修改完成,并提交push到github仓库,就可以在travis-ci.org中看到项目开始构建了,且之后的每次推送代码到仓库后都将会自动构建项目。

6. 总结

通过相关知识点的学习,我们已经能够实现一个最简单的持续集成服务,从搭建到测试,到部署。