节点在线、应用在线、配置在线使用令牌查询
|
# æµæ°´çº¿è¯¦ç»†æ¥éª¤è®°å½• Spec
## Why
å½“å‰ `AppPipelineRun` åªè®°å½•整体状æ€å’Œæœ€ç»ˆå¤±è´¥ä¿¡æ¯ï¼Œä½†æ— 法查看æ¯ä¸€é˜¶æ®µçš„é€ä¸ªæ‰§è¡Œæƒ…况:
- 多节点部署时,哪些节点æˆåŠŸå“ªäº›å¤±è´¥ä¸æ¸…æ™°
- 编译失败åŽä¸çŸ¥é“ `BuildFinishedTime`ï¼Œæ— æ³•è®¡ç®—è€—æ—¶
- 被跳过的部署节点没有说明原å›
- æ•´ä½“å¤±è´¥åŽæ— 法定ä½å…·ä½“是哪一æ¥å¤±è´¥
实体表 `AppPipelineStep` å·²ç»åœ¨ `Model.xml` å®šä¹‰å®Œæ¯•ï¼Œå—æ®µé½å…¨ï¼Œåªéœ€è¦æŠŠå†™å…¥é€»è¾‘åŠ åˆ° `RunAsync` ä¸ã€‚
## What Changes
### 修改 `PipelineService.RunAsync`
在 `RunAsync` ä¸ä¸ºæ¯ä¸ªé˜¶æ®µåˆ›å»º `AppPipelineStep` 记录:
- **编译阶段**:创建 `StepType=Build`ï¼Œå…³è” `buildNode.NodeId`
- **部署阶段**:æ¯ä¸ªéƒ¨ç½²èŠ‚ç‚¹å•独创建 `StepType=Deploy`ï¼Œå…³è” `deployNode.NodeId`
- æ¯ä¸ªæ¥éª¤ï¼šè®°å½• `StartedTime` → `Status=Running` → æ‰§è¡ŒåŽ `FinishedTime` → `Status=Success/Failed/Skipped` + `Message`
- 被跳过的节点(ä¸å˜åœ¨ / 未å¯ç”¨ / DeployId ä¸åŒ¹é…):创建 `Status=Skipped` 并在 `Message` 记录原å›
### è¡¥å…¨æ—¶é—´å—æ®µ
解决之å‰åˆ†æžçš„问题:
- 编译失败 → 设置 `BuildFinishedTime = DateTime.Now` 并写入æ¥éª¤
- 部署失败 → 设置 `DeployFinishedTime = DateTime.Now` 并写入æ¯ä¸ªéƒ¨ç½²èŠ‚ç‚¹æ¥éª¤
### UI å±•ç¤ºï¼ˆå·²æœ‰åŸºç¡€ï¼Œæ— éœ€æ”¹åŠ¨ï¼‰
`AppPipelineRun` 详情页å¯é€šè¿‡ `FindAllByRunId` 查询所有æ¥éª¤ï¼Œæ˜¾ç¤ºæ¥éª¤åˆ—表,æ¯ä¸ªæ¥éª¤çš„状æ€ã€èŠ‚ç‚¹ã€è€—æ—¶ã€æ¶ˆæ¯ã€‚çŽ°æœ‰æž¶æž„å·²ç»æ”¯æŒï¼ˆCube è‡ªåŠ¨å…³è”æŸ¥è¯¢ï¼‰ï¼Œæ— 需新增控制器/视图。
## Impact
- Affected specs:
- [move-pipeline-to-web](/NewLife/Stardust/Blob/master/.trae/specs/pipeline-step-logging/../move-pipeline-to-web/spec.md) — 扩展当å‰å®žçŽ°ï¼Œå¢žåŠ æ¥éª¤è®°å½•
- [add-pipeline-feature](/NewLife/Stardust/Blob/master/.trae/specs/pipeline-step-logging/../add-pipeline-feature/spec.md) — 补充了完整æ¥éª¤è®°å½•
- Affected code:
- `Stardust.Web/Services/PipelineService.cs` — 新增æ¥éª¤åˆ›å»ºé€»è¾‘
- ä¸å½±å“ `AppPipelineStep` 实体定义(已å˜åœ¨ï¼‰
- ä¸å½±å“ UI 路由和控制器(现有详情页自然展示)
## ADDED Requirements
### Requirement: æµæ°´çº¿è¿è¡Œé€æ¥éª¤è®°å½•
系统 SHALL 在 `AppPipelineRun` 执行过程ä¸ï¼Œä¸ºæ¯ä¸ªæ¥éª¤ï¼ˆBuild / æ¯ä¸ª Deploy èŠ‚ç‚¹ï¼‰åˆ›å»ºä¸€æ¡ `AppPipelineStep` 记录。æ¯ä¸ªæ¥éª¤ SHALL 包å«ï¼š
- æ¥éª¤ç±»åž‹ (Build/Deploy)
- æ¥éª¤åºå·
- 执行节点 ID
- çŠ¶æ€ (Pending/Running/Success/Failed/Skipped)
- 开始时间 / å®Œæˆæ—¶é—´
- 消æ¯/异常原å›
#### Scenario: 编译失败
- **WHEN** `_deployService.Compile` 抛出异常
- **THEN** 创建 `Build` æ¥éª¤ï¼Œ`Status=Failed`,`Message=ex.Message`,设置 `FinishedTime`,`AppPipelineRun.BuildFinishedTime` 也被设置
#### Scenario: 多节点部署,部分æˆåŠŸéƒ¨åˆ†å¤±è´¥
- **WHEN** æµæ°´çº¿é…置了 3 个部署节点,节点 1 æˆåŠŸã€èŠ‚ç‚¹ 2 失败
- **THEN** 创建 3 æ¡ `Deploy` æ¥éª¤
- 节点 1:`Status=Success`
- 节点 2:`Status=Failed`,`Message=ex.Message`
- 节点 3:ä¸å°è¯•ï¼Œä¿æŒæœªæ‰§è¡Œï¼Ÿâ†’ **当å‰è®¾è®¡**:循环执行,å‰é¢å¤±è´¥ä¸é˜»æ¢åŽç»ï¼Œæ‰€ä»¥èŠ‚ç‚¹ 3 ä»ä¼šæ‰§è¡Œ
- æ¯ä¸ªæ¥éª¤éƒ½æœ‰ç‹¬ç«‹çš„ `StartedTime` / `FinishedTime`
#### Scenario: 部署节点被跳过
- **WHEN** `dn == null || !dn.Enable || dn.DeployId != pipeline.DeployId`
- **THEN** 创建 `Deploy` æ¥éª¤ï¼Œ`Status=Skipped`,`Message` è¯´æ˜Žè·³è¿‡åŽŸå› ï¼ˆ"节点ä¸å˜åœ¨" / "节点未å¯ç”¨" / "DeployId ä¸åŒ¹é…")
#### Scenario: 编译æˆåŠŸï¼Œå†™å…¥æ¥éª¤
- **WHEN** `_deployService.Compile` æˆåŠŸè¿”å›ž
- **THEN** 创建 `Build` æ¥éª¤ï¼Œ`Status=Success`,设置 `StartedTime` / `FinishedTime`
## MODIFIED Requirements
### Requirement: æµæ°´çº¿æ•´ä½“时间记录
**原**ï¼šåªæœ‰æˆåŠŸè·¯å¾„æ‰è®¾ç½® `BuildFinishedTime` / `DeployFinishedTime`
**改**ï¼šæ— è®ºæˆåŠŸå¤±è´¥ï¼Œåªè¦è¿›å…¥è¯¥é˜¶æ®µå°±ä¼šè®¾ç½®å¼€å§‹æ—¶é—´ï¼Œé€€å‡ºè¯¥é˜¶æ®µï¼ˆæ— 论æˆåŠŸå¤±è´¥ï¼‰å°±ä¼šè®¾ç½®å®Œæˆæ—¶é—´ã€‚
## REMOVED Requirements
æ— ã€‚
|