Skip to content

Issue #256 的两项核心能力 - #745

Draft
ljluestc wants to merge 1 commit into
openspug:3.0from
ljluestc:private/issue-256-machine-group-jenkins
Draft

Issue #256 的两项核心能力#745
ljluestc wants to merge 1 commit into
openspug:3.0from
ljluestc:private/issue-256-machine-group-jenkins

Conversation

@ljluestc

Copy link
Copy Markdown

概要

本 PR 实现了 Issue #256 的两项核心能力:

  1. 发布配置与执行流程支持“按机器组选择目标主机”。
  2. 自定义发布(Ext2)支持 Jenkins 发布动作。

背景与问题

当前在主机数量较多时,发布配置和批量执行都需要逐台选择主机,操作成本高且容易遗漏。
同时,部分团队发布链路依赖 Jenkins,需要在发布流程中直接触发 Jenkins Job。

变更内容

一、机器组选择能力

  • 新增机器组解析能力:

    • spug_api/apps/host/utils.py
    • 增加 parse_group_host_ids(group_ids),支持递归解析分组与子分组下的主机。
  • 发布配置接口支持 group_ids

    • spug_api/apps/app/views.py
    • /api/app/deploy/ 支持同时传入 host_idsgroup_ids,后端合并去重后落库为最终 host_ids
  • 发布申请接口支持 group_ids

    • spug_api/apps/deploy/views.py
    • 覆盖普通发布(ext1)、自定义发布(ext2)、回滚发布(ext1/rollback)。
    • 增加目标过滤逻辑,确保申请单主机范围不超出发布配置允许范围。
  • 批量执行接口支持 group_ids

    • spug_api/apps/exec/views.py
    • /api/exec/do/ 支持机器组入参,扩展主机后继续复用现有权限校验逻辑。
  • 前端增加机器组选择入口与参数透传:

    • 发布配置页面:
      • spug_web/src/pages/deploy/app/Ext1Setup1.js
      • spug_web/src/pages/deploy/app/Ext2Setup1.js
      • spug_web/src/pages/deploy/app/AddSelect.js
    • 发布申请页面:
      • spug_web/src/pages/deploy/request/Ext1Form.js
      • spug_web/src/pages/deploy/request/Ext2Form.js
      • spug_web/src/pages/deploy/request/Rollback.js
    • 批量执行页面:
      • spug_web/src/pages/exec/task/index.js
    • 行为说明:机器组选择为增量加入,仍可手工微调主机列表,保持原有按主机选择方式兼容。

二、Jenkins 发布支持

  • 在 Ext2 服务端动作中新增 Jenkins 类型:

    • spug_api/apps/deploy/utils.py
    • 新增 type: "jenkins" 动作处理逻辑,可触发 Jenkins Job:
      • 无参数时调用 /build
      • 有参数时调用 /buildWithParameters
    • 支持配置项:
      • Jenkins URL
      • 用户名 + Token(可选)
      • 构建参数(JSON)
      • 超时时间
    • 增加执行日志与失败提示,便于排障。
  • 前端新增 Jenkins 动作编辑能力:

    • spug_web/src/pages/deploy/app/Ext2Setup2.js
    • 服务端动作可选择“脚本 / Jenkins”类型。
    • Jenkins 类型支持填写 URL、认证信息、超时、参数 JSON,并在提交前做参数合法性校验。

兼容性说明

  • 原有按主机选择流程保持可用。
  • 机器组能力为增强,不影响既有数据结构的主流程。
  • Jenkins 发布为可选动作,仅在配置后生效,不影响普通脚本动作执行。

验证情况

已完成

  • 后端语法校验通过:
    • python3 -m compileall 已覆盖并通过以下文件:
      • spug_api/apps/app/views.py
      • spug_api/apps/deploy/views.py
      • spug_api/apps/deploy/utils.py
      • spug_api/apps/exec/views.py
      • spug_api/apps/host/utils.py

当前环境未完成

  • 前端构建验证尝试执行:
    • npm --prefix spug_web run build
  • 结果:
    • 本地环境缺少 react-app-rewired,命令未成功执行。

风险与回归建议

  • 风险点主要在目标主机合并逻辑与 Ext2 服务端动作分支。
  • Jenkins 动作为新增分支,建议重点验证错误场景与超时场景。

建议回归:

  1. 发布配置中仅选机器组、仅选主机、主机+机器组混合选择。
  2. ext1/ext2/rollback 三类申请均用机器组发起并检查目标主机是否符合预期。
  3. 批量执行中机器组选择后的权限校验与执行结果。
  4. Jenkins 动作在成功、认证失败、参数错误、超时下的日志与状态表现。

…ase action

- allow selecting host groups in deploy config, deploy request, rollback, and batch execute flows
- expand group IDs to host IDs recursively with de-duplication and deploy-scope filtering
- add Jenkins custom release action support in ext2 with URL/auth/params/timeout
- keep host-based selection compatible while enabling group-based bulk selection
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant