diff --git a/packages/core/pipeline/package.json b/packages/core/pipeline/package.json index b79c14dd..d5f8ef98 100644 --- a/packages/core/pipeline/package.json +++ b/packages/core/pipeline/package.json @@ -2,9 +2,14 @@ "name": "@certd/pipeline", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build": "rollup -c", diff --git a/packages/core/pipeline/src/core/executor.ts b/packages/core/pipeline/src/core/executor.ts index 42bfb710..667ec3cf 100644 --- a/packages/core/pipeline/src/core/executor.ts +++ b/packages/core/pipeline/src/core/executor.ts @@ -12,6 +12,7 @@ import { RegistryItem } from "../registry"; import { Decorator } from "../decorator"; import { IEmailService } from "../service"; import { FileStore } from "./file-store"; +import { TimeoutPromise } from "../utils/util.promise"; export type ExecutorOptions = { userId: any; @@ -31,6 +32,7 @@ export class Executor { lastStatusMap!: RunnableCollection; lastRuntime!: RunHistory; options: ExecutorOptions; + canceled = false; onChanged: (history: RunHistory) => void; constructor(options: ExecutorOptions) { this.options = options; @@ -50,7 +52,9 @@ export class Executor { this.lastStatusMap = new RunnableCollection(lastRuntime?.pipeline); } - async cancel() {} + cancel() { + this.canceled = true; + } async run(runtimeId: any = 0, triggerType: string) { try { @@ -101,11 +105,15 @@ export class Executor { return ResultType.skip; } } - const timer = setInterval(async () => { + const intervalFlushLogId = setInterval(async () => { await this.onChanged(this.runtime); }, 10000); + const timeout = runnable.timeout ?? 20 * 60 * 1000; try { - await run(); + if (this.canceled) { + throw new Error("task canceled"); + } + await TimeoutPromise(run, timeout); this.runtime.success(runnable); return ResultType.success; } catch (e: any) { @@ -113,7 +121,7 @@ export class Executor { throw e; } finally { this.runtime.finally(runnable); - clearInterval(timer); + clearInterval(intervalFlushLogId); await this.onChanged(this.runtime); } } diff --git a/packages/core/pipeline/src/d.ts/pipeline.ts b/packages/core/pipeline/src/d.ts/pipeline.ts index 56487290..a73497c2 100644 --- a/packages/core/pipeline/src/d.ts/pipeline.ts +++ b/packages/core/pipeline/src/d.ts/pipeline.ts @@ -66,6 +66,7 @@ export type Runnable = { strategy?: RunnableStrategy; runnableType?: string; // pipeline, stage, task , step status?: HistoryResult; + timeout?: number; default?: { [key: string]: any; }; diff --git a/packages/core/pipeline/src/utils/util.promise.ts b/packages/core/pipeline/src/utils/util.promise.ts new file mode 100644 index 00000000..e1aec384 --- /dev/null +++ b/packages/core/pipeline/src/utils/util.promise.ts @@ -0,0 +1,13 @@ +export function TimeoutPromise(callback: () => Promise, ms = 30 * 1000) { + let timeout: any; + return Promise.race([ + callback(), + new Promise((resolve, reject) => { + timeout = setTimeout(() => { + reject(new Error(`Task timeout in ${ms} ms`)); + }, ms); + }), + ]).finally(() => { + clearTimeout(timeout); + }); +} diff --git a/packages/plugins/plugin-aliyun/package.json b/packages/plugins/plugin-aliyun/package.json index 774b7db8..d9505c6b 100644 --- a/packages/plugins/plugin-aliyun/package.json +++ b/packages/plugins/plugin-aliyun/package.json @@ -2,9 +2,14 @@ "name": "@certd/plugin-aliyun", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build1": "vue-tsc --noEmit && vite build", diff --git a/packages/plugins/plugin-all/package.json b/packages/plugins/plugin-all/package.json index 8221f54a..909ada22 100644 --- a/packages/plugins/plugin-all/package.json +++ b/packages/plugins/plugin-all/package.json @@ -2,9 +2,14 @@ "name": "@certd/plugin-all", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build2": " vite build", diff --git a/packages/plugins/plugin-cert/package.json b/packages/plugins/plugin-cert/package.json index febfbcd0..c6268909 100644 --- a/packages/plugins/plugin-cert/package.json +++ b/packages/plugins/plugin-cert/package.json @@ -2,9 +2,14 @@ "name": "@certd/plugin-cert", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build": "rollup -c", diff --git a/packages/plugins/plugin-host/package.json b/packages/plugins/plugin-host/package.json index 4eb4a76f..508bf879 100644 --- a/packages/plugins/plugin-host/package.json +++ b/packages/plugins/plugin-host/package.json @@ -2,9 +2,14 @@ "name": "@certd/plugin-host", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build": "rollup -c", diff --git a/packages/plugins/plugin-huawei/package.json b/packages/plugins/plugin-huawei/package.json index 8c5e2b29..66070ecb 100644 --- a/packages/plugins/plugin-huawei/package.json +++ b/packages/plugins/plugin-huawei/package.json @@ -2,9 +2,14 @@ "name": "@certd/plugin-huawei", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build": "rollup -c", diff --git a/packages/plugins/plugin-tencent/package.json b/packages/plugins/plugin-tencent/package.json index aae82988..7639f882 100644 --- a/packages/plugins/plugin-tencent/package.json +++ b/packages/plugins/plugin-tencent/package.json @@ -2,9 +2,14 @@ "name": "@certd/plugin-tencent", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build": "rollup -c", diff --git a/packages/plugins/plugin-util/package.json b/packages/plugins/plugin-util/package.json index 5f679128..d8430aeb 100644 --- a/packages/plugins/plugin-util/package.json +++ b/packages/plugins/plugin-util/package.json @@ -2,9 +2,14 @@ "name": "@certd/plugin-util", "private": false, "version": "1.1.3", - "main": "./dist/bundle.js", - "module": "./dist/bundle.mjs", - "types": "./dist/d/index.d.ts", + "main": "./src/index.ts", + "module": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "main": "./dist/bundle.js", + "module": "./dist/bundle.mjs", + "types": "./dist/d/index.d.ts" + }, "scripts": { "dev": "vite", "build": "rollup -c", diff --git a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts index 18b5875b..2aff0361 100644 --- a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts +++ b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts @@ -221,14 +221,21 @@ export class PipelineService extends BaseService { fileRootDir: this.certdConfig.fileRootDir, }); try { - runningTasks.set(id, executor); + runningTasks.set(historyId, executor); await executor.init(); await executor.run(historyId, triggerType); } catch (e) { logger.error('执行失败:', e); throw e; } finally { - runningTasks.delete(id); + runningTasks.delete(historyId); + } + } + + async cancel(historyId: number) { + const executor = runningTasks.get(historyId); + if (executor) { + executor.cancel(); } }