节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
2.58 KiB
Stardust
# 抽取 Web 端 PipelineService 规格 ## Why `DeployService` 职责过重,同时承担底层指令下发(compile、install、control)和高层流水线编排(创建 run、异步编排、状态管理)。抽取 `PipelineService` 实现关注点分离。 ## What Changes - 新建 `Stardust.Web/Services/PipelineService.cs`,从 `DeployService` 迁出 `Trigger`、`Reprocess`、`RunAsync` 三个方法 - 从 `DeployService` 删除上述三个方法 - `AppPipelineController` 和 `AppPipelineRunController` 改为注入 `PipelineService` 替代 `DeployService` - `Startup.cs` 注册 `PipelineService` 到 DI 容器 ## Impact - 依赖规格:[add-pipeline-feature](/NewLife/Stardust/Blob/master/.trae/specs/refactor-pipeline-service/../add-pipeline-feature/spec.md) - Affected specs: add-pipeline-feature - Affected code: - `Stardust.Web/Services/DeployService.cs`(删方法) - `Stardust.Web/Services/PipelineService.cs`(新建) - `Stardust.Web/Areas/Deployment/Controllers/AppPipelineController.cs`(改注入) - `Stardust.Web/Areas/Deployment/Controllers/AppPipelineRunController.cs`(改注入) - `Stardust.Web/Startup.cs`(注册 DI) ## ADDED Requirements ### Requirement: PipelineService 独立管理流水线编排 系统 SHALL 在 `Stardust.Web.Services` 命名空间下提供 `PipelineService`,依赖 `DeployService` 和 `ITracer`,暴露 `Trigger(Int32 pipelineId, String userHost)` 和 `Reprocess(Int64 runId, String userHost)` 两个公开方法,内部通过 `RunAsync` 私有方法执行编译→查版本→部署编排。 #### Scenario: 手动触发流水线 - **WHEN** 调用 `PipelineService.Trigger(pipelineId, userHost)` - **THEN** 创建 `AppPipelineRun`(Status=Pending,TriggerSource=manual),异步执行编译→查版本→部署,返回 run 对象 #### Scenario: 重跑流水线 - **WHEN** 调用 `PipelineService.Reprocess(runId, userHost)` - **THEN** 基于原 `AppPipelineRun` 创建新 run(TriggerSource=reprocess),异步执行编排,返回新 run 对象 ### Requirement: DeployService 不再包含流水线编排逻辑 `DeployService` SHALL 仅保留底层指令下发方法(`Compile`、`Control`、`Install`、`Start`、`Stop`、`Restart`、`Uninstall`、`ReadDotNet`、`ReadNginx`、`BuildNginx`),不再包含 `TriggerPipeline`、`ReprocessPipeline`、`RunPipelineAsync`。 ### Requirement: Web 控制器依赖 PipelineService `AppPipelineController` 和 `AppPipelineRunController` SHALL 通过构造函数注入 `PipelineService`,`Trigger` 和 `Reprocess` action 委托 `PipelineService` 执行。 ## MODIFIED Requirements 无。新增服务,不修改已有接口契约。 ## REMOVED Requirements 无。