# rmdc-jenkins-branch-dac 详细设计说明书（DDS）

**模块名称**: rmdc-jenkins-branch-dac  
**版本**: v1.0  
**编制日期**: 2026-01-06  

---

## 1. 模块概述

### 1.1 模块定位

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

1. **分支级权限控制(DAC)**：基于自主访问控制模型，实现Organization→Repository→Branch三级资源权限管理
2. **Jenkins集成**：封装Jenkins REST API，提供统一的构建触发、状态查询、日志获取等能力
3. **构建产物管理**：管理Docker镜像的下载、压缩、上传(DCU)流程，集成MinIO对象存储
4. **构建状态追踪**：实时追踪构建进度，提供状态同步和超时检测机制

### 1.2 核心用户角色

| 角色 | 权限说明 |
|------|----------|
| **SuperAdmin** | 全量访问，可管理所有Organization/Repository/Branch |
| **Admin** | 拥有分配的权限，可将自有权限分配给Normal/Third用户 |
| **Normal** | 拥有分配的权限，只能查看和触发被授权的分支构建 |
| **Third** | 第三方人员，权限最受限，仅能查看被授权内容 |

### 1.3 技术栈

- **后端**: Go + Gin + GORM
- **数据库**: PostgreSQL (主库) + SQLite (DCU模块独立库)
- **外部服务**: Jenkins REST API, MinIO对象存储

---

## 2. 系统架构

### 2.1 模块架构图

```mermaid
graph TB
    subgraph "rmdc-core 网关层"
        Router[Gin Router]
        AuthMW[AuthMiddleware]
        PermMW[PermissionMiddleware]
    end
    
    subgraph "rmdc-jenkins-branch-dac 模块"
        subgraph "Handler层"
            OrgH[OrgHandler]
            RepoH[RepoHandler]
            BranchH[BranchHandler]
            BuildH[BuildHandler]
            DCUH[DCUHandler]
        end
        
        subgraph "Service层"
            JenkinsS[JenkinsService]
            BuildS[BuildService]
            SyncS[SyncService]
            DCUS[DCUService]
            TrackerS[BuildTracker]
        end
        
        subgraph "DAO层"
            OrgDAO[OrganizationDAO]
            RepoDAO[RepositoryDAO]
            BranchDAO[BranchDAO]
            BuildDAO[BuildDAO]
        end
        
        JenkinsC[JenkinsClient]
        MinioC[MinioClient]
    end
    
    subgraph "外部服务"
        Jenkins[(Jenkins Server)]
        MinIO[(MinIO Storage)]
    end
    
    Router --> AuthMW --> PermMW
    PermMW --> OrgH & RepoH & BranchH & BuildH & DCUH
    
    BuildH --> BuildS --> JenkinsS --> JenkinsC --> Jenkins
    DCUH --> DCUS --> MinioC --> MinIO
    
    JenkinsS --> OrgDAO & RepoDAO & BranchDAO & BuildDAO
```

### 2.2 Jenkins层级结构

```
Organization Folder（组织）
  └── Repository/Project（仓库）
        └── Branch（分支）
              └── Build（构建）
```

**URL路径模式**：
```
/job/{ORG}                               # 组织
/job/{ORG}/job/{REPO}                    # 仓库
/job/{ORG}/job/{REPO}/job/{BRANCH}       # 分支
/job/{ORG}/job/{REPO}/job/{BRANCH}/{NUM} # 构建
```

---

## 3. 数据模型设计

### 3.1 核心实体

```mermaid
erDiagram
    jenkins_organizations ||--o{ jenkins_repositories : contains
    jenkins_repositories ||--o{ jenkins_branches : contains
    jenkins_branches ||--o{ jenkins_builds : contains
    
    jenkins_organizations {
        int64 id PK
        string name UK
        string display_name
        string url
        datetime last_sync_at
    }
    
    jenkins_repositories {
        int64 id PK
        int64 organization_id FK
        string name
        string url
    }
    
    jenkins_branches {
        int64 id PK
        int64 repository_id FK
        string name
        int last_build_number
        string last_build_result
    }
    
    jenkins_builds {
        int64 id PK
        int64 branch_id FK
        int build_number
        string result
        int64 timestamp
        int64 duration
        int64 estimated_duration
        bool is_building
        string artifact_docker_image
    }
```

---

## 4. API接口规范

> **设计原则**: 使用RESTful风格，优先使用POST + RequestBody，避免PathVariables和RequestParams

### 4.1 组织管理接口

| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/jenkins/organizations/list` | POST | 获取组织列表 |
| `/api/jenkins/organizations/detail` | POST | 获取组织详情 |
| `/api/jenkins/organizations/sync` | POST | 同步Jenkins组织数据 |

### 4.2 仓库管理接口

| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/jenkins/repositories/list` | POST | 获取仓库列表 |
| `/api/jenkins/repositories/detail` | POST | 获取仓库详情 |
| `/api/jenkins/repositories/sync` | POST | 同步仓库数据 |
| `/api/jenkins/repositories/scan` | POST | 触发仓库扫描 |

### 4.3 分支管理接口

| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/jenkins/branches/list` | POST | 获取分支列表 |
| `/api/jenkins/branches/detail` | POST | 获取分支详情 |
| `/api/jenkins/branches/sync` | POST | 同步分支数据 |

### 4.4 构建管理接口

| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/jenkins/builds/list` | POST | 获取构建列表 |
| `/api/jenkins/builds/detail` | POST | 获取构建详情 |
| `/api/jenkins/builds/trigger` | POST | 触发构建 |
| `/api/jenkins/builds/console` | POST | 获取构建日志 |
| `/api/jenkins/builds/sync` | POST | 同步构建数据 |

### 4.5 DCU接口

| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/dcu/start` | POST | 启动DCU任务 |
| `/api/dcu/status` | POST | 查询任务状态 |
| `/api/dcu/list` | POST | 查询任务列表 |

---

## 5. 分支权限(DAC)设计

### 5.1 权限模型

DAC采用**资源-用户-权限**三元组模型，支持三级权限继承：

| 授权层级 | 继承规则 |
|----------|----------|
| Organization级 | 自动继承到该组织下所有Repository和Branch |
| Repository级 | 自动继承到该仓库下所有Branch |
| Branch级 | 最细粒度，不继承 |

### 5.2 权限类型

| 权限 | 说明 |
|------|------|
| `can_view` | 查看权限 |
| `can_build` | 构建权限 |

---

## 6. 构建状态追踪

### 6.1 BuildTracker设计

BuildTracker负责追踪正在进行中的构建，提供超时检测和状态同步：

```mermaid
sequenceDiagram
    participant User as 用户
    participant Handler as BuildHandler
    participant Service as BuildService
    participant Tracker as BuildTracker
    participant Jenkins as Jenkins API
    
    User->>Handler: POST /builds/trigger
    Handler->>Service: TriggerBuild()
    Service->>Jenkins: 触发构建
    Service->>Tracker: TrackBuild(buildId, timeout)
    Service-->>User: 返回构建号
    
    loop 后台超时检测(每10秒)
        Tracker->>Tracker: checkTimeouts()
        alt 超时
            Tracker->>Jenkins: 查询最新状态
            Tracker->>Tracker: 更新数据库
        end
    end
```

---

## 7. DCU(Download-Compress-Upload)流程

### 7.1 状态机

```mermaid
stateDiagram-v2
    [*] --> idle: 创建任务
    idle --> downloading: StartTask()
    downloading --> compressing: Pull成功
    compressing --> uploading: 压缩成功
    uploading --> completed: 上传成功
    
    downloading --> failed: Pull失败
    compressing --> failed: 压缩失败
    uploading --> failed: 上传失败
```

### 7.2 流程说明

1. **Download**: 从Docker Registry拉取镜像
2. **Compress**: 使用gzip压缩镜像tar包
3. **Upload**: 上传到MinIO对象存储

---

## 8. 错误码定义

| 错误码 | 说明 |
|--------|------|
| `JENKINS-001` | Jenkins服务不可用 |
| `JENKINS-002` | Jenkins认证失败 |
| `JENKINS-003` | Jenkins资源不存在 |
| `JENKINS-004` | 构建触发失败 |
| `JENKINS-005` | 构建超时 |
| `DCU-001` | Docker Pull失败 |
| `DCU-002` | 压缩失败 |
| `DCU-003` | MinIO上传失败 |
| `PERM-001` | 无权限访问该资源 |
| `PERM-002` | 无权限执行该操作 |

---

## 9. 相关文档

| 文档 | 内容 |
|------|------|
| [5-RMDC项目权限设计方案.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/8-CMII-RMDC/2-Jenkins模块/5-RMDC项目权限设计方案.md) | 权限设计 |
| [8-jenkins项目层级.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/8-CMII-RMDC/2-Jenkins模块/8-jenkins项目层级.md) | Jenkins层级结构 |
| [9-JenkinsBuild-流程图.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/8-CMII-RMDC/2-Jenkins模块/9-JenkinsBuild-流程图.md) | 构建流程图 |
| [9-rmdc-dcu模块设计方案.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/8-CMII-RMDC/2-Jenkins模块/9-rmdc-dcu模块设计方案.md) | DCU模块设计 |
