节点在线、应用在线、配置在线使用令牌查询
|
# PUB-23 æµæ°´çº¿éƒ¨ç½²æµç¨‹
> 版本:v1.1 | 日期:2026-08-09(v1.0 于 2026-08-06)
> å¯¹åº”éœ€æ±‚ï¼šæµæ°´çº¿ç¼–è¯‘ä¸Šä¼ åŽè‡ªåŠ¨éƒ¨ç½²
> v1.1 修订:移除"未é…置节点时自动回退全部å¯ç”¨èŠ‚ç‚¹",改为仅部署勾选节点ã€ä¸å›žé€€ã€æœªå‹¾é€‰åˆ™æ ‡è®° Failedï¼ˆå…‹åˆ¶åŽŸåˆ™ï¼šä¸€æ¡æµæ°´çº¿å¯¹åº”一个分支)
---
## 功能说明
æµæ°´çº¿ï¼ˆAppPipelineï¼‰æŠŠã€Œä»£ç æäº¤ → 编译 → ä¸Šä¼ â†’ 部署ã€ä¸²æˆè‡ªåЍæµç¨‹ï¼š
1. ç›‘å¬ Git 仓库 webhook 或用户手动触å‘。
2. å‘ç¼–è¯‘èŠ‚ç‚¹ä¸‹å‘ `deploy/compile/Build-Upload` 命令。
3. 编译节点拉代ç ã€ç¼–è¯‘ã€æ‰“包ã€ä¸Šä¼ zip 到 StarServer。
4. StarServer 收到编译命令回包åŽï¼Œæ ¹æ®æµæ°´çº¿è®¾ç½®å†³å®šæ˜¯å¦è‡ªåŠ¨éƒ¨ç½²ã€‚
5. 若开å¯è‡ªåŠ¨éƒ¨ç½²ï¼Œå‘ç›®æ ‡èŠ‚ç‚¹ä¸‹å‘ `deploy/install`。
---
## 涉åŠå®žä½“
| 实体 | 说明 |
|------|------|
| AppPipeline | æµæ°´çº¿é…置:关è”应用部署集ã€ç¼–译节点ã€éƒ¨ç½²èŠ‚ç‚¹ã€åˆ†æ”¯ã€è‡ªåŠ¨éƒ¨ç½²å¼€å…³ |
| AppPipelineRun | ä¸€æ¬¡æµæ°´çº¿è¿è¡Œè®°å½•,å«çжæ€ã€ç‰ˆæœ¬ã€èµ·æ¢æ—¶é—´ |
| AppPipelineStep | 啿¬¡è¿è¡Œä¸çš„æ¥éª¤ï¼ˆBuild / Deploy),记录命令Idä¸ŽçŠ¶æ€ |
| AppBuildNode | 编译节点é…ç½® |
| AppDeployNode | 部署节点é…ç½® |
| AppDeployVersion | ä¸Šä¼ ç”Ÿæˆçš„应用版本 |
| NodeCommand | StarServer 下å‘给节点的命令 |
| AppDeployHistory | éƒ¨ç½²åŽ†å²æ—¥å¿— |
---
## çŠ¶æ€æœº
```
Pending -> Building -> UploadSucceeded -> Deploying -> Success
| | | | |
| | | | +-- 全部 Deploy æ¥éª¤æˆåŠŸ
| | | +-- å·²ä¸‹å‘ deploy/install
| | +-- Build 命令æˆåŠŸï¼ˆCommandReply)
| +-- å·²ä¸‹å‘ deploy/compile
+-- 刚创建 run
失败分支:
Building/Deploying -> Failed(命令回包为错误或下å‘失败)
Building/Deploying -> Cancelledï¼ˆç”¨æˆ·å–æ¶ˆï¼‰
```
---
## 完整æµç¨‹
```
用户/Webhook
|
v
PipelineService.Trigger / HandleWebhookAsync
|
v
PipelineService.RunAsync
|
v
DeployService.Compile ä¸‹å‘ deploy/compile/Build-Upload
| ^
| |
v |
DeployAgent.OnCompile |
| |
+-- Git æ‹‰å– |
+-- 编译项目 |
+-- 打包 zip |
+-- UploadBuildPackageSync |
| |
v |
StarServer DeployController.UploadBuildFile
| |
+-- ä¿å˜é™„ä»¶ |
+-- 创建/更新 AppDeployVersion
+-- å†™åŽ†å² "UploadBuildFile"
| |
v |
StarClient æ¡†æž¶è‡ªåŠ¨å›žå¤ CommandReply
| |
v |
NodeService.CommandReply |
| |
+-- ProcessPipelineReplyAsync |
| |
+-- 找到 Build æ¥éª¤ |
+-- å†™åŽ†å² "编译完æˆ" |
+-- å–æœ€æ–° AppDeployVersion |
+-- 使用版本(app.Version) |
+-- åˆ¤æ–æ˜¯å¦ AutoDeploy |
| |
+-- å¦ -> Success |
| |
+-- 是 -> Deploying |
| |
v |
DispatchDeployAsync |
| |
+-- 仅按勾选的 DeployNodeIds 创建 Deploy æ¥éª¤
+-- 未勾选任何节点则ä¸ä¸‹å‘ã€ä¸å›žé€€ï¼ˆé¿å…误部署)
+-- ä¸‹å‘ deploy/install
| |
v |
StarAgent 执行安装 |
| |
v |
CommandReply(Deploy) |
| |
v |
ProcessPipelineReplyAsync Deploy 分支
+-- å†™åŽ†å² "部署æˆåŠŸ"
+-- å…¨éƒ¨å®Œæˆ -> Success
```
---
## 自动部署判定规则
在 `NodeService.ProcessPipelineReplyAsync` ä¸ï¼š
| æ¡ä»¶ | 行为 | 历å²è®°å½• |
|------|------|----------|
| 编译失败 | run -> Failed,Remark=é”™è¯¯ä¿¡æ¯ | - |
| 编译æˆåŠŸä½†å–ä¸åˆ°ç‰ˆæœ¬ | run -> Failed,Remark=未产出å¯éƒ¨ç½²ç‰ˆæœ¬ | pipeline/autoDeploy 失败 |
| 编译æˆåŠŸä¸” AutoDeploy=false | run -> Success,Remark=è‡ªåŠ¨éƒ¨ç½²æœªå¼€å¯ | pipeline/autoDeploy æˆåŠŸ |
| 编译æˆåŠŸä¸” AutoDeploy=true | run -> Deploying,调用 DispatchDeployAsync | pipeline/autoDeploy æˆåŠŸ |
| æ— å¯ç”¨éƒ¨ç½²èŠ‚ç‚¹ | run -> Failed,Remark=未找到å¯éƒ¨ç½²èŠ‚ç‚¹ | deploy/install 失败 |
| 部分节点下å‘失败 | run -> Failed,Remark=部署命令下å‘失败 | - |
| 全部 Deploy æ¥éª¤æˆåŠŸ | run -> Success | deploy/install/Deploy æˆåŠŸ |
---
## 部署节点选择规则(克制原则)
> **设计约æŸ**ï¼šä¸€æ¡æµæ°´çº¿å¯¹åº”一个分支,部署范围必须显å¼ã€å¯æŽ§ã€‚
> ä»…éƒ¨ç½²æµæ°´çº¿ã€Œå‹¾é€‰ã€çš„部署节点,**ä¸è‡ªåŠ¨å›žé€€åˆ°å…¨éƒ¨å¯ç”¨èŠ‚ç‚¹**,é¿å…误部署到éžé¢„期环境。
`NodeService.DispatchDeployAsync` 按以下规则选择节点:
1. 仅使用 `AppPipeline.DeployNodeIds`(逗å·åˆ†éš”çš„ AppDeployNode.Id,å³é¡µé¢ä¸Šå‹¾é€‰çš„节点)。
2. è‹¥ `DeployNodeIds` 为空:ä¸ä¸‹å‘任何部署命令ã€ä¸å›žé€€ï¼Œä»…记录 `pipeline/autoDeploy` å¤±è´¥æ—¥å¿—ï¼›ä¸Šå±‚æ®æ¤å°† run æ ‡è®°ä¸º `Failed`(Remark=未找到å¯éƒ¨ç½²èŠ‚ç‚¹ï¼‰ï¼Œ**ä¸å‡ºçް凿ˆåŠŸ**。
3. 以下节点会被跳过(Skipped):
- `AppDeployNode` ä¸å˜åœ¨
- `AppDeployNode` 未å¯ç”¨
- `AppDeployNode.DeployId` ä¸Žæµæ°´çº¿ä¸åŒ¹é…
- 对应 `Node` ä¸å˜åœ¨
4. 命令下å‘å¼‚å¸¸ä¼šæ ‡è®°ä¸º Failed。
---
## 关键代ç ä½ç½®
| 文件 | èŒè´£ |
|------|------|
| `Stardust.Web/Services/PipelineService.cs` | æµæ°´çº¿å…¥å£ï¼šåˆ›å»º runã€ä¸‹å‘编译命令 |
| `Stardust.Web/Services/DeployService.cs` | 编译/å‘布控制å°è£… |
| `Stardust.Server/Services/NodeService.cs` | 命令回包处ç†ã€æµæ°´çº¿ç»è·‘ã€è‡ªåŠ¨éƒ¨ç½²ä¸‹å‘ |
| `Stardust.Server/Controllers/DeployController.cs` | `UploadBuildFile` 接å£ï¼šæŽ¥æ”¶ zip 并创建版本 |
| `DeployAgent/DeployService.cs` | 编译节点执行:拉代ç ã€ç¼–è¯‘ã€æ‰“包ã€ä¸Šä¼ |
---
## 日志与排查
å…³é”®åŽ†å² Action:
| Action | å«ä¹‰ |
|--------|------|
| `deploy/compile/Build-Upload` | ç¼–è¯‘é˜¶æ®µå®Œæˆ |
| `pipeline/version` | å–到/未å–到å¯éƒ¨ç½²ç‰ˆæœ¬ |
| `pipeline/autoDeploy` | 自动部署判定与下å‘记录 |
| `deploy/install` | 部署命令下å‘/å®Œæˆ |
| `deploy/install/Deploy` | å•个 Deploy æ¥éª¤æˆåŠŸ |
---
## 常è§é—®é¢˜
### ä¸Šä¼ æˆåŠŸä½†ã€Œæ²¡æœ‰è§¦å‘部署ã€
**现象**:AppDeployHistory ä¸çœ‹åˆ° `UploadBuildFile` å’Œ `ä¸Šä¼ æˆåŠŸ`,但åŽç»æ²¡æœ‰ `deploy/install` 或看到 `部署完æˆ` å´æ²¡æœ‰å®žé™…安装。
**常è§åŽŸå› **:
1. æµæ°´çº¿æœªå¼€å¯ã€Œè‡ªåŠ¨éƒ¨ç½²ã€ã€‚检查 `AppPipeline.AutoDeploy`。
2. æµæ°´çº¿æœªå‹¾é€‰ã€Œéƒ¨ç½²èŠ‚ç‚¹ã€ã€‚当å‰ç‰ˆæœ¬éµå¾ªå…‹åˆ¶åŽŸåˆ™ï¼šæœªå‹¾é€‰ä»»ä½•èŠ‚ç‚¹åˆ™**ä¸ä¸‹å‘ã€ä¸å›žé€€**,run ç›´æŽ¥æ ‡è®° `Failed`(Remark=未找到å¯éƒ¨ç½²èŠ‚ç‚¹ï¼‰ï¼Œä¸ä¼šå†å‡ºçް"ä¸Šä¼ å®Œæˆå³å‡æˆåŠŸ"çš„å‡è±¡ã€‚
3. é…置的部署节点ä¸å˜åœ¨ã€æœªå¯ç”¨ã€æˆ– DeployId ä¸åŒ¹é…,导致全部 Skipped(ä»ä¼šä¸‹å‘ 0 个,run æ ‡è®° Failed)。
4. 命令下å‘异常(如节点ä¸åœ¨çº¿ï¼‰ï¼Œå¯¼è‡´ Failed。
**排查方法**:
查看 `AppDeployHistory` ä¸ `pipeline/autoDeploy` å’Œ `deploy/install` 记录;
查看 `AppPipelineRun.Remark` 和 `AppPipelineStep.Message`。
|