diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java index 9a257b6b..7dbeb93d 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/PostHandlerManager.java @@ -1,5 +1,9 @@ package cd.casic.ci.process.engine.manager; -public interface PostHandlerManager { +import cd.casic.ci.process.engine.postHandler.PipExecutePostHandler; +import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance; +public interface PostHandlerManager { + public void registerPostHandler(PipExecutePostHandler handler); + public void executePostHandler(PipPipelineHisInstance hisInstance); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultRunContextManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultRunContextManager.java index b81fdb8e..421efbab 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultRunContextManager.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/DefaultRunContextManager.java @@ -51,6 +51,7 @@ public class DefaultRunContextManager implements RunContextManager { private PipPipelineHisInstanceDao hisInstanceDao; @Resource private PipelineService pipelineService; + @Override public Boolean stopPipeline(String pipelineId) { return null; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java new file mode 100644 index 00000000..d12d4505 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java @@ -0,0 +1,39 @@ +package cd.casic.ci.process.engine.manager.impl; + +import cd.casic.ci.process.engine.manager.PostHandlerManager; +import cd.casic.ci.process.engine.postHandler.PipExecutePostHandler; +import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance; +import cd.casic.framework.commons.exception.ServiceException; +import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + +@Component +public class MemoryPostHandlerManager implements PostHandlerManager { + private ConcurrentHashMap> handlerMap = new ConcurrentHashMap<>(); + @Override + public void registerPostHandler(PipExecutePostHandler handler) { + if (handler==null|| StringUtils.isNotEmpty(handler.getPipelineId())) { + throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"注册后置处理器失败"); + } + List orDefault = handlerMap.getOrDefault(handler.getPipelineId(), new CopyOnWriteArrayList<>()); + orDefault.add(handler); + } + + @Override + public void executePostHandler(PipPipelineHisInstance hisInstance) { + String pipelineId = hisInstance.getPipelineId(); + List pipExecutePostHandlers = handlerMap.get(pipelineId); + if (CollectionUtils.isEmpty(pipExecutePostHandlers)) { + return; + } + for (PipExecutePostHandler postHandler : pipExecutePostHandlers) { + postHandler.executeAfterDone(hisInstance); + } + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/PipExecutePostHandler.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/PipExecutePostHandler.java new file mode 100644 index 00000000..df26e110 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/postHandler/PipExecutePostHandler.java @@ -0,0 +1,17 @@ +package cd.casic.ci.process.engine.postHandler; + +import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public abstract class PipExecutePostHandler { + private String taskId; + private String pipelineId; + + /** + * 流水线执行结束需要执行的操作 + * */ + public abstract void executeAfterDone(PipPipelineHisInstance pipPipelineHisInstance); +}