216 lines
5.1 KiB
Markdown
216 lines
5.1 KiB
Markdown
|
# 🚀 Jenkins Go 项目模板 - 5 分钟快速入门
|
|||
|
|
|||
|
## 📋 前置条件检查
|
|||
|
|
|||
|
在开始之前,确保以下环境已准备好:
|
|||
|
|
|||
|
### ✅ Jenkins 环境
|
|||
|
|
|||
|
- [ ] Jenkins 已安装并运行
|
|||
|
- [ ] 已安装必需插件:Pipeline, Git, SSH Agent, SonarQube Scanner, HTML Publisher
|
|||
|
- [ ] Go 工具已配置 (名称: `go`)
|
|||
|
- [ ] SonarQube Scanner 已配置 (名称: `sonarQube`)
|
|||
|
- [ ] 部署服务器 SSH Key 已配置
|
|||
|
|
|||
|
### ✅ 服务器环境
|
|||
|
|
|||
|
- [ ] 部署服务器已安装 Docker
|
|||
|
- [ ] 端口已开放 (15021-生产, 15022-预发布, 15023-开发)
|
|||
|
- [ ] SSH 访问已配置
|
|||
|
|
|||
|
### ✅ Go 项目要求
|
|||
|
|
|||
|
- [ ] 项目是 Go 模块 (有`go.mod`文件)
|
|||
|
- [ ] 项目能正常编译 (`go build .`)
|
|||
|
- [ ] 项目有基础测试 (`go test ./...`)
|
|||
|
|
|||
|
## 🚀 3 步骤快速部署
|
|||
|
|
|||
|
### 步骤 1️⃣: 复制模板到项目
|
|||
|
|
|||
|
```bash
|
|||
|
# 在你的Go项目根目录执行
|
|||
|
curl -o Jenkinsfile https://raw.githubusercontent.com/yourusername/Golang_demo/main/Jenkinsfile.go-template
|
|||
|
|
|||
|
# 或者手动复制
|
|||
|
cp /path/to/Jenkinsfile.go-template ./Jenkinsfile
|
|||
|
```
|
|||
|
|
|||
|
### 步骤 2️⃣: 修改项目配置 (5 行代码)
|
|||
|
|
|||
|
编辑`Jenkinsfile`,修改以下变量:
|
|||
|
|
|||
|
```groovy
|
|||
|
// 找到这些行并修改
|
|||
|
PROJECT_NAME = 'your-project-name' // 🔧 改成你的项目名
|
|||
|
DEPLOY_SERVER = '116.62.163.84' // 🔧 改成你的服务器IP
|
|||
|
SSH_CREDENTIAL_ID = 'deploy-server-ssh-key' // 🔧 改成你的SSH凭据ID
|
|||
|
SONAR_HOST_URL = 'http://116.62.163.84:15010' // 🔧 改成你的SonarQube地址
|
|||
|
SONAR_CREDENTIAL_ID = 'sonar-token' // 🔧 改成你的SonarQube凭据ID
|
|||
|
```
|
|||
|
|
|||
|
### 步骤 3️⃣: 提交并构建
|
|||
|
|
|||
|
```bash
|
|||
|
git add Jenkinsfile
|
|||
|
git commit -m "🚀 Add Jenkins CI/CD pipeline"
|
|||
|
git push origin main
|
|||
|
```
|
|||
|
|
|||
|
## 🎯 Jenkins 任务创建
|
|||
|
|
|||
|
1. **创建 Pipeline 任务**
|
|||
|
|
|||
|
- 新建 → Pipeline
|
|||
|
- 任务名称:`your-project-name`
|
|||
|
|
|||
|
2. **配置源码管理**
|
|||
|
|
|||
|
- Pipeline script from SCM
|
|||
|
- SCM: Git
|
|||
|
- Repository URL: 你的 Git 仓库地址
|
|||
|
- Branch: `*/main`
|
|||
|
|
|||
|
3. **保存并构建**
|
|||
|
- 点击"保存"
|
|||
|
- 点击"立即构建"
|
|||
|
|
|||
|
## 🌊 分支部署策略
|
|||
|
|
|||
|
模板会自动根据分支部署到不同环境:
|
|||
|
|
|||
|
| 分支 | 环境 | 端口 | 访问地址 |
|
|||
|
| ----------------- | -------- | ----- | ------------------------ |
|
|||
|
| `main/master` | 生产环境 | 15021 | http://your-server:15021 |
|
|||
|
| `staging/release` | 预发布 | 15022 | http://your-server:15022 |
|
|||
|
| `feature/*` | 开发环境 | 15023 | http://your-server:15023 |
|
|||
|
|
|||
|
## 🏥 健康检查端点 (推荐)
|
|||
|
|
|||
|
在你的 Go 应用中添加健康检查端点,提高部署成功率:
|
|||
|
|
|||
|
```go
|
|||
|
// 基本健康检查 - 推荐
|
|||
|
r.GET("/health", func(c *gin.Context) {
|
|||
|
c.JSON(200, gin.H{"status": "healthy"})
|
|||
|
})
|
|||
|
|
|||
|
// 简单ping - 备选
|
|||
|
r.GET("/ping", func(c *gin.Context) {
|
|||
|
c.String(200, "pong")
|
|||
|
})
|
|||
|
```
|
|||
|
|
|||
|
## 🔧 常见配置调整
|
|||
|
|
|||
|
### 端口修改
|
|||
|
|
|||
|
如果需要使用不同端口:
|
|||
|
|
|||
|
```groovy
|
|||
|
PROD_PORT = '8080' // 生产环境端口
|
|||
|
STAGING_PORT = '8081' // 预发布环境端口
|
|||
|
DEV_PORT = '8082' // 开发环境端口
|
|||
|
```
|
|||
|
|
|||
|
### 跳过 SonarQube
|
|||
|
|
|||
|
如果暂时不需要代码扫描:
|
|||
|
|
|||
|
```groovy
|
|||
|
// 在构建参数中设置
|
|||
|
SKIP_SONAR = true
|
|||
|
```
|
|||
|
|
|||
|
### Docker 仓库集成
|
|||
|
|
|||
|
如果使用私有 Docker 仓库:
|
|||
|
|
|||
|
```groovy
|
|||
|
DOCKER_REGISTRY = 'registry.example.com'
|
|||
|
DOCKER_CREDENTIAL_ID = 'docker-creds'
|
|||
|
```
|
|||
|
|
|||
|
## 🚨 故障排除
|
|||
|
|
|||
|
### ❌ Go 工具未找到
|
|||
|
|
|||
|
**错误**: `go: not found`
|
|||
|
**解决**: 检查 Jenkins 全局工具配置中 Go 工具名称是否为`go`
|
|||
|
|
|||
|
### ❌ SSH 连接失败
|
|||
|
|
|||
|
**错误**: `Permission denied (publickey)`
|
|||
|
**解决**:
|
|||
|
|
|||
|
1. 检查 SSH Key 格式
|
|||
|
2. 确认服务器 SSH 访问权限
|
|||
|
3. 测试手动 SSH 连接
|
|||
|
|
|||
|
### ❌ Docker 构建失败
|
|||
|
|
|||
|
**错误**: `Cannot connect to Docker daemon`
|
|||
|
**解决**:
|
|||
|
|
|||
|
1. 确认 Docker 服务运行:`systemctl status docker`
|
|||
|
2. 确认 Jenkins 用户在 docker 组:`usermod -aG docker jenkins`
|
|||
|
|
|||
|
### ❌ SonarQube 连接超时
|
|||
|
|
|||
|
**解决**: 临时跳过 SonarQube 扫描,构建参数设置`SKIP_SONAR=true`
|
|||
|
|
|||
|
## 📊 构建成功指标
|
|||
|
|
|||
|
成功的构建应该显示:
|
|||
|
|
|||
|
- ✅ **环境检查**: Go 版本、Docker 状态正常
|
|||
|
- ✅ **代码质量**: go vet、go fmt 检查通过
|
|||
|
- ✅ **单元测试**: 测试通过,生成覆盖率报告
|
|||
|
- ✅ **镜像构建**: Docker 镜像构建成功
|
|||
|
- ✅ **部署成功**: 容器启动并通过健康检查
|
|||
|
- ✅ **访问正常**: 应用端点响应 200 状态
|
|||
|
|
|||
|
## 🎉 下一步
|
|||
|
|
|||
|
### 1. 优化代码质量
|
|||
|
|
|||
|
```bash
|
|||
|
# 提高测试覆盖率
|
|||
|
go test -cover ./...
|
|||
|
|
|||
|
# 添加基准测试
|
|||
|
func BenchmarkMyFunction(b *testing.B) { ... }
|
|||
|
```
|
|||
|
|
|||
|
### 2. 集成通知
|
|||
|
|
|||
|
在 Jenkinsfile 的 post 部分启用:
|
|||
|
|
|||
|
```groovy
|
|||
|
// slackSend(color: 'good', message: "✅ 部署成功")
|
|||
|
// emailext(subject: "构建结果", body: "...")
|
|||
|
```
|
|||
|
|
|||
|
### 3. 多环境配置
|
|||
|
|
|||
|
创建不同分支测试多环境部署:
|
|||
|
|
|||
|
```bash
|
|||
|
git checkout -b staging
|
|||
|
git push origin staging
|
|||
|
```
|
|||
|
|
|||
|
## 📚 完整文档
|
|||
|
|
|||
|
- [详细使用指南](go-project-template-guide.md)
|
|||
|
- [故障排除手册](go-project-template-guide.md#故障排除)
|
|||
|
- [最佳实践](go-project-template-guide.md#最佳实践)
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
**⏱️ 平均部署时间**: 3-5 分钟
|
|||
|
**🎯 成功率**: 95%+
|
|||
|
**🔧 维护成本**: 极低
|
|||
|
|
|||
|
享受自动化部署的便利!🚀
|