Golang Demo Project
一个基于 Gin 框架的 Go Web 应用示例项目,集成了完整的 CI/CD 流水线。
🎯 项目特性
- ✅ 现代 Go 开发: 使用 Go 1.21+和 Gin 框架
- ✅ 完整 CI/CD: Jenkins Pipeline 自动化构建、测试和部署
- ✅ 代码质量保障: SonarQube 集成,覆盖率报告,静态分析
- ✅ 容器化部署: Docker 镜像构建和多环境部署
- ✅ 健康检查: 内置应用健康监控端点
- ✅ 高度可复用: 提供 Jenkins 模板,可快速应用到其他 Go 项目
🚀 快速开始
本地开发
# 克隆项目
git clone <repository-url>
cd Golang_demo
# 安装依赖
go mod tidy
# 运行项目
go run main.go
# 访问应用
# http://localhost:8080
运行测试
# 运行单元测试
go test ./...
# 生成覆盖率报告
go test -cover ./...
# 详细覆盖率报告
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html
🏗️ CI/CD 流水线
本项目包含完整的 Jenkins Pipeline 配置,支持:
流水线阶段
- 🔄 初始化: 代码检出、环境检查
- 📦 依赖管理: Go 模块下载和验证
- 🔍 代码质量: 静态检查、格式验证、代码规范
- 🧪 测试: 单元测试、性能测试、覆盖率报告
- 📊 代码扫描: SonarQube 质量扫描
- 🔨 构建: Go 应用编译、Docker 镜像构建
- 🧪 镜像测试: 容器启动和健康检查验证
- 🚀 部署: 多环境自动化部署
- 🏥 健康检查: 部署后应用状态验证
环境映射
分支策略:
main/master → 生产环境 (端口: 15021)
staging/release → 预发布环境 (端口: 15022)
feature/* → 开发环境 (端口: 15023)
性能优化成果
- 总构建时间: 从 10 分钟优化到 3 分 16 秒 (67%提升)
- SonarQube 扫描: 从 7 分 25 秒优化到 11.3 秒 (94%提升)
- Docker 镜像: 优化到 34.8MB Alpine 基础镜像
🔧 配置说明
Jenkins 要求
- 必需插件: Pipeline, Git, SSH Agent, SonarQube Scanner, HTML Publisher
- 工具配置: Go 语言工具 (名称: go), SonarQube Scanner (名称: sonarQube)
- 凭据配置: SSH Key, SonarQube Token
项目配置
在Jenkinsfile
中修改以下配置:
PROJECT_NAME = 'golang-demo' // 项目名称
DEPLOY_SERVER = '116.62.163.84' // 部署服务器
SSH_CREDENTIAL_ID = 'deploy-server-ssh-key' // SSH凭据ID
SONAR_HOST_URL = 'http://116.62.163.84:15010' // SonarQube地址
🐳 Docker 部署
本地构建
# 构建镜像
docker build -t golang-demo .
# 运行容器
docker run -d \
--name golang-demo \
-p 8080:8080 \
--restart unless-stopped \
golang-demo
健康检查
应用提供多个健康检查端点:
# 基本健康检查
curl http://localhost:8080/health
# 简单ping检查
curl http://localhost:8080/ping
# 根路径
curl http://localhost:8080/
📊 代码质量
覆盖率目标
- 最低覆盖率: 50% (警告阈值)
- 推荐覆盖率: 70%+ (良好实践)
- 当前覆盖率: 44.4% (需要改进)
静态检查
项目集成了多种 Go 代码质量检查:
# 语法检查
go vet ./...
# 格式检查
go fmt ./...
# 导入顺序检查 (可选)
goimports -l .
# 代码复杂度检查 (可选)
gocyclo -over 15 .
🌐 部署环境
生产环境
- 访问地址: http://116.62.163.84:15021
- 部署分支: main/master
- 容器名称: golang-demo-production
预发布环境
- 访问地址: http://116.62.163.84:15022
- 部署分支: staging/release
- 容器名称: golang-demo-staging
开发环境
- 访问地址: http://116.62.163.84:15023
- 部署分支: feature/*
- 容器名称: golang-demo-development
📈 监控和报告
SonarQube 代码质量
- 访问地址: http://116.62.163.84:15010/dashboard?id=golang-demo
- 代码覆盖率: 集成 Go 测试覆盖率数据
- 质量门禁: 生产环境必须通过质量检查
Jenkins 报告
- 测试报告: JUnit 格式测试结果
- 覆盖率报告: HTML 格式覆盖率详情
- 构建产物: 二进制文件和 Docker 镜像
🔄 使用 Jenkins 模板
应用到新项目
-
复制模板文件:
cp Jenkinsfile.go-template ./Jenkinsfile
-
修改项目配置:
PROJECT_NAME = 'your-project-name' DEPLOY_SERVER = 'your.server.ip' // ... 其他配置
-
验证项目结构:
# 确保是Go模块项目 go mod init your-project-name go mod tidy # 添加健康检查端点 (推荐) # /health, /ping 或 /
-
推送并构建:
git add Jenkinsfile git commit -m "Add Jenkins CI/CD pipeline" git push origin main
模板特性
- ✅ 参数化构建: 支持环境选择、跳过测试等选项
- ✅ 并行执行: 多阶段并行执行,提高构建效率
- ✅ 错误处理: 完善的错误处理和回滚机制
- ✅ 通知集成: 支持 Slack、邮件、钉钉通知
- ✅ 安全扫描: 依赖漏洞检查和代码安全分析
详细使用说明请参考:Go 项目 Jenkins CI/CD 模板使用指南
📚 技术栈
- 语言: Go 1.21+
- 框架: Gin Web Framework
- 容器: Docker + Alpine Linux
- CI/CD: Jenkins Pipeline
- 代码质量: SonarQube
- 部署: SSH + Docker Compose
🤝 贡献指南
- Fork 项目
- 创建功能分支 (
git checkout -b feature/amazing-feature
) - 提交改动 (
git commit -m 'Add some amazing feature'
) - 推送分支 (
git push origin feature/amazing-feature
) - 创建 Pull Request
📄 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
📞 联系方式
如果有任何问题或建议,请:
- 创建 Issue
- 发送 Pull Request
- 联系项目维护者
Description
Languages
Go
59.6%
Makefile
29.2%
Dockerfile
11.2%