Golang_demo/README.md

269 lines
6.4 KiB
Markdown
Raw Permalink Normal View History

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