Travis CI 入门教程
一、简介
Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。我们在软件开发过程中,有构建、测试、部署这些必不可少的步骤,而这些会花掉我们很多的时间。为了提高软件开发的效率,现在涌现了很多自动化工具。Travis CI 是目前市场份额最大的一个,而且有很详细的文档以及可以和 Github 很好的对接。
Travis CI 是 Github 项目最流行的持续集成工具。
持续集成
持续集成(Continuous integration,缩写 CI)是一种软件工程流程,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
二、使用
加载 Github 项目
首先打开官方网站 travis-ci.org,然后使用 Github 账号登入 Travis CI,然后 Travis 中会列出你 Github 上面所有的仓库,以及你所属于的组织。
然后,勾选你需要 Travis 帮你自动构建的仓库,打开仓库旁边的开关,打开以后,Travis 就会监听这个仓库的所有变化了。
配置 .travis.yml
Travis 要求项目的根目录下面,必须有一个 .travis.yml
文件。这是配置文件,指定了 Travis 的行为。该文件必须保存在 Github 仓库里面,一旦代码仓库有新的 Commit
,Travis 就会去找这个文件,执行里面的命令。
所以呢,我们就可以在这个文件里,配置我们任务(Travis 监测到仓库有 commit
后会自动执行)。
一个简单的 .travis.yml
文件如下:
1 | language: node_jsscript: true |
所以呢,我在 .travis.yml
里,配置了一个执行脚本的任务;那么现在 Travis 监测到我仓库有 commit
后就会找到 .travis.yml
这个文件,然后就执行了我的那个脚本了。
install 字段
install
字段用来指定安装脚本,如果有多个脚本,可以写成下面的形式。
1 | install: - command1 - command2 |
上面代码中,如果 command1
失败了,整个构建就会停下来,不再往下进行
如果不需要安装,即跳过安装阶段,就直接设为 true
。
1 | install: true |
script 字段
script
字段用来配置构建或者测试脚本,如果有多个脚本,可以写成下面的形式。
1 | script: - command1 - command2 |
注意,script
与 install
不一样,如果 command1
失败,command2
会继续执行。但是,整个构建阶段的状态是失败。
如果 command2
只有在 command1
成功后才能执行,就要写成下面这样。
1 | script: command1 && command2 |
三、构建
四、部署
现在脚本是由 Travis CI 来执行的,部署的时候,怎么让 Travis 有权限往 Github 提交代码呢?
Github 有提供一个 Personal access tokens,这个 Token 与 账号密码 以及 SSH Keys 同样具有 Github 写入能力。
前往 Github 帐号 Settings 页面,在左侧选择 Personal Access Token
,然后在右侧面板点击 “Generate new token”
来新建一个 Token。需要注意的是,创建完的 Token 只有第一次可见,之后再访问就无法看见(只能看见他的名称),因此要保存好这个值。
那么,这个 Token 怎么使用呢。
方案一、
一个比较方便快捷的方式,是通过 Travis 网站,写在每个仓库的设置页面里,有一个 Environment Variables
的配置项,给我们的 Token 起一个名字 gh_token
添加进去。这样以来,脚本内部就可以使用这个环境变量了。
你可以在你脚本内部使用 ${gh_token}
的形式来使用这个 Token 了。【当然了,你还可以添加其他的环境变量进去。】【官方文档在这里】
使用 Personal access tokens
向 GitHub 提交代码的命令格式如下:
1 | # ${GH_TOKEN} 对应就是 Personal access tokens , GH_TOKEN 是环境变量名# ${GH_REF} 对应的是你的 Github 仓库地址,GH_REF 是变量名git push -f "https://${GH_TOKEN}@${GH_REF}" master:gh-pages |
这里需要注意的是:
1、GitHub 生成的这个 Token ,只有生成的时候可以看到明文,后面就看不到明文了,所以你使用的时候最好一次操作成功。
2、Travis CI 中添加 Token 时,记得用密文,要不然在 build log
中是可以被看到的。
方案二、
你还可以使用 Travis CI 提供的加密工具来加密我们的这个 Token。加密原理机制如下:
首先,安装 Ruby 的包 travis
。
1 | # 安装 Travis CI 命令行工具$ gem install travis |
然后,就可以用 travis encrypt
命令加密信息。
在项目的根目录下,执行下面的命令。
1 | $ travis encrypt name=secretvalue |
上面命令中,gh_token
是要加密的变量名,secretvalue
是要加密的变量值。执行以后,屏幕上会输出如下信息。
1 | secure: "... encrypted data ..." |
现在,就可以把这一行加入 .travis.yml
。
1 | env: global: - GH_REF: github.com/Neveryu/xxxxx.git - secure: "... entrypted data ..." |
然后,脚本里面就可以使用环境变量 gh_token
了,Travis 会在运行时自动对它解密。
1 | # ${gh_token} 对应就是 Personal access tokens , gh_token 是环境变量名# ${GH_REF} 对应的是你的 Github 仓库地址,GH_REF 是变量名git push -f "https://${gh_token}@${GH_REF}" master:gh-pages |
travis encrypt
命令的 --add
参数会把输出自动写入 .travis.yml
,省掉了修改 env
字段的步骤。
1 | $ travis encrypt name=secretvalue --add |
详细信息请看官方文档
可以参考我的 vue-cms 这个项目中的 .travis.yml
文件
FAQ
如何显示 Status Image
如何跳过自动构建
如果 commit 不想让 Travis 构建,那么就在 commit message 里加上 [ci skip] 就行了。
1 | git commit -m "[ci skip] commit message" |
权限问题
如果遇到脚本权限不够的提示或者问题,你可以给你的脚本加上权限:
1 | chmod u+x deploy.sh |
或者在 .travis.yml
里加:
1 | before_install: - chmod u+x deploy.sh |