diff --git a/modules/module-ci-commons/pom.xml b/modules/module-ci-commons/pom.xml
index 28ea6509..94750763 100644
--- a/modules/module-ci-commons/pom.xml
+++ b/modules/module-ci-commons/pom.xml
@@ -23,6 +23,10 @@
cd.casic.boot
module-system-api
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
\ No newline at end of file
diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/commons/Pagination.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/commons/Pagination.java
new file mode 100644
index 00000000..5edebf77
--- /dev/null
+++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/commons/Pagination.java
@@ -0,0 +1,26 @@
+package cd.casic.ci.commons.bean.commons;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @ClassName Pagination
+ * @Author hopeli
+ * @Date 2025/5/2 21:32
+ * @Version 1.0
+ */
+@Data
+public class Pagination implements Serializable {
+ @Serial
+ private static final long serialVersionUID = 5016662499561189494L;
+ private int pageSize = 10;
+ private int currentPage = 1;
+ private int totalRecord;
+ private int totalPage;
+ private int beginIndex;
+ private int endIndex;
+ private List dataList;
+}
diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/jdbc/JdbcTemplate.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/jdbc/JdbcTemplate.java
new file mode 100644
index 00000000..c6d08f6b
--- /dev/null
+++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/jdbc/JdbcTemplate.java
@@ -0,0 +1,26 @@
+package cd.casic.ci.commons.bean.jdbc;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.sql.DataSource;
+
+/**
+ * @ClassName JdbcTemplate
+ * @Author hopeli
+ * @Date 2025/5/2 21:29
+ * @Version 1.0
+ */
+
+public class JdbcTemplate extends org.springframework.jdbc.core.JdbcTemplate {
+ private static Logger logger = LoggerFactory.getLogger(JdbcTemplate.class);
+
+ public JdbcTemplate(DataSource dataSource) {
+ super(dataSource);
+ }
+
+ public JdbcTemplate(DataSource dataSource, boolean lazyInit) {
+ super(dataSource, lazyInit);
+ }
+
+}
diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/Join.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/Join.java
new file mode 100644
index 00000000..61d159d3
--- /dev/null
+++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/Join.java
@@ -0,0 +1,18 @@
+package cd.casic.ci.commons.join.annototion;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @ClassName Join
+ * @Author hopeli
+ * @Date 2025/5/2 18:38
+ * @Version 1.0
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Join {
+ Class model() default Object.class;
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/core/context/AppHomeContext.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/core/context/AppHomeContext.java
new file mode 100644
index 00000000..3dbeed68
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/core/context/AppHomeContext.java
@@ -0,0 +1,22 @@
+package cd.casic.module.process.core.context;
+
+/**
+ * @ClassName AppHomeContext
+ * @Author hopeli
+ * @Date 2025/5/2 18:25
+ * @Version 1.0
+ */
+public class AppHomeContext {
+ private static String appHome;
+
+ public AppHomeContext() {
+ }
+
+ public static String getAppHome() {
+ return appHome;
+ }
+
+ public static void setAppHome(String appHome) {
+ AppHomeContext.appHome = appHome;
+ }
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/engine/execute/impl/PipelineExecServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/engine/execute/impl/PipelineExecServiceImpl.java
index b0a794ea..85994e83 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/engine/execute/impl/PipelineExecServiceImpl.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/engine/execute/impl/PipelineExecServiceImpl.java
@@ -4,7 +4,7 @@ import cd.casic.ci.commons.bean.engine.execute.PipelineDetails;
import cd.casic.ci.commons.bean.engine.execute.PipelineRunMsg;
import cd.casic.ci.commons.bean.engine.postprocess.Postprocess;
import cd.casic.ci.commons.bean.process.definition.Pipeline;
-import cd.casic.ci.commons.bean.process.definition.Variable;
+import cd.casic.module.process.support.variable.model.Variable;
import cd.casic.ci.commons.bean.process.instance.PipelineInstance;
import cd.casic.ci.commons.bean.process.instance.PipelineInstanceQuery;
import cd.casic.ci.commons.bean.process.setting.Scm;
@@ -19,7 +19,7 @@ import cd.casic.module.process.support.postprocess.service.PostprocessExecServic
import cd.casic.module.process.engine.task.TasksExecService;
import cd.casic.module.process.pipeline.instance.service.PipelineInstanceServiceImpl;
import cd.casic.module.process.process.definition.PipelineService;
-import cd.casic.module.process.process.definition.VariableService;
+import cd.casic.module.process.support.variable.service.VariableService;
import cd.casic.module.process.process.instance.PipelineInstanceService;
import cd.casic.module.process.process.setting.ResourcesService;
import cd.casic.module.process.process.setting.ScmService;
@@ -27,7 +27,7 @@ import cd.casic.module.process.process.stage.StageExecService;
import cd.casic.module.process.process.stage.StageService;
import cd.casic.module.process.support.agent.service.AgentService;
import cd.casic.module.process.support.disk.service.DiskService;
-import cd.casic.module.process.support.home.PipelineVersionService;
+import cd.casic.module.process.support.version.service.PipelineVersionService;
import cd.casic.module.process.support.util.PipelineUtilService;
import cd.casic.module.process.support.util.util.PipelineFinal;
import cd.casic.module.process.toolkit.join.JoinTemplate;
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/definition/impl/PipelineServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/definition/impl/PipelineServiceImpl.java
index bd65ebe2..5b966474 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/definition/impl/PipelineServiceImpl.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/definition/impl/PipelineServiceImpl.java
@@ -5,7 +5,6 @@ import cd.casic.ci.commons.bean.process.definition.*;
import cd.casic.ci.commons.bean.process.instance.PipelineInstance;
import cd.casic.ci.commons.bean.utils.PipelineFileUtil;
import cd.casic.ci.commons.bean.utils.PipelineUtil;
-import cd.casic.framework.commons.exception.ErrorCode;
import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.framework.commons.pojo.PageResult;
@@ -19,7 +18,7 @@ import cd.casic.module.process.pipeline.definition.PipelineOpenService;
import cd.casic.module.process.pipeline.definition.PipelineService;
import cd.casic.module.process.pipeline.definition.entity.PipelineEntity;
-import cd.casic.module.process.process.definition.VariableService;
+import cd.casic.module.process.support.variable.service.VariableService;
import cd.casic.module.process.process.definition.dao.PipelineDao;
import cd.casic.module.process.process.instance.PipelineInstanceService;
import cd.casic.module.process.process.stage.StageService;
@@ -31,14 +30,10 @@ import cd.casic.module.process.support.util.PipelineUtilService;
import cd.casic.module.process.support.util.util.PipelineFinal;
import cd.casic.module.process.toolkit.beans.BeanMapper;
import cd.casic.module.process.toolkit.join.JoinTemplate;
-import cd.casic.module.process.user.user.User;
import jakarta.annotation.Resource;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import javax.security.auth.login.LoginContext;
import java.io.File;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/execute/service/impl/PipelineExecServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/execute/service/impl/PipelineExecServiceImpl.java
index dc087205..547d457d 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/execute/service/impl/PipelineExecServiceImpl.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/pipeline/execute/service/impl/PipelineExecServiceImpl.java
@@ -6,7 +6,7 @@ import cd.casic.ci.commons.bean.engine.execute.PipelineRunMsg;
import cd.casic.ci.commons.bean.engine.postprocess.Postprocess;
import cd.casic.ci.commons.bean.exception.SystemException;
import cd.casic.ci.commons.bean.process.definition.Pipeline;
-import cd.casic.ci.commons.bean.process.definition.Variable;
+import cd.casic.module.process.support.variable.model.Variable;
import cd.casic.ci.commons.bean.process.instance.PipelineInstance;
import cd.casic.ci.commons.bean.process.instance.PipelineInstanceQuery;
import cd.casic.ci.commons.bean.process.setting.Scm;
@@ -19,7 +19,7 @@ import cd.casic.module.process.engine.task.TasksExecService;
import cd.casic.module.process.pipeline.definition.PipelineService;
import cd.casic.module.process.pipeline.execute.service.PipelineExecService;
import cd.casic.module.process.pipeline.instance.service.PipelineInstanceServiceImpl;
-import cd.casic.module.process.process.definition.VariableService;
+import cd.casic.module.process.support.variable.service.VariableService;
import cd.casic.module.process.process.instance.PipelineInstanceService;
import cd.casic.module.process.setting.service.ResourcesService;
import cd.casic.module.process.setting.service.ScmService;
@@ -27,7 +27,7 @@ import cd.casic.module.process.stages.service.StageExecService;
import cd.casic.module.process.stages.service.StageService;
import cd.casic.module.process.support.agent.service.AgentService;
import cd.casic.module.process.support.disk.service.DiskService;
-import cd.casic.module.process.support.home.PipelineVersionService;
+import cd.casic.module.process.support.version.service.PipelineVersionService;
import cd.casic.module.process.support.postprocess.service.PostprocessExecService;
import cd.casic.module.process.support.util.PipelineUtilService;
import cd.casic.module.process.support.util.util.PipelineFinal;
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/process/setting/impl/CacheServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/process/setting/impl/CacheServiceImpl.java
index 8c448ff6..e1f73111 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/process/setting/impl/CacheServiceImpl.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/process/setting/impl/CacheServiceImpl.java
@@ -4,16 +4,12 @@ package cd.casic.module.process.process.setting.impl;
import cd.casic.ci.commons.bean.process.setting.Cache;
import cd.casic.module.process.process.setting.CacheService;
import cd.casic.module.process.process.setting.dao.CacheDao;
-import cd.casic.module.process.support.home.PipelineVersionService;
+import cd.casic.module.process.support.version.service.PipelineVersionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
-import java.util.Objects;
-
-import static cd.casic.ci.commons.bean.commons.PipelineConstants.DEFAULT_CLEAN_CACHE_DAY;
@Service
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/PipelineDataService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/PipelineDataService.java
new file mode 100644
index 00000000..09f710f5
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/PipelineDataService.java
@@ -0,0 +1,15 @@
+package cd.casic.module.process.support.util;
+
+/**
+ * @ClassName PipelineDataService
+ * @Author hopeli
+ * @Date 2025/5/2 18:27
+ * @Version 1.0
+ */
+public interface PipelineDataService {
+
+ /**
+ * 清理消息数据
+ */
+ void cleanMessageData();
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/impl/PipelineDataServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/impl/PipelineDataServiceImpl.java
new file mode 100644
index 00000000..42dabdbe
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/impl/PipelineDataServiceImpl.java
@@ -0,0 +1,55 @@
+package cd.casic.module.process.support.util.impl;
+
+import cd.casic.ci.commons.bean.process.definition.Pipeline;
+import cd.casic.module.process.message.message.MessageDmNoticeService;
+import cd.casic.module.process.message.message.model.MessageDmNotice;
+import cd.casic.module.process.message.message.model.MessageDmNoticeQuery;
+import cd.casic.module.process.message.message.model.MessageNoticePatch;
+import cd.casic.module.process.pipeline.definition.PipelineService;
+import cd.casic.module.process.support.util.PipelineDataService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @ClassName PipelineDataServiceImpl
+ * @Author hopeli
+ * @Date 2025/5/2 18:27
+ * @Version 1.0
+ */
+@Service
+public class PipelineDataServiceImpl implements PipelineDataService {
+
+ @Resource
+ PipelineService pipelineService;
+
+ @Resource
+ MessageDmNoticeService messageDmNoticeService;
+
+
+ @Override
+ public void cleanMessageData(){
+
+ List allPipeline = pipelineService.findAllPipelineNoQuery();
+
+ for (Pipeline pipeline : allPipeline) {
+ String domainId = pipeline.getId();
+
+ MessageDmNoticeQuery messageDmNoticeQuery = new MessageDmNoticeQuery();
+ messageDmNoticeQuery.setDomainId(domainId);
+ List messageDmNoticeList =
+ messageDmNoticeService.findMessageDmNoticeList(messageDmNoticeQuery);
+
+ if (!messageDmNoticeList.isEmpty()){
+ continue;
+ }
+
+ // 克隆消息模版
+ MessageNoticePatch messageNoticePatch = new MessageNoticePatch();
+ messageNoticePatch.setDomainId(domainId);
+ messageNoticePatch.setUserList(List.of(String.valueOf(pipeline.getAdminUserRespDTO().getId())));
+ messageDmNoticeService.initMessageDmNotice(messageNoticePatch);
+ }
+ }
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/impl/PipelineUtilServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/impl/PipelineUtilServiceImpl.java
new file mode 100644
index 00000000..080babad
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/impl/PipelineUtilServiceImpl.java
@@ -0,0 +1,126 @@
+package cd.casic.module.process.support.util.impl;
+
+import cd.casic.ci.commons.bean.exception.ApplicationException;
+import cd.casic.ci.commons.bean.utils.PipelineFileUtil;
+import cd.casic.ci.commons.bean.utils.PipelineUtil;
+import cd.casic.module.process.core.context.AppHomeContext;
+import cd.casic.module.process.support.util.PipelineUtilService;
+import cd.casic.module.process.support.util.util.PipelineFinal;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @ClassName PipelineUtilServiceImpl
+ * @Author hopeli
+ * @Date 2025/5/2 18:22
+ * @Version 1.0
+ */
+@Service
+public class PipelineUtilServiceImpl implements PipelineUtilService{
+ @Value("${DATA_HOME:null}")
+ String dataHome;
+
+ @Value("${jdk.address:null}")
+ String jdkPath;
+
+ @Override
+ public String instanceAddress(int type) {
+ if (Objects.isNull(dataHome) || "null".equals(dataHome)){
+ dataHome = "/opt/tiklab/tiklab-arbess";
+ }
+
+ return switch (type) {
+ case 0 -> dataHome + PipelineFinal.MATFLOW_INSTABCE;
+ case 1 -> dataHome + PipelineFinal.MATFLOW_WORKSPACE;
+ default -> dataHome + PipelineFinal.MATFLOW_LOGS;
+ };
+ }
+
+ @Override
+ public String findPipelineDefaultAddress(String pipelineId, int type) {
+ String path = instanceAddress(type);
+ int systemType = PipelineUtil.findSystemType();
+ if (systemType == 1){
+ if (!PipelineUtil.isNoNull(pipelineId)){
+ return path + "\\";
+ }else {
+ return path + "\\" + pipelineId + "\\";
+ }
+ }else {
+ if (!PipelineUtil.isNoNull(pipelineId)){
+ return path + "/";
+ }else {
+ return path + "/" + pipelineId + "/" ;
+ }
+ }
+ }
+
+
+ @Override
+ public String findFile(String pipelineId,String fileDir, String regex) {
+ List list = new ArrayList<>();
+
+ File file3 = new File(fileDir);
+ if (file3.exists() && file3.isFile()){
+ return fileDir;
+ }
+
+ File file2 = new File(fileDir + "/" + regex);
+ if (file2.exists() && file2.isFile()){
+ return file2.getAbsolutePath();
+ }
+
+ List filePath = PipelineFileUtil.getFilePath(new File(fileDir),new ArrayList<>());
+ for (String s : filePath) {
+ File file = new File(s);
+
+ //拼装正则匹配
+ boolean matches = file.getName().matches("^(.*" + regex + ".*)");
+
+ //正则匹配
+ boolean matches1 = file.getName().matches(regex);
+
+ File file1 = new File(s + "/" + regex);
+ if (file1.exists()){
+ return file1.getAbsolutePath();
+ }
+
+ if (matches || matches1){
+ list.add(s);
+ }
+ }
+
+ if (list.size() > 1){
+ StringBuilder s = new StringBuilder("匹配到多个文件,请重新输入文件信息。");
+ for (String s1 : list) {
+ s.append("\n").append(s1);
+ }
+ throw new ApplicationException(s.toString());
+ }
+
+ if (list.size()== 1){
+ return list.get(0);
+ }
+ throw new ApplicationException("没有匹配到文件。");
+ }
+
+
+ @Override
+ public String findJavaPath(){
+
+ if (!"null".equals(jdkPath)){
+ return jdkPath;
+ }
+
+ String appHome = AppHomeContext.getAppHome();
+ String applyRootDir = new File(appHome).getParentFile().getParent();
+
+ return appHome+"/embbed/jdk-16.0.2";
+
+ }
+}
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/util/PipelineFinal.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/util/PipelineFinal.java
index 9fa04dcf..4efa1d53 100644
--- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/util/PipelineFinal.java
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/util/PipelineFinal.java
@@ -19,6 +19,8 @@ public class PipelineFinal {
public static final String MATFLOW_LOGS = "/artifact";
+ public static final String MATFLOW_INSTABCE = "/instance";
+
/**
* 流水线运行状态
@@ -208,6 +210,13 @@ public class PipelineFinal {
public static final Integer DEFAULT_CLEAN_CACHE_DAY = 7;
+ // 上传类型
+ public static final String TASK_TYPE_UPLOAD = "upload";
+ public static final String TASK_UPLOAD_HADESS = "upload_hadess";
+ public static final String TASK_UPLOAD_SSH = "upload_ssh";
+ public static final String TASK_UPLOAD_NEXUS = "upload_nexus";
+ public static final String TASK_UPLOAD_DOCKER = "upload_docker";
+
diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/util/PipelineRequestUtil.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/util/PipelineRequestUtil.java
new file mode 100644
index 00000000..0e12c273
--- /dev/null
+++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/util/util/PipelineRequestUtil.java
@@ -0,0 +1,222 @@
+package cd.casic.module.process.support.util.util;
+
+/**
+ * @ClassName TaskArtifactServiceImpl
+ * @Author hopeli
+ * @Date 2025/5/5 06:04
+ * @Version 1.0
+ */
+
+import cd.casic.ci.commons.bean.exception.ApplicationException;
+import cd.casic.ci.commons.bean.exception.SystemException;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.ResourceAccessException;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Component
+public class PipelineRequestUtil {
+
+ @Autowired
+ RestTemplate restTemplate;
+
+ @Autowired
+ PipelineRequestUtil requestUtil;
+
+
+ /**
+ * 发起Post请求
+ * @param headers 请求头
+ * @param requestUrl 请求地址
+ * @param param 请求参数
+ * @param tClass 返回类型
+ * @return 请求结果
+ * @throws ApplicationException 请求失败
+ */
+ public T requestPost(HttpHeaders headers, String requestUrl, Object param, Class tClass){
+
+ // 创建带有头部和请求体的 HttpEntity
+ HttpEntity