19 KiB
编程规范请遵守go-gin-gorm-style.md和vue3-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.md和vue3-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.md和vue3-typescript-stye.md 目前Jenkins的权限绑定不够精细,需要进行重构修改
- 前提条件,新增或者修改查询接口,能够分层快速获取到特定项目的branch,避免数据爆炸
- 查询所有的Organization Folder
- 查询特定Organization Folder下的所有Repository
- 查询特定Repository下的所有Branch
- 角色具备的最小权限层级 应该到branch级别
- 优化现有的角色权限存储数据库结构
- 能够快速查询出角色拥有的全部权限树结构
- 能够快速判定角色是否拥有特定Organization Folder-Repository-Branch的权限
- 前端获取全量的权限树应该是分层获取的,禁止一次性获取
- 接口见前文所述的查询接口
- 默认获取全部的Organization Folder
- 展开特定Organization Folder权限分支之后,获取特定Organization Folder下的所有Repository
- 展开特定Repository权限分支之后,获取特定Repository下的所有Branch
- 前端权限支持层级权限赋予
- 如可以直接赋予特定Organization Folder的全部权限,前端无需加载之下的Repository和Branch,直接传递给后端,后端检测到该Organization Folder权限时,自动加载之下的Repository和Branch,然后存储至数据库中
- 同理,如可以直接赋予特定Repository的全部权限,前端无需加载之下的Branch,直接传递给后端,后端检测到该Repository权限时,自动加载之下的Branch,然后存储至数据库中
- 权限模板
- 支持将另一个用户的权限一键复制到当前用户
- 后端提供权限复制接口
- 前端页面需要有相应的设计
- 前端页面-管理-用户权限页面
- 双向选择布局
- 左侧面板 - 所有可用权限
- 完整的Jenkins三层树结构(Org→Repo→Branch)
- 可多选分支进行批量添加
- 独立搜索框快速定位
- 中间操作区
- ➡️ 添加权限:选中左侧分支,设置View/Build权限级别后添加
- ⬅️ 移除权限:从右侧移除选中的权限
- 💾 保存:一键保存所有权限变更
- 右侧面板 - 用户已有权限
- 仅显示用户当前拥有的权限
- 显示每个分支的View/Build权限状态
- 支持多选批量移除
- 左侧面板 - 所有可用权限
- 双向选择布局
前端编程规范
编程规范请遵守go-gin-gorm-style.md和vue3-typescript-stye.md 针对@PermissionManager.vue 在此页面中Existing Permissions中,现有的逻辑需要进行修改
- 后端权限部分的路由,需要新增接口
- 前端-用户部分-分支项目页面
- 前端-管理部分-用户权限页面
- 需要根据用户拥有的权限,查询出属于自己的Organization Folder-Repository-Branch层级结构
- 此部分权限-分支部分的接口
- 需要认证
- 需要分层获取
用户页面
编程规范请遵守go-gin-gorm-style.md和vue3-typescript-stye.md 针对前端页面的用户页面部分,进行如下的修改
- 路径为 localhost:5173/user/builds
- 使用如下的API接口,后端的接口已经实现了一部分
- permissions.GET("/my-tree/organizations", permissionHandler.GetMyOrganizations)
- permissions.GET("/my-tree/organizations/:org/repositories", permissionHandler.GetMyRepositories)
- permissions.GET("/my-tree/organizations/:org/repositories/:repo/branches", permissionHandler.GetMyBranches)
- permissions.GET("/my-tree/organizations/:org/repositories/:repo/branches/:branch/builds", permissionHandler.GetMyBranchBuilds)
- 能够仿照Jenkins的客户端,按照层级展示,一层一层知道查看分支的所有构建,单次构建的详情
- 页面设计要美观
Jenkins构建及日志API
编程规范请遵守go-gin-gorm-style.md和vue3-typescript-stye.md Jenkins的构建及日志API的调用说明见6-jenkins-api-2.md,请参考该文档实现如下的内容
- 构建API
- 后端需要实现从Jenkins获取构建信息
- 需要实现触发构建(参数化构建)
- 在本项目中, 后端和前端支持的构建参数均有限
- 日志API
- 后端需要实现从Jenkins获取历史构建日志(全部日志)
- 后端需要实现从Jenkins获取实时构建日志(流式日志)
- 构建状态API
- 后端需要实现从Jenkins获取构建状态,触发构建后,需要实时获取构建状态,直到构建完成或者异常
- 前端 用户页面@UserDashboard.vue
- 实时构建状态
- 构建层级
- Organization Folder
- Repository
- Branch --此级别若展开, 可以实时查看最新Build的构建状态,是构建中,还是构建完成。需要标识构建成功还是构建失败
- Build --此级别若展开, 可以实时查看最新Build的构建状态 可以查看构建的完整日志
- 构建层级
- Build 构建详情页面
- 可以实时查看最新Build的构建状态,是构建中,还是构建完成。
- 需要标识构建成功还是构建失败
- 如果是在构建中,需要能够可以查看实时的构建日志
- 如果是构建完成,需要能够查看构建的完整日志
- 日志显示模块
- 需要能够快速清晰的显示日志内容
- 通常情况一个build的完整日志内容大小为100KB,需要能够快速的显示
- 日志内容需要能够快速的滚动
- 日志的字体大小支持调节
- 日志内容支持下载
- 日志显示支持彩色字体显示
- 日志显示支持搜索
- 日志显示支持复制
- Branch页面展开 可以触发构建
- 在特定的分支页面,点击进入构建触发页面
- 构建触发页面,可以查看当前分支的构建参数
- 构建触发页面,可以触发构建
- 触发构建之后,自动调转到Build详情页面
- 实时构建状态
Jenkins参数化构建
编程规范请遵守go-gin-gorm-style.md和vue3-typescript-stye.md 为了实现Jenkins的参数化构建,需要实现如下的功能
- 根据Organization Folder名称中包含的关键字,区分加载的参数化构建参数
- Backend
- Web
- Algorithm
- 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" }
- 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" }
- 针对上述的构建参数说明如下
- DEPLOY_MODE_STD是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
- 可选项如下,默认为deploy,用户只能选择一个
- [deploy]: = build image + reinstall
- DEPLOY_NAME是只读选项,只做显示
- 数据库维护一张表,每一个org repository 对应一个 deploy_name
- 实现后端的查询,参数化构建,自动获取该参数
- 需要实现这个表
- DEPLOY_VERSION是输入框,用户输入
- DEPLOY_BUILD_TARGET是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
- 可选项如下,默认为x86,用户只能选择一个
- [x86]: x86 架构
- [arm]: arm 架构
- DEPLOY_BUILD_LICENCE是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
- 可选项如下,默认为no,用户只能选择一个
- SYS_K8S_NAMESPACE是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
- 可选项如下,默认为dev-flight,用户只能选择一个
- TARGET_JAVA_BASE_IMAGE是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
- 可选项如下,默认为jdk11-base-simple:2.0,用户只能选择一个
- TARGET_JAVA_OPTS是输入框,但是有默认值
- TARGET_JS_THEME是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
- 可选项如下,默认为default,用户只能选择一个
- TARGET_JS_ENV是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
- 可选项如下,默认为dev,用户只能选择一个
- DEPLOY_MODE_STD是固定的几个可选选项,前端需要做成下拉选择框,唯一选择
用户页面 分支搜索
分支同步 高可用
编程规范请遵守go-gin-gorm-style.md,针对 @jenkins_servers.go 目前syncRepository()方法 采用的是单线程的同步方式,导致一次分支同步的时间非常长,进行如下修改
- 修改为并发的形式请求,限制并发的请求速率
- 存储数据库,请进行采用单例或者减少数据库操作的次数
- 实际情况,有大量的用户使用会操作数据库,可能导致数据库locked
- 尽量减少数据库的插入次数
审计日志
编程规范请遵守go-gin-gorm-style.md,针对 @jenkins_servers.go 请针对系统的审计日志部分,进行如下的修改
- 精简原则
- 只记录操作类日志,修改,新增,删除
- 后期业务会进行拓展,如Jenkins构建,微服务更新,
- 请求参数,quryParm requestbody等均需要被记录
- 不记录登录,查看等普通操作日志
- 不记录user_agent
- 修改detail为path,只记录访问路径
- 只记录操作类日志,修改,新增,删除
- 性能原则
- 考虑到sqlite3的并发性能
- 考虑到多用户实际使用导致的并发问题
- 审计日志的写入需要考虑不要影响到其他的正常业务
- 功能设计
- 管理页面,能够筛选查询特定用户,特定操作(如Jenkins构建)的详细操作信息
- 能够查看审计日志占用的数据库空间
- 能够删除如3个月、1个月之前的所有审计日志
页面美化
请参考vue3-typescript-stye.md的编程规范,使用vutify的样式对 @PermissionManager.vue 页面进行美化
- 页面功能重构
- 支持筛选框,快速筛选用户
- 获取全部用户的列表
- 分支搜索定位
- @jenkins_service.go 执行全量项目同步时,应该维护一张完整的Organization Folder-Repository-Branch树状结构
- 前端搜索框能够从树接口,快速查找到 Organization Folder-Repository-Branch的定位
- 通用模块,前端有多个地方需要用到此搜索
- @PermissionManager.vue 页面搜索定位到分支之后,权限框应该能依次查询Org-Repo-Branch,然后定位 显示到此处
- @UserDashboard.vue 页面应该页 新增搜索框
- 用户登录页面,会加载一次自身拥有权限的 树状结构
- 此页面搜索框,从部分树状结构能够快速定位查找
- 此页面能够根据查找到的定位 快速展示响应的层级
- @ProjectsManagement.vue 页面 也应该新增此搜索方法
- 此页面搜索框,从部分树状结构能够快速定位查找
- 此页面能够根据查找到的定位 快速展示响应的层级
- 考虑复用 /permissions/my-tree/* 接口
- 若可以复用, 请修改为requestBody的形式,不要用路径变量
- 支持筛选框,快速筛选用户
- 美化页面布局
- 美化Organization Folder-Repository-Branch项目的图标
- 美化此页面的布局,使用vuetify的元素
请参考vue3-typescript-stye.md的编程规范,使用vutify的样式对 @ProjectsManagement.vue 页面进行修改
- 可以直接使用 @UserDashboard 那一套项目查看体系,可以直接搬过来
- 项目结构优化,可以将通用的模块放置于一起
- 管理员和普通用户,只是可以操作的org-repo-branch的数量不同而已
角色信息及注册页面
请严格遵守go-gin-gorm-style.md和vue3-typescript-stye.md,对用户部分进行如下的修改
- 用户表结构字段
- 用户名 -中文真实姓名
- 英文用户名 - 前端自动通过中文真实姓名转换而来
- 头像ID - 注册页面需要选择头像
- 角色 - 见下文 用户体系
- 性别 - 男/女
- 邮箱 - 和公司VPN注册邮箱相同
- 手机号 - 必填
- 密码 - 自己设定
- 状态 - active locked disabled
- 注册时间 - 自动生成,前端不展示
- 删除时间
- 注册人ID - 由谁注册
- 公司名称
- 开发角色-前端工程师/后端工程师/测试工程师/运维工程师
- 注册页面
- 注册页面注册之后,用户状态默认是locked状态,提示需要管理员审批才能使用
- 注册页面,需要选择头像
- 提供默认的头像svg
- 头像svg保存在前端底层
- 不同角色层级,能够使用的头像不同,高等级的头像更加炫酷
- 不要使用在线头像
- 选择头像之后,前端需要将头像svg对应的ID保存到数据库
- 性别为 下拉选择框
- 邮箱需要检测邮箱格式
- 公司名称
- 开发角色
- 用户体系修改-修改为如下的四个等级
- SuperAdmin 超级管理员
- 程序初始化创建的唯一超级管理员
- 超级管理员头像带有太阳头像框
- Admin 管理员
- 管理员头像带有星星头像框
- Normal 普通用户
- Third 三方人员
- 权限最低
- SuperAdmin 超级管理员
- 管理-用户管理页面 @UserManagement.vue页面
- 需要展示用户完整的信息
- SuperAdmin Admin可以修改角色的信息
- SuperAdmin Admin可以修改用户的状态
- SuperAdmin 可以修改用户的角色
消息中心
请严格遵守go-gin-gorm-style.md和vue3-typescript-stye.md,按照下文的要求设计详细中心模块
项目迁移
完整的系统设计方案见2-rmdc-DDS.md 项目系统架构图见3-系统设计图-sonnet4.5.md 当前项目的结构已经降级为RMDC-jenkins-branch-dac子模块
后端代码的编程规范说明见go-gin-gorm-style.md,请严格遵守
请按照项目设计,重构当前的代码结构,要求如下
- 后端项目模块采用的模块名称示例
- wdd.io/RMDC/jenkins-branch-dac
- wdd.io/RMDC/exchange-hub
- wdd.io/RMDC/watchdog-center
- 后端项目模块之间采用replace的方式互引用
- 我已经将之前实现的cmii-uav-watchdog模块复制过来,请按照项目设计说明,进行重构
- C:\Users\wddsh\Documents\IdeaProjects\RMDC\cmii-uav-watchdog 相对独立
- C:\Users\wddsh\Documents\IdeaProjects\RMDC\cmii-uav-watchdog-center 请融合进入RMDC
- 所有的代码我已经重构保存,请放心操作
- 请勿操作.gitignore覆盖的文件