diff --git a/packages/core/pipeline/src/core/executor.ts b/packages/core/pipeline/src/core/executor.ts index 7dcd8b4b..42bfb710 100644 --- a/packages/core/pipeline/src/core/executor.ts +++ b/packages/core/pipeline/src/core/executor.ts @@ -50,6 +50,8 @@ export class Executor { this.lastStatusMap = new RunnableCollection(lastRuntime?.pipeline); } + async cancel() {} + async run(runtimeId: any = 0, triggerType: string) { try { await this.init(); @@ -99,17 +101,20 @@ export class Executor { return ResultType.skip; } } + const timer = setInterval(async () => { + await this.onChanged(this.runtime); + }, 10000); try { await run(); this.runtime.success(runnable); - await this.onChanged(this.runtime); return ResultType.success; } catch (e: any) { this.runtime.error(runnable, e); - await this.onChanged(this.runtime); throw e; } finally { this.runtime.finally(runnable); + clearInterval(timer); + await this.onChanged(this.runtime); } } 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 581dd9bc..18b5875b 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 @@ -16,6 +16,8 @@ import { HistoryLogService } from './history-log-service'; import { logger } from '../../../utils/logger'; import { EmailService } from '../../basic/service/email-service'; +const runningTasks: Map = new Map(); + /** * 证书申请 */ @@ -178,7 +180,7 @@ export class PipelineService extends BaseService { }); } - async run(id, triggerId) { + async run(id: number, triggerId: string) { const entity: PipelineEntity = await this.info(id); const pipeline = JSON.parse(entity.content); @@ -219,11 +221,14 @@ export class PipelineService extends BaseService { fileRootDir: this.certdConfig.fileRootDir, }); try { + runningTasks.set(id, executor); await executor.init(); await executor.run(historyId, triggerType); } catch (e) { logger.error('执行失败:', e); throw e; + } finally { + runningTasks.delete(id); } }