speccore 8.3.67 → 8.3.68
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-env-configs.d.ts","sourceRoot":"","sources":["../../src/commands/update-env-configs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-env-configs.d.ts","sourceRoot":"","sources":["../../src/commands/update-env-configs.ts"],"names":[],"mappings":"AAmbA,wBAAwB;AACxB,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA8CnF;AAyLD,wBAAwB;AACxB,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmB5E"}
|
|
@@ -108,7 +108,7 @@ platforms:
|
|
|
108
108
|
deploy:
|
|
109
109
|
type: pm2
|
|
110
110
|
output_dir: .
|
|
111
|
-
pm2_config: ecosystem.config.js
|
|
111
|
+
pm2_config: .speccore/environments/scripts/ecosystem.config.js
|
|
112
112
|
# 如需远程部署,取消注释:
|
|
113
113
|
# host: deploy@server.example.com
|
|
114
114
|
# remote_dir: /opt/services/notification
|
|
@@ -119,14 +119,14 @@ platforms:
|
|
|
119
119
|
deploy:
|
|
120
120
|
type: k8s
|
|
121
121
|
target: ${t.name}
|
|
122
|
-
script: k8s
|
|
122
|
+
script: .speccore/environments/scripts/k8s-deployment.yaml
|
|
123
123
|
|
|
124
124
|
# 后端示例:Python 处理 → 脚本部署
|
|
125
125
|
data-processor:
|
|
126
126
|
build_cmd: pip install -r requirements.txt -t dist/
|
|
127
127
|
deploy:
|
|
128
128
|
type: script
|
|
129
|
-
script:
|
|
129
|
+
script: .speccore/environments/scripts/deploy.sh
|
|
130
130
|
|
|
131
131
|
# 后端示例:用户服务 → Helm
|
|
132
132
|
user-service:
|
|
@@ -135,7 +135,7 @@ platforms:
|
|
|
135
135
|
type: helm
|
|
136
136
|
target: ${t.name}
|
|
137
137
|
script: ./helm/user-service
|
|
138
|
-
output_dir: values-${t.name}.yaml
|
|
138
|
+
output_dir: .speccore/environments/scripts/values-${t.name}.yaml
|
|
139
139
|
|
|
140
140
|
# 后端示例:定时任务 → SFTP 到服务器
|
|
141
141
|
scheduler:
|
|
@@ -226,6 +226,202 @@ pipeline:
|
|
|
226
226
|
max_retries: 3
|
|
227
227
|
`;
|
|
228
228
|
}
|
|
229
|
+
// ── 部署脚本模板 ──
|
|
230
|
+
const SCRIPT_TEMPLATES = [
|
|
231
|
+
{
|
|
232
|
+
name: 'deploy.sh',
|
|
233
|
+
content: `#!/bin/bash
|
|
234
|
+
# =============================================================================
|
|
235
|
+
# SpecCore 通用部署脚本模板
|
|
236
|
+
# =============================================================================
|
|
237
|
+
# 用途:自定义部署逻辑(script 类型部署时调用)
|
|
238
|
+
# 位置:.speccore/environments/scripts/deploy.sh
|
|
239
|
+
# 执行:speccore deploy --env <env> --platform <platform>
|
|
240
|
+
#
|
|
241
|
+
# 环境变量(由 deploy engine 自动注入):
|
|
242
|
+
# $PLATFORM 当前端名(如 notification-service)
|
|
243
|
+
# $ENV 当前环境(如 staging, production)
|
|
244
|
+
# $CWD 端代码路径(code_path 或项目根目录)
|
|
245
|
+
# =============================================================================
|
|
246
|
+
|
|
247
|
+
set -e
|
|
248
|
+
|
|
249
|
+
echo "🚀 开始部署: $PLATFORM → $ENV"
|
|
250
|
+
echo "📂 工作目录: $CWD"
|
|
251
|
+
|
|
252
|
+
# TODO: 在此添加自定义部署逻辑
|
|
253
|
+
# 示例:
|
|
254
|
+
# cd "$CWD"
|
|
255
|
+
# tar -czf dist.tar.gz dist/
|
|
256
|
+
# scp dist.tar.gz deploy@server:/opt/services/$PLATFORM/
|
|
257
|
+
# ssh deploy@server "cd /opt/services/$PLATFORM && tar -xzf dist.tar.gz && sudo systemctl restart $PLATFORM"
|
|
258
|
+
|
|
259
|
+
echo "✅ 部署完成: $PLATFORM → $ENV"
|
|
260
|
+
`,
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: 'ecosystem.config.js',
|
|
264
|
+
content: `// =============================================================================
|
|
265
|
+
// PM2 生态配置模板
|
|
266
|
+
// =============================================================================
|
|
267
|
+
// 用途:PM2 进程管理配置(pm2 类型部署时调用)
|
|
268
|
+
// 位置:.speccore/environments/scripts/ecosystem.config.js
|
|
269
|
+
// 执行:speccore deploy --env <env> --platform <platform>
|
|
270
|
+
//
|
|
271
|
+
// 请根据实际项目修改 app 名称、脚本路径、环境变量等。
|
|
272
|
+
// =============================================================================
|
|
273
|
+
|
|
274
|
+
module.exports = {
|
|
275
|
+
apps: [
|
|
276
|
+
{
|
|
277
|
+
name: 'notification-service',
|
|
278
|
+
script: './dist/index.js',
|
|
279
|
+
instances: 'max',
|
|
280
|
+
exec_mode: 'cluster',
|
|
281
|
+
env: {
|
|
282
|
+
NODE_ENV: 'development',
|
|
283
|
+
PORT: 3000,
|
|
284
|
+
},
|
|
285
|
+
env_dev: {
|
|
286
|
+
NODE_ENV: 'development',
|
|
287
|
+
PORT: 3000,
|
|
288
|
+
},
|
|
289
|
+
env_test: {
|
|
290
|
+
NODE_ENV: 'test',
|
|
291
|
+
PORT: 3000,
|
|
292
|
+
},
|
|
293
|
+
env_staging: {
|
|
294
|
+
NODE_ENV: 'staging',
|
|
295
|
+
PORT: 3000,
|
|
296
|
+
},
|
|
297
|
+
env_production: {
|
|
298
|
+
NODE_ENV: 'production',
|
|
299
|
+
PORT: 3000,
|
|
300
|
+
},
|
|
301
|
+
log_file: './logs/combined.log',
|
|
302
|
+
out_file: './logs/out.log',
|
|
303
|
+
error_file: './logs/error.log',
|
|
304
|
+
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
|
|
305
|
+
merge_logs: true,
|
|
306
|
+
max_memory_restart: '500M',
|
|
307
|
+
restart_delay: 3000,
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
};
|
|
311
|
+
`,
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: 'k8s-deployment.yaml',
|
|
315
|
+
content: `# =============================================================================
|
|
316
|
+
# K8s Deployment + Service 模板
|
|
317
|
+
# =============================================================================
|
|
318
|
+
# 用途:Kubernetes 部署配置(k8s 类型部署时调用)
|
|
319
|
+
# 位置:.speccore/environments/scripts/k8s-deployment.yaml
|
|
320
|
+
# 执行:speccore deploy --env <env> --platform <platform>
|
|
321
|
+
#
|
|
322
|
+
# 请根据实际项目修改镜像名、端口、资源限制等。
|
|
323
|
+
# =============================================================================
|
|
324
|
+
|
|
325
|
+
apiVersion: apps/v1
|
|
326
|
+
kind: Deployment
|
|
327
|
+
metadata:
|
|
328
|
+
name: gateway
|
|
329
|
+
labels:
|
|
330
|
+
app: gateway
|
|
331
|
+
spec:
|
|
332
|
+
replicas: 2
|
|
333
|
+
selector:
|
|
334
|
+
matchLabels:
|
|
335
|
+
app: gateway
|
|
336
|
+
template:
|
|
337
|
+
metadata:
|
|
338
|
+
labels:
|
|
339
|
+
app: gateway
|
|
340
|
+
spec:
|
|
341
|
+
containers:
|
|
342
|
+
- name: gateway
|
|
343
|
+
image: registry.example.com/gateway:latest
|
|
344
|
+
ports:
|
|
345
|
+
- containerPort: 8080
|
|
346
|
+
resources:
|
|
347
|
+
requests:
|
|
348
|
+
memory: '128Mi'
|
|
349
|
+
cpu: '100m'
|
|
350
|
+
limits:
|
|
351
|
+
memory: '512Mi'
|
|
352
|
+
cpu: '500m'
|
|
353
|
+
livenessProbe:
|
|
354
|
+
httpGet:
|
|
355
|
+
path: /health
|
|
356
|
+
port: 8080
|
|
357
|
+
initialDelaySeconds: 10
|
|
358
|
+
periodSeconds: 30
|
|
359
|
+
readinessProbe:
|
|
360
|
+
httpGet:
|
|
361
|
+
path: /ready
|
|
362
|
+
port: 8080
|
|
363
|
+
initialDelaySeconds: 5
|
|
364
|
+
periodSeconds: 10
|
|
365
|
+
---
|
|
366
|
+
apiVersion: v1
|
|
367
|
+
kind: Service
|
|
368
|
+
metadata:
|
|
369
|
+
name: gateway
|
|
370
|
+
spec:
|
|
371
|
+
selector:
|
|
372
|
+
app: gateway
|
|
373
|
+
ports:
|
|
374
|
+
- protocol: TCP
|
|
375
|
+
port: 80
|
|
376
|
+
targetPort: 8080
|
|
377
|
+
type: ClusterIP
|
|
378
|
+
`,
|
|
379
|
+
},
|
|
380
|
+
];
|
|
381
|
+
function generateHelmValuesContent(envName) {
|
|
382
|
+
return `# =============================================================================
|
|
383
|
+
# Helm Values 模板 — ${envName} 环境
|
|
384
|
+
# =============================================================================
|
|
385
|
+
# 用途:Helm chart 的 values 覆盖文件(helm 类型部署时调用)
|
|
386
|
+
# 位置:.speccore/environments/scripts/values-${envName}.yaml
|
|
387
|
+
# 执行:speccore deploy --env ${envName} --platform <platform>
|
|
388
|
+
#
|
|
389
|
+
# 请根据实际项目修改镜像、副本数、资源限制等。
|
|
390
|
+
# =============================================================================
|
|
391
|
+
|
|
392
|
+
replicaCount: 2
|
|
393
|
+
|
|
394
|
+
image:
|
|
395
|
+
repository: registry.example.com/user-service
|
|
396
|
+
pullPolicy: IfNotPresent
|
|
397
|
+
tag: '${envName}'
|
|
398
|
+
|
|
399
|
+
service:
|
|
400
|
+
type: ClusterIP
|
|
401
|
+
port: 80
|
|
402
|
+
|
|
403
|
+
ingress:
|
|
404
|
+
enabled: false
|
|
405
|
+
|
|
406
|
+
resources:
|
|
407
|
+
limits:
|
|
408
|
+
cpu: 500m
|
|
409
|
+
memory: 512Mi
|
|
410
|
+
requests:
|
|
411
|
+
cpu: 100m
|
|
412
|
+
memory: 128Mi
|
|
413
|
+
|
|
414
|
+
autoscaling:
|
|
415
|
+
enabled: false
|
|
416
|
+
minReplicas: 1
|
|
417
|
+
maxReplicas: 5
|
|
418
|
+
targetCPUUtilizationPercentage: 80
|
|
419
|
+
|
|
420
|
+
nodeSelector: {}
|
|
421
|
+
tolerations: []
|
|
422
|
+
affinity: {}
|
|
423
|
+
`;
|
|
424
|
+
}
|
|
229
425
|
/** update 时初始化环境配置目录 */
|
|
230
426
|
async function initEnvironmentConfigs(projectRoot) {
|
|
231
427
|
const envDir = (0, path_1.join)(projectRoot, '.speccore', 'environments');
|
|
@@ -235,10 +431,27 @@ async function initEnvironmentConfigs(projectRoot) {
|
|
|
235
431
|
const created = [];
|
|
236
432
|
if (!hasYaml) {
|
|
237
433
|
logger_1.logger.info(' 📦 初始化默认环境配置...');
|
|
434
|
+
// v8.3.68+: 创建脚本模板目录
|
|
435
|
+
const scriptsDir = (0, path_1.join)(envDir, 'scripts');
|
|
436
|
+
await (0, fs_extra_1.ensureDir)(scriptsDir);
|
|
437
|
+
// 创建通用脚本模板
|
|
438
|
+
for (const st of SCRIPT_TEMPLATES) {
|
|
439
|
+
const scriptPath = (0, path_1.join)(scriptsDir, st.name);
|
|
440
|
+
if (!(await (0, fs_extra_1.pathExists)(scriptPath))) {
|
|
441
|
+
await (0, fs_extra_1.writeFile)(scriptPath, st.content, 'utf-8');
|
|
442
|
+
created.push(`.speccore/environments/scripts/${st.name}`);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
238
445
|
for (const t of ENV_TEMPLATES) {
|
|
239
446
|
const filePath = (0, path_1.join)(envDir, `${t.name}.yaml`);
|
|
240
447
|
await (0, fs_extra_1.writeFile)(filePath, generateEnvContent(t), 'utf-8');
|
|
241
448
|
created.push(`.speccore/environments/${t.name}.yaml`);
|
|
449
|
+
// v8.3.68+: 为每个环境创建 Helm values 模板
|
|
450
|
+
const valuesPath = (0, path_1.join)(scriptsDir, `values-${t.name}.yaml`);
|
|
451
|
+
if (!(await (0, fs_extra_1.pathExists)(valuesPath))) {
|
|
452
|
+
await (0, fs_extra_1.writeFile)(valuesPath, generateHelmValuesContent(t.name), 'utf-8');
|
|
453
|
+
created.push(`.speccore/environments/scripts/values-${t.name}.yaml`);
|
|
454
|
+
}
|
|
242
455
|
}
|
|
243
456
|
}
|
|
244
457
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-env-configs.js","sourceRoot":"","sources":["../../src/commands/update-env-configs.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"update-env-configs.js","sourceRoot":"","sources":["../../src/commands/update-env-configs.ts"],"names":[],"mappings":"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"}
|