# Jenkins模块开发提示词

> 本文档为大模型提供rmdc-jenkins-branch-dac模块的开发上下文。

---

## 模块概述

**rmdc-jenkins-branch-dac** 是RMDC平台的Jenkins分支级权限控制与构建管理模块。

### 核心能力

1. **分支级权限控制(DAC)**: Organization → Repository → Branch 三级权限管理
2. **Jenkins API封装**: 组织/仓库/分支/构建的CRUD操作
3. **构建状态追踪**: 实时追踪构建进度，超时检测
4. **DCU流程**: Docker镜像的下载、压缩、上传到MinIO

---

## 项目结构

```
rmdc-jenkins-branch-dac/
├── internal/
│   ├── config/             # 配置
│   ├── dao/                # 数据访问
│   ├── handler/            # HTTP处理器
│   ├── model/
│   │   ├── dto/            # 请求/响应
│   │   └── entity/         # 数据库实体
│   └── service/            # 业务逻辑
└── pkg/
    └── jenkins/
        └── client.go       # Jenkins HTTP Client
```

---

## API设计规范

> **重要**: 使用POST + RequestBody，避免PathVariables

### 请求示例

```go
// ✅ 正确方式
type GetBuildRequest struct {
    OrganizationFolder string `json:"organization_folder"`
    RepositoryName     string `json:"repository_name"`
    BranchName         string `json:"branch_name"`
    BuildNumber        int    `json:"build_number"`
}

// ❌ 避免使用
// GET /api/jenkins/organizations/{org}/repositories/{repo}/branches/{branch}/builds/{number}
```

### 接口清单

| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/jenkins/organizations/list` | POST | 获取组织列表 |
| `/api/jenkins/repositories/list` | POST | 获取仓库列表 |
| `/api/jenkins/branches/list` | POST | 获取分支列表 |
| `/api/jenkins/builds/list` | POST | 获取构建列表 |
| `/api/jenkins/builds/trigger` | POST | 触发构建 |
| `/api/jenkins/builds/detail` | POST | 获取构建详情 |
| `/api/dcu/start` | POST | 启动DCU任务 |
| `/api/dcu/status` | POST | 查询DCU状态 |

---

## 核心数据结构

```go
// Organization Jenkins组织
type Organization struct {
    ID          int64     `gorm:"primaryKey"`
    Name        string    `gorm:"uniqueIndex"`
    DisplayName string
    URL         string
    LastSyncAt  time.Time
}

// Repository Jenkins仓库
type Repository struct {
    ID             int64  `gorm:"primaryKey"`
    OrganizationID int64  `gorm:"index"`
    Name           string
    URL            string
}

// Branch Jenkins分支
type Branch struct {
    ID              int64  `gorm:"primaryKey"`
    RepositoryID    int64  `gorm:"index"`
    Name            string
    LastBuildNumber int
    LastBuildResult string
}

// Build Jenkins构建
type Build struct {
    ID                  int64  `gorm:"primaryKey"`
    BranchID            int64  `gorm:"index"`
    BuildNumber         int
    Result              string
    Timestamp           int64
    Duration            int64
    EstimatedDuration   int64
    IsBuilding          bool
    ArtifactDockerImage string
}
```

---

## Jenkins API调用

### URL路径规则

```
{JENKINS_URL}/job/{ORG}/api/json                          # 获取组织信息
{JENKINS_URL}/job/{ORG}/job/{REPO}/api/json               # 获取仓库信息
{JENKINS_URL}/job/{ORG}/job/{REPO}/job/{BRANCH}/api/json  # 获取分支信息
{JENKINS_URL}/job/{ORG}/job/{REPO}/job/{BRANCH}/build     # 触发构建
```

### 分支名编码

- `/` → `%2F` (例: `feature/login` → `feature%2Flogin`)

---

## 权限校验

权限通过中间件校验，Handler无需处理：

```go
func (h *BuildHandler) TriggerBuild(c *gin.Context) {
    // 此时已通过权限校验
    var req dto.TriggerBuildRequest
    if err := c.ShouldBindJSON(&req); err != nil {
        response.Error(c, err)
        return
    }
    
    resp, err := h.buildService.TriggerBuild(c.Request.Context(), &req)
    if err != nil {
        response.Error(c, err)
        return
    }
    response.Success(c, resp)
}
```

---

## 相关文档

| 文档 | 内容 |
|------|------|
| [1-jenkins-branch-dac-DDS.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/8-CMII-RMDC/2-Jenkins模块/1-jenkins-branch-dac-DDS.md) | 完整详细设计 |
| [5-RMDC项目权限设计方案.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/8-CMII-RMDC/2-Jenkins模块/5-RMDC项目权限设计方案.md) | 权限设计 |
| [9-rmdc-dcu模块设计方案.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/8-CMII-RMDC/2-Jenkins模块/9-rmdc-dcu模块设计方案.md) | DCU模块设计 |
