Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
winfredLIN opened this issue Sep 3, 2024 · 0 comments
Closed

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

winfredLIN opened this issue Sep 3, 2024 · 0 comments
Assignees
Labels
not_compatible not compatible old version publish-pre2
Milestone

Comments

@winfredLIN
Copy link
Collaborator

winfredLIN commented Sep 3, 2024

需求描述(Describe)

#2574
目前CICD集成还有一些需要优化的点:

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

实现方案

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

  • 定义scannerd/command,将scannerd的命令集中在此处定义

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

  • 解除 scannerd/cmd 到 auditplan/meta 的直接依赖,为二者添加依赖scannerd/command。避免了循环依赖和传递循环依赖
  • auditplan和pipeline生成command方法都使用了scannerd/command中的command生成方法,能够在scannerd的定义发生变化时,保持一致性。
  • 优化了生成scanner命令的用户使用体验,对于必要参数,会使用引导词引导用户填写

流水线相关业务逻辑优化

  • 当删除数据源时,会检查流水线节点是否有关联该数据源,若关联则无法删除
  • 优化了流水线节点的表,用instance id 替代instance name
  • 在删除流水线的时候,使用project id进行筛选

变更影响面

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;

受影响的模块或功能

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

版本兼容性

测试建议

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
not_compatible not compatible old version publish-pre2
Projects
None yet
Development

No branches or pull requests

2 participants