4.9 KiB
4.9 KiB
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
🚀 快速开始
本地开发
-
克隆项目
git clone <repository-url> cd golang_demo
-
安装依赖
make deps
-
运行测试
make test
-
开发模式运行
make dev
-
访问应用
http://localhost:8080
使用Docker
-
构建并运行
make docker-run
-
查看日志
make logs
-
停止容器
make docker-stop
使用Docker Compose
docker-compose up -d
🔧 配置
项目使用环境变量进行配置,可以通过.env
文件设置:
PORT=8080
GIN_MODE=debug
环境变量说明
PORT
: 服务端口(默认:8080)GIN_MODE
: Gin运行模式(debug/release/test)
📦 构建
本地构建
make build
Docker构建
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)
手动部署
-
构建镜像
docker build -t golang-demo:latest .
-
运行容器
docker run -d \ --name golang-demo \ -p 8080:8080 \ -e GIN_MODE=release \ golang-demo:latest
-
健康检查
curl http://localhost:8080/health
🧪 测试
运行所有测试
make test
健康检查测试
make health
API测试示例
# 基础测试
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端点
- 在
setupRouter()
函数中添加路由 - 实现对应的处理函数
- 更新API文档
自定义配置
修改.env
文件或设置环境变量来自定义配置。
🤝 贡献
- Fork本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature
) - 提交更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 开启Pull Request
📝 许可证
本项目采用MIT许可证 - 查看LICENSE文件了解详情。
🐛 问题报告
如果发现bug或有功能建议,请在Issues页面报告。