240 lines
4.9 KiB
Markdown
240 lines
4.9 KiB
Markdown
|
# Golang Demo - 现代化Web API项目
|
|||
|
|
|||
|
这是一个基于Gin框架的现代化Go web项目,专为Jenkins CI/CD部署流程设计。
|
|||
|
|
|||
|
## 🚀 特性
|
|||
|
|
|||
|
- **现代Go技术栈**: 使用Go 1.21+和最新的依赖包
|
|||
|
- **Gin Web框架**: 高性能的HTTP web框架
|
|||
|
- **结构化日志**: 使用Zap进行高性能日志记录
|
|||
|
- **优雅关闭**: 支持优雅的服务器关闭
|
|||
|
- **健康检查**: 内置健康检查端点,适合容器化部署
|
|||
|
- **Docker支持**: 多阶段构建,优化镜像大小
|
|||
|
- **CI/CD就绪**: 包含完整的Jenkins Pipeline配置
|
|||
|
|
|||
|
## 📋 API端点
|
|||
|
|
|||
|
### 基础端点
|
|||
|
- `GET /` - 欢迎页面
|
|||
|
- `GET /ping` - 简单的ping测试
|
|||
|
- `GET /health` - 健康检查(适合负载均衡器)
|
|||
|
- `GET /version` - 版本信息
|
|||
|
|
|||
|
### API端点 (v1)
|
|||
|
- `GET /api/v1/status` - API状态信息
|
|||
|
- `GET /api/v1/time` - 当前时间信息
|
|||
|
- `POST /api/v1/echo` - 回显请求body
|
|||
|
|
|||
|
## 🛠️ 技术栈
|
|||
|
|
|||
|
- **语言**: Go 1.21+
|
|||
|
- **Web框架**: Gin v1.9.1
|
|||
|
- **日志**: Zap v1.26.0
|
|||
|
- **配置**: godotenv v1.5.1
|
|||
|
- **容器**: Docker & Docker Compose
|
|||
|
- **CI/CD**: Jenkins Pipeline
|
|||
|
|
|||
|
## 🚀 快速开始
|
|||
|
|
|||
|
### 本地开发
|
|||
|
|
|||
|
1. **克隆项目**
|
|||
|
```bash
|
|||
|
git clone <repository-url>
|
|||
|
cd golang_demo
|
|||
|
```
|
|||
|
|
|||
|
2. **安装依赖**
|
|||
|
```bash
|
|||
|
make deps
|
|||
|
```
|
|||
|
|
|||
|
3. **运行测试**
|
|||
|
```bash
|
|||
|
make test
|
|||
|
```
|
|||
|
|
|||
|
4. **开发模式运行**
|
|||
|
```bash
|
|||
|
make dev
|
|||
|
```
|
|||
|
|
|||
|
5. **访问应用**
|
|||
|
```
|
|||
|
http://localhost:8080
|
|||
|
```
|
|||
|
|
|||
|
### 使用Docker
|
|||
|
|
|||
|
1. **构建并运行**
|
|||
|
```bash
|
|||
|
make docker-run
|
|||
|
```
|
|||
|
|
|||
|
2. **查看日志**
|
|||
|
```bash
|
|||
|
make logs
|
|||
|
```
|
|||
|
|
|||
|
3. **停止容器**
|
|||
|
```bash
|
|||
|
make docker-stop
|
|||
|
```
|
|||
|
|
|||
|
### 使用Docker Compose
|
|||
|
|
|||
|
```bash
|
|||
|
docker-compose up -d
|
|||
|
```
|
|||
|
|
|||
|
## 🔧 配置
|
|||
|
|
|||
|
项目使用环境变量进行配置,可以通过`.env`文件设置:
|
|||
|
|
|||
|
```env
|
|||
|
PORT=8080
|
|||
|
GIN_MODE=debug
|
|||
|
```
|
|||
|
|
|||
|
### 环境变量说明
|
|||
|
|
|||
|
- `PORT`: 服务端口(默认:8080)
|
|||
|
- `GIN_MODE`: Gin运行模式(debug/release/test)
|
|||
|
|
|||
|
## 📦 构建
|
|||
|
|
|||
|
### 本地构建
|
|||
|
|
|||
|
```bash
|
|||
|
make build
|
|||
|
```
|
|||
|
|
|||
|
### Docker构建
|
|||
|
|
|||
|
```bash
|
|||
|
make docker-build
|
|||
|
```
|
|||
|
|
|||
|
构建时会注入以下信息:
|
|||
|
- 构建时间
|
|||
|
- Git提交哈希
|
|||
|
- 版本信息
|
|||
|
|
|||
|
## 🚀 部署
|
|||
|
|
|||
|
### Jenkins Pipeline
|
|||
|
|
|||
|
项目包含完整的`Jenkinsfile`,支持:
|
|||
|
|
|||
|
- **代码检出** - 自动获取Git提交信息和构建时间
|
|||
|
- **环境检查** - 验证Go、Docker等构建环境
|
|||
|
- **依赖管理** - 自动下载和验证Go模块依赖
|
|||
|
- **代码检查** - 运行`go vet`和`go fmt`检查
|
|||
|
- **单元测试** - 执行测试并生成覆盖率报告
|
|||
|
- **代码质量扫描** - SonarQube代码质量分析(可选)
|
|||
|
- **编译构建** - 交叉编译Linux二进制文件
|
|||
|
- **Docker镜像构建** - 多阶段构建优化镜像
|
|||
|
- **镜像测试** - 验证Docker镜像功能正常
|
|||
|
- **自动部署** - 支持多环境部署(生产/测试)
|
|||
|
- **健康检查** - 验证部署后应用状态
|
|||
|
- **构建产物清理** - 自动清理临时文件和镜像
|
|||
|
|
|||
|
**分支策略:**
|
|||
|
- `main`/`master`分支部署到生产环境(端口15020)
|
|||
|
- `develop`/`feature/*`分支部署到测试环境(端口15021)
|
|||
|
|
|||
|
### 手动部署
|
|||
|
|
|||
|
1. **构建镜像**
|
|||
|
```bash
|
|||
|
docker build -t golang-demo:latest .
|
|||
|
```
|
|||
|
|
|||
|
2. **运行容器**
|
|||
|
```bash
|
|||
|
docker run -d \
|
|||
|
--name golang-demo \
|
|||
|
-p 8080:8080 \
|
|||
|
-e GIN_MODE=release \
|
|||
|
golang-demo:latest
|
|||
|
```
|
|||
|
|
|||
|
3. **健康检查**
|
|||
|
```bash
|
|||
|
curl http://localhost:8080/health
|
|||
|
```
|
|||
|
|
|||
|
## 🧪 测试
|
|||
|
|
|||
|
### 运行所有测试
|
|||
|
|
|||
|
```bash
|
|||
|
make test
|
|||
|
```
|
|||
|
|
|||
|
### 健康检查测试
|
|||
|
|
|||
|
```bash
|
|||
|
make health
|
|||
|
```
|
|||
|
|
|||
|
### API测试示例
|
|||
|
|
|||
|
```bash
|
|||
|
# 基础测试
|
|||
|
curl http://localhost:8080/ping
|
|||
|
|
|||
|
# 健康检查
|
|||
|
curl http://localhost:8080/health
|
|||
|
|
|||
|
# API测试
|
|||
|
curl http://localhost:8080/api/v1/time
|
|||
|
|
|||
|
# POST请求测试
|
|||
|
curl -X POST http://localhost:8080/api/v1/echo \
|
|||
|
-H "Content-Type: application/json" \
|
|||
|
-d '{"message": "Hello World"}'
|
|||
|
```
|
|||
|
|
|||
|
## 📖 开发指南
|
|||
|
|
|||
|
### 项目结构
|
|||
|
|
|||
|
```
|
|||
|
golang_demo/
|
|||
|
├── main.go # 主程序文件
|
|||
|
├── go.mod # Go模块文件
|
|||
|
├── go.sum # 依赖锁定文件
|
|||
|
├── .env # 环境变量配置
|
|||
|
├── Dockerfile # Docker构建文件
|
|||
|
├── docker-compose.yml # Docker Compose配置
|
|||
|
├── Jenkinsfile # Jenkins Pipeline配置
|
|||
|
├── Makefile # 构建脚本
|
|||
|
└── README.md # 项目说明
|
|||
|
```
|
|||
|
|
|||
|
### 添加新的API端点
|
|||
|
|
|||
|
1. 在`setupRouter()`函数中添加路由
|
|||
|
2. 实现对应的处理函数
|
|||
|
3. 更新API文档
|
|||
|
|
|||
|
### 自定义配置
|
|||
|
|
|||
|
修改`.env`文件或设置环境变量来自定义配置。
|
|||
|
|
|||
|
## 🤝 贡献
|
|||
|
|
|||
|
1. Fork本项目
|
|||
|
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
|||
|
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
|||
|
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
|||
|
5. 开启Pull Request
|
|||
|
|
|||
|
## 📝 许可证
|
|||
|
|
|||
|
本项目采用MIT许可证 - 查看[LICENSE](LICENSE)文件了解详情。
|
|||
|
|
|||
|
## 🐛 问题报告
|
|||
|
|
|||
|
如果发现bug或有功能建议,请在[Issues](../../issues)页面报告。
|