Golang_demo/README.md
2025-06-25 18:12:52 +08:00

6.4 KiB

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 配置,支持:

流水线阶段

  1. 🔄 初始化: 代码检出、环境检查
  2. 📦 依赖管理: Go 模块下载和验证
  3. 🔍 代码质量: 静态检查、格式验证、代码规范
  4. 🧪 测试: 单元测试、性能测试、覆盖率报告
  5. 📊 代码扫描: SonarQube 质量扫描
  6. 🔨 构建: Go 应用编译、Docker 镜像构建
  7. 🧪 镜像测试: 容器启动和健康检查验证
  8. 🚀 部署: 多环境自动化部署
  9. 🏥 健康检查: 部署后应用状态验证

环境映射

分支策略:
  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中修改以下配置:

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 .

🌐 部署环境

生产环境

预发布环境

开发环境

📈 监控和报告

SonarQube 代码质量

Jenkins 报告

  • 测试报告: JUnit 格式测试结果
  • 覆盖率报告: HTML 格式覆盖率详情
  • 构建产物: 二进制文件和 Docker 镜像

🔄 使用 Jenkins 模板

应用到新项目

  1. 复制模板文件:

    cp Jenkinsfile.go-template ./Jenkinsfile
    
  2. 修改项目配置:

    PROJECT_NAME = 'your-project-name'
    DEPLOY_SERVER = 'your.server.ip'
    // ... 其他配置
    
  3. 验证项目结构:

    # 确保是Go模块项目
    go mod init your-project-name
    go mod tidy
    
    # 添加健康检查端点 (推荐)
    # /health, /ping 或 /
    
  4. 推送并构建:

    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

🤝 贡献指南

  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 文件了解详情。

📞 联系方式

如果有任何问题或建议,请:

  1. 创建 Issue
  2. 发送 Pull Request
  3. 联系项目维护者

🏗️ 项目状态: 生产就绪
🔄 最后更新: 2024 年 12 月
📊 构建状态: Build Status
📈 代码质量: Quality Gate Status