1. 概述
本文将带你一步步搭建一个完整的 CI/CD(持续集成 / 持续部署)流程,适用于 Spring Boot 项目。整个过程包括:
✅ 代码托管(GitHub)
✅ 自动构建与测试(Travis CI)
✅ 镜像构建与推送(Docker + Jib)
✅ 代码质量分析(CodeCov)
✅ 自动部署到 PaaS 平台(Heroku)
目标是:代码一提交,自动走完构建、测试、打包、部署全流程,真正做到“一键上线”。
我们不会堆砌概念,而是直接动手实现。踩过的坑也会顺带提一嘴,避免你重复掉进去。
2. 版本控制
CI/CD 的前提是代码托管。我们选择目前最主流的组合:Git + GitHub。
2.1 创建仓库
- 注册 GitHub 账号(https://github.com/join)
- 创建新仓库,命名为
baeldung-ci-cd-process
- 勾选“Initialize with README”,创建一个公开仓库(Public),方便免费接入其他服务
2.2 克隆到本地
执行以下命令:
git clone https://github.com/your-github-username/baeldung-ci-cd-process.git
此时本地目录下只有一个 README.md
,接下来我们往里面加 Spring Boot 项目。
3. 创建 Spring Boot 应用
使用 Maven 作为构建工具,创建一个极简的 Web 服务。
3.1 手动添加依赖
如果你不用 Spring Initializr,可以手动在 pom.xml
中加入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
spring-boot-starter-web
:提供 REST 接口能力spring-boot-starter-actuator
:暴露/actuator/health
健康检查接口,方便后续验证部署是否成功
再添加 Spring Boot 构建插件:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
主类代码:
@SpringBootApplication
public class CiCdApplication {
public static void main(String[] args) {
SpringApplication.run(CiCdApplication.class, args);
}
}
3.2 提交代码
git add .
git commit -m 'Initialize application'
git push
推上去之后,GitHub 仓库里就能看到项目结构了。
4. 构建自动化(Travis CI)
接下来接入 Travis CI,实现“代码一提交,自动构建”。
4.1 添加 Maven Wrapper
虽然 Spring Initializr 默认带了 mvnw
,但为了确保 CI 环境一致性,建议显式添加 Maven Wrapper:
mvn -N io.takari:maven:0.7.7:wrapper
这会生成 mvnw
和 mvnw.cmd
,以后 CI 脚本都用 ./mvnw
代替 mvn
,避免版本不一致问题。
4.2 配置 Travis CI
- 访问 https://travis-ci.com 并用 GitHub 登录
- 启用你刚创建的仓库权限
- 在项目根目录创建
.travis.yml
:
language: java
jdk:
- openjdk11
script:
- ./mvnw clean install
说明:
language: java
:声明使用 Java 环境jdk: openjdk11
:使用 OpenJDK 11script
:构建脚本,执行 Maven 构建
提交后,Travis 会自动触发构建。✅ 绿色表示成功,❌ 红色说明有测试失败或编译错误。
5. 容器化(Docker + Jib)
接下来把应用打包成 Docker 镜像,推送到 DockerHub。
5.1 创建 DockerHub 仓库
- 注册 DockerHub
- 创建仓库
baeldung-ci-cd-process
,设为 Public - 可选:配置 GitHub 自动构建(但我们用 Jib 手动推)
5.2 使用 Jib 插件构建镜像
Jib 是 Google 出的神器,无需本地安装 Docker,直接通过 Maven 构建并推送到远程仓库。
在 pom.xml
中添加 profile:
<profile>
<id>deploy-docker</id>
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.2.0</version>
<configuration>
<to>
<image>your-dockerhub-username/baeldung-ci-cd-process</image>
<tags>
<tag>${project.version}</tag>
<tag>latest</tag>
</tags>
</to>
</configuration>
</plugin>
</plugins>
</build>
</profile>
⚠️ 注意:your-dockerhub-username
替换为你的真实 DockerHub 用户名。
5.3 修改 Travis 构建脚本
更新 .travis.yml
:
before_install:
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
- docker pull openjdk:11-jre-slim-sid
script:
- ./mvnw clean install
- ./mvnw deploy jib:build -P deploy-docker
并在 Travis 的 Environment Variables 中设置:
DOCKER_USERNAME
:你的 DockerHub 用户名DOCKER_PASSWORD
:你的 DockerHub 密码(建议用 Access Token 更安全)
这样构建时会自动登录并推送镜像。
5.4 本地验证
构建成功后,可以本地拉镜像测试:
docker run -p 8080:8080 -t your-dockerhub-username/baeldung-ci-cd-process
访问 http://localhost:8080/actuator/health,返回 {"status":"UP"}
就 OK 了。
6. 代码质量分析(CodeCov)
接入 CodeCov,监控单元测试覆盖率,防止“无脑提交”。
6.1 集成 CodeCov
- 访问 https://codecov.io 并用 GitHub 登录
- 授权并启用你的项目
6.2 添加 JaCoCo 插件
在 pom.xml
中加入:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
6.3 修改 Travis 脚本
更新 .travis.yml
:
script:
- ./mvnw clean org.jacoco:jacoco-maven-plugin:prepare-agent install
- ./mvnw deploy jib:build -P deploy-docker
after_success:
- bash <(curl -s https://codecov.io/bash)
after_success
表示构建成功后上传覆盖率报告。
6.4 添加测试类
哪怕只有一个空测试,也得有:
@SpringBootTest
class CiCdApplicationIntegrationTest {
@Test
public void contextLoads() {
}
}
推上去后,CodeCov 会自动生成报告,还能在 PR 中评论覆盖率变化。
7. 自动部署到 Heroku
最后一步:自动部署到 Heroku,实现“提交即上线”。
7.1 创建 Heroku 应用
- 注册 Heroku
- 创建应用,命名为
baeldung-ci-cd-process
(需全局唯一)
7.2 添加 Heroku Maven 插件
在 pom.xml
中添加 profile:
<profile>
<id>deploy-heroku</id>
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<appName>baeldung-ci-cd-process</appName>
<processTypes>
<web>java $JAVA_OPTS -jar -Dserver.port=$PORT target/${project.build.finalName}.jar</web>
</processTypes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
⚠️ 注意:<appName>
填你在 Heroku 创建的应用名。
7.3 配置 Travis 部署
在 Travis 中添加环境变量:
HEROKU_API_KEY
:在 Heroku Account Settings 生成 API Key
修改 .travis.yml
:
script:
- ./mvnw clean install
- ./mvnw heroku:deploy jib:build -P deploy-heroku,deploy-docker
这样构建完成后,会同时推送到 DockerHub 和部署到 Heroku。
7.4 验证部署
部署成功后,访问:
https://baeldung-ci-cd-process.herokuapp.com/actuator/health
返回 {"status":"UP"}
,说明服务已正常运行。
8. 总结
我们完整走了一遍 Spring Boot 项目的 CI/CD 流程:
- ✅ GitHub 托管代码
- ✅ Travis CI 自动构建
- ✅ Jib 构建 Docker 镜像并推送到 DockerHub
- ✅ CodeCov 监控测试覆盖率
- ✅ Heroku 自动部署,支持公网访问
整个流程无需手动操作,真正实现“提交即部署”。
项目源码已托管至 GitHub:https://github.com/your-username/baeldung-ci-cd-process(请替换为你的实际地址)
这套方案简单粗暴,适合中小型项目快速上线。如果团队规模扩大,可以逐步迁移到 Jenkins、GitLab CI 或 GitHub Actions 等更复杂的平台。