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 的工作流程如下:

  1. 监控 GitHub 仓库的提交(commit)
  2. 一旦检测到新提交,就根据 .travis.yml 配置文件执行流水线
  3. 如果任何步骤失败,停止执行并通知用户

默认情况下,Travis CI 的配置非常简单,只需指定项目使用的语言即可。当然,你也可以根据需要自定义更多配置。

3.1 免费版与付费版对比

Travis CI 提供两个版本:

  • 免费版(travis-ci.org):适用于公共 GitHub 仓库,功能完整,但资源有限
  • 付费版(travis-ci.com):支持私有仓库,提供更多并发构建任务和构建时长

付费版提供 100 次免费构建用于试用。

4. 使用 Travis CI 创建构建流水线

我们以 Travis CI 免费版为例,演示如何为一个公共 GitHub 项目创建构建流水线。

操作步骤如下:

  1. 使用 GitHub 账号登录 Travis CI
  2. 授权 Travis CI 访问你的 GitHub 仓库

Travis 登录授权

授权完成后,就可以开始配置构建流水线了。

4.1 启用项目仓库

登录后,所有公共仓库默认是未启用状态。你需要在 Travis CI 的账户设置页面中手动启用:

启用 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 配置白名单或黑名单。

例如,只允许 releasestable 分支触发构建,忽略 masternightly

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 是一个非常不错的选择。


原始标题:Create a Build Pipeline with Travis CI