1. 构建流水线简介
在现代软件开发中,"流水线(Pipeline)"这个词经常被提及。那么到底什么是构建流水线?
简单来说,构建流水线是一组自动化的步骤,用于将代码从开发阶段推进到生产环境。
构建流水线非常适合用于实现持续集成(CI)流程。它允许我们更频繁地构建更小的变更,从而更快地发现 bug,降低其影响范围。
在本文中,我们将以 Travis CI 为例,演示如何创建一个简单的构建流水线。
2. 构建流水线的基本步骤
一个完整的构建流水线通常包含多个步骤,但至少应包括以下三个核心阶段:
- ✅ 编译代码:例如将 Java 源码编译为 class 文件
- ✅ 执行测试:运行单元测试,也可能包括集成测试
- ✅ 部署产物:将编译结果打包成 jar 文件等,并部署到指定位置
如果项目使用了多种技术栈,还可以在构建流水线中加入额外步骤,例如:
- 压缩前端 JavaScript 文件
- 更新 API 文档并发布
- 构建 Docker 镜像等
3. Travis CI 简介
Travis CI 是一个基于云的持续集成工具,非常适合用于快速搭建构建流水线。
它的主要优势包括:
- ✅ 支持与任意公共 GitHub 仓库无缝集成
- ✅ 支持主流编程语言(Java、Python、Node.js 等)
- ✅ 支持部署到 AWS、Heroku、Google App Engine 等多个平台
- ✅ 提供丰富的通知机制(邮件、Slack、IRC 等)
Travis CI 的工作流程如下:
- 监控 GitHub 仓库的提交(commit)
- 一旦检测到新提交,就根据
.travis.yml
配置文件执行流水线 - 如果任何步骤失败,停止执行并通知用户
默认情况下,Travis CI 的配置非常简单,只需指定项目使用的语言即可。当然,你也可以根据需要自定义更多配置。
3.1 免费版与付费版对比
Travis CI 提供两个版本:
- ✅ 免费版(travis-ci.org):适用于公共 GitHub 仓库,功能完整,但资源有限
- ✅ 付费版(travis-ci.com):支持私有仓库,提供更多并发构建任务和构建时长
付费版提供 100 次免费构建用于试用。
4. 使用 Travis CI 创建构建流水线
我们以 Travis CI 免费版为例,演示如何为一个公共 GitHub 项目创建构建流水线。
操作步骤如下:
- 使用 GitHub 账号登录 Travis CI
- 授权 Travis CI 访问你的 GitHub 仓库
授权完成后,就可以开始配置构建流水线了。
4.1 启用项目仓库
登录后,所有公共仓库默认是未启用状态。你需要在 Travis CI 的账户设置页面中手动启用:
启用后,Travis CI 将开始监控该仓库的提交,默认监控分支是 master
。
你也可以点击每个仓库的 Settings 按钮,进行以下配置:
- 设置哪些事件触发构建(push、pull request 等)
- 设置环境变量
- 设置自动取消旧构建等
4.2 创建 Travis 配置文件
接下来,我们需要在项目根目录下创建一个 .travis.yml
文件。这是 Travis CI 的核心配置文件,没有它,构建流水线不会执行。
最简单的配置如下:
language: java
仅这一行配置,Travis CI 就会自动执行以下操作:
- 编译 Java 代码
- 执行测试
提交 .travis.yml
文件后,Travis CI 将自动触发第一次构建。之后每次提交到 master
分支,都会触发一次新构建。
你也可以通过 Travis CI 的控制台手动触发构建,无需提交代码或创建 Pull Request。
5. 高级配置
前面我们只展示了最基础的配置。在实际项目中,你可能需要更复杂的设置。
以下是一些常用配置项。
5.1 自定义构建命令
默认情况下,Travis CI 对 Maven 项目执行的命令是:
mvn test -B
你可以通过 script
指令修改为任意命令:
script: mvn package -DskipTests
如果命令比较复杂,建议写成单独的脚本文件,然后在配置中调用:
script: ./build.sh
5.2 部署构建产物
默认情况下,构建完成后生成的 artifact(如 jar 文件)会被丢弃。如果你想保留这些文件,需要配置部署步骤。
Travis CI 支持部署到多种平台,比如:
- Amazon S3
- Google Cloud Storage
- Bintray
- Heroku
- AWS 等
例如,部署到 Heroku 的配置如下:
deploy:
provider: heroku
api_key:
secure: "ENCRYPTED_API_KEY"
你可以使用 Travis CLI 工具生成加密的 API Key。
如果你需要部署到不支持的平台,可以使用通用脚本方式:
deploy:
provider: script
script: bash ./custom-deploy.sh
5.3 控制触发构建的分支
默认情况下,只有 master
分支的提交会触发构建。你可以通过 branches
配置白名单或黑名单。
例如,只允许 release
和 stable
分支触发构建,忽略 master
和 nightly
:
branches:
only:
- release
- stable
except:
- master
- nightly
⚠️ 注意:only
的优先级高于 except
。
也可以使用正则表达式:
branches:
only:
- /^development.*$/
5.4 跳过特定提交
你可以通过提交信息跳过某些构建。Travis CI 支持以下格式:
skip ci
ci skip
skip travis
travis skip
skip travis-ci
travis-ci skip
等
只要提交信息中包含上述任意一种格式,Travis CI 就不会执行构建。
5.5 使用不同构建环境
默认情况下,Java 项目使用的是 Ubuntu Linux 环境。你可以通过配置使用其他系统:
os: osx # 或 'windows'
对于 Linux,还可以指定发行版:
os: linux
dist: xenial # 可选:trusty 或 precise
⚠️ 注意:如果你切换了操作系统,记得检查你的构建脚本和部署脚本是否兼容。
5.6 使用不同 JDK 版本
你可以指定构建使用的 JDK 版本:
jdk: oraclejdk8
不同环境支持的 JDK 版本可能不同,请查阅官方文档确认支持的版本。
6. 构建矩阵(Build Matrix)
默认情况下,每次构建只运行一个任务。但 Travis CI 支持构建矩阵,允许你为每次提交运行多个任务,使用不同的配置组合。
6.1 自动生成矩阵
你可以为某些配置项提供数组,Travis CI 会自动生成所有组合:
language: java
jdk:
- openjdk8
- openjdk9
os:
- linux
- osx
上面的配置将生成 4 个任务(2 JDK × 2 OS)。
6.2 自定义矩阵组合
你也可以使用 matrix.include
手动定义组合:
language: java
matrix:
include:
- jdk: openjdk8
os: linux
- jdk: openjdk9
os: osx
上面的配置将生成 2 个任务。
⚠️ 注意:如果你在多个操作系统上构建,要确保你的脚本在不同系统下都能正常运行。例如 Shell 脚本不能在 Windows 上运行。
Travis CI 还支持更多构建矩阵控制选项,详情请参考官方文档:Build Matrix
7. 总结
本文我们演示了如何使用 Travis CI 创建一个简单的构建流水线。通过极少的配置,我们实现了代码构建和测试的自动化。
Travis CI 功能强大且配置灵活,支持多种语言和部署平台。唯一的限制是它目前只支持 GitHub 仓库。
如果你正在寻找一个轻量级、易用的 CI 工具,Travis CI 是一个非常不错的选择。