240 lines
5.7 KiB
Markdown
240 lines
5.7 KiB
Markdown
|
# Jenkins Demo - Spring Boot 3 CI/CD 实践项目
|
|||
|
|
|||
|
这是一个用于实践Jenkins CI/CD流程的Spring Boot 3示例项目。项目包含完整的代码拉取、编译构建、单元测试、代码扫描、Docker打包和部署流程。
|
|||
|
|
|||
|
## 🚀 项目特性
|
|||
|
|
|||
|
- **Spring Boot 3.2.6** + **JDK 17**
|
|||
|
- **RESTful API** - 提供用户管理相关接口
|
|||
|
- **单元测试** - 完整的JUnit 5测试覆盖
|
|||
|
- **代码质量** - 集成SonarQube代码扫描
|
|||
|
- **Docker支持** - 多阶段构建优化
|
|||
|
- **Jenkins Pipeline** - 完整的CI/CD流程
|
|||
|
- **健康检查** - 应用程序监控端点
|
|||
|
|
|||
|
## 📋 API接口
|
|||
|
|
|||
|
### 健康检查
|
|||
|
- `GET /api/health` - 应用健康状态
|
|||
|
- `GET /api/info` - 应用信息
|
|||
|
- `GET /api/welcome` - 欢迎信息
|
|||
|
|
|||
|
### 用户管理
|
|||
|
- `GET /api/users` - 获取所有用户
|
|||
|
- `GET /api/users/{id}` - 获取指定用户
|
|||
|
- `POST /api/users` - 创建新用户
|
|||
|
- `PUT /api/users/{id}` - 更新用户信息
|
|||
|
- `DELETE /api/users/{id}` - 删除用户
|
|||
|
- `POST /api/users/{id}/activate` - 激活用户
|
|||
|
- `POST /api/users/{id}/deactivate` - 停用用户
|
|||
|
- `GET /api/users/stats` - 用户统计信息
|
|||
|
|
|||
|
## 🛠️ 技术栈
|
|||
|
|
|||
|
- **后端框架**: Spring Boot 3.2.6
|
|||
|
- **Java版本**: JDK 17
|
|||
|
- **构建工具**: Maven 3.9+
|
|||
|
- **测试框架**: JUnit 5 + MockMvc
|
|||
|
- **代码覆盖率**: JaCoCo
|
|||
|
- **容器化**: Docker + Docker Compose
|
|||
|
- **CI/CD**: Jenkins Pipeline
|
|||
|
|
|||
|
## 🏃♂️ 快速开始
|
|||
|
|
|||
|
### 本地开发
|
|||
|
|
|||
|
1. **克隆项目**
|
|||
|
```bash
|
|||
|
git clone <repository-url>
|
|||
|
cd jenkins-demo
|
|||
|
```
|
|||
|
|
|||
|
2. **编译项目**
|
|||
|
```bash
|
|||
|
mvn clean compile
|
|||
|
```
|
|||
|
|
|||
|
3. **运行测试**
|
|||
|
```bash
|
|||
|
mvn test
|
|||
|
```
|
|||
|
|
|||
|
4. **启动应用**
|
|||
|
```bash
|
|||
|
mvn spring-boot:run
|
|||
|
```
|
|||
|
|
|||
|
5. **访问应用**
|
|||
|
- 应用地址: http://localhost:8080
|
|||
|
- 健康检查: http://localhost:8080/api/health
|
|||
|
- 用户列表: http://localhost:8080/api/users
|
|||
|
|
|||
|
### Docker运行
|
|||
|
|
|||
|
1. **构建镜像**
|
|||
|
```bash
|
|||
|
docker build -t jenkins-demo:latest .
|
|||
|
```
|
|||
|
|
|||
|
2. **运行容器**
|
|||
|
```bash
|
|||
|
docker run -d --name jenkins-demo -p 8080:8080 jenkins-demo:latest
|
|||
|
```
|
|||
|
|
|||
|
3. **使用Docker Compose**
|
|||
|
```bash
|
|||
|
docker-compose up -d
|
|||
|
```
|
|||
|
|
|||
|
## 🔧 Maven命令
|
|||
|
|
|||
|
```bash
|
|||
|
# 编译项目
|
|||
|
mvn clean compile
|
|||
|
|
|||
|
# 运行测试
|
|||
|
mvn test
|
|||
|
|
|||
|
# 生成代码覆盖率报告
|
|||
|
mvn test jacoco:report
|
|||
|
|
|||
|
# 打包应用
|
|||
|
mvn clean package
|
|||
|
|
|||
|
# 跳过测试打包
|
|||
|
mvn clean package -DskipTests
|
|||
|
|
|||
|
# 代码质量扫描(需要配置SonarQube)
|
|||
|
mvn sonar:sonar
|
|||
|
|
|||
|
# 启动应用
|
|||
|
mvn spring-boot:run
|
|||
|
```
|
|||
|
|
|||
|
## 🔍 代码质量
|
|||
|
|
|||
|
项目集成了以下代码质量工具:
|
|||
|
|
|||
|
- **JaCoCo** - 代码覆盖率分析
|
|||
|
- **SonarQube** - 静态代码分析
|
|||
|
- **Maven Surefire** - 单元测试报告
|
|||
|
|
|||
|
生成测试报告:
|
|||
|
```bash
|
|||
|
mvn clean test jacoco:report
|
|||
|
```
|
|||
|
|
|||
|
报告位置:`target/site/jacoco/index.html`
|
|||
|
|
|||
|
## 🚀 Jenkins CI/CD流程
|
|||
|
|
|||
|
### Pipeline阶段
|
|||
|
|
|||
|
1. **代码检出** - 从Git仓库拉取代码
|
|||
|
2. **环境检查** - 验证Java、Maven等工具版本
|
|||
|
3. **编译** - 编译Java源代码
|
|||
|
4. **单元测试** - 运行JUnit测试并生成报告
|
|||
|
5. **代码扫描** - SonarQube静态代码分析
|
|||
|
6. **打包** - 生成可执行JAR文件
|
|||
|
7. **Docker构建** - 构建Docker镜像
|
|||
|
8. **镜像推送** - 推送到Docker Registry
|
|||
|
9. **自动部署** - 部署到目标环境
|
|||
|
10. **健康检查** - 验证应用启动状态
|
|||
|
|
|||
|
### 环境要求
|
|||
|
|
|||
|
Jenkins服务器需要安装:
|
|||
|
- JDK 17
|
|||
|
- Maven 3.9+
|
|||
|
- Docker
|
|||
|
- Git
|
|||
|
- SonarQube Scanner(可选)
|
|||
|
|
|||
|
### 部署配置
|
|||
|
|
|||
|
修改`Jenkinsfile`中的以下配置:
|
|||
|
|
|||
|
```groovy
|
|||
|
environment {
|
|||
|
DOCKER_REGISTRY = 'your-registry.com' // Docker仓库地址
|
|||
|
SONAR_HOST_URL = 'http://your-sonar-server:9000' // SonarQube服务器
|
|||
|
// ... 其他配置
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 📦 项目结构
|
|||
|
|
|||
|
```
|
|||
|
jenkins-demo/
|
|||
|
├── src/
|
|||
|
│ ├── main/
|
|||
|
│ │ ├── java/com/jenkins/demo/
|
|||
|
│ │ │ ├── JenkinsDemoApplication.java # 应用主类
|
|||
|
│ │ │ ├── controller/ # REST控制器
|
|||
|
│ │ │ ├── service/ # 业务服务
|
|||
|
│ │ │ └── model/ # 数据模型
|
|||
|
│ │ └── resources/
|
|||
|
│ │ └── application.yml # 应用配置
|
|||
|
│ └── test/ # 测试代码
|
|||
|
├── Dockerfile # Docker镜像构建
|
|||
|
├── Jenkinsfile # Jenkins Pipeline
|
|||
|
├── docker-compose.yml # Docker Compose配置
|
|||
|
├── pom.xml # Maven配置
|
|||
|
└── README.md # 项目文档
|
|||
|
```
|
|||
|
|
|||
|
## 🔗 API示例
|
|||
|
|
|||
|
### 创建用户
|
|||
|
```bash
|
|||
|
curl -X POST http://localhost:8080/api/users \
|
|||
|
-H "Content-Type: application/json" \
|
|||
|
-d '{
|
|||
|
"username": "testuser",
|
|||
|
"email": "test@example.com",
|
|||
|
"name": "测试用户"
|
|||
|
}'
|
|||
|
```
|
|||
|
|
|||
|
### 获取所有用户
|
|||
|
```bash
|
|||
|
curl http://localhost:8080/api/users
|
|||
|
```
|
|||
|
|
|||
|
### 健康检查
|
|||
|
```bash
|
|||
|
curl http://localhost:8080/api/health
|
|||
|
```
|
|||
|
|
|||
|
## 📊 监控端点
|
|||
|
|
|||
|
Spring Boot Actuator提供了以下监控端点:
|
|||
|
|
|||
|
- `/actuator/health` - 健康状态
|
|||
|
- `/actuator/info` - 应用信息
|
|||
|
- `/actuator/metrics` - 应用指标
|
|||
|
- `/actuator/prometheus` - Prometheus指标(如果启用)
|
|||
|
|
|||
|
## 🤝 贡献指南
|
|||
|
|
|||
|
1. Fork项目
|
|||
|
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
|
|||
|
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
|
|||
|
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
|||
|
5. 开启Pull Request
|
|||
|
|
|||
|
## 📄 许可证
|
|||
|
|
|||
|
本项目使用MIT许可证。详情请参见[LICENSE](LICENSE)文件。
|
|||
|
|
|||
|
## 📞 联系方式
|
|||
|
|
|||
|
如有问题或建议,请通过以下方式联系:
|
|||
|
|
|||
|
- 项目Issues: [GitHub Issues](https://github.com/your-username/jenkins-demo/issues)
|
|||
|
- 邮箱: your-email@example.com
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
🎉 **祝您使用愉快!** 如果这个项目对您有帮助,请给个⭐Star支持一下!
|