actiontech / sqle

一个支持多种不同类型数据库,覆盖事前控制、事后监督、标准发布场景,帮助您建立质量规范的SQL全生命周期质量管理平台
Mozilla Public License 2.0
1.42k stars 183 forks source link

CI/CD集成:功能优化 #2579

Closed winfredLIN closed 2 days ago

winfredLIN commented 1 week ago

需求描述(Describe)

https://github.com/actiontech/sqle/pull/2574 目前CICD集成还有一些需要优化的点:

  1. command生成可以和智能扫描中的command生成功能放在一起管理
  2. 目前生成的jwt token有期限,当token过期,会导致scanner需要重新部署才能使用,需要优化用户体验
  3. 数据库表的instance_name存在耦合,需要改为instance_id
  4. delete接口未使用project uid
  5. pupelines表的uuid需要添加唯一约束

实现方案

command生成可以和智能扫描中的command生成功能放在一起管理

在package cmd中,引用scannerd/command,对cmd进行初始化,对变量和标志名称关联 若在cmd中初始化时调用了一个未在scannerd/command定义的标志,能够在初始化阶段引发panic,能够在dev阶段发现问题 定义了生成command的方法,会检查:必须的flag是否存在,值是否为空。传入的标志位是否存在,类型是否正确。

变更影响面

command生成可以和智能扫描中的command生成功能放在一起管理

涉及模块:智能扫描、流水线 版本兼容性:未改变scannerd的命令,兼容 涉及模块:删除数据源 版本兼容性:新增逻辑,兼容旧版本数据源 涉及模块:流水线表 版本兼容性:不兼容旧版本数据,需要升级方案

升级方案

由于表pipeline_nodes的变更,需要做以下更新操作

# 这条语句的作用是在 sqle.pipeline_nodes 表中添加一个名为 instance_id 的新列
ALTER TABLE sqle.pipeline_nodes ADD COLUMN instance_id BIGINT(20) NULL DEFAULT NULL;
# 这条语句的作用是更新 pipeline_nodes 表中的 instance_id 列。它首先创建了一个子查询,从 pipeline_nodes 表中选择所有 instance_name 不为空的记录。然后,它将这些记录与 dms.db_services 表进行连接,连接条件是 dms.db_services 表中的 name 字段等于子查询中的 instance_name。最后,它将 pipeline_nodes 表中的 instance_id 字段更新为 dms.db_services 表中的 uid 值。
UPDATE pipeline_nodes pn
JOIN (
    SELECT id, instance_name
    FROM pipeline_nodes
    WHERE instance_name != ""
) AS subquery
ON pn.id = subquery.id
JOIN dms.db_services dbs
ON dbs.name = subquery.instance_name
SET pn.instance_id = dbs.uid;
# 这条语句的作用是在 sqle.pipeline_nodes 表中删除一个名为 instance_name 的新列
ALTER TABLE sqle.pipeline_nodes
DROP COLUMN instance_name;

受影响的模块或功能

外部引用的潜在问题或风险

版本兼容性

测试建议