fe-build-cli 1.2.5 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +310 -11
- package/package.json +1 -1
- package/src/cli.js +249 -20
- package/src/config-template.js +14 -1
- package/src/deploy-core.js +310 -64
- package/src/dingtalk.js +31 -17
- package/src/git-branch.js +191 -34
- package/src/index.js +22 -1
- package/src/logger.js +381 -0
- package/src/ssh-client.js +69 -0
- package/src/update.js +136 -0
package/README.md
CHANGED
|
@@ -5,10 +5,15 @@
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
7
7
|
- ✅ 多服务器环境部署
|
|
8
|
-
- ✅
|
|
8
|
+
- ✅ 三种发布模式:主分支发布 / 当前分支发布 / Test 环境发布
|
|
9
9
|
- ✅ Git 分支自动合并流程
|
|
10
|
+
- ✅ 智能处理本地改动(自动提交或 stash 储藏)
|
|
10
11
|
- ✅ SSH 远程部署(带进度条)
|
|
11
12
|
- ✅ 自动备份与回滚
|
|
13
|
+
- ✅ 线上备份下载到本地(保留 7 天)
|
|
14
|
+
- ✅ 详细日志记录(每一步操作及状态)
|
|
15
|
+
- ✅ 错误日志单独保存
|
|
16
|
+
- ✅ 钉钉通知(成功/失败)
|
|
12
17
|
- ✅ 保护目录(部署时不删除指定目录)
|
|
13
18
|
- ✅ TypeScript 类型支持
|
|
14
19
|
|
|
@@ -106,9 +111,12 @@ fe-build [deploy] [环境] [选项]
|
|
|
106
111
|
| `环境` | 目标环境名称(如 production、test),或 `all` 部署到所有环境 |
|
|
107
112
|
| `--config <路径>` | 指定配置文件路径 |
|
|
108
113
|
| `--current-branch` | 使用当前分支发布(不切换分支) |
|
|
114
|
+
| `--test-branch` | 使用 Test 环境发布流程(智能处理本地改动) |
|
|
115
|
+
| `--merge` | Test 发布时合并本地改动 |
|
|
116
|
+
| `--no-merge` | Test 发布时使用 stash 储藏改动 |
|
|
109
117
|
| `--main-branch` | 使用主分支发布流程 |
|
|
110
118
|
| `--skip-build` | 跳过构建步骤 |
|
|
111
|
-
| `--no-push` |
|
|
119
|
+
| `--no-push` | 发布时不推送到远程 |
|
|
112
120
|
|
|
113
121
|
**示例:**
|
|
114
122
|
|
|
@@ -122,6 +130,15 @@ fe-build deploy production
|
|
|
122
130
|
# 当前分支发布(不切换分支)
|
|
123
131
|
fe-build --current-branch
|
|
124
132
|
|
|
133
|
+
# Test 环境发布(智能处理本地改动)
|
|
134
|
+
fe-build --test-branch
|
|
135
|
+
|
|
136
|
+
# Test 发布,合并本地改动
|
|
137
|
+
fe-build --test-branch --merge
|
|
138
|
+
|
|
139
|
+
# Test 发布,stash 储藏改动
|
|
140
|
+
fe-build --test-branch --no-merge
|
|
141
|
+
|
|
125
142
|
# 主分支发布流程
|
|
126
143
|
fe-build --main-branch
|
|
127
144
|
|
|
@@ -135,24 +152,122 @@ fe-build --config ./custom-config.js
|
|
|
135
152
|
### rollback(回滚)
|
|
136
153
|
|
|
137
154
|
```bash
|
|
138
|
-
fe-build rollback [环境] [--version <版本号>]
|
|
155
|
+
fe-build rollback [环境] [--server|--local] [--version <版本号>]
|
|
139
156
|
```
|
|
140
157
|
|
|
141
158
|
| 参数 | 说明 |
|
|
142
159
|
|------|------|
|
|
143
160
|
| `环境` | 目标环境名称 |
|
|
144
|
-
| `--
|
|
161
|
+
| `--server` | 使用服务器备份(默认) |
|
|
162
|
+
| `--local` | 使用本地备份 |
|
|
163
|
+
| `--version <版本号>` | 指定回滚版本(可选) |
|
|
164
|
+
|
|
165
|
+
**回滚流程:**
|
|
166
|
+
|
|
167
|
+
1. 获取备份列表(服务器和本地)
|
|
168
|
+
2. 选择备份来源(默认服务器)
|
|
169
|
+
3. 从备份列表中选择要回滚的版本
|
|
170
|
+
4. 执行回滚
|
|
145
171
|
|
|
146
172
|
**示例:**
|
|
147
173
|
|
|
148
174
|
```bash
|
|
149
|
-
#
|
|
175
|
+
# 回滚生产环境(交互选择备份来源和版本)
|
|
150
176
|
fe-build rollback production
|
|
151
177
|
|
|
178
|
+
# 回滚生产环境(使用服务器备份)
|
|
179
|
+
fe-build rollback production --server
|
|
180
|
+
|
|
181
|
+
# 回滚生产环境(使用本地备份)
|
|
182
|
+
fe-build rollback production --local
|
|
183
|
+
|
|
152
184
|
# 回滚到指定版本
|
|
153
185
|
fe-build rollback production --version build-20240101-abc123
|
|
154
186
|
```
|
|
155
187
|
|
|
188
|
+
**备份列表显示:**
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
========================================
|
|
192
|
+
📦 选择备份来源
|
|
193
|
+
========================================
|
|
194
|
+
1. 服务器备份 (5 个) - 默认
|
|
195
|
+
2. 本地备份 (3 个)
|
|
196
|
+
========================================
|
|
197
|
+
请选择备份来源 (1/2): 1
|
|
198
|
+
|
|
199
|
+
========================================
|
|
200
|
+
📦 服务器备份列表
|
|
201
|
+
========================================
|
|
202
|
+
1. 20260618-abc123 (12.5 MB) - 2026/6/18
|
|
203
|
+
2. 20260617-def456 (11.8 MB) - 2026/6/17
|
|
204
|
+
3. 20260616-ghi789 (10.2 MB) - 2026/6/16
|
|
205
|
+
========================================
|
|
206
|
+
请选择要回滚的备份 (1-3):
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### update(更新)
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
fe-build update [--force|--auto]
|
|
213
|
+
fe-build check-update
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
| 参数 | 说明 |
|
|
217
|
+
|------|------|
|
|
218
|
+
| `--force` | 自动更新,无需确认 |
|
|
219
|
+
| `--auto` | 自动更新,无需确认(同 --force) |
|
|
220
|
+
|
|
221
|
+
**功能说明:**
|
|
222
|
+
|
|
223
|
+
- `update` - 检查并更新到最新版本(交互确认)
|
|
224
|
+
- `update --force` - 自动更新,无需确认
|
|
225
|
+
- `check-update` - 仅检查是否有新版本
|
|
226
|
+
|
|
227
|
+
**示例:**
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# 检查并更新(需要确认)
|
|
231
|
+
fe-build update
|
|
232
|
+
|
|
233
|
+
# 自动更新(无需确认)
|
|
234
|
+
fe-build update --force
|
|
235
|
+
fe-build update --auto
|
|
236
|
+
|
|
237
|
+
# 仅检查是否有更新
|
|
238
|
+
fe-build check-update
|
|
239
|
+
|
|
240
|
+
# 手动更新(推荐)
|
|
241
|
+
npm update fe-build-cli --global
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**更新输出示例:**
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
========================================
|
|
248
|
+
🔄 fe-build-cli 版本检查
|
|
249
|
+
========================================
|
|
250
|
+
当前版本: 1.5.0
|
|
251
|
+
最新版本: 1.6.0
|
|
252
|
+
|
|
253
|
+
📌 发现新版本!
|
|
254
|
+
|
|
255
|
+
更新方法:
|
|
256
|
+
fe-build update # 自动更新
|
|
257
|
+
npm update fe-build-cli --global # 手动更新
|
|
258
|
+
========================================
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### version(版本)
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
fe-build version
|
|
265
|
+
fe-build --version
|
|
266
|
+
fe-build -v
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
显示当前安装的版本号。
|
|
270
|
+
|
|
156
271
|
### help(帮助)
|
|
157
272
|
|
|
158
273
|
```bash
|
|
@@ -163,7 +278,7 @@ fe-build -h
|
|
|
163
278
|
|
|
164
279
|
## 发布模式详解
|
|
165
280
|
|
|
166
|
-
###
|
|
281
|
+
### 主分支发布模式
|
|
167
282
|
|
|
168
283
|
流程:当前分支 → 测试分支 → 主分支 → 部署
|
|
169
284
|
|
|
@@ -185,7 +300,49 @@ fe-build -h
|
|
|
185
300
|
6. 合并测试分支到主分支
|
|
186
301
|
7. 推送主分支到远程
|
|
187
302
|
8. 执行构建和部署
|
|
188
|
-
9.
|
|
303
|
+
9. 自动切回原分支
|
|
304
|
+
|
|
305
|
+
### Test 环境发布模式(智能处理本地改动)
|
|
306
|
+
|
|
307
|
+
流程:智能处理本地改动 → Test 分支 → 部署
|
|
308
|
+
|
|
309
|
+
**适用场景:** 发布到 Test 环境,自动处理本地未提交的改动
|
|
310
|
+
|
|
311
|
+
**智能处理策略:**
|
|
312
|
+
|
|
313
|
+
| 情况 | 处理方式 |
|
|
314
|
+
|------|---------|
|
|
315
|
+
| 当前已在 test 分支 | 直接拉取最新代码,无需切换 |
|
|
316
|
+
| 当前分支 ≠ test,无本地改动 | 直接切换到 test 分支发布 |
|
|
317
|
+
| 当前分支 ≠ test,有本地改动 | 选择合并或 stash |
|
|
318
|
+
|
|
319
|
+
**有本地改动时的选项:**
|
|
320
|
+
|
|
321
|
+
1. **合并改动**(`--merge`):
|
|
322
|
+
- 自动提交当前分支改动
|
|
323
|
+
- 推送当前分支到远程
|
|
324
|
+
- 切换到 test 分支
|
|
325
|
+
- 合并当前分支到 test
|
|
326
|
+
- 推送 test 分支
|
|
327
|
+
- 部署完成后自动切回原分支
|
|
328
|
+
|
|
329
|
+
2. **Stash 储藏**(`--no-merge`):
|
|
330
|
+
- 储藏本地改动
|
|
331
|
+
- 切换到 test 分支发布
|
|
332
|
+
- 部署完成后询问是否切回原分支
|
|
333
|
+
- 切回后自动恢复 stash
|
|
334
|
+
|
|
335
|
+
**示例:**
|
|
336
|
+
```bash
|
|
337
|
+
# Test 环境发布(交互选择处理方式)
|
|
338
|
+
fe-build --test-branch
|
|
339
|
+
|
|
340
|
+
# Test 发布,合并本地改动
|
|
341
|
+
fe-build --test-branch --merge
|
|
342
|
+
|
|
343
|
+
# Test 发布,stash 储藏改动
|
|
344
|
+
fe-build --test-branch --no-merge
|
|
345
|
+
```
|
|
189
346
|
|
|
190
347
|
### 当前分支发布模式
|
|
191
348
|
|
|
@@ -248,10 +405,15 @@ export default {
|
|
|
248
405
|
// 备份保留数量(可选,默认 1)
|
|
249
406
|
backupRetentionCount: 3,
|
|
250
407
|
|
|
408
|
+
// 日志配置(可选)
|
|
409
|
+
logDir: 'logs', // 日志目录,默认 'logs'
|
|
410
|
+
localBackupDir: 'D:\\备份', // 本地备份目录,默认 'D:\备份'
|
|
411
|
+
|
|
251
412
|
// 钉钉通知配置(可选)
|
|
252
413
|
dingtalk: {
|
|
253
414
|
webhook: 'https://oapi.dingtalk.com/robot/send?access_token=your-token', // 钉钉机器人 webhook
|
|
254
|
-
|
|
415
|
+
keyword: '部署', // 安全设置关键词(可选)
|
|
416
|
+
enabled: true // 是否启用通知,默认 true
|
|
255
417
|
}
|
|
256
418
|
};
|
|
257
419
|
```
|
|
@@ -276,7 +438,10 @@ export default {
|
|
|
276
438
|
| `servers[key].buildCommand` | string | 否 | 自定义构建命令 |
|
|
277
439
|
| `servers[key].protectedDirs` | string[] | 否 | 保护目录列表 |
|
|
278
440
|
| `backupRetentionCount` | number | 否 | 备份保留数量,默认 1 |
|
|
441
|
+
| `logDir` | string | 否 | 日志目录,默认 'logs' |
|
|
442
|
+
| `localBackupDir` | string | 否 | 本地备份目录,默认 'D:\备份' |
|
|
279
443
|
| `dingtalk.webhook` | string | 否 | 钉钉机器人 webhook URL |
|
|
444
|
+
| `dingtalk.keyword` | string | 否 | 安全设置关键词 |
|
|
280
445
|
| `dingtalk.enabled` | boolean | 否 | 是否启用通知,默认 true |
|
|
281
446
|
|
|
282
447
|
## 钉钉通知
|
|
@@ -308,15 +473,149 @@ dingtalk: {
|
|
|
308
473
|
|
|
309
474
|
环境: production
|
|
310
475
|
状态: ✅ 成功
|
|
311
|
-
时间:
|
|
476
|
+
时间: 2026/06/18 10:30:00
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
### 部署详情
|
|
312
481
|
|
|
313
|
-
构建版本: build-
|
|
482
|
+
构建版本: build-20260618-abc123
|
|
314
483
|
发布分支: main
|
|
315
484
|
发布模式: 主分支发布
|
|
316
485
|
服务器: 101.44.66.5
|
|
317
486
|
部署耗时: 120秒
|
|
318
487
|
|
|
319
|
-
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
### 本次修改内容
|
|
491
|
+
|
|
492
|
+
feat: 新增用户管理模块
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
### 访问地址
|
|
497
|
+
|
|
498
|
+
https://www.example.com
|
|
499
|
+
|
|
500
|
+
> 部署完成,请及时验证功能是否正常。
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
部署失败通知:
|
|
504
|
+
|
|
505
|
+
```
|
|
506
|
+
❌ 部署失败通知
|
|
507
|
+
|
|
508
|
+
环境: production
|
|
509
|
+
状态: ❌ 失败
|
|
510
|
+
时间: 2026/06/18 10:30:00
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
### 失败详情
|
|
515
|
+
|
|
516
|
+
构建版本: build-20260618-abc123
|
|
517
|
+
发布分支: main
|
|
518
|
+
服务器: 101.44.66.5
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
### 本次修改内容
|
|
523
|
+
|
|
524
|
+
feat: 新增用户管理模块
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
### 错误信息
|
|
529
|
+
|
|
530
|
+
SSH 连接失败: Connection refused
|
|
531
|
+
|
|
532
|
+
> 请及时排查问题并重新部署。
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
## 日志记录
|
|
536
|
+
|
|
537
|
+
每次部署都会自动记录详细的操作日志,包括每一步的执行状态。
|
|
538
|
+
|
|
539
|
+
### 日志内容
|
|
540
|
+
|
|
541
|
+
日志记录以下操作:
|
|
542
|
+
|
|
543
|
+
| 操作类型 | 记录内容 |
|
|
544
|
+
|---------|---------|
|
|
545
|
+
| 分支操作 | 切换分支(从哪个分支切换到哪个分支) |
|
|
546
|
+
| 代码合并 | 源分支→目标分支,是否有冲突 |
|
|
547
|
+
| Stash 操作 | 储藏/恢复本地改动 |
|
|
548
|
+
| 项目构建 | 构建模式、版本号、耗时 |
|
|
549
|
+
| 文件压缩 | 压缩包大小 |
|
|
550
|
+
| SSH 连接 | 服务器地址、连接状态 |
|
|
551
|
+
| 文件上传 | 本地路径、远程路径、大小、耗时、速度 |
|
|
552
|
+
| 备份操作 | 服务器备份/本地下载 |
|
|
553
|
+
| 部署解压 | 部署目录 |
|
|
554
|
+
| 钉钉通知 | 发送成功/失败 |
|
|
555
|
+
|
|
556
|
+
### 日志文件
|
|
557
|
+
|
|
558
|
+
**存储位置**:`logs` 目录(可通过 `logDir` 配置)
|
|
559
|
+
|
|
560
|
+
**文件格式**:
|
|
561
|
+
```
|
|
562
|
+
deploy-2026-06-18-10-30-45-success.json # 成功日志
|
|
563
|
+
deploy-2026-06-18-10-30-45-failed.json # 失败日志
|
|
564
|
+
error-2026-06-18-10-30-45.json # 错误日志(单独保存)
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
**日志内容示例**:
|
|
568
|
+
```json
|
|
569
|
+
{
|
|
570
|
+
"summary": {
|
|
571
|
+
"startTime": "2026/06/18 10:30:45",
|
|
572
|
+
"endTime": "2026/06/18 10:35:20",
|
|
573
|
+
"duration": 275,
|
|
574
|
+
"status": "success",
|
|
575
|
+
"totalSteps": 15,
|
|
576
|
+
"successSteps": 15,
|
|
577
|
+
"failedSteps": 0
|
|
578
|
+
},
|
|
579
|
+
"logs": [
|
|
580
|
+
{
|
|
581
|
+
"timestamp": "2026/06/18 10:30:45",
|
|
582
|
+
"level": "SUCCESS",
|
|
583
|
+
"step": "分支操作",
|
|
584
|
+
"message": "切换分支: feature-xxx → test, 成功",
|
|
585
|
+
"data": { "action": "切换分支", "fromBranch": "feature-xxx", "toBranch": "test" }
|
|
586
|
+
}
|
|
587
|
+
// ... 更多日志
|
|
588
|
+
]
|
|
589
|
+
}
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
### 错误日志
|
|
593
|
+
|
|
594
|
+
部署失败时,错误日志会单独保存一份,便于快速定位问题:
|
|
595
|
+
- 包含完整的错误信息
|
|
596
|
+
- 包含所有操作日志
|
|
597
|
+
- 文件名以 `error-` 开头
|
|
598
|
+
|
|
599
|
+
## 线上备份下载
|
|
600
|
+
|
|
601
|
+
部署完成后,线上备份会自动下载到本地保存。
|
|
602
|
+
|
|
603
|
+
### 配置
|
|
604
|
+
|
|
605
|
+
```javascript
|
|
606
|
+
// 本地备份目录(默认:D:\备份)
|
|
607
|
+
localBackupDir: 'D:\\备份'
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
### 自动清理
|
|
611
|
+
|
|
612
|
+
本地备份自动保留 **7 天**,超过 7 天的备份文件会被自动清理。
|
|
613
|
+
|
|
614
|
+
### 备份文件命名
|
|
615
|
+
|
|
616
|
+
```
|
|
617
|
+
backup-production-build-20260618-abc123.tar.gz
|
|
618
|
+
backup-test-build-20260618-def456.tar.gz
|
|
320
619
|
```
|
|
321
620
|
|
|
322
621
|
## 部署流程详解
|