From 19858ca9277b3e54cad4e76a46936578dbba97c1 Mon Sep 17 00:00:00 2001 From: even <827656971@qq.com> Date: Wed, 16 Apr 2025 17:14:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=91=E5=90=AC=E5=99=A8=E7=B1=BB=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E6=8E=A5=E5=8F=A3=E6=9A=82=E6=97=B6=E7=A9=BA=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../engine/control/CallBackControl.java | 4 +- .../listener/MQPipelineCreateListener.java | 41 +- .../listener/MQPipelineDeleteListener.java | 62 ++- .../listener/MQPipelineRestoreListener.java | 60 ++- .../MQPipelineStreamEnabledListener.java | 35 +- .../listener/MQPipelineUpdateListener.java | 63 ++- .../pojo/event/PipelineDeleteEvent.java | 56 +++ .../pojo/event/PipelineRestoreEvent.java | 11 + .../event/PipelineStreamEnabledEvent.java | 13 + .../pojo/event/PipelineUpdateEvent.java | 17 + .../service/AgentPipelineRefService.java | 42 ++ .../engine/service/PipelineGroupService.java | 110 +++++ .../service/PipelineRuntimeService.java | 421 ++++++++++++++++++ .../service/RepoPipelineRefService.java | 74 +++ 15 files changed, 1002 insertions(+), 8 deletions(-) create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineDeleteEvent.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineRestoreEvent.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineStreamEnabledEvent.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineUpdateEvent.java diff --git a/.gitignore b/.gitignore index ebb50c7..3622f49 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ target/ ### VS Code ### .vscode/!/.xcodemap/ !/.idea/ +/.idea/ diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/control/CallBackControl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/control/CallBackControl.java index ba98da7..bcdb9e2 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/control/CallBackControl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/control/CallBackControl.java @@ -15,10 +15,10 @@ import cd.casic.ci.common.pipeline.pojo.event.ProjectPipelineCallBack; import cd.casic.ci.common.pipeline.service.utils.LogUtils; import cd.casic.ci.process.api.engine.pojo.PipelineInfo; -import cd.casic.ci.process.api.engine.pojo.event.PipelineStreamEnabledEvent; import cd.casic.ci.process.api.process.pojo.ProjectPipelineCallBackHistory; import cd.casic.ci.process.api.process.pojo.pipeline.ModelDetail; import cd.casic.ci.process.process.constant.AllocIdGenerateConstant; +import cd.casic.ci.process.process.engine.pojo.event.PipelineStreamEnabledEvent; import cd.casic.ci.process.process.service.base.PipelineBuildDetailServiceImpl; import cd.casic.ci.process.process.service.base.engin.service.PipelineRepositoryService; import cd.casic.ci.process.process.service.base.engin.service.ProjectPipelineCallBackService; @@ -184,7 +184,7 @@ public class CallBackControl { event.getUserId(), event.getGitProjectId(), event.getGitProjectUrl(), - event.isEnable() + event.getEnable() ); sendToCallBack(new CallBackData(CallBackEvent.STREAM_ENABLED, streamEnabledEvent), list); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineCreateListener.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineCreateListener.java index dc92d40..93e7a6f 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineCreateListener.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineCreateListener.java @@ -1,12 +1,15 @@ package cd.casic.ci.process.process.engine.listener; +import cd.casic.ci.common.pipeline.service.utils.LogUtils; import cd.casic.ci.process.process.engine.control.CallBackControl; import cd.casic.ci.process.process.engine.pojo.event.PipelineCreateEvent; import cd.casic.ci.process.process.engine.service.AgentPipelineRefService; import cd.casic.ci.process.process.engine.service.PipelineAtomStatisticsService; import cd.casic.ci.process.process.engine.service.PipelineWebhookService; import cd.casic.ci.process.process.engine.service.RepoPipelineRefService; +import cd.casic.framework.commons.util.watcher.Watcher; import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import com.github.fppt.jedismock.operations.transactions.Watch; import org.springframework.stereotype.Service; /** * MQ实现的流水线创建事件 @@ -21,7 +24,43 @@ public class MQPipelineCreateListener extends AbstractRedisStreamMessageListener private AgentPipelineRefService agentPipelineRefService; private RepoPipelineRefService repoPipelineRefService; @Override - public void onMessage(PipelineCreateEvent message) { + public void onMessage(PipelineCreateEvent event) { + String id = String.format("%s|CreatePipeline#%s|%s", + event.getTraceId(),event.getPipelineId(),event.getUserId() + ); + Watcher watcher = new Watcher(id); + watcher.safeAround("callback",()-> { + callBackControl.pipelineCreateEvent(event.getProjectId(), event.getPipelineId()); + }); + + watcher.safeAround("updateAtomPipelineNum",()->{ + pipelineAtomStatisticsService.updateAtomPipelineNum( + event.getProjectId(), + event.getPipelineId(), + event.getVersion()!=null ?event.getVersion(): 1, + false, + false + ); + }); + + watcher.safeAround("updateAgentPipelineRef",()->{ + agentPipelineRefService.updateAgentPipelineRef(event.getUserId(), "create_pipeline", event.getProjectId(), event.getPipelineId()); + }); + + watcher.safeAround("addWebhook",()-> { + pipelineWebhookService.addWebhook( + event.getProjectId(), + event.getPipelineId(), + event.getVersion(), + event.getUserId() + ); + }); + + watcher.safeAround("savePipelineRefRepository",()->{ + repoPipelineRefService.updateRepoPipelineRef(event.getUserId(), "create_pipeline", event.getProjectId(), event.getPipelineId()); + }) ; + + LogUtils.printCostTimeWE(watcher); } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineDeleteListener.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineDeleteListener.java index 29f3687..aaf3e95 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineDeleteListener.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineDeleteListener.java @@ -1,9 +1,13 @@ package cd.casic.ci.process.process.engine.listener; +import cd.casic.ci.common.pipeline.service.utils.LogUtils; import cd.casic.ci.process.process.engine.control.CallBackControl; import cd.casic.ci.process.process.engine.pojo.event.PipelineCreateEvent; +import cd.casic.ci.process.process.engine.pojo.event.PipelineDeleteEvent; import cd.casic.ci.process.process.engine.service.*; +import cd.casic.framework.commons.util.watcher.Watcher; import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; /** * MQ实现的流水线删除事件 @@ -11,16 +15,70 @@ import org.springframework.stereotype.Service; * @version 1.0 */ @Service -public class MQPipelineDeleteListener extends AbstractRedisStreamMessageListener { +public class MQPipelineDeleteListener extends AbstractRedisStreamMessageListener { + @Resource private PipelineRuntimeService pipelineRuntimeService; + @Resource private PipelineWebhookService pipelineWebhookService; + @Resource private PipelineGroupService pipelineGroupService; + @Resource private PipelineAtomStatisticsService pipelineAtomStatisticsService; + @Resource private CallBackControl callBackControl; + @Resource private AgentPipelineRefService agentPipelineRefService; + @Resource private RepoPipelineRefService repoPipelineRefService; @Override - public void onMessage(PipelineCreateEvent message) { + public void onMessage(PipelineDeleteEvent event) { + String id = String.format("%s|DeletePipeline#%s|%s}", + event.getTraceId(), + event.getPipelineId(), + event.isClearUpModel()); + Watcher watcher = new Watcher(id); + final String projectId = event.getProjectId(); + final String pipelineId = event.getPipelineId(); + final String userId = event.getUserId(); + watcher.safeAround("cancelPendingTask",()->{ + pipelineRuntimeService.cancelPendingTask(projectId, pipelineId, userId); + }); + + if (event.isClearUpModel()) { + watcher.safeAround("deleteExt",()-> { + pipelineGroupService.deleteAllUserFavorByPipeline(userId, projectId, pipelineId); // 删除收藏该流水线上所有记录 + pipelineGroupService.deletePipelineLabel(userId, projectId, pipelineId); + }); + } + + watcher.safeAround("deleteWebhook",()->{ + pipelineWebhookService.deleteWebhook(projectId, pipelineId, userId); + }); + + watcher.safeAround("updateAgentPipelineRef",()->{ + agentPipelineRefService.updateAgentPipelineRef(userId, "delete_pipeline", projectId, pipelineId); + }); + + watcher.safeAround("updateAtomPipelineNum",()->{ + pipelineAtomStatisticsService.updateAtomPipelineNum( + event.getProjectId(), + event.getPipelineId(), + null, + true, + false + ); + }); + + watcher.safeAround("updateAgentPipelineRef",()->{ + repoPipelineRefService.updateRepoPipelineRef(userId, "delete_pipeline", projectId, pipelineId); + }); + + watcher.safeAround("callback", + ()->{ + callBackControl.pipelineDeleteEvent(event.getProjectId(), event.getPipelineId()); + }); + + LogUtils.printCostTimeWE(watcher); } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineRestoreListener.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineRestoreListener.java index 3fdd38f..0a80df5 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineRestoreListener.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineRestoreListener.java @@ -1,8 +1,66 @@ package cd.casic.ci.process.process.engine.listener; + +import cd.casic.ci.common.pipeline.service.utils.LogUtils; +import cd.casic.ci.process.process.engine.control.CallBackControl; +import cd.casic.ci.process.process.engine.pojo.event.PipelineDeleteEvent; +import cd.casic.ci.process.process.engine.pojo.event.PipelineRestoreEvent; +import cd.casic.ci.process.process.engine.service.AgentPipelineRefService; +import cd.casic.ci.process.process.engine.service.PipelineAtomStatisticsService; +import cd.casic.ci.process.process.engine.service.RepoPipelineRefService; +import cd.casic.framework.commons.util.watcher.Watcher; +import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + /** * MQ实现的流水线恢复事件 * * @version 1.0 */ -public class MQPipelineRestoreListener { +@Service +public class MQPipelineRestoreListener extends AbstractRedisStreamMessageListener { + @Resource + private AgentPipelineRefService agentPipelineRefService; + @Resource + private PipelineAtomStatisticsService pipelineAtomStatisticsService; + @Resource + private CallBackControl callBackControl; + @Resource + private RepoPipelineRefService repoPipelineRefService; + + @Override + public void onMessage(PipelineRestoreEvent event) { + String id = String.format("%s|RestorePipeline#%s|%s}", + event.getTraceId(), + event.getPipelineId(), + event.getUserId() + ) ; + Watcher watcher = new Watcher(id); + try { + watcher.start("updateAgentPipelineRef"); + String userId = event.getUserId(); + String projectId = event.getProjectId(); + String pipelineId = event.getPipelineId(); + Integer version = event.getVersion(); + agentPipelineRefService.updateAgentPipelineRef(userId, "restore_pipeline", projectId, pipelineId); + + watcher.stop(); + watcher.start("updateAtomPipelineNum"); + pipelineAtomStatisticsService.updateAtomPipelineNum( + projectId, + pipelineId, + version, + false, + true + ); + watcher.stop(); + watcher.start("callback"); + callBackControl.pipelineRestoreEvent(projectId, pipelineId); + repoPipelineRefService.updateRepoPipelineRef(userId, "restore_pipeline", projectId, pipelineId); + + } finally { + watcher.stop(); + LogUtils.printCostTimeWE(watcher); + } + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineStreamEnabledListener.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineStreamEnabledListener.java index 2c973ea..2b7b32a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineStreamEnabledListener.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineStreamEnabledListener.java @@ -1,8 +1,41 @@ package cd.casic.ci.process.process.engine.listener; + +import cd.casic.ci.common.pipeline.service.utils.LogUtils; +import cd.casic.ci.process.process.engine.control.CallBackControl; +import cd.casic.ci.process.process.engine.pojo.event.PipelineRestoreEvent; +import cd.casic.ci.process.process.engine.pojo.event.PipelineStreamEnabledEvent; +import cd.casic.framework.commons.util.watcher.Watcher; +import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + /** * MQ实现的流水线开启Stream事件 * * @version 1.0 */ -public class MQPipelineStreamEnabledListener { +@Service +public class MQPipelineStreamEnabledListener extends AbstractRedisStreamMessageListener { + @Resource + private CallBackControl callBackControl; + + @Override + public void onMessage(PipelineStreamEnabledEvent event) { + String id = String.format("%s|RestorePipeline#%s|%s}", + event.getTraceId(), + event.getPipelineId(), + event.getUserId() + ) ; + Watcher watcher =new Watcher(id); + try { + watcher.start("callback"); + callBackControl.pipelineStreamEnabledEvent( + event + ); + watcher.stop(); + } finally { + watcher.stop(); + LogUtils.printCostTimeWE(watcher); + } + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineUpdateListener.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineUpdateListener.java index e7c7109..1f7ffa4 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineUpdateListener.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/listener/MQPipelineUpdateListener.java @@ -1,8 +1,69 @@ package cd.casic.ci.process.process.engine.listener; + +import cd.casic.ci.common.pipeline.service.utils.LogUtils; +import cd.casic.ci.process.process.engine.control.CallBackControl; +import cd.casic.ci.process.process.engine.pojo.event.PipelineUpdateEvent; +import cd.casic.ci.process.process.engine.service.AgentPipelineRefService; +import cd.casic.ci.process.process.engine.service.PipelineAtomStatisticsService; +import cd.casic.ci.process.process.engine.service.PipelineWebhookService; +import cd.casic.ci.process.process.engine.service.RepoPipelineRefService; +import cd.casic.framework.commons.util.watcher.Watcher; +import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import org.springframework.stereotype.Service; + /** * MQ实现的流水线更新事件 * * @version 1.0 */ -public class MQPipelineUpdateListener { +@Service +public class MQPipelineUpdateListener extends AbstractRedisStreamMessageListener { + private PipelineAtomStatisticsService pipelineAtomStatisticsService; + private CallBackControl callBackControl; + private AgentPipelineRefService agentPipelineRefService; + private PipelineWebhookService pipelineWebhookService; + private RepoPipelineRefService repoPipelineRefService; + + @Override + public void onMessage(PipelineUpdateEvent event) { + String id = String.format("%s|RestorePipeline#%s|%s}", + event.getTraceId(), + event.getPipelineId(), + event.getUserId() + ) ; + Watcher watcher = new Watcher(id); + final String projectId = event.getProjectId(); + final String pipelineId = event.getPipelineId(); + final String userId = event.getUserId(); + final Integer version = event.getVersion(); + + watcher.safeAround("callback",()->{ + callBackControl.pipelineUpdateEvent(projectId, pipelineId); + }); + + watcher.safeAround("updateAgentPipelineRef",()->{ + agentPipelineRefService.updateAgentPipelineRef(userId, "update_pipeline", projectId, pipelineId); + }); + + watcher.safeAround("updateAtomPipelineNum",()->{ + pipelineAtomStatisticsService.updateAtomPipelineNum(projectId,pipelineId, version,false,false); + }); + + watcher.safeAround("addWebhook",()->{ + pipelineWebhookService.addWebhook( + projectId , + pipelineId , + version , + userId + ); + }); + + watcher.safeAround("updateAgentPipelineRef",()->{ + + repoPipelineRefService.updateRepoPipelineRef(userId, "update_pipeline", projectId, pipelineId); + + }); + + LogUtils.printCostTimeWE(watcher); + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineDeleteEvent.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineDeleteEvent.java new file mode 100644 index 0000000..6a38d41 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineDeleteEvent.java @@ -0,0 +1,56 @@ +package cd.casic.ci.process.process.engine.pojo.event; + + +import cd.casic.ci.common.pipeline.pojo.BuildNo; +import cd.casic.ci.common.pipeline.pojo.element.Element; +import cd.casic.ci.event.enums.ActionType; +import cd.casic.ci.event.pojo.pipeline.IPipelineEvent; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Map; + +/** + * 创建流水线事件 + * + * @version 1.0 + */ +import lombok.Getter; +import lombok.ToString; + +/** + * 删除流水线事件 + * + * @version 1.0 + */ +@Getter +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +//@Event(StreamBinding.PIPELINE_DELETE) +public class PipelineDeleteEvent extends IPipelineEvent { + + private final boolean clearUpModel; + + public PipelineDeleteEvent( + String source, + String projectId, + String pipelineId, + String userId, + boolean clearUpModel + ) { + this(source, projectId, pipelineId, userId, clearUpModel, ActionType.START, 0); + } + + public PipelineDeleteEvent( + String source, + String projectId, + String pipelineId, + String userId, + boolean clearUpModel, + ActionType actionType, + int delayMills + ) { + super(actionType, source, projectId, pipelineId, userId, delayMills); + this.clearUpModel = clearUpModel; + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineRestoreEvent.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineRestoreEvent.java new file mode 100644 index 0000000..7d8cd5d --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineRestoreEvent.java @@ -0,0 +1,11 @@ +package cd.casic.ci.process.process.engine.pojo.event; + +import cd.casic.ci.event.pojo.pipeline.IPipelineEvent; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PipelineRestoreEvent extends IPipelineEvent { + private Integer version; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineStreamEnabledEvent.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineStreamEnabledEvent.java new file mode 100644 index 0000000..9bbd63a --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineStreamEnabledEvent.java @@ -0,0 +1,13 @@ +package cd.casic.ci.process.process.engine.pojo.event; + +import cd.casic.ci.event.pojo.pipeline.IPipelineEvent; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PipelineStreamEnabledEvent extends IPipelineEvent { + private Long gitProjectId; + private String gitProjectUrl; + private Boolean enable; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineUpdateEvent.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineUpdateEvent.java new file mode 100644 index 0000000..182b331 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/pojo/event/PipelineUpdateEvent.java @@ -0,0 +1,17 @@ +package cd.casic.ci.process.process.engine.pojo.event; + +import cd.casic.ci.common.pipeline.pojo.BuildNo; +import cd.casic.ci.event.pojo.pipeline.IPipelineEvent; +import lombok.Data; +import lombok.EqualsAndHashCode; +/** + * 更新流水线事件 + * + * @version 1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class PipelineUpdateEvent extends IPipelineEvent { + private Integer version; + private BuildNo buildNo; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/AgentPipelineRefService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/AgentPipelineRefService.java index 9a24070..5c15754 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/AgentPipelineRefService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/AgentPipelineRefService.java @@ -1,4 +1,46 @@ package cd.casic.ci.process.process.engine.service; + +import cd.casic.ci.common.pipeline.Model; + +/** + * 构建机流水线引用服务接口 + */ public interface AgentPipelineRefService { + + /** + * 更新构建机流水线引用 + * + * @param userId 用户ID + * @param action 操作类型 + * @param projectId 项目ID + * @param pipelineId 流水线ID + */ + void updateAgentPipelineRef(String userId, String action, String projectId, String pipelineId); + + /** + * 分析流水线引用并保存 + * + * @param userId 用户ID + * @param action 操作类型 + * @param projectId 项目ID + * @param pipelineId 流水线ID + * @param pipelineModel 流水线模型 + */ + void analysisPipelineRefAndSave( + String userId, + String action, + String projectId, + String pipelineId, + Model pipelineModel + ); + + /** + * 更新流水线引用 + * + * @param userId 用户ID + * @param projectId 项目ID + * @param pipelineId 流水线ID + */ + void updatePipelineRef(String userId, String projectId, String pipelineId); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineGroupService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineGroupService.java index 7c5804e..508d5a1 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineGroupService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineGroupService.java @@ -1,4 +1,114 @@ package cd.casic.ci.process.process.engine.service; +import cd.casic.ci.process.api.process.pojo.classify.*; +import cd.casic.ci.process.process.dataObject.TPipelineFavorRecord; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 流水线分组服务接口 + */ public interface PipelineGroupService { + + /** + * 获取分组列表 + */ + List getGroups(String userId, String projectId); + + /** + * 获取指定流水线的分组列表 + */ + List getGroups(String userId, String projectId, String pipelineId); + + /** + * 添加分组 + */ + Boolean addGroup(String userId, PipelineGroupCreate pipelineGroup); + + /** + * 更新分组 + */ + Boolean updateGroup(String userId, PipelineGroupUpdate pipelineGroup); + + /** + * 删除分组 + */ + Boolean deleteGroup(String userId, String projectId, String groupId); + + /** + * 添加标签 + */ + Boolean addLabel(String userId, String projectId, PipelineLabelCreate pipelineLabel); + + /** + * 删除标签 + */ + Boolean deleteLabel(String userId, String projectId, String labelId); + + /** + * 更新标签 + */ + Boolean updateLabel(String userId, String projectId, PipelineLabelUpdate pipelineLabel); + + /** + * 删除流水线标签 + */ + void deletePipelineLabel(String userId, String projectId, String pipelineId); + + /** + * 添加流水线标签 + */ + void addPipelineLabel(String userId, String projectId, String pipelineId, List labelIds); + + /** + * 更新流水线标签 + */ + void updatePipelineLabel(String userId, String projectId, String pipelineId, List labelIds); + + /** + * 获取视图标签到流水线的映射 + */ + Map> getViewLabelToPipelinesMap( + String projectId, + List labels + ); + + /** + * 获取分组到标签的映射 + */ + Map> getGroupToLabelsMap(String projectId, List labels); + + /** + * 收藏流水线 + */ + Boolean favorPipeline(String userId, String projectId, String pipelineId, Boolean favor); + + /** + * 删除流水线相关的所有收藏 + */ + Integer deleteAllUserFavorByPipeline(String userId, String projectId, String pipelineId); + + /** + * 获取收藏的流水线列表 + */ + List getFavorPipelines(String userId, String projectId); + + /** + * 获取流水线分组标签 + */ + Map> getPipelinesGroupLabel( + Collection pipelineIds, + String projectId + ); + + /** + * 分页获取收藏的流水线 + */ + TPipelineFavorRecord getFavorPipelinesPage( + String userId, + Integer page, + Integer pageSize + ); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineRuntimeService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineRuntimeService.java index b00b428..2ad4244 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineRuntimeService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/PipelineRuntimeService.java @@ -1,4 +1,425 @@ package cd.casic.ci.process.process.engine.service; +import cd.casic.ci.common.pipeline.Model; +import cd.casic.ci.common.pipeline.enums.BuildStatus; +import cd.casic.ci.common.pipeline.enums.ChannelCode; +import cd.casic.ci.common.pipeline.enums.StartType; +import cd.casic.ci.common.pipeline.pojo.BuildParameters; +import cd.casic.ci.common.pipeline.pojo.ErrorInfo; +import cd.casic.ci.common.pipeline.pojo.time.BuildRecordTimeCost; +import cd.casic.ci.process.api.engine.pojo.BuildInfo; +import cd.casic.ci.process.api.process.enums.HistorySearchType; +import cd.casic.ci.process.api.process.pojo.*; +import cd.casic.ci.process.api.process.pojo.app.StartBuildContext; +import cd.casic.ci.process.api.process.pojo.pipeline.PipelineLatestBuild; +import cd.casic.ci.process.process.dataObject.TPipelineBuildSummaryRecord; +import cd.casic.ci.process.process.dataObject.TPipelineInfoRecord; +import cd.casic.ci.process.process.pojo.LatestRunningBuild; +import cd.casic.ci.process.process.pojo.PipelineFilterParam; +import org.apache.commons.lang3.tuple.Pair; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 流水线运行时相关的服务接口 + */ public interface PipelineRuntimeService { + + /** + * 取消待处理的任务 + */ + void cancelPendingTask(String projectId, String pipelineId, String userId); + + /** + * 获取构建信息 + */ + BuildInfo getBuildInfo(String projectId, String buildId); + + /** + * 获取构建信息 + */ + BuildInfo getBuildInfo(String projectId, String pipelineId, String buildId); + + /** + * 获取运行中的构建数量 + */ + int getRunningBuildCount(String projectId, String pipelineId); + + /** + * 根据并发组获取构建列表 + */ + List> getBuildInfoListByConcurrencyGroup( + String projectId, + String concurrencyGroup, + List status + ); + + /** + * 获取构建号 + */ + Map getBuildNoByByPair(Set buildIds, String projectId); + + /** + * 获取构建摘要记录 + */ + TPipelineBuildSummaryRecord getBuildSummaryRecord(String projectId, String pipelineId); + + /** + * 获取流水线构建记录 + */ + TPipelineInfoRecord getBuildPipelineRecords( + String projectId, + ChannelCode channelCode, + Collection pipelineIds, + PipelineSortType sortType, + List favorPipelines, + List authPipelines, + String viewId, + List pipelineFilterParamList, + Boolean permissionFlag, + Integer page, + Integer pageSize + ); + + /** + * 获取最新构建 + */ + Map getLatestBuild(String projectId, List pipelineIds); + + /** + * 获取流水线构建历史 + */ + List listPipelineBuildHistory( + String projectId, + String pipelineId, + int offset, + int limit, + Boolean updateTimeDesc + ); + + /** + * 获取流水线构建历史 + */ + List listPipelineBuildHistory( + String projectId, + String pipelineId, + int offset, + int limit, + List materialAlias, + String materialUrl, + List materialBranch, + String materialCommitId, + String materialCommitMessage, + List status, + List trigger, + Long queueTimeStartTime, + Long queueTimeEndTime, + Long startTimeStartTime, + Long startTimeEndTime, + Long endTimeStartTime, + Long endTimeEndTime, + Long totalTimeMin, + Long totalTimeMax, + String remark, + Integer buildNoStart, + Integer buildNoEnd, + String buildMsg, + List startUser, + Boolean updateTimeDesc, + Boolean debug, + List triggerAlias, + List triggerBranch, + List triggerUser + ); + + /** + * 更新构建备注 + */ + void updateBuildRemark(String projectId, String pipelineId, String buildId, String remark); + + /** + * 获取历史条件仓库 + */ + List getHistoryConditionRepo( + String projectId, + String pipelineId, + Integer debugVersion, + String search, + HistorySearchType type + ); + + /** + * 获取历史条件分支 + */ + List getHistoryConditionBranch( + String projectId, + String pipelineId, + List aliasList, + Integer debugVersion, + String search, + HistorySearchType type + ); + + /** + * 获取构建历史 + */ + BuildHistory getBuildHistoryByBuildNum( + String projectId, + String pipelineId, + Integer buildNum, + Set statusSet, + Boolean debug + ); + + /** + * 获取构建基本信息 + */ + Map getBuildBasicInfoByIds(Set buildIds); + + /** + * 获取构建历史 + */ + BuildHistory getBuildHistoryById(String projectId, String buildId); + + /** + * 获取启动用户 + */ + String getStartUser(String projectId, String buildId); + + /** + * 获取构建历史 + */ + List getBuildHistoryByIds( + Set buildIds, + String startBeginTime, + String endBeginTime, + String projectId + ); + + /** + * 取消构建 + */ + Boolean cancelBuild( + String projectId, + String pipelineId, + String buildId, + String userId, + int executeCount, + BuildStatus buildStatus, + Boolean terminateFlag + ); + + /** + * 开始构建 + */ + BuildId startBuild(Model fullModel, StartBuildContext context); + + /** + * 更新构建号 + */ + void updateBuildNo(String projectId, String pipelineId, int buildNo, Boolean debug); + + /** + * 更新执行次数 + */ + void updateExecuteCount(String projectId, String buildId, int executeCount); + + /** + * 开始最新运行构建 + */ + void startLatestRunningBuild(LatestRunningBuild latestRunningBuild); + + /** + * 完成最新运行构建 + */ + void finishLatestRunningBuild( + LatestRunningBuild latestRunningBuild, + BuildStatus currentBuildStatus, + List errorInfoList, + BuildRecordTimeCost timeCost + ); + + /** + * 获取构建参数 + */ + List getBuildParametersFromStartup( + String projectId, + String buildId + ); + + /** + * 获取执行时间 + */ + Long getExecuteTime(String projectId, String buildId); + + /** + * 获取上次构建 + */ + BuildInfo getLastTimeBuild(String projectId, String pipelineId, Boolean debug); + + /** + * 获取流水线构建历史数量 + */ + int getPipelineBuildHistoryCount(String projectId, String pipelineId, Integer debugVersion); + + /** + * 获取构建 + */ + List getBuilds( + String projectId, + String pipelineId, + Set buildStatus, + Integer debugVersion + ); + + /** + * 获取流水线构建历史数量 + */ + int getPipelineBuildHistoryCount( + String projectId, + String pipelineId, + List materialAlias, + String materialUrl, + List materialBranch, + String materialCommitId, + String materialCommitMessage, + List status, + List trigger, + Long queueTimeStartTime, + Long queueTimeEndTime, + Long startTimeStartTime, + Long startTimeEndTime, + Long endTimeStartTime, + Long endTimeEndTime, + Long totalTimeMin, + Long totalTimeMax, + String remark, + Integer buildNoStart, + Integer buildNoEnd, + String buildMsg, + List startUser, + Boolean debug, + List triggerAlias, + List triggerBranch, + List triggerUser + ); + + /** + * 获取总构建历史数量 + */ + int getTotalBuildHistoryCount( + String projectId, + String pipelineId, + List status, + Long startTimeEndTime + ); + + /** + * 获取所有构建号 + */ + Collection getAllBuildNum(String projectId, String pipelineId, Integer debugVersion); + + /** + * 获取最新构建ID + */ + String getLatestBuildId(String projectId, String pipelineId); + + /** + * 获取最新完成构建ID + */ + String getLatestFinishedBuildId(String projectId, String pipelineId); + + /** + * 获取最新成功构建ID + */ + String getLatestSucceededBuildId(String projectId, String pipelineId); + + /** + * 获取最新失败构建ID + */ + String getLatestFailedBuildId(String projectId, String pipelineId); + + /** + * 根据构建号获取构建ID + */ + String getBuildIdByBuildNum( + String projectId, + String pipelineId, + int buildNum, + Integer debugVersion + ); + + /** + * 更新构建信息状态为排队 + */ + void updateBuildInfoStatus2Queue(String projectId, String buildId, BuildStatus oldStatus, String showMsg); + + /** + * 更新制品列表 + */ + Boolean updateArtifactList( + String projectId, + String pipelineId, + String buildId, + String artifactListJsonString + ); + + /** + * 更新构建历史阶段状态 + */ + void updateBuildHistoryStageState(String projectId, String buildId, List allStageStatus); + + /** + * 更新推荐版本 + */ + void updateRecommendVersion(String projectId, String buildId, String recommendVersion); + + /** + * 更新构建参数 + */ + Boolean updateBuildParameters( + String projectId, + String pipelineId, + String buildId, + Collection buildParameters, + Boolean debug + ); + + /** + * 并发取消构建流水线 + */ + void concurrencyCancelBuildPipeline( + String projectId, + String pipelineId, + String buildId, + String userId, + String groupName, + String detailUrl + ); + + /** + * 更新异步状态 + */ + void updateAsyncStatus( + String projectId, + String pipelineId, + String buildId, + String taskId, + int executeCount, + String asyncStatus + ); + + /** + * 获取构建变量服务 + */ + Map getBuildVariableService( + String projectId, + String pipelineId, + String buildId, + Set keys + ); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/RepoPipelineRefService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/RepoPipelineRefService.java index 3992545..2c10cb6 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/RepoPipelineRefService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/engine/service/RepoPipelineRefService.java @@ -1,4 +1,78 @@ package cd.casic.ci.process.process.engine.service; + + +import cd.casic.ci.common.pipeline.Model; +import cd.casic.ci.common.pipeline.enums.RepositoryConfig; +import cd.casic.ci.common.pipeline.pojo.element.Element; + +import java.util.Map; + +/** + * 流水线代码库使用服务接口 + * @version 1.0 + */ public interface RepoPipelineRefService { + + /** + * 更新代码库流水线引用 + * + * @param userId 用户ID + * @param action 操作类型 + * @param projectId 项目ID + * @param pipelineId 流水线ID + */ + void updateRepoPipelineRef(String userId, String action, String projectId, String pipelineId); + + /** + * 更新流水线引用 + * + * @param userId 用户ID + * @param projectId 项目ID + * @param pipelineId 流水线ID + */ + void updatePipelineRef(String userId, String projectId, String pipelineId); + + /** + * 更新所有流水线引用 + * + * @param projectId 项目ID,可为空 + */ + void updateAllPipelineRef(String projectId); + + /** + * 分析流水线引用并保存 + * + * @param userId 用户ID + * @param action 操作类型 + * @param projectId 项目ID + * @param pipelineId 流水线ID + * @param model 流水线模型 + * @param channel 渠道 + */ + void analysisPipelineRefAndSave( + String userId, + String action, + String projectId, + String pipelineId, + Model model, + String channel + ); + + /** + * 获取任务参数 + * + * @param element 元素 + * @return 任务参数Map + */ + Map getTaskParams(Element element); + + /** + * 获取市场构建代码库配置 + * + * @param input 输入参数 + * @param variables 变量Map + * @return 代码库配置 + */ + RepositoryConfig getMarketBuildRepoConfig(Map input, Map variables); }