Просмотр исходного кода

feat:namespace deployment的pipeline handler

370774330@qq.com 5 лет назад
Родитель
Сommit
62a061f550
20 измененных файлов с 403 добавлено и 114 удалено
  1. 1 1
      README.md
  2. 12 1
      api/src/main/java/seecoder/devcloud/api/k8s/K8sConstants.java
  3. 39 0
      core/src/main/java/seecoder/devcloud/core/pipeline/Context.java
  4. 8 2
      core/src/main/java/seecoder/devcloud/core/pipeline/Handler.java
  5. 5 15
      core/src/main/java/seecoder/devcloud/core/pipeline/Pipeline.java
  6. 9 0
      core/src/main/java/seecoder/devcloud/core/pipeline/PipelineConfig.java
  7. 11 0
      core/src/main/java/seecoder/devcloud/core/pipeline/Stage.java
  8. 39 0
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/AbstractHandler.java
  9. 48 0
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/DockerImageBuildHandler.java
  10. 115 0
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sDeploymentHandler.java
  11. 11 9
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sIngressHandler.java
  12. 52 0
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sNamespaceHandler.java
  13. 49 0
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sServiceHandler.java
  14. 1 1
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/MavenPackageHandler.java
  15. 1 1
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/MavenTestHandler.java
  16. 0 15
      core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/CommonServiceHandler.java
  17. 0 16
      core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/DockerImageBuildHandler.java
  18. 0 41
      core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/JavaAppDeploymentHandler.java
  19. 0 10
      core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/MysqlDeploymentHandler.java
  20. 2 2
      core/src/test/java/seecoder/devcloud/core/CoreApplicationTests.java

+ 1 - 1
README.md

@@ -121,7 +121,7 @@ seecoder:
 - service
 - service
 - dao 
 - dao 
 
 
-dao层采用jpa作为orm框架来开发
+dao层采用mybatis作为orm框架来开发
 
 
 ### common
 ### common
 
 

+ 12 - 1
api/src/main/java/seecoder/devcloud/api/k8s/K8sConstants.java

@@ -5,7 +5,7 @@ public class K8sConstants {
     public static final String NAME_PATTERN = "^[0-9a-zA-Z-]{8,}$";
     public static final String NAME_PATTERN = "^[0-9a-zA-Z-]{8,}$";
 
 
     //标签域名前缀
     //标签域名前缀
-    private static final String LABEL_PREFIX = "demo.seec.nju.cn";
+    private static final String LABEL_PREFIX = "devcloud";
     //课程前缀
     //课程前缀
     public static final String TYPE_LABEL = LABEL_PREFIX + "/type";
     public static final String TYPE_LABEL = LABEL_PREFIX + "/type";
     //描述
     //描述
@@ -43,4 +43,15 @@ public class K8sConstants {
     public static final String METADATA_NAME_SELECTOR = "metadata.name=";
     public static final String METADATA_NAME_SELECTOR = "metadata.name=";
 
 
     public static final String DB_SECRET_NAME = "db-secret";
     public static final String DB_SECRET_NAME = "db-secret";
+
+    /**
+     * 部署应用时的名字后缀
+     */
+    public final static String CONTAINER_SUFFIX = "-container";
+
+    public final static String DEPLOYMENT_SUFFIX = "-deployment";
+
+    public final static String SERVICE_SUFFIX = "-service";
+
+    public final static String INGRESS_SUFFIX = "-suffix";
 }
 }

+ 39 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/Context.java

@@ -0,0 +1,39 @@
+package seecoder.devcloud.core.pipeline;
+
+import lombok.Data;
+import seecoder.devcloud.api.ApplicationProperties;
+
+import java.util.HashMap;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/2/2
+ * @description: 流水线上下文
+ */
+@Data
+public class Context {
+
+    private ApplicationProperties applicationProperties;
+
+    private String pipelineId;
+
+    private String pipelineName;
+
+    /**
+     * 流水线所属小组
+     */
+    private String groupName;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+
+    /**
+     * 用来存放一些杂项信息,根据key去取
+     */
+    private HashMap<String, String> configs;
+
+
+}

+ 8 - 2
core/src/main/java/seecoder/devcloud/core/pipeline/Handler.java

@@ -5,6 +5,12 @@ package seecoder.devcloud.core.pipeline;
  * @date 2021/1/18
  * @date 2021/1/18
  * @description:
  * @description:
  */
  */
-public interface Handler<I,O> {
-    O process(I input);
+public interface Handler {
+
+    void invoke(Context context);
+
+    void process(Context context);
+
+    void invokeNext(Context context);
+
 }
 }

+ 5 - 15
core/src/main/java/seecoder/devcloud/core/pipeline/Pipeline.java

@@ -3,21 +3,11 @@ package seecoder.devcloud.core.pipeline;
 /**
 /**
  * @author PuHong Weng
  * @author PuHong Weng
  * @date 2021/1/18
  * @date 2021/1/18
- * @description: 流水线 I代表in,流水线的输入、O代表out,流水线的输出
+ * @description:
  */
  */
-public class Pipeline<I, O> {
+public interface Pipeline {
 
 
-    private final Handler<I, O> currentHandler;
-
-    public Pipeline(Handler<I, O> currentHandler) {
-        this.currentHandler = currentHandler;
-    }
-
-    public <K> Pipeline<I, K> addHandler(Handler<O, K> newHandler) {
-        return new Pipeline<>(input -> newHandler.process(currentHandler.process(input)));
-    }
-
-    public O execute(I input) {
-        return currentHandler.process(input);
-    }
+    void init(PipelineConfig config);
+    void start();
+    Context getContext();
 }
 }

+ 9 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/PipelineConfig.java

@@ -0,0 +1,9 @@
+package seecoder.devcloud.core.pipeline;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/2/2
+ * @description:
+ */
+public class PipelineConfig {
+}

+ 11 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/Stage.java

@@ -0,0 +1,11 @@
+package seecoder.devcloud.core.pipeline;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/2/2
+ * @description:
+ */
+public interface Stage {
+
+
+}

+ 39 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/handler/AbstractHandler.java

@@ -0,0 +1,39 @@
+package seecoder.devcloud.core.pipeline.handler;
+
+import lombok.Data;
+import seecoder.devcloud.core.pipeline.Context;
+import seecoder.devcloud.core.pipeline.Handler;
+
+import java.util.HashMap;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/2/2
+ * @description:
+ */
+@Data
+public abstract class AbstractHandler implements Handler {
+
+
+    public AbstractHandler nextHandler;
+
+    /**
+     * 用来存放Handler的配置
+     */
+    public HashMap<String,String> configs = new HashMap<>();
+
+    @Override
+    public void invoke(Context context) {
+        process(context);
+        invokeNext(context);
+    }
+
+    @Override
+    public void invokeNext(Context context) {
+        nextHandler.invoke(context);
+    }
+
+    public void setNextHandler(AbstractHandler nextHandler) {
+        this.nextHandler = nextHandler;
+    }
+}

+ 48 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/handler/DockerImageBuildHandler.java

@@ -0,0 +1,48 @@
+package seecoder.devcloud.core.pipeline.handler;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import seecoder.devcloud.api.docker.DockerApi;
+import seecoder.devcloud.common.util.SpringUtil;
+import seecoder.devcloud.core.pipeline.Context;
+import seecoder.devcloud.core.pipeline.Handler;
+
+import java.io.*;
+import java.nio.file.Files;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/1/18
+ * @description: docker镜像构建
+ */
+@Slf4j
+public class DockerImageBuildHandler extends AbstractHandler {
+
+    private static final String TEMP_PREFIX = "SEECODER-DEVCLOUD-";
+
+    public DockerApi dockerApi;
+
+    public DockerImageBuildHandler(){
+        dockerApi = SpringUtil.getBean(DockerApi.class);
+    }
+
+    @Override
+    public void process(Context context){
+//        File tempDir = null;
+//        try {
+//            tempDir = Files.createTempDirectory(TEMP_PREFIX).toFile();
+//            //
+//            File dockerFile = new File(tempDir, "Dockerfile");
+//            try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dockerFile)))) {
+//                writer.write(question.getQuestionType().getHelper().dockerFile(question.getName()));
+//            }
+//            //dockerApi.build(tempDir.getAbsolutePath(), question.getImageName(), question.getImageTag());
+//        } catch (IOException e){
+//            e.printStackTrace();
+//            log.error("镜像构建失败, 产生IO错误, {}", e.getMessage());
+//        } finally {
+//            FileUtils.deleteDirectory(tempDir);
+//        }
+    }
+
+}

+ 115 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sDeploymentHandler.java

@@ -0,0 +1,115 @@
+package seecoder.devcloud.core.pipeline.handler;
+
+import seecoder.devcloud.api.ApplicationProperties;
+import seecoder.devcloud.api.k8s.DeploymentApi;
+import seecoder.devcloud.api.k8s.K8sConstants;
+import seecoder.devcloud.api.k8s.SecretApi;
+import seecoder.devcloud.api.k8s.model.Container;
+import seecoder.devcloud.api.k8s.model.ContainerPort;
+import seecoder.devcloud.api.k8s.model.Deployment;
+import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
+import seecoder.devcloud.api.k8s.util.SecretTypeEnum;
+import seecoder.devcloud.api.k8s.vo.SecretVO;
+import seecoder.devcloud.common.util.SpringUtil;
+import seecoder.devcloud.core.pipeline.Context;
+import seecoder.devcloud.core.pipeline.Handler;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/1/18
+ * @description: 创建一个k8s Deployment
+ * 因为是学生的Deployment构建的过程,有以下约束:
+ * 1. 每个Deployment只允许创建一个Pod,防止资源消耗太多
+ * 2. 以Group Name,作为Namespace, Project Name来作为Deployment name
+ * 3. 镜像存放在seecoder的内部私有镜像仓库,所以需要设置
+ */
+public class K8sDeploymentHandler extends AbstractHandler {
+
+    private final SecretApi secretApi;
+
+    private final DeploymentApi deploymentApi;
+
+
+    //容器所使用的镜像
+    private String image;
+
+    //副本数
+    private int replicas;
+
+    //
+    private int port;
+
+
+    public K8sDeploymentHandler() {
+        secretApi = SpringUtil.getBean(SecretApi.class);
+        deploymentApi = SpringUtil.getBean(DeploymentApi.class);
+    }
+
+    /**
+     * 部署一个java项目
+     * 以小组名称作为namespace
+     *
+     * @param context
+     */
+    @Override
+    public void process(Context context) {
+        //配置初始化
+        initConfig(context);
+        String groupName = context.getGroupName();
+        String projectName = context.getProjectName();
+
+        //配置容器暴露端口
+        ContainerPort containerPort = ContainerPort.builder()
+                .port(port)
+                .build();
+        //配置容器
+        Container container = Container.builder()
+                .image(image)
+                .name(projectName + K8sConstants.CONTAINER_SUFFIX)
+                .ports(Collections.singleton(containerPort))
+                .build();
+
+        //配置deployment
+        Deployment deployment = Deployment.builder()
+                .replicas(replicas)
+                .containers(Collections.singletonList(container))
+                .build();
+        deployment.setName(projectName + K8sConstants.DEPLOYMENT_SUFFIX);
+        deployment.setNamespace(groupName);
+        deployment.setLabel(K8sConstants.APPLICATION_LABEL, projectName);
+
+        // 密钥来源:在命名空间创建时,创建对应的secret存放密钥,见 K8sNamespaceHandler.class
+        // 将registry密钥作为imagePullSecrets注入, 使得此deployment可以访问私有镜像仓库
+        List<String> registrySecrets = secretApi
+                .getSecretListByType(
+                        groupName,
+                        SecretTypeEnum.REGISTRY)
+                .stream()
+                .map(SecretVO::getName)
+                .collect(Collectors.toList()
+                );
+        deployment.setImagePullSecrets(registrySecrets);
+
+
+        K8sObjectRequest request = K8sObjectRequest.builder()
+                .namespace(groupName)
+                .name(projectName + K8sConstants.DEPLOYMENT_SUFFIX).build();
+        if (deploymentApi.getByCondition(request).size() == 0) {
+            deploymentApi.create(deployment);
+        } else {
+            deploymentApi.update(deployment);
+        }
+
+    }
+
+    private void initConfig(Context context) {
+        this.image = context.getConfigs().getOrDefault("image", "");
+        this.port = Integer.parseInt(context.getConfigs().getOrDefault("port", "8000"));
+        this.replicas = Integer.parseInt(context.getConfigs().getOrDefault("replicas", "1"));
+    }
+}

+ 11 - 9
core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/CommonIngressHandler.java → core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sIngressHandler.java

@@ -1,7 +1,9 @@
-//package seecoder.devcloud.core.pipeline.handlerImpl;
+//package seecoder.devcloud.core.pipeline.handler;
 //
 //
 //import seecoder.devcloud.api.k8s.model.Ingress;
 //import seecoder.devcloud.api.k8s.model.Ingress;
-//import Handler;
+//import seecoder.devcloud.core.pipeline.Context;
+//import seecoder.devcloud.core.pipeline.Handler;
+//
 //
 //
 //import java.util.Collection;
 //import java.util.Collection;
 //import java.util.HashSet;
 //import java.util.HashSet;
@@ -14,20 +16,20 @@
 // * @date 2021/1/18
 // * @date 2021/1/18
 // * @description:
 // * @description:
 // */
 // */
-//public class CommonIngressHandler implements Handler<String,String> {
+//public class K8sIngressHandler extends AbstractHandler {
 //
 //
 //    @Override
 //    @Override
-//    public String process(String input) {
+//    public void process(Context context) {
+//
+//
 //
 //
+//        String groupName = context.getGroupName();
 //
 //
-//        String appName = applicationDTO.getName();
-//        String projectName = applicationDTO.getProjectName();
+//        String projectName = context.getProjectName();
 //
 //
 //        Ingress ingress = new Ingress();
 //        Ingress ingress = new Ingress();
-//        ingress.setName(appName + "-" + applicationDTO.getDeployEnvironment());
-//        String environment = applicationDTO.getDeployEnvironment() == DeployEnvironment.PRODUCTION ? "prod" : "test";
-//        ingress.setNamespace(projectName);
 //
 //
+//        ingress.setName(appName + "-" + applicationDTO.getDeployEnvironment());
 //        Set<String> alreadyTaken = new HashSet<>();
 //        Set<String> alreadyTaken = new HashSet<>();
 //        List<Ingress.IngressRule> ingressRules = applicationDTO.getContainers()
 //        List<Ingress.IngressRule> ingressRules = applicationDTO.getContainers()
 //                .stream()
 //                .stream()

+ 52 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sNamespaceHandler.java

@@ -0,0 +1,52 @@
+package seecoder.devcloud.core.pipeline.handler;
+
+import com.sun.xml.internal.stream.events.NamespaceImpl;
+import lombok.extern.slf4j.Slf4j;
+import seecoder.devcloud.api.ApplicationProperties;
+import seecoder.devcloud.api.k8s.NamespaceApi;
+import seecoder.devcloud.api.k8s.SecretApi;
+import seecoder.devcloud.api.k8s.exception.K8sApiException;
+import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
+import seecoder.devcloud.api.k8s.model.Namespace;
+import seecoder.devcloud.common.util.SpringUtil;
+import seecoder.devcloud.core.pipeline.Context;
+
+import javax.swing.*;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/2/2
+ * @description: 创建k8sNamespace。以小组名称为单位创建。
+ */
+@Slf4j
+public class K8sNamespaceHandler extends AbstractHandler {
+
+    private NamespaceApi namespaceApi;
+
+    private SecretApi secretApi;
+
+    public K8sNamespaceHandler() {
+        namespaceApi = SpringUtil.getBean(NamespaceApi.class);
+    }
+
+    @Override
+    public void process(Context context) {
+        Namespace namespace = new Namespace();
+        namespace.setName(context.getProjectName());
+
+
+        K8sObjectRequest request = K8sObjectRequest.builder()
+                .name(context.getGroupName()).build();
+        if (namespaceApi.getByCondition(request).size() == 0) {
+            //namespace不存在的情况
+            namespace = namespaceApi.create(namespace);
+            log.info("Namespace创建成功, {}", namespace);
+            //为命名空间配置私有镜像仓库密钥,使得此命名空间可以访问镜像仓库来部署容器
+            ApplicationProperties.Registry registry = context.getApplicationProperties().getRegistry();
+            secretApi.createPrivateRegistrySecret(context.getGroupName(), registry.getHost(), registry.getUsername(), registry.getPassword());
+        } else {
+            log.info("Namespace已经存在, 无需新建, 继续执行");
+        }
+
+    }
+}

+ 49 - 0
core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sServiceHandler.java

@@ -0,0 +1,49 @@
+package seecoder.devcloud.core.pipeline.handler;
+
+import seecoder.devcloud.api.k8s.K8sConstants;
+import seecoder.devcloud.api.k8s.ServiceApi;
+import seecoder.devcloud.api.k8s.model.Service;
+import seecoder.devcloud.common.util.SpringUtil;
+import seecoder.devcloud.core.pipeline.Context;
+import seecoder.devcloud.core.pipeline.Handler;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.stream.Collectors;
+
+import static seecoder.devcloud.api.k8s.K8sConstants.APPLICATION_LABEL;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/1/18
+ * @description: 通用的k8s建立service
+ */
+public class K8sServiceHandler extends AbstractHandler {
+
+    private ServiceApi serviceApi;
+
+    public K8sServiceHandler() {
+        serviceApi = SpringUtil.getBean(ServiceApi.class);
+    }
+
+
+    @Override
+    public void process(Context context){
+
+
+//        Service service = new Service();
+//        service.setNamespace(context.getGroupName());
+//        service.setName(context.getProjectName()+ K8sConstants.SERVICE_SUFFIX);
+//        service.setSelectors(Collections.singletonMap(APPLICATION_LABEL, ));
+//        service.setServicePorts(
+//                containers
+//                        .stream()
+//                        .map(ContainerDTO::getPorts)
+//                        .flatMap(Collection::stream)
+//                        .map(PortDTO::toServicePortDTO)
+//                        .collect(Collectors.toSet())
+//        );
+    }
+
+
+}

+ 1 - 1
core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/MavenPackageHandler.java → core/src/main/java/seecoder/devcloud/core/pipeline/handler/MavenPackageHandler.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.core.pipeline.handlerImpl;
+package seecoder.devcloud.core.pipeline.handler;
 
 
 /**
 /**
  * @author PuHong Weng
  * @author PuHong Weng

+ 1 - 1
core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/MavenTestHandler.java → core/src/main/java/seecoder/devcloud/core/pipeline/handler/MavenTestHandler.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.core.pipeline.handlerImpl;
+package seecoder.devcloud.core.pipeline.handler;
 
 
 /**
 /**
  * @author PuHong Weng
  * @author PuHong Weng

+ 0 - 15
core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/CommonServiceHandler.java

@@ -1,15 +0,0 @@
-package seecoder.devcloud.core.pipeline.handlerImpl;
-
-import seecoder.devcloud.core.pipeline.Handler;
-
-/**
- * @author PuHong Weng
- * @date 2021/1/18
- * @description: 通用的k8s建立service
- */
-public class CommonServiceHandler implements Handler<String,String> {
-    @Override
-    public String process(String input) {
-        return null;
-    }
-}

+ 0 - 16
core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/DockerImageBuildHandler.java

@@ -1,16 +0,0 @@
-package seecoder.devcloud.core.pipeline.handlerImpl;
-
-import seecoder.devcloud.core.pipeline.Handler;
-
-/**
- * @author PuHong Weng
- * @date 2021/1/18
- * @description: docker镜像构建
- */
-public class DockerImageBuildHandler implements Handler<String,String> {
-
-    @Override
-    public String process(String input) {
-        return null;
-    }
-}

+ 0 - 41
core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/JavaAppDeploymentHandler.java

@@ -1,41 +0,0 @@
-package seecoder.devcloud.core.pipeline.handlerImpl;
-
-import seecoder.devcloud.api.k8s.DeploymentApi;
-import seecoder.devcloud.api.k8s.SecretApi;
-import seecoder.devcloud.api.k8s.impl.DeploymentApiImpl;
-import seecoder.devcloud.api.k8s.impl.SecretApiImpl;
-import seecoder.devcloud.api.k8s.model.Container;
-import seecoder.devcloud.api.k8s.model.Deployment;
-import seecoder.devcloud.common.util.SpringUtil;
-import seecoder.devcloud.core.pipeline.Handler;
-
-import java.util.Collections;
-
-/**
- * @author PuHong Weng
- * @date 2021/1/18
- * @description:
- */
-public class JavaAppDeploymentHandler implements Handler<String,String> {
-
-    private final SecretApi secretApi;
-
-    private final DeploymentApi deploymentApi;
-
-    public JavaAppDeploymentHandler() {
-        secretApi = SpringUtil.getBean(SecretApi.class);
-        deploymentApi = SpringUtil.getBean(DeploymentApi.class);
-    }
-
-    @Override
-    public String process(String input) {
-
-
-        Deployment deployment = Deployment.builder()
-                .replicas(1)
-                .containers(Collections.singletonList(new Container()))
-                .build();
-        deploymentApi.create(deployment);
-        return null;
-    }
-}

+ 0 - 10
core/src/main/java/seecoder/devcloud/core/pipeline/handlerImpl/MysqlDeploymentHandler.java

@@ -1,10 +0,0 @@
-package seecoder.devcloud.core.pipeline.handlerImpl;
-
-/**
- * @author PuHong Weng
- * @date 2021/1/18
- * @description:
- */
-public class MysqlDeploymentHandler {
-
-}

+ 2 - 2
core/src/test/java/seecoder/devcloud/core/CoreApplicationTests.java

@@ -7,7 +7,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.context.junit4.SpringRunner;
 import seecoder.devcloud.api.ApplicationProperties;
 import seecoder.devcloud.api.ApplicationProperties;
 import seecoder.devcloud.api.k8s.DeploymentApi;
 import seecoder.devcloud.api.k8s.DeploymentApi;
-import seecoder.devcloud.core.pipeline.handlerImpl.JavaAppDeploymentHandler;
+import seecoder.devcloud.core.pipeline.handler.K8sDeploymentHandler;
 import seecoder.devcloud.core.pipeline.Pipeline;
 import seecoder.devcloud.core.pipeline.Pipeline;
 import seecoder.devcloud.core.pipeline.TestHandler;
 import seecoder.devcloud.core.pipeline.TestHandler;
 
 
@@ -32,7 +32,7 @@ class CoreApplicationTests {
 //        System.out.println("tset");
 //        System.out.println("tset");
 ////        System.out.printf(deploymentApi.toString());
 ////        System.out.printf(deploymentApi.toString());
 ////        System.out.printf(SpringUtil.getBean(DeploymentApi.class).toString());
 ////        System.out.printf(SpringUtil.getBean(DeploymentApi.class).toString());
-        JavaAppDeploymentHandler handler = new JavaAppDeploymentHandler();
+        K8sDeploymentHandler handler = new K8sDeploymentHandler();
 //        handler.process("test");
 //        handler.process("test");
 
 
     }
     }