一个 Spring Boot 项目从开发到上线,中间要经历编译、跑测试、打 Jar 包、部署这一连串动作。如果每次都靠本地手动执行 mvn package 再把产物拷到服务器,不仅繁琐,还容易出现"我本地能跑,服务器跑不了"的经典问题。把构建和交付交给 CI 工具自动化处理,是解决这类问题的标准做法。Travis CI 作为一款老牌的托管式持续集成服务,对 GitHub 仓库的支持非常友好,配置简单到只需要在项目根目录放一个 YAML 文件,非常适合中小型 Spring Boot 项目快速落地 CI/CD。

一、项目准备:让 Spring Boot 工程具备可构建性
在接入 Travis CI 之前,先确认项目的构建配置是否规范。Travis CI 本质上是在云端服务器上替你执行 Maven 命令,所以项目必须能通过 mvn clean verify 独立完成编译和测试。打开 pom.xml,确认几个关键点。
首先是父级依赖与打包插件。标准的 Spring Boot 工程通常会继承 spring-boot-starter-parent,它已经内置了插件管理,包含 spring-boot-maven-plugin 用于打出可执行 Fat Jar:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>其次是测试环节。Travis CI 默认会在构建阶段执行测试,如果单元测试依赖外部数据库或 Redis,在 CI 环境里大概率会失败。两种处理思路:一是给测试加上条件注解,让集成测试在有环境变量标记时才执行;二是在 CI 配置里通过环境变量区分测试范围。推荐前者,让测试代码自己决定何时激活,配置文件会更干净。
最后确认项目已经托管在 GitHub 上,并且仓库是公开的(Travis CI 对公开仓库免费,私有仓库需要付费计划)。这三点都满足后,就可以开始写配置文件了。
二、编写 .travis.yml:核心配置详解
Travis CI 的全部行为都由项目根目录下的 .travis.yml 文件控制。一份针对 Spring Boot 的基础配置如下:
language: java
jdk:
- openjdk17
# 缓存 Maven 依赖,加速后续构建
cache:
directories:
- $HOME/.m2
install: true # 跳过默认的 install 阶段,统一交给 script 执行
script:
- mvn clean verify -B -DskipITs=true
branches:
only:
- main
- develop逐项解释一下这些配置的作用。language: java 告诉 Travis 使用 Java 构建环境;jdk 指定 JDK 版本,务必与项目实际编译版本一致,Spring Boot 3.x 要求 JDK 17 及以上,写错版本会直接编译失败。
cache 是最容易被忽略但收益极大的一项。Maven 第一次构建要把所有依赖从中央仓库下载一遍,可能耗时好几分钟;配置缓存后,依赖会被保留在 Travis 的缓存目录,后续构建通常能把依赖下载时间压缩到几秒。注意 $HOME/.m2 是 Linux 构建机上的路径,反斜杠与斜杠方向别写错。
branches.only 限定只对 main 和 develop 分支触发构建,避免随手推送的功能分支把构建队列塞满。-B 参数表示 Maven 以批处理模式运行,不输出进度条类的交互式日志,CI 环境下日志会更清爽。
三、打通 GitHub 与 Travis CI 的联动
配置文件写好后,还需要在 Travis CI 平台侧完成绑定。流程很简单:使用 GitHub 账号登录 travis-ci.com,进入账户设置页面,在 Repositories 列表中找到你的 Spring Boot 仓库并打开开关。之后每次 git push,GitHub 会通过 Webhook 通知 Travis CI 拉取代码并执行构建。
构建过程中可以在 Travis 的控制台实时查看日志,日志会按配置的阶段分段展示。构建结果有两个查看途径:一是 Travis 网页上的历史记录,二是仓库 README 里的状态徽章。加上徽章只需要在 README 中插入一行 Markdown:
[] (https://travis-ci.com/yourname/your-repo)
这里有个常见坑:Travis 曾经从 travis-ci.org 迁移到 travis-ci.com,老教程里的徽章地址大多是 org 域名,照抄会导致徽章一直显示 unknown。如果构建没被触发,优先检查仓库开关是否打开、Webhook 是否在 GitHub 仓库的 Settings 里被禁用,这两个原因覆盖了绝大多数联动失败的情况。
四、进阶:测试通过后自动部署
持续集成只是第一步,持续交付要求测试通过后自动把产物发布出去。Travis 提供了 deploy 阶段,最常见的做法是把构建好的 Jar 发布到 GitHub Releases 或者构建 Docker 镜像推送到镜像仓库。
以发布到 GitHub Releases 为例:
deploy:
provider: releases
token: $GITHUB_TOKEN # 在 Travis 仓库设置中配置的环境变量
file:
- target/*.jar
cleanup: false
on:
tags: true # 只有打 tag 时才发布
branch: main$GITHUB_TOKEN 不能明文写在配置文件里,正确做法是在 Travis 仓库设置的 Environment Variables 中添加,Travis 会自动注入到构建环境,避免令牌泄露。on.tags: true 表示仅当推送的是版本标签(如 git tag v1.0.0 && git push --tags)时才触发发布,这样日常提交只构建不发布,版本发布有明确的节奏。
如果团队用容器化部署,把 deploy 阶段换成脚本构建镜像即可:
script: - mvn clean package -DskipTests - docker build -t ipipp.com/myapp:$TRAVIS_BUILD_NUMBER . - docker push ipipp.com/myapp:$TRAVIS_BUILD_NUMBER
注意 after_success 和 deploy 的区别:前者是构建成功后执行的自由脚本,适合做通知、打镜像这类操作;后者是 Travis 内置的部署阶段,自带重试与日志隔离。小型项目两者混用没有问题,规模上来后建议统一收口到一个阶段,方便排查流水线问题。
五、构建提速与稳定性优化
流水线用起来之后,构建时长会直接影响团队体验。除了前面提到的依赖缓存,还有几个实用的优化点。第一,把单元测试和集成测试拆开,CI 上先跑快速的单测,集成测试只对主分支执行,可以通过环境变量加 Maven Profile 控制。第二,给 Maven 加上 -T 1C 开启并行构建,多模块项目提速明显。第三,测试数量多时考虑在 script 阶段提前失败,比如先执行 mvn compile 再执行测试,编译错误不用等到完整构建才发现。
稳定性方面,要留意 Travis 免费套餐对公开仓库的构建额度限制,社区版有并发数和时长的约束,如果构建队列频繁排队,可以考虑将非关键分支的构建改为夜间定时触发,或者迁移到 GitHub Actions 这类与仓库原生集成的方案。无论用哪个平台,把构建逻辑封装在 Maven Profile 和脚本里、让 CI 配置保持薄薄一层,是长期可维护的关键。
Spring BootTravis CICI/CD修改时间:2026-09-10 13:34:37