Files
ProjectAGiPrompt/8-CMII-RMDC/2-rmdc-jenkins-dac/2-jenkins-branch-dac-prompt.md
2026-01-21 16:15:49 +08:00

19 KiB
Raw Permalink Blame History

编程规范请遵守go-gin-gorm-style.mdvue3-typescript-stye.md 请严格遵循系统的详细设计说明书3-详细设计说明书.md

实现完成前端部分的管理页面-权限管理页面,能够为角色为user的用户设置可以访问,构建的分支 1 后端实现接口,查询角色为user的所有用户 2 后端需要定期维护一份,最小颗粒度到Organization Folder-Repository-Branch的权限结构,供前端直接调用 3 前端设计经典的权限分配页面,可以为角色分配权限 4 需要查询展示用户已具备的权限 4 需要将用户权限保存至数据库中

前端-用户页面 1 属于该用户权限的Organization Folder-Repository-Branch 2 具有查看 构建的权限 3 可以针对特定Branch触发构建任务

上述说明只是基础要求,请丰富功能,增强设计

jenkins的项目层级及调用说明如5-jenkins项目层级.md所以其中python的调用代码是正常运行符合要求的。 请完全重构项目中Jenkins部分的代码请完全重构项目中Jenkins部分的代码 在本项目中类似CMII-UAV-Cloud-Backend-GITLAB这类从Gitlab同步过来的Organization Folder是主要来源获取项目详情需要仿照python代码进行改造。

修改Jenkins存储的数据结构

编程规范请遵守go-gin-gorm-style.mdvue3-typescript-stye.md Jenkins官方的项目层级及调用说明见5-jenkins项目层级.md采用Organization Folder-Repository-Branch的权限结构请进行如下的项目修改 1 修改数据库jenkins_projects表为 jenkins_organization_folders 2 将目前jenkins_repositories表中的repository_name转换存储转换规则为 cmlc%2FCMII-UAV-Cloud-Web%2Fcloud-platform-armypeople 去除掉 %2F之前的内容转换为cloud-platform-armypeople 3 修改jenkins_branches表中的repository_name字段转换规则同上 4 修改jenkins_builds表中的repository_name字段转换规则同上 5 从JenkinsAPI新获取的数据均需要进行如上的转换修改 6 需要修改现有数据库中的数据

Jenkins权限

编程规范请遵守go-gin-gorm-style.mdvue3-typescript-stye.md 目前Jenkins的权限绑定不够精细需要进行重构修改

  1. 前提条件新增或者修改查询接口能够分层快速获取到特定项目的branch避免数据爆炸
    1. 查询所有的Organization Folder
    2. 查询特定Organization Folder下的所有Repository
    3. 查询特定Repository下的所有Branch
  2. 角色具备的最小权限层级 应该到branch级别
  3. 优化现有的角色权限存储数据库结构
    1. 能够快速查询出角色拥有的全部权限树结构
    2. 能够快速判定角色是否拥有特定Organization Folder-Repository-Branch的权限
  4. 前端获取全量的权限树应该是分层获取的,禁止一次性获取
    1. 接口见前文所述的查询接口
    2. 默认获取全部的Organization Folder
    3. 展开特定Organization Folder权限分支之后,获取特定Organization Folder下的所有Repository
    4. 展开特定Repository权限分支之后,获取特定Repository下的所有Branch
  5. 前端权限支持层级权限赋予
    1. 如可以直接赋予特定Organization Folder的全部权限,前端无需加载之下的Repository和Branch,直接传递给后端,后端检测到该Organization Folder权限时,自动加载之下的Repository和Branch,然后存储至数据库中
    2. 同理,如可以直接赋予特定Repository的全部权限,前端无需加载之下的Branch,直接传递给后端,后端检测到该Repository权限时,自动加载之下的Branch,然后存储至数据库中
  6. 权限模板
    1. 支持将另一个用户的权限一键复制到当前用户
    2. 后端提供权限复制接口
    3. 前端页面需要有相应的设计
  7. 前端页面-管理-用户权限页面
    1. 双向选择布局
      1. 左侧面板 - 所有可用权限
        1. 完整的Jenkins三层树结构Org→Repo→Branch
        2. 可多选分支进行批量添加
        3. 独立搜索框快速定位
      2. 中间操作区
        1. ➡️ 添加权限选中左侧分支设置View/Build权限级别后添加
        2. ⬅️ 移除权限:从右侧移除选中的权限
        3. 💾 保存:一键保存所有权限变更
      3. 右侧面板 - 用户已有权限
        1. 仅显示用户当前拥有的权限
        2. 显示每个分支的View/Build权限状态
        3. 支持多选批量移除

前端编程规范

编程规范请遵守go-gin-gorm-style.mdvue3-typescript-stye.md 针对@PermissionManager.vue 在此页面中Existing Permissions中,现有的逻辑需要进行修改

  1. 后端权限部分的路由,需要新增接口
    1. 前端-用户部分-分支项目页面
    2. 前端-管理部分-用户权限页面
    3. 需要根据用户拥有的权限,查询出属于自己的Organization Folder-Repository-Branch层级结构
  2. 此部分权限-分支部分的接口
    1. 需要认证
    2. 需要分层获取

用户页面

编程规范请遵守go-gin-gorm-style.mdvue3-typescript-stye.md 针对前端页面的用户页面部分,进行如下的修改

  1. 路径为 localhost:5173/user/builds
  2. 使用如下的API接口,后端的接口已经实现了一部分
    1. permissions.GET("/my-tree/organizations", permissionHandler.GetMyOrganizations)
    2. permissions.GET("/my-tree/organizations/:org/repositories", permissionHandler.GetMyRepositories)
    3. permissions.GET("/my-tree/organizations/:org/repositories/:repo/branches", permissionHandler.GetMyBranches)
    4. permissions.GET("/my-tree/organizations/:org/repositories/:repo/branches/:branch/builds", permissionHandler.GetMyBranchBuilds)
  3. 能够仿照Jenkins的客户端,按照层级展示,一层一层知道查看分支的所有构建,单次构建的详情
  4. 页面设计要美观

Jenkins构建及日志API

编程规范请遵守go-gin-gorm-style.mdvue3-typescript-stye.md Jenkins的构建及日志API的调用说明见6-jenkins-api-2.md,请参考该文档实现如下的内容

  1. 构建API
    1. 后端需要实现从Jenkins获取构建信息
    2. 需要实现触发构建(参数化构建)
    3. 在本项目中, 后端和前端支持的构建参数均有限
  2. 日志API
    1. 后端需要实现从Jenkins获取历史构建日志(全部日志)
    2. 后端需要实现从Jenkins获取实时构建日志(流式日志)
  3. 构建状态API
    1. 后端需要实现从Jenkins获取构建状态,触发构建后,需要实时获取构建状态,直到构建完成或者异常
  4. 前端 用户页面@UserDashboard.vue
    1. 实时构建状态
      1. 构建层级
        1. Organization Folder
        2. Repository
        3. Branch --此级别若展开, 可以实时查看最新Build的构建状态是构建中还是构建完成。需要标识构建成功还是构建失败
        4. Build --此级别若展开, 可以实时查看最新Build的构建状态 可以查看构建的完整日志
    2. Build 构建详情页面
      1. 可以实时查看最新Build的构建状态,是构建中,还是构建完成。
      2. 需要标识构建成功还是构建失败
      3. 如果是在构建中,需要能够可以查看实时的构建日志
      4. 如果是构建完成,需要能够查看构建的完整日志
    3. 日志显示模块
      1. 需要能够快速清晰的显示日志内容
      2. 通常情况一个build的完整日志内容大小为100KB需要能够快速的显示
      3. 日志内容需要能够快速的滚动
      4. 日志的字体大小支持调节
      5. 日志内容支持下载
      6. 日志显示支持彩色字体显示
      7. 日志显示支持搜索
      8. 日志显示支持复制
    4. Branch页面展开 可以触发构建
      1. 在特定的分支页面,点击进入构建触发页面
      2. 构建触发页面,可以查看当前分支的构建参数
      3. 构建触发页面,可以触发构建
      4. 触发构建之后自动调转到Build详情页面

Jenkins参数化构建

编程规范请遵守go-gin-gorm-style.mdvue3-typescript-stye.md 为了实现Jenkins的参数化构建,需要实现如下的功能

  1. 根据Organization Folder名称中包含的关键字区分加载的参数化构建参数
    1. Backend
    2. Web
    3. Algorithm
  2. Backend的参数化构建参数 "parameters": { "DEPLOY_MODE_STD": "deploy", "DEPLOY_NAME": "cmii-fly-center", "DEPLOY_VERSION": "5.7.0-snapshot", "DEPLOY_BUILD_TARGET": "x86", "DEPLOY_BUILD_LICENCE": "no", "SYS_K8S_NAMESPACE": "dev-flight", "TARGET_JAVA_BASE_IMAGE": "jdk11-base-simple:2.0", "TARGET_JAVA_OPTS": "-Xms256m-Xmx512m-Dlog4j2.formatMsgNoLookups=true" }
  3. Web的参数化构建参数 "parameters": { "DEPLOY_MODE_STD": "deploy", "DEPLOY_NAME": "cmii-uav-platform-lite", "DEPLOY_VERSION": "5.7.0-snapshot", "DEPLOY_BUILD_TARGET": "x86", "DEPLOY_BUILD_LICENCE": "no", "SYS_K8S_NAMESPACE": "dev-flight", "TARGET_JS_THEME": "default", "TARGET_JS_ENV": "dev" }
  4. 针对上述的构建参数说明如下
    1. DEPLOY_MODE_STD是固定的几个可选选项前端需要做成下拉选择框唯一选择
      1. 可选项如下默认为deploy用户只能选择一个
      2. [deploy]: = build image + reinstall
    2. DEPLOY_NAME是只读选项只做显示
      1. 数据库维护一张表每一个org repository 对应一个 deploy_name
      2. 实现后端的查询,参数化构建,自动获取该参数
      3. 需要实现这个表
    3. DEPLOY_VERSION是输入框用户输入
    4. DEPLOY_BUILD_TARGET是固定的几个可选选项前端需要做成下拉选择框唯一选择
      1. 可选项如下默认为x86用户只能选择一个
      2. [x86]: x86 架构
      3. [arm]: arm 架构
    5. DEPLOY_BUILD_LICENCE是固定的几个可选选项前端需要做成下拉选择框唯一选择
      1. 可选项如下默认为no用户只能选择一个
    6. SYS_K8S_NAMESPACE是固定的几个可选选项前端需要做成下拉选择框唯一选择
      1. 可选项如下默认为dev-flight用户只能选择一个
    7. TARGET_JAVA_BASE_IMAGE是固定的几个可选选项前端需要做成下拉选择框唯一选择
      1. 可选项如下默认为jdk11-base-simple:2.0,用户只能选择一个
    8. TARGET_JAVA_OPTS是输入框但是有默认值
    9. TARGET_JS_THEME是固定的几个可选选项前端需要做成下拉选择框唯一选择
      1. 可选项如下默认为default用户只能选择一个
    10. TARGET_JS_ENV是固定的几个可选选项前端需要做成下拉选择框唯一选择
      1. 可选项如下默认为dev用户只能选择一个

用户页面 分支搜索

分支同步 高可用

编程规范请遵守go-gin-gorm-style.md,针对 @jenkins_servers.go 目前syncRepository()方法 采用的是单线程的同步方式,导致一次分支同步的时间非常长,进行如下修改

  1. 修改为并发的形式请求,限制并发的请求速率
  2. 存储数据库,请进行采用单例或者减少数据库操作的次数
    1. 实际情况,有大量的用户使用会操作数据库,可能导致数据库locked
    2. 尽量减少数据库的插入次数

审计日志

编程规范请遵守go-gin-gorm-style.md,针对 @jenkins_servers.go 请针对系统的审计日志部分,进行如下的修改

  1. 精简原则
    1. 只记录操作类日志,修改,新增,删除
      1. 后期业务会进行拓展如Jenkins构建微服务更新
      2. 请求参数quryParm requestbody等均需要被记录
    2. 不记录登录,查看等普通操作日志
    3. 不记录user_agent
    4. 修改detail为path只记录访问路径
  2. 性能原则
    1. 考虑到sqlite3的并发性能
    2. 考虑到多用户实际使用导致的并发问题
    3. 审计日志的写入需要考虑不要影响到其他的正常业务
  3. 功能设计
    1. 管理页面能够筛选查询特定用户特定操作如Jenkins构建的详细操作信息
    2. 能够查看审计日志占用的数据库空间
    3. 能够删除如3个月、1个月之前的所有审计日志

页面美化

请参考vue3-typescript-stye.md的编程规范使用vutify的样式对 @PermissionManager.vue 页面进行美化

  1. 页面功能重构
    1. 支持筛选框,快速筛选用户
      1. 获取全部用户的列表
    2. 分支搜索定位
      1. @jenkins_service.go 执行全量项目同步时应该维护一张完整的Organization Folder-Repository-Branch树状结构
      2. 前端搜索框能够从树接口,快速查找到 Organization Folder-Repository-Branch的定位
      3. 通用模块,前端有多个地方需要用到此搜索
      4. @PermissionManager.vue 页面搜索定位到分支之后权限框应该能依次查询Org-Repo-Branch然后定位 显示到此处
      5. @UserDashboard.vue 页面应该页 新增搜索框
        1. 用户登录页面,会加载一次自身拥有权限的 树状结构
        2. 此页面搜索框,从部分树状结构能够快速定位查找
        3. 此页面能够根据查找到的定位 快速展示响应的层级
      6. @ProjectsManagement.vue 页面 也应该新增此搜索方法
        1. 此页面搜索框,从部分树状结构能够快速定位查找
        2. 此页面能够根据查找到的定位 快速展示响应的层级
      7. 考虑复用 /permissions/my-tree/* 接口
        1. 若可以复用, 请修改为requestBody的形式不要用路径变量
  2. 美化页面布局
    1. 美化Organization Folder-Repository-Branch项目的图标
    2. 美化此页面的布局使用vuetify的元素

请参考vue3-typescript-stye.md的编程规范使用vutify的样式对 @ProjectsManagement.vue 页面进行修改

  1. 可以直接使用 @UserDashboard 那一套项目查看体系,可以直接搬过来
  2. 项目结构优化,可以将通用的模块放置于一起
  3. 管理员和普通用户只是可以操作的org-repo-branch的数量不同而已

角色信息及注册页面

请严格遵守go-gin-gorm-style.mdvue3-typescript-stye.md,对用户部分进行如下的修改

  1. 用户表结构字段
    1. 用户名 -中文真实姓名
    2. 英文用户名 - 前端自动通过中文真实姓名转换而来
    3. 头像ID - 注册页面需要选择头像
    4. 角色 - 见下文 用户体系
    5. 性别 - 男/女
    6. 邮箱 - 和公司VPN注册邮箱相同
    7. 手机号 - 必填
    8. 密码 - 自己设定
    9. 状态 - active locked disabled
    10. 注册时间 - 自动生成,前端不展示
    11. 删除时间
    12. 注册人ID - 由谁注册
    13. 公司名称
    14. 开发角色-前端工程师/后端工程师/测试工程师/运维工程师
  2. 注册页面
    1. 注册页面注册之后用户状态默认是locked状态提示需要管理员审批才能使用
    2. 注册页面,需要选择头像
      1. 提供默认的头像svg
      2. 头像svg保存在前端底层
      3. 不同角色层级,能够使用的头像不同,高等级的头像更加炫酷
      4. 不要使用在线头像
      5. 选择头像之后前端需要将头像svg对应的ID保存到数据库
    3. 性别为 下拉选择框
    4. 邮箱需要检测邮箱格式
    5. 公司名称
    6. 开发角色
  3. 用户体系修改-修改为如下的四个等级
    1. SuperAdmin 超级管理员
      1. 程序初始化创建的唯一超级管理员
      2. 超级管理员头像带有太阳头像框
    2. Admin 管理员
      1. 管理员头像带有星星头像框
    3. Normal 普通用户
    4. Third 三方人员
      1. 权限最低
  4. 管理-用户管理页面 @UserManagement.vue页面
    1. 需要展示用户完整的信息
    2. SuperAdmin Admin可以修改角色的信息
    3. SuperAdmin Admin可以修改用户的状态
    4. SuperAdmin 可以修改用户的角色

消息中心

请严格遵守go-gin-gorm-style.mdvue3-typescript-stye.md,按照下文的要求设计详细中心模块

项目迁移

完整的系统设计方案见2-rmdc-DDS.md 项目系统架构图见3-系统设计图-sonnet4.5.md 当前项目的结构已经降级为RMDC-jenkins-branch-dac子模块

后端代码的编程规范说明见go-gin-gorm-style.md,请严格遵守

请按照项目设计,重构当前的代码结构,要求如下

  1. 后端项目模块采用的模块名称示例
    1. wdd.io/RMDC/jenkins-branch-dac
    2. wdd.io/RMDC/exchange-hub
    3. wdd.io/RMDC/watchdog-center
  2. 后端项目模块之间采用replace的方式互引用
  3. 我已经将之前实现的cmii-uav-watchdog模块复制过来,请按照项目设计说明,进行重构
    1. C:\Users\wddsh\Documents\IdeaProjects\RMDC\cmii-uav-watchdog 相对独立
    2. C:\Users\wddsh\Documents\IdeaProjects\RMDC\cmii-uav-watchdog-center 请融合进入RMDC
  4. 所有的代码我已经重构保存,请放心操作
  5. 请勿操作.gitignore覆盖的文件