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