Bläddra i källkod

modify: k8s api升级

370774330@qq.com 5 år sedan
förälder
incheckning
9c03edf5cd
69 ändrade filer med 265 tillägg och 1767 borttagningar
  1. 5 17
      api/src/main/java/seecoder/devcloud/api/ApplicationProperties.java
  2. 0 18
      api/src/main/java/seecoder/devcloud/api/DevcloudApiAutoConfiguration.java
  3. 3 5
      api/src/main/java/seecoder/devcloud/api/docker/impl/DockerApiImpl.java
  4. 2 3
      api/src/main/java/seecoder/devcloud/api/git/impl/GitApiImpl.java
  5. 0 66
      api/src/main/java/seecoder/devcloud/api/jenkins/JenkinsApi.java
  6. 0 195
      api/src/main/java/seecoder/devcloud/api/jenkins/impl/JenkinsApiImpl.java
  7. 0 38
      api/src/main/java/seecoder/devcloud/api/jenkins/impl/PoolingJenkinsHttpClient.java
  8. 0 19
      api/src/main/java/seecoder/devcloud/api/jenkins/model/BuildDetails.java
  9. 0 27
      api/src/main/java/seecoder/devcloud/api/jenkins/model/CoverageResult.java
  10. 0 11
      api/src/main/java/seecoder/devcloud/api/jenkins/model/CoverageResultElement.java
  11. 0 9
      api/src/main/java/seecoder/devcloud/api/jenkins/model/MutationResult.java
  12. 1 1
      api/src/main/java/seecoder/devcloud/api/k8s/DeploymentApi.java
  13. 1 2
      api/src/main/java/seecoder/devcloud/api/k8s/ExecApi.java
  14. 0 96
      api/src/main/java/seecoder/devcloud/api/k8s/K8sApiConfiguration.java
  15. 1 1
      api/src/main/java/seecoder/devcloud/api/k8s/PodApi.java
  16. 0 1
      api/src/main/java/seecoder/devcloud/api/k8s/SecretApi.java
  17. 13 12
      api/src/main/java/seecoder/devcloud/api/k8s/impl/ConfigMapApiImpl.java
  18. 13 13
      api/src/main/java/seecoder/devcloud/api/k8s/impl/DeploymentApiImpl.java
  19. 9 8
      api/src/main/java/seecoder/devcloud/api/k8s/impl/ExecApiImpl.java
  20. 20 22
      api/src/main/java/seecoder/devcloud/api/k8s/impl/IngressApiImpl.java
  21. 4 6
      api/src/main/java/seecoder/devcloud/api/k8s/impl/LogApiImpl.java
  22. 14 15
      api/src/main/java/seecoder/devcloud/api/k8s/impl/NamespaceApiImpl.java
  23. 20 20
      api/src/main/java/seecoder/devcloud/api/k8s/impl/PersistentVolumeClaimImpl.java
  24. 13 15
      api/src/main/java/seecoder/devcloud/api/k8s/impl/PodApiImpl.java
  25. 11 15
      api/src/main/java/seecoder/devcloud/api/k8s/impl/SecretApiImpl.java
  26. 21 27
      api/src/main/java/seecoder/devcloud/api/k8s/impl/ServiceApiImpl.java
  27. 3 4
      api/src/main/java/seecoder/devcloud/api/k8s/impl/WatchApiImpl.java
  28. 6 5
      api/src/main/java/seecoder/devcloud/api/k8s/model/ConfigMap.java
  29. 0 4
      api/src/main/java/seecoder/devcloud/api/k8s/model/Container.java
  30. 0 1
      api/src/main/java/seecoder/devcloud/api/k8s/model/ContainerPort.java
  31. 4 8
      api/src/main/java/seecoder/devcloud/api/k8s/model/Deployment.java
  32. 1 4
      api/src/main/java/seecoder/devcloud/api/k8s/model/Ingress.java
  33. 0 3
      api/src/main/java/seecoder/devcloud/api/k8s/model/K8sObject.java
  34. 0 2
      api/src/main/java/seecoder/devcloud/api/k8s/model/K8sObjectRequest.java
  35. 1 2
      api/src/main/java/seecoder/devcloud/api/k8s/model/Namespace.java
  36. 4 3
      api/src/main/java/seecoder/devcloud/api/k8s/model/PersistentVolumeClaim.java
  37. 7 6
      api/src/main/java/seecoder/devcloud/api/k8s/model/Service.java
  38. 0 1
      api/src/main/java/seecoder/devcloud/api/k8s/vo/SecretVO.java
  39. 0 19
      api/src/main/java/seecoder/devcloud/api/nexus/AssetApi.java
  40. 0 79
      api/src/main/java/seecoder/devcloud/api/nexus/ComponentApi.java
  41. 0 187
      api/src/main/java/seecoder/devcloud/api/nexus/NexusApi.java
  42. 0 16
      api/src/main/java/seecoder/devcloud/api/nexus/NexusApiBean.java
  43. 0 53
      api/src/main/java/seecoder/devcloud/api/nexus/TaskApi.java
  44. 0 73
      api/src/main/java/seecoder/devcloud/api/nexus/exception/NexusApiException.java
  45. 0 99
      api/src/main/java/seecoder/devcloud/api/nexus/impl/AbstractApi.java
  46. 0 67
      api/src/main/java/seecoder/devcloud/api/nexus/impl/AssetApiImpl.java
  47. 0 144
      api/src/main/java/seecoder/devcloud/api/nexus/impl/ComponentApiImpl.java
  48. 0 28
      api/src/main/java/seecoder/devcloud/api/nexus/impl/Constants.java
  49. 0 89
      api/src/main/java/seecoder/devcloud/api/nexus/impl/TaskApiImpl.java
  50. 0 17
      api/src/main/java/seecoder/devcloud/api/nexus/model/ApiVersion.java
  51. 0 21
      api/src/main/java/seecoder/devcloud/api/nexus/model/Asset.java
  52. 0 13
      api/src/main/java/seecoder/devcloud/api/nexus/model/AssetList.java
  53. 0 23
      api/src/main/java/seecoder/devcloud/api/nexus/model/Component.java
  54. 0 16
      api/src/main/java/seecoder/devcloud/api/nexus/model/ComponentList.java
  55. 0 9
      api/src/main/java/seecoder/devcloud/api/nexus/model/NexusList.java
  56. 0 25
      api/src/main/java/seecoder/devcloud/api/nexus/model/Task.java
  57. 0 15
      api/src/main/java/seecoder/devcloud/api/nexus/model/TaskList.java
  58. 0 1
      common/src/main/java/seecoder/devcloud/common/CommonAutoConfiguration.java
  59. 1 1
      common/src/main/java/seecoder/devcloud/common/exceptions/ServiceException.java
  60. 1 0
      common/src/main/java/seecoder/devcloud/common/util/FileUtil.java
  61. 0 2
      common/src/main/java/seecoder/devcloud/common/util/JwtTokenUtil.java
  62. 1 1
      common/src/main/java/seecoder/devcloud/common/util/RandomStringUtil.java
  63. 0 1
      common/src/main/java/seecoder/devcloud/common/util/SpringUtil.java
  64. 3 3
      core/src/main/java/seecoder/devcloud/core/pipeline/config/HandlerConfigTable.java
  65. 56 53
      core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sIngressHandler.java
  66. 1 7
      core/src/main/java/seecoder/devcloud/core/pipeline/template/PipelineTemplateTable.java
  67. 9 0
      core/src/main/resources/template/config/test.json
  68. 15 0
      core/src/main/resources/template/dockerfile/TEMPLATE_DOCKERFILE_JAVA8
  69. 1 0
      web/src/main/resources/application-wph.yml

+ 5 - 17
api/src/main/java/seecoder/devcloud/api/ApplicationProperties.java

@@ -1,7 +1,6 @@
 package seecoder.devcloud.api;
 package seecoder.devcloud.api;
 
 
 import lombok.Data;
 import lombok.Data;
-import org.apache.commons.lang3.StringUtils;
 import org.hibernate.validator.constraints.URL;
 import org.hibernate.validator.constraints.URL;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
@@ -11,9 +10,6 @@ import javax.validation.Valid;
 import javax.validation.constraints.Email;
 import javax.validation.constraints.Email;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.util.HashMap;
-import java.util.Map;
 
 
 @Data
 @Data
 @Configuration
 @Configuration
@@ -24,8 +20,6 @@ public class ApplicationProperties {
 	@Valid
 	@Valid
 	private Gitlab gitlab = new Gitlab();
 	private Gitlab gitlab = new Gitlab();
 	@Valid
 	@Valid
-	private Jenkins jenkins = new Jenkins();
-	@Valid
 	private Docker docker = new Docker();
 	private Docker docker = new Docker();
 	@Valid
 	@Valid
 	private Mail mail = new Mail();
 	private Mail mail = new Mail();
@@ -64,17 +58,6 @@ public class ApplicationProperties {
 
 
 	}
 	}
 
 
-	@Data
-	public static class Jenkins {
-		@URL
-		@NotEmpty
-		private String host;
-		@NotEmpty
-		private String username = "root";
-		@NotEmpty
-		private String token;
-	}
-
 	@Data
 	@Data
 	public static class Docker {
 	public static class Docker {
 
 
@@ -109,6 +92,11 @@ public class ApplicationProperties {
 
 
 		private Boolean debugging = false;
 		private Boolean debugging = false;
 
 
+		/**
+		 * k8s配置ingress时候的host后缀
+		 */
+		private String ingressHostSuffix;
+
 	}
 	}
 
 
 	@Data
 	@Data

+ 0 - 18
api/src/main/java/seecoder/devcloud/api/DevcloudApiAutoConfiguration.java

@@ -1,6 +1,5 @@
 package seecoder.devcloud.api;
 package seecoder.devcloud.api;
 
 
-import org.eclipse.jgit.api.Git;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
@@ -10,12 +9,8 @@ import seecoder.devcloud.api.git.GitApi;
 import seecoder.devcloud.api.git.impl.GitApiImpl;
 import seecoder.devcloud.api.git.impl.GitApiImpl;
 import seecoder.devcloud.api.gitlab.GitlabApi;
 import seecoder.devcloud.api.gitlab.GitlabApi;
 import seecoder.devcloud.api.gitlab.impl.GitlabApiImpl;
 import seecoder.devcloud.api.gitlab.impl.GitlabApiImpl;
-import seecoder.devcloud.api.jenkins.JenkinsApi;
-import seecoder.devcloud.api.jenkins.impl.JenkinsApiImpl;
 import seecoder.devcloud.api.k8s.*;
 import seecoder.devcloud.api.k8s.*;
 import seecoder.devcloud.api.k8s.impl.*;
 import seecoder.devcloud.api.k8s.impl.*;
-import seecoder.devcloud.api.nexus.NexusApi;
-import seecoder.devcloud.api.nexus.model.ApiVersion;
 
 
 /**
 /**
  * @author PuHong Weng
  * @author PuHong Weng
@@ -48,19 +43,6 @@ public class DevcloudApiAutoConfiguration {
         return new K8sApiConfiguration(applicationProperties());
         return new K8sApiConfiguration(applicationProperties());
     }
     }
 
 
-    @Bean
-    @ConditionalOnBean(ApplicationProperties.class)
-    public JenkinsApi jenkinsApi(){
-        return new JenkinsApiImpl(applicationProperties());
-    }
-
-    @Bean
-    @ConditionalOnBean(ApplicationProperties.class)
-    public NexusApi nexusApi(){
-        ApplicationProperties properties = applicationProperties();
-        return new NexusApi(properties.getRegistry().getNexusServer(), ApiVersion.V1, properties.getRegistry().getUsername(), properties.getRegistry().getPassword());
-    }
-
     @Bean
     @Bean
     @ConditionalOnBean(ApplicationProperties.class)
     @ConditionalOnBean(ApplicationProperties.class)
     public DockerApi dockerApi(){
     public DockerApi dockerApi(){

+ 3 - 5
api/src/main/java/seecoder/devcloud/api/docker/impl/DockerApiImpl.java

@@ -61,9 +61,7 @@ public class DockerApiImpl implements DockerApi {
         List<Image> images = new ArrayList<>();
         List<Image> images = new ArrayList<>();
         try {
         try {
             images = client.listImages(DockerClient.ListImagesParam.allImages());
             images = client.listImages(DockerClient.ListImagesParam.allImages());
-        } catch (DockerException e) {
-            e.printStackTrace();
-        } catch (InterruptedException e) {
+        } catch (DockerException | InterruptedException e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
         return images;
         return images;
@@ -73,14 +71,14 @@ public class DockerApiImpl implements DockerApi {
         client.removeImage(imageId);
         client.removeImage(imageId);
     }
     }
 
 
-    private class NoActionProgressHandler implements ProgressHandler {
+    private static class NoActionProgressHandler implements ProgressHandler {
         @Override
         @Override
         public void progress(ProgressMessage message) {
         public void progress(ProgressMessage message) {
             //IGNORE THE MESSAGE
             //IGNORE THE MESSAGE
         }
         }
     }
     }
 
 
-    private class LogActionProgressHandler implements ProgressHandler {
+    private static class LogActionProgressHandler implements ProgressHandler {
         @Override
         @Override
         public void progress(ProgressMessage message) {
         public void progress(ProgressMessage message) {
 //            if (message.error() != null)
 //            if (message.error() != null)

+ 2 - 3
api/src/main/java/seecoder/devcloud/api/git/impl/GitApiImpl.java

@@ -14,7 +14,7 @@ import java.io.File;
 @Component
 @Component
 public class GitApiImpl implements GitApi {
 public class GitApiImpl implements GitApi {
 
 
-    private CredentialsProvider credentialsProvider;
+    private final CredentialsProvider credentialsProvider;
 
 
     @Autowired
     @Autowired
     public GitApiImpl(ApplicationProperties properties) {
     public GitApiImpl(ApplicationProperties properties) {
@@ -24,10 +24,9 @@ public class GitApiImpl implements GitApi {
 
 
     @Override
     @Override
     public Git clone(String repoUrl, String directory) throws Exception {
     public Git clone(String repoUrl, String directory) throws Exception {
-        Git git = Git.cloneRepository()
+        return Git.cloneRepository()
                 .setCredentialsProvider(credentialsProvider)
                 .setCredentialsProvider(credentialsProvider)
                 .setURI(repoUrl)
                 .setURI(repoUrl)
                 .setDirectory(new File(directory)).call();
                 .setDirectory(new File(directory)).call();
-        return git;
     }
     }
 }
 }

+ 0 - 66
api/src/main/java/seecoder/devcloud/api/jenkins/JenkinsApi.java

@@ -1,66 +0,0 @@
-package seecoder.devcloud.api.jenkins;
-
-import com.offbytwo.jenkins.model.QueueItem;
-import seecoder.devcloud.api.jenkins.model.BuildDetails;
-
-import java.io.IOException;
-import java.util.Map;
-
-public interface JenkinsApi {
-    /**
-     * 创建一个Job,加载配置模板
-     *
-     * @param id Job的Id,其实是Result的Id,也就是repo的Id,参照{@link com.moekr.moocoder.logic.service.impl.exam.ExamServiceImpl#join(int, int)}
-     * @throws IOException
-     */
-    void createJob(int id) throws IOException;
-
-    /**
-     * 通知构建
-     *
-     * @param id       Job的Id,其实是Result的Id,也就是repo的Id,参照{@link com.moekr.moocoder.logic.service.impl.exam.ExamServiceImpl#join(int, int)}
-     * @param paramMap 需要填写的各项参数
-     * @return
-     * @throws IOException
-     */
-    QueueItem invokeBuild(int id, Map<String, String> paramMap) throws IOException;
-
-    /**
-     * 通知构建
-     *
-     * @param jobName       JobName
-     * @param paramMap 需要填写的各项参数
-     * @return
-     * @throws IOException
-     */
-    QueueItem invokeBuild(String jobName, Map<String, String> paramMap) throws IOException;
-
-    /**
-     * 删除Job
-     *
-     * @param id Job的Id,其实是Result的Id,也就是repo的Id,参照{@link com.moekr.moocoder.logic.service.impl.exam.ExamServiceImpl#join(int, int)}
-     * @throws IOException
-     */
-    void deleteJob(int id) throws IOException;
-
-    // waitFinished: 是否等待直到构建完全完成
-    BuildDetails fetchBuildDetails(int id, int buildNumber, String target, boolean waitFinished) throws IOException;
-
-    BuildDetails fetchBuildDetails(String jobName, int buildNumber, String target, boolean waitFinished) throws IOException;
-
-    void createBuildJob(String jobName) throws IOException;
-
-	void createTestJob(String jobName) throws IOException;
-
-    void createFunctionTestJob(String jobName) throws IOException;
-
-    /**
-     * 创建深度学习需要的Job
-     *
-     * @param jobName Job名称
-     */
-    void createDLJob(String jobName) throws IOException;
-
-
-    void deleteJob(String jobName) throws IOException;
-}

+ 0 - 195
api/src/main/java/seecoder/devcloud/api/jenkins/impl/JenkinsApiImpl.java

@@ -1,195 +0,0 @@
-package seecoder.devcloud.api.jenkins.impl;
-
-
-import com.offbytwo.jenkins.JenkinsServer;
-import com.offbytwo.jenkins.client.JenkinsHttpClient;
-import com.offbytwo.jenkins.model.Artifact;
-import com.offbytwo.jenkins.model.BuildWithDetails;
-import com.offbytwo.jenkins.model.QueueItem;
-import com.offbytwo.jenkins.model.QueueReference;
-import seecoder.devcloud.api.jenkins.JenkinsApi;
-import seecoder.devcloud.api.jenkins.model.BuildDetails;
-import seecoder.devcloud.api.jenkins.model.CoverageResult;
-import seecoder.devcloud.api.jenkins.model.MutationResult;
-import seecoder.devcloud.api.ApplicationProperties;
-import lombok.extern.apachecommons.CommonsLog;
-import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.dom4j.*;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.List;
-import java.util.Map;
-
-@Component
-@CommonsLog
-public class JenkinsApiImpl implements JenkinsApi {
-    private final ApplicationProperties properties;
-
-    private JenkinsServer server;
-    private String configTemplate;
-    private String buildConfigTemplate;
-    private String testConfigTemplate;
-    private String functionTestConfigTemplate;
-    private String dlConfigTemplate;
-
-    public JenkinsApiImpl(ApplicationProperties properties) {
-        this.properties = properties;
-    }
-
-    @PostConstruct
-    private void initialize() throws URISyntaxException, IOException {
-        ApplicationProperties.Jenkins jenkins = properties.getJenkins();
-        URI uri = new URI(jenkins.getHost());
-        String username = jenkins.getUsername();
-        String token = jenkins.getToken();
-        JenkinsHttpClient client = new PoolingJenkinsHttpClient(uri, username, token);
-        server = new JenkinsServer(client);
-//        configTemplate = FileUtil.readResource("jenkins/config.xml");
-//        // TODO
-//        buildConfigTemplate = FileUtil.readResource("jenkins/codework/build-config.xml");
-//
-//        testConfigTemplate = FileUtil.readResource("jenkins/codework/test-config.xml");
-//        functionTestConfigTemplate = FileUtil.readResource("jenkins/codework/function-test-config.xml");
-//
-//        dlConfigTemplate = FileUtil.readResource("jenkins/dlConfig.xml");
-    }
-
-    @Override
-    public void createJob(int id) throws IOException {
-        server.createJob(String.valueOf(id), configTemplate);
-    }
-
-    @Override
-    public QueueItem invokeBuild(String jobName, Map<String, String> paramMap) throws IOException {
-        QueueReference reference;
-        if (paramMap == null) {
-            reference = server.getJob(jobName).build();
-        } else {
-            // 0.3.7版本的Jenkins客户端库中build(Map<String, String> params)方法存在BUG,会触发两次构建
-            reference = server.getJob(jobName).build(paramMap, false);
-        }
-        QueueItem item = server.getQueueItem(reference);
-        while (item.getExecutable() == null) {
-            try {
-                Thread.sleep(500);
-            } catch (InterruptedException e) {
-                Thread.currentThread().interrupt();
-            }
-            item = server.getQueueItem(reference);
-        }
-        return item;
-    }
-
-    @Override
-    public QueueItem invokeBuild(int id, Map<String, String> paramMap) throws IOException {
-        return invokeBuild(String.valueOf(id), paramMap);
-    }
-
-    @Override
-    public void deleteJob(int id) throws IOException {
-        server.deleteJob(String.valueOf(id));
-    }
-
-    @Override
-    public BuildDetails fetchBuildDetails(String jobName, int buildNumber, String target, boolean waitFinished) throws IOException {
-        BuildDetails result = new BuildDetails();
-        BuildWithDetails build;
-        build = server.getJob(jobName).getBuildByNumber(buildNumber).details();
-        while (waitFinished && (build.getResult() == null || build.getDuration() == 0)) {
-            try {
-                Thread.sleep(500);
-            } catch (InterruptedException e) {
-                Thread.currentThread().interrupt();
-            }
-            build = server.getJob(jobName).getBuildByNumber(buildNumber).details();
-        }
-        result.setConsoleOutput(build.getConsoleOutputText());
-        result.setNumber(build.getNumber());
-        result.setDuration(build.getDuration());
-        result.setBuildResult(build.getResult());
-        fetchTargetResult(result, build, target);
-        return result;
-    }
-
-    @Override
-    public BuildDetails fetchBuildDetails(int id, int buildNumber, String target,
-                                          boolean waitFinished) throws IOException {
-        return fetchBuildDetails(String.valueOf(id), buildNumber, target, waitFinished);
-    }
-
-    @Override
-    public void createBuildJob(String jobName) throws IOException {
-        server.createJob(jobName, buildConfigTemplate);
-    }
-
-    @Override
-    public void createTestJob(String jobName) throws IOException {
-        server.createJob(jobName, testConfigTemplate);
-    }
-
-    @Override
-    public void createFunctionTestJob(String jobName) throws IOException {
-        server.createJob(jobName, functionTestConfigTemplate);
-    }
-
-    @Override
-    public void createDLJob(String jobName) throws IOException {
-        server.createJob(jobName, dlConfigTemplate);
-    }
-
-    @Override
-    public void deleteJob(String jobName) throws IOException {
-        server.deleteJob(jobName);
-    }
-
-    private void fetchTargetResult(BuildDetails result, BuildWithDetails build, String target) {
-        try {
-            if ("TEST".equals(target)) {
-                fetchTestResult(result, build);
-            } else if ("COVERAGE".equals(target)) {
-                fetchCoverageResult(result, build);
-            } else if ("MUTATION".equals(target)) {
-                fetchMutationResult(result, build);
-            }
-        } catch (Exception ignore) {
-        }
-    }
-
-    private void fetchTestResult(BuildDetails result, BuildWithDetails build) throws IOException {
-        result.setTestResult(build.getTestResult());
-    }
-
-    private void fetchCoverageResult(BuildDetails result, BuildWithDetails build) throws IOException {
-        result.setCoverageResult(build.getClient().get(build.getUrl() + "/cobertura/?depth=2", CoverageResult.class));
-    }
-
-    private void fetchMutationResult(BuildDetails result, BuildWithDetails build) throws IOException, URISyntaxException, DocumentException {
-        List<Artifact> artifactList = build.getArtifacts();
-        Artifact artifact = artifactList.stream().filter(a -> a.getFileName().equals("mutations.xml")).findFirst().orElse(null);
-        if (artifact != null) {
-            MutationResult mutationResult = new MutationResult();
-            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-            outputStream.write(build.downloadArtifact(artifact));
-            String mutationReport = new String(outputStream.toByteArray());
-            Document document = DocumentHelper.parseText(mutationReport);
-            Element root = document.getRootElement();
-            for (Object element : root.elements("mutation")) {
-                if (element instanceof Element) {
-                    Attribute attribute = ((Element) element).attribute("detected");
-                    if (attribute != null) {
-                        mutationResult.setMutations(mutationResult.getMutations() + 1);
-                        if ("true".equals(attribute.getValue())) {
-                            mutationResult.setDetectedMutations(mutationResult.getDetectedMutations() + 1);
-                        }
-                    }
-                }
-            }
-            result.setMutationResult(mutationResult);
-        }
-    }
-
-}

+ 0 - 38
api/src/main/java/seecoder/devcloud/api/jenkins/impl/PoolingJenkinsHttpClient.java

@@ -1,38 +0,0 @@
-package seecoder.devcloud.api.jenkins.impl;
-
-import com.offbytwo.jenkins.client.JenkinsHttpClient;
-import org.apache.commons.lang.StringUtils;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.impl.auth.BasicScheme;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
-
-import java.net.URI;
-
-class PoolingJenkinsHttpClient extends JenkinsHttpClient {
-	PoolingJenkinsHttpClient(URI uri, String username, String password) {
-		super(uri, poolingHttpClient(uri, username, password));
-		if (StringUtils.isNotBlank(username)) {
-			HttpContext localContext = new BasicHttpContext();
-			localContext.setAttribute("preemptive-auth", new BasicScheme());
-			super.setLocalContext(localContext);
-		}
-	}
-
-	private static CloseableHttpClient poolingHttpClient(URI uri, String username, String password) {
-		HttpClientBuilder builder = addAuthentication(HttpClientBuilder.create(), uri, username, password);
-		PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager();
-		manager.setMaxTotal(256);
-		manager.setDefaultMaxPerRoute(128);
-		builder.setDefaultRequestConfig(RequestConfig.custom()
-				.setConnectTimeout(3000)
-				.setConnectionRequestTimeout(5000)
-				.setSocketTimeout(10000)
-				.build())
-				.setConnectionManager(manager);
-		return builder.build();
-	}
-}

+ 0 - 19
api/src/main/java/seecoder/devcloud/api/jenkins/model/BuildDetails.java

@@ -1,19 +0,0 @@
-package seecoder.devcloud.api.jenkins.model;
-
-
-import com.offbytwo.jenkins.model.BuildResult;
-import com.offbytwo.jenkins.model.TestResult;
-import lombok.Data;
-import lombok.ToString;
-
-@Data
-@ToString(exclude = "consoleOutput")
-public class BuildDetails {
-	private int number;
-	private long duration;
-	private BuildResult buildResult;
-	private String consoleOutput;
-	private TestResult testResult;
-	private CoverageResult coverageResult;
-	private MutationResult mutationResult;
-}

+ 0 - 27
api/src/main/java/seecoder/devcloud/api/jenkins/model/CoverageResult.java

@@ -1,27 +0,0 @@
-package seecoder.devcloud.api.jenkins.model;
-
-import com.offbytwo.jenkins.model.BaseModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.Setter;
-import lombok.ToString;
-
-import java.util.List;
-
-@Setter
-@EqualsAndHashCode(callSuper = true)
-@ToString
-public class CoverageResult extends BaseModel {
-	private Results results;
-
-	public List<CoverageResultElement> getElements() {
-		return results.getElements();
-	}
-
-	@Data
-	@EqualsAndHashCode
-	@ToString
-	private static class Results {
-		private List<CoverageResultElement> elements;
-	}
-}

+ 0 - 11
api/src/main/java/seecoder/devcloud/api/jenkins/model/CoverageResultElement.java

@@ -1,11 +0,0 @@
-package seecoder.devcloud.api.jenkins.model;
-
-import lombok.Data;
-
-@Data
-public class CoverageResultElement {
-	private String name;
-	private int numerator;
-	private int denominator;
-	private int ratio;
-}

+ 0 - 9
api/src/main/java/seecoder/devcloud/api/jenkins/model/MutationResult.java

@@ -1,9 +0,0 @@
-package seecoder.devcloud.api.jenkins.model;
-
-import lombok.Data;
-
-@Data
-public class MutationResult {
-	private int mutations;
-	private int detectedMutations;
-}

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

@@ -9,7 +9,7 @@ import seecoder.devcloud.api.k8s.model.DeploymentStatus;
  * author: rale
  * author: rale
  * createdAt: 12/23/18
  * createdAt: 12/23/18
  */
  */
-public interface DeploymentApi extends AbstractApi<Deployment>{
+public interface DeploymentApi extends AbstractApi<Deployment> {
 
 
     /**
     /**
      * 查询deployment的状态
      * 查询deployment的状态

+ 1 - 2
api/src/main/java/seecoder/devcloud/api/k8s/ExecApi.java

@@ -1,7 +1,6 @@
 package seecoder.devcloud.api.k8s;
 package seecoder.devcloud.api.k8s;
 
 
 
 
-
 import seecoder.devcloud.api.k8s.exception.K8sApiException;
 import seecoder.devcloud.api.k8s.exception.K8sApiException;
 
 
 import java.util.List;
 import java.util.List;
@@ -9,7 +8,7 @@ import java.util.List;
 /**
 /**
  * 进入容器执行指令
  * 进入容器执行指令
  *
  *
- * todo 传入输入流,获得输出流
+ * @todo 传入输入流,获得输出流
  */
  */
 public interface ExecApi {
 public interface ExecApi {
 
 

+ 0 - 96
api/src/main/java/seecoder/devcloud/api/k8s/K8sApiConfiguration.java

@@ -1,96 +0,0 @@
-package seecoder.devcloud.api.k8s;
-
-import io.kubernetes.client.Exec;
-import io.kubernetes.client.openapi.ApiClient;
-import io.kubernetes.client.openapi.apis.AppsV1Api;
-import io.kubernetes.client.openapi.apis.CoreV1Api;
-import io.kubernetes.client.openapi.apis.ExtensionsV1beta1Api;
-import io.kubernetes.client.util.Config;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import seecoder.devcloud.api.ApplicationProperties;
-
-
-@Configuration
-@ComponentScan("seecoder.devcloud.api.k8s.impl")
-public class K8sApiConfiguration {
-
-    private final ApiClient apiClient;
-
-    private final CoreV1Api coreV1Api;
-
-    private final AppsV1Api appsV1Api;
-
-    private final ExtensionsV1beta1Api extensionsV1beta1Api;
-
-    private final Exec exec;
-
-    /**
-     * http读取的超时时间设置为7分钟
-     */
-    private final ApiClient watchApiClient;
-
-    private final CoreV1Api watchCoreV1Api;
-
-    private final AppsV1Api watchAppsV1Api;
-
-    @Autowired
-    public K8sApiConfiguration(ApplicationProperties applicationProperties) {
-        ApplicationProperties.K8s k8s = applicationProperties.getK8s();
-        this.apiClient = Config.fromToken(k8s.getApiServer(), k8s.getToken(), k8s.getValidateSSL());
-        this.apiClient.setDebugging(k8s.getDebugging());
-        io.kubernetes.client.openapi.Configuration.setDefaultApiClient(this.apiClient);
-        this.coreV1Api = new CoreV1Api();
-        this.appsV1Api = new AppsV1Api();
-        this.extensionsV1beta1Api = new ExtensionsV1beta1Api();
-        this.exec = new Exec();
-
-
-        this.watchApiClient = Config.fromToken(k8s.getApiServer(), k8s.getToken(), k8s.getValidateSSL());
-        this.watchCoreV1Api = new CoreV1Api(watchApiClient);
-        this.watchAppsV1Api = new AppsV1Api(watchApiClient);
-    }
-
-    @Bean
-    public ApiClient apiClient() {
-        return apiClient;
-    }
-
-    @Bean
-    public CoreV1Api coreV1Api() {
-        return coreV1Api;
-    }
-
-    @Bean
-    public AppsV1Api appsV1Api() {
-        return appsV1Api;
-    }
-
-    @Bean
-    public ExtensionsV1beta1Api extensionsV1beta1Api() {
-        return extensionsV1beta1Api;
-    }
-
-    @Bean
-    public Exec exec() {
-        return exec;
-    }
-
-
-    @Bean
-    public ApiClient watchApiClient() {
-        return watchApiClient;
-    }
-
-    @Bean
-    public CoreV1Api watchCoreV1Api() {
-        return watchCoreV1Api;
-    }
-
-    @Bean
-    public AppsV1Api watchAppsV1Api() {
-        return watchAppsV1Api;
-    }
-}

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

@@ -3,5 +3,5 @@ package seecoder.devcloud.api.k8s;
 
 
 import seecoder.devcloud.api.k8s.model.Pod;
 import seecoder.devcloud.api.k8s.model.Pod;
 
 
-public interface PodApi extends AbstractApi<Pod>{
+public interface PodApi extends AbstractApi<Pod> {
 }
 }

+ 0 - 1
api/src/main/java/seecoder/devcloud/api/k8s/SecretApi.java

@@ -1,6 +1,5 @@
 package seecoder.devcloud.api.k8s;
 package seecoder.devcloud.api.k8s;
 
 
-
 import seecoder.devcloud.api.k8s.util.SecretTypeEnum;
 import seecoder.devcloud.api.k8s.util.SecretTypeEnum;
 import seecoder.devcloud.api.k8s.vo.SecretVO;
 import seecoder.devcloud.api.k8s.vo.SecretVO;
 
 

+ 13 - 12
api/src/main/java/seecoder/devcloud/api/k8s/impl/ConfigMapApiImpl.java

@@ -2,7 +2,6 @@ package seecoder.devcloud.api.k8s.impl;
 
 
 
 
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.JsonSyntaxException;
-
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.models.V1ConfigMap;
 import io.kubernetes.client.openapi.models.V1ConfigMap;
@@ -12,8 +11,8 @@ import io.kubernetes.client.openapi.models.V1DeleteOptionsBuilder;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
 import seecoder.devcloud.api.k8s.ConfigMapApi;
 import seecoder.devcloud.api.k8s.ConfigMapApi;
+import seecoder.devcloud.api.k8s.exception.K8sApiException;
 import seecoder.devcloud.api.k8s.model.ConfigMap;
 import seecoder.devcloud.api.k8s.model.ConfigMap;
 import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
 import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
 import seecoder.devcloud.api.k8s.model.LabelSelector;
 import seecoder.devcloud.api.k8s.model.LabelSelector;
@@ -25,6 +24,8 @@ import java.util.stream.Collectors;
 
 
 import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
 import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
 import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
 import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
+import static seecoder.devcloud.api.k8s.exception.K8sApiException.ALREADY_EXIST;
+import static seecoder.devcloud.api.k8s.exception.K8sApiException.NOT_FOUND;
 
 
 
 
 @Service
 @Service
@@ -48,10 +49,10 @@ public class ConfigMapApiImpl implements ConfigMapApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "configMap创建失败, configMap={}, response={}", configMap, e.getResponseBody());
             LoggerUtil.error(logger, e, "configMap创建失败, configMap={}, response={}", configMap, e.getResponseBody());
 
 
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
-                throw new K8sApiException(K8sApiException.NOT_FOUND, "namespace不存在");
-            } else if (e.getCode() == K8sApiException.ALREADY_EXIST) {
-                throw new K8sApiException(K8sApiException.ALREADY_EXIST, "configMap已经存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "namespace不存在");
+            } else if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST, "configMap已经存在");
             } else {
             } else {
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
@@ -71,10 +72,10 @@ public class ConfigMapApiImpl implements ConfigMapApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "configMap更新失败, configMap={}, response={}", configMap, e.getResponseBody());
             LoggerUtil.error(logger, e, "configMap更新失败, configMap={}, response={}", configMap, e.getResponseBody());
 
 
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
-                throw new K8sApiException(K8sApiException.NOT_FOUND, "namespace不存在");
-            } else if (e.getCode() == K8sApiException.ALREADY_EXIST) {
-                throw new K8sApiException(K8sApiException.ALREADY_EXIST, "configMap已经存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "namespace不存在");
+            } else if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST, "configMap已经存在");
             } else {
             } else {
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
@@ -103,7 +104,7 @@ public class ConfigMapApiImpl implements ConfigMapApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "删除ConfigMap失败,namespace={}, name={}, response={}", configMap.getNamespace(), configMap.getName(), e.getResponseBody());
             LoggerUtil.error(logger, e, "删除ConfigMap失败,namespace={}, name={}, response={}", configMap.getNamespace(), configMap.getName(), e.getResponseBody());
 
 
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return;
                 return;
             }else {
             }else {
                 return;
                 return;
@@ -153,7 +154,7 @@ public class ConfigMapApiImpl implements ConfigMapApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "查找configMap失败,namespace = {}, response={}",
             LoggerUtil.error(logger, e, "查找configMap失败,namespace = {}, response={}",
                     request.getNamespace(), e.getResponseBody());
                     request.getNamespace(), e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return Collections.emptyList();
                 return Collections.emptyList();
             }else {
             }else {
                 return Collections.emptyList();
                 return Collections.emptyList();

+ 13 - 13
api/src/main/java/seecoder/devcloud/api/k8s/impl/DeploymentApiImpl.java

@@ -1,5 +1,6 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
+
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.JsonSyntaxException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.AppsV1Api;
 import io.kubernetes.client.openapi.apis.AppsV1Api;
@@ -13,7 +14,6 @@ import org.springframework.stereotype.Service;
 import seecoder.devcloud.api.k8s.DeploymentApi;
 import seecoder.devcloud.api.k8s.DeploymentApi;
 import seecoder.devcloud.api.k8s.exception.K8sApiException;
 import seecoder.devcloud.api.k8s.exception.K8sApiException;
 import seecoder.devcloud.api.k8s.model.Deployment;
 import seecoder.devcloud.api.k8s.model.Deployment;
-import seecoder.devcloud.api.k8s.model.DeploymentStatus;
 import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
 import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
 import seecoder.devcloud.api.k8s.model.LabelSelector;
 import seecoder.devcloud.api.k8s.model.LabelSelector;
 import seecoder.devcloud.common.util.LoggerUtil;
 import seecoder.devcloud.common.util.LoggerUtil;
@@ -23,7 +23,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
 import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
+import static seecoder.devcloud.api.k8s.exception.K8sApiException.*;
 
 
 
 
 /**
 /**
@@ -58,12 +58,12 @@ public class DeploymentApiImpl implements DeploymentApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "deployment创建失败, deployment={}, response={}", deployment, e.getResponseBody());
             LoggerUtil.error(logger, e, "deployment创建失败, deployment={}, response={}", deployment, e.getResponseBody());
 
 
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
-                throw new K8sApiException(K8sApiException.NOT_FOUND, "namespace不存在");
-            } else if (e.getCode() == K8sApiException.ALREADY_EXIST) {
-                throw new K8sApiException(K8sApiException.ALREADY_EXIST, "deployment已经存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "namespace不存在");
+            } else if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST, "deployment已经存在");
             } else {
             } else {
-                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+                throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             LoggerUtil.error(logger, e, "deployment创建异常, deployment={}", deployment);
             LoggerUtil.error(logger, e, "deployment创建异常, deployment={}", deployment);
@@ -91,14 +91,14 @@ public class DeploymentApiImpl implements DeploymentApi {
             return new Deployment(v1Deployment);
             return new Deployment(v1Deployment);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "deployment更新异常, deployment={}, response={}", deployment,  e.getResponseBody());
             LoggerUtil.error(logger, e, "deployment更新异常, deployment={}, response={}", deployment,  e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
-                throw new K8sApiException(K8sApiException.NOT_FOUND);
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND);
             } else {
             } else {
-                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+                throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             LoggerUtil.error(logger, e, "deployment更新异常, deployment={}", deployment);
             LoggerUtil.error(logger, e, "deployment更新异常, deployment={}", deployment);
-            throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            throw K8s_SYSTEM_ERROR_EXCEPTION;
         }
         }
     }
     }
 
 
@@ -121,7 +121,7 @@ public class DeploymentApiImpl implements DeploymentApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", deployment.getNamespace(), deployment.getName(), e.getResponseBody());
             LoggerUtil.error(logger, e, "删除Deployment失败,namespace={}, name={}, response={}", deployment.getNamespace(), deployment.getName(), e.getResponseBody());
 
 
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return;
                 return;
             }else {
             }else {
                 return;
                 return;
@@ -171,7 +171,7 @@ public class DeploymentApiImpl implements DeploymentApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "查找deployment失败,namespace = {}, response={}",
             LoggerUtil.error(logger, e, "查找deployment失败,namespace = {}, response={}",
                     request.getNamespace(), e.getResponseBody());
                     request.getNamespace(), e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return Collections.emptyList();
                 return Collections.emptyList();
             }else {
             }else {
                 return Collections.emptyList();
                 return Collections.emptyList();

+ 9 - 8
api/src/main/java/seecoder/devcloud/api/k8s/impl/ExecApiImpl.java

@@ -1,19 +1,20 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
+import cn.seecoder.paas.service.facade.k8s.ExecApi;
+import cn.seecoder.paas.service.facade.k8s.exception.K8sApiException;
+import cn.seecoder.paas.util.LoggerUtil;
 import io.kubernetes.client.Exec;
 import io.kubernetes.client.Exec;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.ExecApi;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
-import seecoder.devcloud.common.util.LoggerUtil;
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.util.List;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
+import static cn.seecoder.paas.service.facade.k8s.exception.K8sApiException.NOT_FOUND;
+
 
 
 @Service
 @Service
 public class ExecApiImpl implements ExecApi {
 public class ExecApiImpl implements ExecApi {
@@ -51,8 +52,8 @@ public class ExecApiImpl implements ExecApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "指令执行异常, namespace={}, podName={}, commands={}, response={}",
             LoggerUtil.error(logger, e, "指令执行异常, namespace={}, podName={}, commands={}, response={}",
                 namespace, podName, commands, e.getResponseBody());
                 namespace, podName, commands, e.getResponseBody());
-            if (e.getCode() == NexusApiException.NOT_FOUND) {
-                throw new K8sApiException(NexusApiException.NOT_FOUND, "容器不存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "容器不存在");
             }else{
             }else{
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
@@ -81,8 +82,8 @@ public class ExecApiImpl implements ExecApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "指令执行异常, namespace={}, podName={}, response={}",
             LoggerUtil.error(logger, e, "指令执行异常, namespace={}, podName={}, response={}",
                     namespace, podName, e.getResponseBody());
                     namespace, podName, e.getResponseBody());
-            if (e.getCode() == NexusApiException.NOT_FOUND) {
-                throw new K8sApiException(NexusApiException.NOT_FOUND, "容器不存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "容器不存在");
             }else{
             }else{
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }

+ 20 - 22
api/src/main/java/seecoder/devcloud/api/k8s/impl/IngressApiImpl.java

@@ -1,6 +1,11 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
-
+import cn.seecoder.paas.service.facade.k8s.IngressApi;
+import cn.seecoder.paas.service.facade.k8s.exception.K8sApiException;
+import cn.seecoder.paas.service.facade.k8s.model.Ingress;
+import cn.seecoder.paas.service.facade.k8s.model.K8sObjectRequest;
+import cn.seecoder.paas.service.facade.k8s.model.LabelSelector;
+import cn.seecoder.paas.util.LoggerUtil;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.JsonSyntaxException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.ExtensionsV1beta1Api;
 import io.kubernetes.client.openapi.apis.ExtensionsV1beta1Api;
@@ -11,21 +16,14 @@ import io.kubernetes.client.openapi.models.V1DeleteOptionsBuilder;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.IngressApi;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
-import seecoder.devcloud.api.k8s.model.Ingress;
-import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
-import seecoder.devcloud.api.k8s.model.LabelSelector;
-import seecoder.devcloud.common.util.LoggerUtil;
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
-import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
-
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
+import static cn.seecoder.paas.service.facade.k8s.exception.K8sApiException.*;
 
 
 /**
 /**
  * author: rale
  * author: rale
@@ -63,12 +61,12 @@ public class IngressApiImpl implements IngressApi {
             return result == null ? null : new Ingress(result);
             return result == null ? null : new Ingress(result);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "ingress 创建失败,ingress={}, response={}", ingress, e.getResponseBody());
             LoggerUtil.error(logger, e, "ingress 创建失败,ingress={}, response={}", ingress, e.getResponseBody());
-            if (e.getCode() == NexusApiException.NOT_FOUND) {
-                throw new K8sApiException(NexusApiException.NOT_FOUND);
-            } else if (e.getCode() == K8sApiException.ALREADY_EXIST) {
-                throw new K8sApiException(K8sApiException.ALREADY_EXIST);
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND);
+            } else if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST);
             } else {
             } else {
-                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+                throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             LoggerUtil.error(logger, e, "ingress 创建异常,ingress={}", ingress);
             LoggerUtil.error(logger, e, "ingress 创建异常,ingress={}", ingress);
@@ -99,14 +97,14 @@ public class IngressApiImpl implements IngressApi {
             return new Ingress(ExtensionsV1beta1Ingress);
             return new Ingress(ExtensionsV1beta1Ingress);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "ingress更新失败,ingress={}, response={}", ingress, e.getResponseBody());
             LoggerUtil.error(logger, e, "ingress更新失败,ingress={}, response={}", ingress, e.getResponseBody());
-            if (e.getCode() == NexusApiException.NOT_FOUND) {
-                throw new K8sApiException(NexusApiException.NOT_FOUND, "资源不存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "资源不存在");
             }else {
             }else {
-                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+                throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             LoggerUtil.error(logger, e, "ingress更新失败,ingress={}", ingress);
             LoggerUtil.error(logger, e, "ingress更新失败,ingress={}", ingress);
-            throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            throw K8s_SYSTEM_ERROR_EXCEPTION;
         }
         }
     }
     }
 
 
@@ -128,7 +126,7 @@ public class IngressApiImpl implements IngressApi {
                     v1DeleteOptions);
                     v1DeleteOptions);
         }catch (ApiException e) {
         }catch (ApiException e) {
             LoggerUtil.error(logger, e, "ingress 删除失败,name={}, namespace={}, response={}", ingress.getName(), ingress.getNamespace(), e.getResponseBody());
             LoggerUtil.error(logger, e, "ingress 删除失败,name={}, namespace={}, response={}", ingress.getName(), ingress.getNamespace(), e.getResponseBody());
-            if (e.getCode() == NexusApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return;
                 return;
             }else {
             }else {
                 return;
                 return;
@@ -178,7 +176,7 @@ public class IngressApiImpl implements IngressApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "查找ingresses失败,namespace = {}, response={}",
             LoggerUtil.error(logger, e, "查找ingresses失败,namespace = {}, response={}",
                     request.getNamespace(), e.getResponseBody());
                     request.getNamespace(), e.getResponseBody());
-            if (e.getCode() == NexusApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return Collections.emptyList();
                 return Collections.emptyList();
             } else {
             } else {
                 return Collections.emptyList();
                 return Collections.emptyList();

+ 4 - 6
api/src/main/java/seecoder/devcloud/api/k8s/impl/LogApiImpl.java

@@ -1,19 +1,17 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
-
+import cn.seecoder.paas.service.facade.k8s.LogApi;
+import cn.seecoder.paas.service.facade.k8s.exception.K8sApiException;
+import cn.seecoder.paas.util.LoggerUtil;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.LogApi;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
-import seecoder.devcloud.common.util.LoggerUtil;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
-
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
 
 
 /**
 /**
  * author: rale
  * author: rale

+ 14 - 15
api/src/main/java/seecoder/devcloud/api/k8s/impl/NamespaceApiImpl.java

@@ -1,6 +1,11 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
-
+import cn.seecoder.paas.service.facade.k8s.NamespaceApi;
+import cn.seecoder.paas.service.facade.k8s.exception.K8sApiException;
+import cn.seecoder.paas.service.facade.k8s.model.K8sObjectRequest;
+import cn.seecoder.paas.service.facade.k8s.model.LabelSelector;
+import cn.seecoder.paas.service.facade.k8s.model.Namespace;
+import cn.seecoder.paas.util.LoggerUtil;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.JsonSyntaxException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
@@ -11,20 +16,14 @@ import io.kubernetes.client.openapi.models.V1NamespaceList;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.NamespaceApi;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
-import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
-import seecoder.devcloud.api.k8s.model.LabelSelector;
-import seecoder.devcloud.api.k8s.model.Namespace;
-import seecoder.devcloud.common.util.LoggerUtil;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
-import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
-
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
+import static cn.seecoder.paas.service.facade.k8s.exception.K8sApiException.*;
 
 
 @Service
 @Service
 public class NamespaceApiImpl implements NamespaceApi {
 public class NamespaceApiImpl implements NamespaceApi {
@@ -53,20 +52,20 @@ public class NamespaceApiImpl implements NamespaceApi {
             return result == null ? null : new Namespace(result);
             return result == null ? null : new Namespace(result);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "Namespace创建失败,namespace={}, v1Namespace={}, response={}", namespace, v1Namespace, e.getResponseBody());
             LoggerUtil.error(logger, e, "Namespace创建失败,namespace={}, v1Namespace={}, response={}", namespace, v1Namespace, e.getResponseBody());
-            if (e.getCode() == K8sApiException.ALREADY_EXIST) {
+            if (e.getCode() == ALREADY_EXIST) {
                 throw new K8sApiException(K8sApiException.ALREADY_EXIST);
                 throw new K8sApiException(K8sApiException.ALREADY_EXIST);
             } else {
             } else {
-                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+                throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             LoggerUtil.error(logger, e, "Namespace创建异常, namespace={}, v1Namespace={}", namespace, v1Namespace);
             LoggerUtil.error(logger, e, "Namespace创建异常, namespace={}, v1Namespace={}", namespace, v1Namespace);
-            throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            throw K8s_SYSTEM_ERROR_EXCEPTION;
         }
         }
     }
     }
 
 
     @Override
     @Override
     public Namespace update(Namespace namespace) {
     public Namespace update(Namespace namespace) {
-        throw K8sApiException.K8s_NOT_SUPPORT_METHOD;
+        throw K8s_NOT_SUPPORT_METHOD;
     }
     }
 
 
     @Override
     @Override
@@ -86,7 +85,7 @@ public class NamespaceApiImpl implements NamespaceApi {
                     v1DeleteOptions);
                     v1DeleteOptions);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "Namespace删除失败,name={}, response={}", namespace.getName() , e.getResponseBody());
             LoggerUtil.error(logger, e, "Namespace删除失败,name={}, response={}", namespace.getName() , e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return;
                 return;
             }else {
             }else {
                 return;
                 return;

+ 20 - 20
api/src/main/java/seecoder/devcloud/api/k8s/impl/PersistentVolumeClaimImpl.java

@@ -1,6 +1,12 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
-
+import cn.seecoder.paas.service.facade.k8s.DeploymentApi;
+import cn.seecoder.paas.service.facade.k8s.PersistentVolumeClaimApi;
+import cn.seecoder.paas.service.facade.k8s.exception.K8sApiException;
+import cn.seecoder.paas.service.facade.k8s.model.K8sObjectRequest;
+import cn.seecoder.paas.service.facade.k8s.model.LabelSelector;
+import cn.seecoder.paas.service.facade.k8s.model.PersistentVolumeClaim;
+import cn.seecoder.paas.util.LoggerUtil;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.JsonSyntaxException;
 import io.kubernetes.client.custom.V1Patch;
 import io.kubernetes.client.custom.V1Patch;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
@@ -12,21 +18,15 @@ import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimList;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.DeploymentApi;
-import seecoder.devcloud.api.k8s.PersistentVolumeClaimApi;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
-import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
-import seecoder.devcloud.api.k8s.model.LabelSelector;
-import seecoder.devcloud.api.k8s.model.PersistentVolumeClaim;
-import seecoder.devcloud.common.util.LoggerUtil;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
-import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
-
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
+import static cn.seecoder.paas.service.facade.k8s.exception.K8sApiException.ALREADY_EXIST;
+import static cn.seecoder.paas.service.facade.k8s.exception.K8sApiException.NOT_FOUND;
 
 
 @Service
 @Service
 public class PersistentVolumeClaimImpl implements PersistentVolumeClaimApi {
 public class PersistentVolumeClaimImpl implements PersistentVolumeClaimApi {
@@ -54,10 +54,10 @@ public class PersistentVolumeClaimImpl implements PersistentVolumeClaimApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "pvc 创建失败, persistentVolumeClaim={}, response={}", persistentVolumeClaim, e.getResponseBody());
             LoggerUtil.error(logger, e, "pvc 创建失败, persistentVolumeClaim={}, response={}", persistentVolumeClaim, e.getResponseBody());
 
 
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
-                throw new K8sApiException(K8sApiException.NOT_FOUND, "namespace不存在");
-            } else if (e.getCode() == K8sApiException.ALREADY_EXIST) {
-                throw new K8sApiException(K8sApiException.ALREADY_EXIST, "persistentVolumeClaim已经存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "namespace不存在");
+            } else if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST, "persistentVolumeClaim已经存在");
             } else {
             } else {
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
@@ -79,10 +79,10 @@ public class PersistentVolumeClaimImpl implements PersistentVolumeClaimApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "persistentVolumeClaim 更新失败, persistentVolumeClaim={}, response={}", persistentVolumeClaim, e.getResponseBody());
             LoggerUtil.error(logger, e, "persistentVolumeClaim 更新失败, persistentVolumeClaim={}, response={}", persistentVolumeClaim, e.getResponseBody());
 
 
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
-                throw new K8sApiException(K8sApiException.NOT_FOUND, "namespace不存在");
-            } else if (e.getCode() == K8sApiException.ALREADY_EXIST) {
-                throw new K8sApiException(K8sApiException.ALREADY_EXIST, "persistentVolumeClaim 已经存在");
+            if (e.getCode() == NOT_FOUND) {
+                throw new K8sApiException(NOT_FOUND, "namespace不存在");
+            } else if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST, "persistentVolumeClaim 已经存在");
             } else {
             } else {
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
                 throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
@@ -161,7 +161,7 @@ public class PersistentVolumeClaimImpl implements PersistentVolumeClaimApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "查找 persistentVolumeClaim 失败,namespace = {}, response={}",
             LoggerUtil.error(logger, e, "查找 persistentVolumeClaim 失败,namespace = {}, response={}",
                     request.getNamespace(), e.getResponseBody());
                     request.getNamespace(), e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return Collections.emptyList();
                 return Collections.emptyList();
             }else {
             }else {
                 return Collections.emptyList();
                 return Collections.emptyList();

+ 13 - 15
api/src/main/java/seecoder/devcloud/api/k8s/impl/PodApiImpl.java

@@ -1,6 +1,11 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
-
+import cn.seecoder.paas.service.facade.k8s.PodApi;
+import cn.seecoder.paas.service.facade.k8s.model.K8sObjectRequest;
+import cn.seecoder.paas.service.facade.k8s.model.LabelSelector;
+import cn.seecoder.paas.service.facade.k8s.model.Namespace;
+import cn.seecoder.paas.service.facade.k8s.model.Pod;
+import cn.seecoder.paas.util.LoggerUtil;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.JsonSyntaxException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
@@ -11,21 +16,14 @@ import io.kubernetes.client.openapi.models.V1PodList;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.PodApi;
-import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
-import seecoder.devcloud.api.k8s.model.LabelSelector;
-import seecoder.devcloud.api.k8s.model.Namespace;
-import seecoder.devcloud.api.k8s.model.Pod;
-import seecoder.devcloud.common.util.LoggerUtil;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
-import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
-
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
+import static cn.seecoder.paas.service.facade.k8s.exception.K8sApiException.*;
 
 
 /**
 /**
  * author: rale
  * author: rale
@@ -45,12 +43,12 @@ public class PodApiImpl implements PodApi {
 
 
     @Override
     @Override
     public Pod create(Pod pod) {
     public Pod create(Pod pod) {
-        throw  K8sApiException.K8s_NOT_SUPPORT_METHOD;
+        throw  K8s_NOT_SUPPORT_METHOD;
     }
     }
 
 
     @Override
     @Override
     public Pod update(Pod pod) {
     public Pod update(Pod pod) {
-        throw  K8sApiException.K8s_NOT_SUPPORT_METHOD;
+        throw  K8s_NOT_SUPPORT_METHOD;
     }
     }
 
 
     @Override
     @Override
@@ -71,7 +69,7 @@ public class PodApiImpl implements PodApi {
                     v1DeleteOptions);
                     v1DeleteOptions);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "Pod删除失败,name={}, response={}", pod.getName() , e.getResponseBody());
             LoggerUtil.error(logger, e, "Pod删除失败,name={}, response={}", pod.getName() , e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return;
                 return;
             }else {
             }else {
                 return;
                 return;
@@ -121,7 +119,7 @@ public class PodApiImpl implements PodApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "查找pod失败,namespace = {}, response={}",
             LoggerUtil.error(logger, e, "查找pod失败,namespace = {}, response={}",
                     request.getNamespace(), e.getResponseBody());
                     request.getNamespace(), e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return Collections.emptyList();
                 return Collections.emptyList();
             }else {
             }else {
                 return Collections.emptyList();
                 return Collections.emptyList();

+ 11 - 15
api/src/main/java/seecoder/devcloud/api/k8s/impl/SecretApiImpl.java

@@ -1,6 +1,11 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
 
 
+import cn.seecoder.paas.service.facade.k8s.SecretApi;
+import cn.seecoder.paas.service.facade.k8s.exception.K8sApiException;
+import cn.seecoder.paas.service.facade.k8s.util.SecretTypeEnum;
+import cn.seecoder.paas.service.facade.k8s.vo.SecretVO;
+import cn.seecoder.paas.util.LoggerUtil;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.models.*;
 import io.kubernetes.client.openapi.models.*;
@@ -8,12 +13,6 @@ import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.SecretApi;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
-import seecoder.devcloud.api.k8s.util.SecretTypeEnum;
-import seecoder.devcloud.api.k8s.vo.SecretVO;
-import seecoder.devcloud.common.util.LoggerUtil;
-import seecoder.devcloud.api.k8s.K8sConstants;
 
 
 import java.util.Base64;
 import java.util.Base64;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -21,19 +20,16 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
+
 
 
 @Service
 @Service
 public class SecretApiImpl implements SecretApi {
 public class SecretApiImpl implements SecretApi {
 
 
     private static final Logger logger = LoggerUtil.getLogger(SecretApi.class);
     private static final Logger logger = LoggerUtil.getLogger(SecretApi.class);
 
 
-
-    private final CoreV1Api coreV1Api;
-
     @Autowired
     @Autowired
-    public SecretApiImpl(CoreV1Api coreV1Api) {
-        this.coreV1Api = coreV1Api;
-    }
+    private CoreV1Api coreV1Api;
 
 
     @Override
     @Override
     public SecretVO createGenericSecret(String namespace, String name, Map<String, byte[]> data) throws K8sApiException {
     public SecretVO createGenericSecret(String namespace, String name, Map<String, byte[]> data) throws K8sApiException {
@@ -56,7 +52,7 @@ public class SecretApiImpl implements SecretApi {
         v1Secret.setType(type.getValue());
         v1Secret.setType(type.getValue());
 
 
         try {
         try {
-            return new SecretVO(coreV1Api.createNamespacedSecret(namespace, v1Secret, K8sConstants.PRETTY_FORMAT, null, null));
+            return new SecretVO(coreV1Api.createNamespacedSecret(namespace, v1Secret, PRETTY_FORMAT, null, null));
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "Secret创建失败, Secret={}, response={}", v1Secret, e.getResponseBody());
             LoggerUtil.error(logger, e, "Secret创建失败, Secret={}, response={}", v1Secret, e.getResponseBody());
             switch (e.getCode()) {
             switch (e.getCode()) {
@@ -98,7 +94,7 @@ public class SecretApiImpl implements SecretApi {
         try {
         try {
             V1SecretList v1SecretList = coreV1Api.listNamespacedSecret(
             V1SecretList v1SecretList = coreV1Api.listNamespacedSecret(
                     namespace,
                     namespace,
-                    K8sConstants.PRETTY_FORMAT,
+                    PRETTY_FORMAT,
                     null,
                     null,
                     "",
                     "",
                     null,
                     null,
@@ -140,7 +136,7 @@ public class SecretApiImpl implements SecretApi {
         V1DeleteOptions body = new V1DeleteOptions();
         V1DeleteOptions body = new V1DeleteOptions();
         try {
         try {
             //暂时没有用到deleteNamespacedSecret()中的其他参数。
             //暂时没有用到deleteNamespacedSecret()中的其他参数。
-            V1Status v1Status = coreV1Api.deleteNamespacedSecret(name, namespace, K8sConstants.PRETTY_FORMAT, null, 5, false, "", body);
+            V1Status v1Status = coreV1Api.deleteNamespacedSecret(name, namespace, PRETTY_FORMAT, null, 5, false, "", body);
         } catch (ApiException e) {
         } catch (ApiException e) {
             if (e.getCode() == K8sApiException.NOT_FOUND) {
             if (e.getCode() == K8sApiException.NOT_FOUND) {
                 return;
                 return;

+ 21 - 27
api/src/main/java/seecoder/devcloud/api/k8s/impl/ServiceApiImpl.java

@@ -1,6 +1,11 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
-
+import cn.seecoder.paas.service.facade.k8s.ServiceApi;
+import cn.seecoder.paas.service.facade.k8s.exception.K8sApiException;
+import cn.seecoder.paas.service.facade.k8s.model.K8sObjectRequest;
+import cn.seecoder.paas.service.facade.k8s.model.LabelSelector;
+import cn.seecoder.paas.service.facade.k8s.model.Service;
+import cn.seecoder.paas.util.LoggerUtil;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
 import io.kubernetes.client.openapi.models.V1DeleteOptions;
 import io.kubernetes.client.openapi.models.V1DeleteOptions;
@@ -9,32 +14,21 @@ import io.kubernetes.client.openapi.models.V1Service;
 import io.kubernetes.client.openapi.models.V1ServiceList;
 import io.kubernetes.client.openapi.models.V1ServiceList;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import seecoder.devcloud.api.k8s.ServiceApi;
-import seecoder.devcloud.api.k8s.exception.K8sApiException;
-import seecoder.devcloud.api.k8s.model.K8sObjectRequest;
-import seecoder.devcloud.api.k8s.model.LabelSelector;
-import seecoder.devcloud.api.k8s.model.Service;
-import seecoder.devcloud.common.util.LoggerUtil;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
-import static seecoder.devcloud.api.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
-
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.FOREGROUND_PROPAGATION_POLICY;
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
+import static cn.seecoder.paas.service.facade.k8s.exception.K8sApiException.*;
 
 
 @org.springframework.stereotype.Service
 @org.springframework.stereotype.Service
 public class ServiceApiImpl implements ServiceApi {
 public class ServiceApiImpl implements ServiceApi {
     private static final Logger logger = LoggerUtil.getLogger(ServiceApi.class);
     private static final Logger logger = LoggerUtil.getLogger(ServiceApi.class);
 
 
-
-    private final CoreV1Api coreV1Api;
-
     @Autowired
     @Autowired
-    public ServiceApiImpl(CoreV1Api coreV1Api) {
-        this.coreV1Api = coreV1Api;
-    }
+    private CoreV1Api coreV1Api;
 
 
     /**
     /**
      * 创建Service
      * 创建Service
@@ -51,12 +45,12 @@ public class ServiceApiImpl implements ServiceApi {
             return v1Service == null ? null : new Service(v1Service);
             return v1Service == null ? null : new Service(v1Service);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "service创建失败, service={}, response={}", service, e.getResponseBody());
             LoggerUtil.error(logger, e, "service创建失败, service={}, response={}", service, e.getResponseBody());
-            if (e.getCode() == K8sApiException.ALREADY_EXIST) {
-                throw new K8sApiException(K8sApiException.ALREADY_EXIST, "Service已经存在");
-            }else if (e.getCode() == K8sApiException.NOT_FOUND){
-                throw new K8sApiException(K8sApiException.NOT_FOUND, "Namespace不存在");
+            if (e.getCode() == ALREADY_EXIST) {
+                throw new K8sApiException(ALREADY_EXIST, "Service已经存在");
+            }else if (e.getCode() == NOT_FOUND){
+                throw new K8sApiException(NOT_FOUND, "Namespace不存在");
             }else {
             }else {
-                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+                throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         }
         }
     }
     }
@@ -79,14 +73,14 @@ public class ServiceApiImpl implements ServiceApi {
             return v1Service == null ? null : new Service(v1Service);
             return v1Service == null ? null : new Service(v1Service);
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "service替换失败, service={}, response={}", service, e.getResponseBody());
             LoggerUtil.error(logger, e, "service替换失败, service={}, response={}", service, e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND){
-                throw new K8sApiException(K8sApiException.NOT_FOUND, "Service不存在");
+            if (e.getCode() == NOT_FOUND){
+                throw new K8sApiException(NOT_FOUND, "Service不存在");
             }else {
             }else {
-                throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+                throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             LoggerUtil.error(logger, e, "service替换异常, service={}", service);
             LoggerUtil.error(logger, e, "service替换异常, service={}", service);
-            throw K8sApiException.K8s_SYSTEM_ERROR_EXCEPTION;
+            throw K8s_SYSTEM_ERROR_EXCEPTION;
         }
         }
     }
     }
 
 
@@ -109,7 +103,7 @@ public class ServiceApiImpl implements ServiceApi {
         }catch (ApiException e) {
         }catch (ApiException e) {
             LoggerUtil.error(logger, e, "Service删除失败,namespace={}, name={}, response={}",
             LoggerUtil.error(logger, e, "Service删除失败,namespace={}, name={}, response={}",
                     service.getNamespace(), service.getName(), e.getResponseBody());
                     service.getNamespace(), service.getName(), e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return;
                 return;
             }else {
             }else {
                 return;
                 return;
@@ -156,7 +150,7 @@ public class ServiceApiImpl implements ServiceApi {
         } catch (ApiException e) {
         } catch (ApiException e) {
             LoggerUtil.error(logger, e, "查找pod失败,namespace = {}, response={}",
             LoggerUtil.error(logger, e, "查找pod失败,namespace = {}, response={}",
                     request.getNamespace(), e.getResponseBody());
                     request.getNamespace(), e.getResponseBody());
-            if (e.getCode() == K8sApiException.NOT_FOUND) {
+            if (e.getCode() == NOT_FOUND) {
                 return Collections.emptyList();
                 return Collections.emptyList();
             }else {
             }else {
                 return Collections.emptyList();
                 return Collections.emptyList();

+ 3 - 4
api/src/main/java/seecoder/devcloud/api/k8s/impl/WatchApiImpl.java

@@ -1,5 +1,6 @@
 package seecoder.devcloud.api.k8s.impl;
 package seecoder.devcloud.api.k8s.impl;
 
 
+import cn.seecoder.paas.service.facade.k8s.WatchApi;
 import com.google.common.reflect.TypeToken;
 import com.google.common.reflect.TypeToken;
 import io.kubernetes.client.openapi.ApiClient;
 import io.kubernetes.client.openapi.ApiClient;
 import io.kubernetes.client.openapi.ApiException;
 import io.kubernetes.client.openapi.ApiException;
@@ -8,19 +9,17 @@ import io.kubernetes.client.openapi.models.V1Deployment;
 import io.kubernetes.client.util.Watch;
 import io.kubernetes.client.util.Watch;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import seecoder.devcloud.api.k8s.WatchApi;
 
 
 import java.io.IOException;
 import java.io.IOException;
 
 
-import static seecoder.devcloud.api.k8s.K8sConstants.PRETTY_FORMAT;
-
+import static cn.seecoder.paas.service.facade.k8s.K8sConstants.PRETTY_FORMAT;
 
 
 /**
 /**
  * author: rale
  * author: rale
  * createdAt: 1/13/19
  * createdAt: 1/13/19
  */
  */
 @Service
 @Service
-public class WatchApiImpl implements WatchApi {
+public class WatchApiImpl implements WatchApi{
 
 
     private ApiClient watchApiClient;
     private ApiClient watchApiClient;
 
 

+ 6 - 5
api/src/main/java/seecoder/devcloud/api/k8s/model/ConfigMap.java

@@ -1,10 +1,11 @@
 package seecoder.devcloud.api.k8s.model;
 package seecoder.devcloud.api.k8s.model;
 
 
-
-
 import io.kubernetes.client.openapi.models.V1ConfigMap;
 import io.kubernetes.client.openapi.models.V1ConfigMap;
 import io.kubernetes.client.openapi.models.V1ConfigMapBuilder;
 import io.kubernetes.client.openapi.models.V1ConfigMapBuilder;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
@@ -13,18 +14,18 @@ import java.util.Map;
 @AllArgsConstructor
 @AllArgsConstructor
 @NoArgsConstructor
 @NoArgsConstructor
 @Builder
 @Builder
-@EqualsAndHashCode(callSuper=false)
 public class ConfigMap extends K8sAbstractObject<V1ConfigMap> {
 public class ConfigMap extends K8sAbstractObject<V1ConfigMap> {
 
 
     public static final String API_VERSION = "v1";
     public static final String API_VERSION = "v1";
 
 
     public static final String KIND = "ConfigMap";
     public static final String KIND = "ConfigMap";
-    @Builder.Default
+
     private Map<String, String> data = new HashMap<>();
     private Map<String, String> data = new HashMap<>();
 
 
 
 
     public ConfigMap(V1ConfigMap v1ConfigMap) {
     public ConfigMap(V1ConfigMap v1ConfigMap) {
         super(v1ConfigMap);
         super(v1ConfigMap);
+        this.data = v1ConfigMap.getData();
     }
     }
 
 
     public void merge(V1ConfigMap v1ConfigMap) {
     public void merge(V1ConfigMap v1ConfigMap) {

+ 0 - 4
api/src/main/java/seecoder/devcloud/api/k8s/model/Container.java

@@ -32,14 +32,11 @@ public class Container implements K8sObjectTransformer<V1Container> {
     /* 启动指令 */
     /* 启动指令 */
     private List<String> command;
     private List<String> command;
 
 
-    @Builder.Default
     /* 环境变量 */
     /* 环境变量 */
     private Map<String, String> env = new HashMap<>();
     private Map<String, String> env = new HashMap<>();
 
 
-    @Builder.Default
     private Set<ContainerPort> ports = new HashSet<>();
     private Set<ContainerPort> ports = new HashSet<>();
 
 
-    @Builder.Default
     private List<VolumeMount> volumeMounts = new ArrayList<>();
     private List<VolumeMount> volumeMounts = new ArrayList<>();
 
 
     @Data
     @Data
@@ -54,7 +51,6 @@ public class Container implements K8sObjectTransformer<V1Container> {
 
 
         String subPath;
         String subPath;
 
 
-        @Builder.Default
         Boolean readOnly = true;
         Boolean readOnly = true;
 
 
         public VolumeMount(V1VolumeMount v1VolumeMount) {
         public VolumeMount(V1VolumeMount v1VolumeMount) {

+ 0 - 1
api/src/main/java/seecoder/devcloud/api/k8s/model/ContainerPort.java

@@ -1,6 +1,5 @@
 package seecoder.devcloud.api.k8s.model;
 package seecoder.devcloud.api.k8s.model;
 
 
-
 import io.kubernetes.client.openapi.models.V1ContainerPort;
 import io.kubernetes.client.openapi.models.V1ContainerPort;
 import io.kubernetes.client.openapi.models.V1ContainerPortBuilder;
 import io.kubernetes.client.openapi.models.V1ContainerPortBuilder;
 import lombok.*;
 import lombok.*;

+ 4 - 8
api/src/main/java/seecoder/devcloud/api/k8s/model/Deployment.java

@@ -1,7 +1,10 @@
 package seecoder.devcloud.api.k8s.model;
 package seecoder.devcloud.api.k8s.model;
 
 
 import io.kubernetes.client.openapi.models.*;
 import io.kubernetes.client.openapi.models.*;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.hibernate.validator.constraints.Range;
 import org.hibernate.validator.constraints.Range;
 import org.springframework.data.annotation.ReadOnlyProperty;
 import org.springframework.data.annotation.ReadOnlyProperty;
 
 
@@ -19,7 +22,6 @@ import java.util.stream.Collectors;
 @NoArgsConstructor
 @NoArgsConstructor
 @AllArgsConstructor
 @AllArgsConstructor
 @Builder
 @Builder
-@EqualsAndHashCode(callSuper=false)
 public class Deployment extends K8sAbstractObject<V1Deployment> {
 public class Deployment extends K8sAbstractObject<V1Deployment> {
 
 
     public static final String API_VERSION = "apps/v1";
     public static final String API_VERSION = "apps/v1";
@@ -32,16 +34,12 @@ public class Deployment extends K8sAbstractObject<V1Deployment> {
 
 
     public static final String DEFAULT_UPDATE_STRATEGY = "Recreate";
     public static final String DEFAULT_UPDATE_STRATEGY = "Recreate";
 
 
-    @Builder.Default
     private List<Container> containers = new ArrayList<>();
     private List<Container> containers = new ArrayList<>();
 
 
-    @Builder.Default
     private List<String> imagePullSecrets = new ArrayList<>();
     private List<String> imagePullSecrets = new ArrayList<>();
 
 
-    @Builder.Default
     private List<V1Volume> volumes = new ArrayList<>();
     private List<V1Volume> volumes = new ArrayList<>();
 
 
-    @Builder.Default
     private Map<String, String> nodeSelectors = new HashMap<>();
     private Map<String, String> nodeSelectors = new HashMap<>();
     @Range(min = 1, max = 3)
     @Range(min = 1, max = 3)
     private int replicas;
     private int replicas;
@@ -49,13 +47,11 @@ public class Deployment extends K8sAbstractObject<V1Deployment> {
     /**
     /**
      * 超过timeout时间未完成启动则提示启动超时
      * 超过timeout时间未完成启动则提示启动超时
      */
      */
-    @Builder.Default
     private int timeout = DEFAULT_PROGRESS_DEADLINE_SECONDS;
     private int timeout = DEFAULT_PROGRESS_DEADLINE_SECONDS;
 
 
     /**
     /**
      * 保留历史replica set的个数
      * 保留历史replica set的个数
      */
      */
-    @Builder.Default
     private int revisionHistoryLimit = DEFAULT_REVISION_HISTORY_LIMIT;
     private int revisionHistoryLimit = DEFAULT_REVISION_HISTORY_LIMIT;
 
 
     @ReadOnlyProperty
     @ReadOnlyProperty

+ 1 - 4
api/src/main/java/seecoder/devcloud/api/k8s/model/Ingress.java

@@ -10,13 +10,12 @@ import java.util.stream.Collectors;
 /**
 /**
  * author: rale
  * author: rale
  * createdAt: 1/5/19
  * createdAt: 1/5/19
- * TODO: 3/25/19 添加标签字段 以后应当是一个分支上的代码可以创建一个deployment
+ * @// TODO: 3/25/19 添加标签字段 以后应当是一个分支上的代码可以创建一个deployment 
  */
  */
 @Data
 @Data
 @NoArgsConstructor
 @NoArgsConstructor
 @AllArgsConstructor
 @AllArgsConstructor
 @Builder
 @Builder
-@EqualsAndHashCode(callSuper=false)
 public class Ingress extends K8sAbstractObject<ExtensionsV1beta1Ingress> {
 public class Ingress extends K8sAbstractObject<ExtensionsV1beta1Ingress> {
 
 
     public static final String API_VERSION = "extensions/v1beta1";
     public static final String API_VERSION = "extensions/v1beta1";
@@ -30,7 +29,6 @@ public class Ingress extends K8sAbstractObject<ExtensionsV1beta1Ingress> {
     //重定向的路径,默认为根路径
     //重定向的路径,默认为根路径
     private static final String redirectPath = DEFAULT_REWRITE_PATH;
     private static final String redirectPath = DEFAULT_REWRITE_PATH;
 
 
-    @Builder.Default
     /*Ingress能暴露HTTP和HTTPS协议口,目前暂不支持HTTPS协议*/
     /*Ingress能暴露HTTP和HTTPS协议口,目前暂不支持HTTPS协议*/
     private List<IngressRule> httpRules = new ArrayList<>();
     private List<IngressRule> httpRules = new ArrayList<>();
 
 
@@ -102,7 +100,6 @@ public class Ingress extends K8sAbstractObject<ExtensionsV1beta1Ingress> {
 
 
         private String host;
         private String host;
 
 
-        @Builder.Default
         private Set<IngressPath> ruleValues = new HashSet<>();
         private Set<IngressPath> ruleValues = new HashSet<>();
 
 
         public IngressRule(String host) {
         public IngressRule(String host) {

+ 0 - 3
api/src/main/java/seecoder/devcloud/api/k8s/model/K8sObject.java

@@ -1,8 +1,5 @@
 package seecoder.devcloud.api.k8s.model;
 package seecoder.devcloud.api.k8s.model;
 
 
-
-
-
 import io.kubernetes.client.openapi.models.V1ObjectMeta;
 import io.kubernetes.client.openapi.models.V1ObjectMeta;
 import io.kubernetes.client.openapi.models.V1ObjectMetaBuilder;
 import io.kubernetes.client.openapi.models.V1ObjectMetaBuilder;
 
 

+ 0 - 2
api/src/main/java/seecoder/devcloud/api/k8s/model/K8sObjectRequest.java

@@ -16,10 +16,8 @@ public class K8sObjectRequest {
 
 
     private String namespace;
     private String namespace;
 
 
-    @Builder.Default
     private Map<String, String> labels = new HashMap<>();
     private Map<String, String> labels = new HashMap<>();
 
 
-    @Builder.Default
     private Map<String, String> annotations = new HashMap<>();
     private Map<String, String> annotations = new HashMap<>();
 
 
     private LabelSelector selector;
     private LabelSelector selector;

+ 1 - 2
api/src/main/java/seecoder/devcloud/api/k8s/model/Namespace.java

@@ -1,11 +1,10 @@
 package seecoder.devcloud.api.k8s.model;
 package seecoder.devcloud.api.k8s.model;
 
 
-
+import cn.seecoder.paas.util.DateUtil;
 import io.kubernetes.client.openapi.models.V1Namespace;
 import io.kubernetes.client.openapi.models.V1Namespace;
 import io.kubernetes.client.openapi.models.V1NamespaceBuilder;
 import io.kubernetes.client.openapi.models.V1NamespaceBuilder;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
-import seecoder.devcloud.common.util.DateUtil;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 

+ 4 - 3
api/src/main/java/seecoder/devcloud/api/k8s/model/PersistentVolumeClaim.java

@@ -5,7 +5,10 @@ import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim;
 import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimBuilder;
 import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimBuilder;
 import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimSpecBuilder;
 import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimSpecBuilder;
 import io.kubernetes.client.openapi.models.V1ResourceRequirementsBuilder;
 import io.kubernetes.client.openapi.models.V1ResourceRequirementsBuilder;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
@@ -15,7 +18,6 @@ import java.util.List;
 @NoArgsConstructor
 @NoArgsConstructor
 @AllArgsConstructor
 @AllArgsConstructor
 @Builder
 @Builder
-@EqualsAndHashCode(callSuper=false)
 public class PersistentVolumeClaim extends K8sAbstractObject<V1PersistentVolumeClaim> {
 public class PersistentVolumeClaim extends K8sAbstractObject<V1PersistentVolumeClaim> {
 
 
     public static final String API_VERSION = "v1";
     public static final String API_VERSION = "v1";
@@ -26,7 +28,6 @@ public class PersistentVolumeClaim extends K8sAbstractObject<V1PersistentVolumeC
 
 
     private String volumeMode;
     private String volumeMode;
 
 
-    @Builder.Default
     private List<String> accessModes = new ArrayList<>();
     private List<String> accessModes = new ArrayList<>();
 
 
     private Quantity quantity;
     private Quantity quantity;

+ 7 - 6
api/src/main/java/seecoder/devcloud/api/k8s/model/Service.java

@@ -4,7 +4,10 @@ import io.kubernetes.client.openapi.models.V1Service;
 import io.kubernetes.client.openapi.models.V1ServiceBuilder;
 import io.kubernetes.client.openapi.models.V1ServiceBuilder;
 import io.kubernetes.client.openapi.models.V1ServiceSpec;
 import io.kubernetes.client.openapi.models.V1ServiceSpec;
 import io.kubernetes.client.openapi.models.V1ServiceSpecBuilder;
 import io.kubernetes.client.openapi.models.V1ServiceSpecBuilder;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
@@ -16,7 +19,6 @@ import java.util.stream.Collectors;
 @NoArgsConstructor
 @NoArgsConstructor
 @AllArgsConstructor
 @AllArgsConstructor
 @Builder
 @Builder
-@EqualsAndHashCode(callSuper=false)
 public class Service extends K8sAbstractObject<V1Service> {
 public class Service extends K8sAbstractObject<V1Service> {
 
 
     public static final String API_VERSION = "v1";
     public static final String API_VERSION = "v1";
@@ -27,13 +29,12 @@ public class Service extends K8sAbstractObject<V1Service> {
 
 
     private String namespace;
     private String namespace;
 
 
-    @Builder.Default
     private Map<String, String> labels = new HashMap<>();
     private Map<String, String> labels = new HashMap<>();
-    @Builder.Default
+
     private Map<String, String> annotations = new HashMap<>();
     private Map<String, String> annotations = new HashMap<>();
-    @Builder.Default
+
     private Set<ServicePort> servicePorts = new HashSet<>();
     private Set<ServicePort> servicePorts = new HashSet<>();
-    @Builder.Default
+
     private Map<String, String> selectors = new HashMap<>();
     private Map<String, String> selectors = new HashMap<>();
 
 
     public Service(V1Service v1Service) {
     public Service(V1Service v1Service) {

+ 0 - 1
api/src/main/java/seecoder/devcloud/api/k8s/vo/SecretVO.java

@@ -1,6 +1,5 @@
 package seecoder.devcloud.api.k8s.vo;
 package seecoder.devcloud.api.k8s.vo;
 
 
-
 import io.kubernetes.client.openapi.models.V1Secret;
 import io.kubernetes.client.openapi.models.V1Secret;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;

+ 0 - 19
api/src/main/java/seecoder/devcloud/api/nexus/AssetApi.java

@@ -1,19 +0,0 @@
-package seecoder.devcloud.api.nexus;
-
-
-
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
-import seecoder.devcloud.api.nexus.model.Asset;
-import seecoder.devcloud.api.nexus.model.AssetList;
-
-import java.util.List;
-
-public interface AssetApi {
-
-    AssetList listAssets(String repository, String continuationToken) throws NexusApiException;
-
-    List<Asset> listAllAssets(String repository) throws NexusApiException;
-
-    Asset readAsset(String id) throws NexusApiException;
-
-}

+ 0 - 79
api/src/main/java/seecoder/devcloud/api/nexus/ComponentApi.java

@@ -1,79 +0,0 @@
-package seecoder.devcloud.api.nexus;
-
-
-
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
-import seecoder.devcloud.api.nexus.model.Component;
-import seecoder.devcloud.api.nexus.model.ComponentList;
-
-import java.util.List;
-
-public interface ComponentApi {
-
-    /**
-     * 查看仓库下的component列表,continuationToken是上一次请求返回的,用来查询下一页的内容
-     * 如果continuation为空 默认查找第一页的内容
-     * @param repo 不能为空
-     * @param continuationToken 可以为空
-     * @return
-     * @throws NexusApiException 如果仓库不存在,抛出404
-     * @throws NexusApiException 如果continuationToken有误,抛出500
-     */
-    ComponentList listComponents(String repo, String continuationToken) throws NexusApiException;
-
-    /**
-     * 获取所有的Component
-     * 具体的实现是采用continuationToken通过HTTP发出下一页请求并将请求结果合并到结果集中
-     * 如果仓库中Component较多且变化频繁,强烈建议不要使用该接口
-     * @param repo
-     * @return
-     * @throws NexusApiException 如果仓库不存在,抛出404
-     */
-    List<Component> listAllComponents(String repo) throws NexusApiException;
-
-    /**
-     * 根据id获取component
-     * @param id 不能为空
-     * @return
-     * @throws NexusApiException 如果组件不存在 抛出404
-     */
-    Component readComponent(String id) throws NexusApiException;
-
-    /**
-     * 根据仓库名,镜像名和默认镜像标签latest找到Docker镜像Component
-     * @param repository 不能为空
-     * @param imageName 不能为空
-     * @return
-     * @throws NexusApiException 如果镜像不存在 抛出404
-     */
-    Component findDockerImage(String repository, String imageName) throws NexusApiException;
-
-    /**
-     * 根据仓库名,镜像名和镜像标签找到Docker镜像Component
-     * @param repository 不能为空
-     * @param imageName 不能为空
-     * @param tag 不能为空
-     * @return
-     * @throws NexusApiException 如果镜像不存在,抛出404
-     */
-    Component findDockerImage(String repository, String imageName, String tag) throws NexusApiException;
-
-    /**
-     * 根据仓库名,镜像名找到所有的Docker镜像Component
-     * continuationToken是上一次请求返回的,用来查询下一页的内容
-     * 如果continuation为空 默认查找第一页的内容
-     * @param repository 不能为空
-     * @param imageName 不能为空
-     * @param continuationToken 可以为空
-     * @return
-     * @throws NexusApiException 如果continuationToken有误,抛出500
-     */
-    ComponentList findDockerImages(String repository, String imageName, String continuationToken) throws NexusApiException;
-
-    /**
-     * 根据组件ID,删除组件
-     * @param id 不能为空
-     * @throws NexusApiException 如果组件不存在,抛出404
-     */
-    void deleteComponent(String id) throws NexusApiException;
-}

+ 0 - 187
api/src/main/java/seecoder/devcloud/api/nexus/NexusApi.java

@@ -1,187 +0,0 @@
-package seecoder.devcloud.api.nexus;
-
-
-
-import seecoder.devcloud.api.nexus.impl.AssetApiImpl;
-import seecoder.devcloud.api.nexus.impl.ComponentApiImpl;
-import seecoder.devcloud.api.nexus.impl.TaskApiImpl;
-import seecoder.devcloud.api.nexus.model.ApiVersion;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.web.client.RestTemplateBuilder;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.http.client.ClientHttpRequestInterceptor;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.util.UriComponentsBuilder;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-public class NexusApi {
-
-    private static final String DEFAULT_USER = "admin";
-    private static final String DEFAULT_PASSWORD = "admin123";
-    private static final String CONTENT_TYPE = "application/json";
-
-    private ApiVersion apiVersion;
-    private String username = DEFAULT_USER;
-    private String password = DEFAULT_PASSWORD;
-    private String nexusServerUrl;
-    private String restApiUrl;
-    private AssetApi assetApi;
-    private ComponentApi componentApi;
-    private TaskApi taskApi;
-
-    private RestTemplate restTemplate; //惰性调用getRestTemplate方法初始化
-
-    public NexusApi(String nexusServerUrl) {
-        this(nexusServerUrl, ApiVersion.V1);
-    }
-
-    public NexusApi(String nexusServerUrl, ApiVersion apiVersion) {
-        this(nexusServerUrl, apiVersion, DEFAULT_USER, DEFAULT_PASSWORD);
-    }
-
-    public NexusApi(String nexusServerUrl, ApiVersion apiVersion, String username, String password) {
-        this.nexusServerUrl = nexusServerUrl.endsWith("/") ? nexusServerUrl.replaceAll("/$", "") : nexusServerUrl;
-        this.nexusServerUrl = nexusServerUrl.startsWith("http") ? nexusServerUrl : "http://" + nexusServerUrl;
-        this.apiVersion = apiVersion;
-        this.username = username;
-        this.password = password;
-    }
-
-    public AssetApi getAssetApi(){
-        if (assetApi == null) {
-            synchronized (this) {
-                if (assetApi == null) {
-                    assetApi = new AssetApiImpl(this);
-                }
-            }
-        }
-        return this.assetApi;
-    }
-
-    public ComponentApi getComponentApi(){
-        if (componentApi == null) {
-            synchronized (this) {
-                if (componentApi == null) {
-                    componentApi = new ComponentApiImpl(this);
-                }
-            }
-        }
-        return this.componentApi;
-    }
-
-    public TaskApi getTaskApi(){
-        if (taskApi == null) {
-            synchronized (this) {
-                if (taskApi == null) {
-                    taskApi = new TaskApiImpl(this);
-                }
-            }
-        }
-        return this.taskApi;
-    }
-
-    public ApiVersion getApiVersion() {
-        return apiVersion;
-    }
-
-    public <T> ResponseEntity<T> get(String path, Class<T> responseType, Map<String, List<String>> params, Object... pathVariables) {
-        String url = buildUri(path, params, pathVariables);
-        log.debug("生成的url={}", url);
-        return getRestTemplate().getForEntity(url, responseType);
-    }
-
-    public <T> ResponseEntity<T> get(String path, Class<T> responseType, Map<String, List<String>> params, Map<String, Object> pathVariables) {
-        String url = buildUri(path, params, pathVariables);
-        log.debug("生成的url={}", url);
-        return getRestTemplate().getForEntity(url, responseType);
-    }
-
-    public <T> ResponseEntity<T> post(String path, Class<T> responseType, Object data, Map<String, List<String>> params, Object... pathVariables) {
-        String url = buildUri(path, params, pathVariables);
-        return getRestTemplate().postForEntity(url, data, responseType);
-    }
-
-    public <T> ResponseEntity<T> post(String path, Class<T> responseType, Object data, Map<String, List<String>> params, Map<String, Object> pathVariables) {
-        String url = buildUri(path, params, pathVariables);
-        return getRestTemplate().postForEntity(url, data, responseType);
-    }
-
-    public ResponseEntity<Void> delete(String path, Map<String, List<String>> params, Object... pathVariables) {
-        String url = buildUri(path, params, pathVariables);
-        return getRestTemplate().exchange(url, HttpMethod.DELETE, HttpEntity.EMPTY, Void.class);
-    }
-
-    public ResponseEntity<Void> delete(String path, Map<String, List<String>> params, Map<String, Object> pathVariables) {
-        String url = buildUri(path, params, pathVariables);
-        return getRestTemplate().exchange(url, HttpMethod.DELETE, HttpEntity.EMPTY, Void.class);
-    }
-
-    private String buildUri(String path, Map<String, List<String>> params, Object... pathVariables) {
-        path = validatePath(path);
-        MultiValueMap<String, String> paramMap = toMultiValueMap(params);
-        return UriComponentsBuilder.fromHttpUrl(getRestApiUrl())
-                .path(path)
-                .queryParams(paramMap)
-                .build(pathVariables)
-                .toString();
-    }
-    private String buildUri(String path, Map<String, List<String>> params, Map<String, Object> pathVariables) {
-        path = validatePath(path);
-        MultiValueMap<String, String> paramMap = toMultiValueMap(params);
-        return UriComponentsBuilder.fromHttpUrl(getRestApiUrl())
-                .path(path)
-                .queryParams(paramMap)
-                .build(pathVariables)
-                .toString();
-    }
-
-
-    private String validatePath(String path) {
-        return path.startsWith("/") ? path : "/" + path;
-    }
-
-    private MultiValueMap<String, String> toMultiValueMap(Map<String, List<String>> params) {
-        return (params == null) ?
-                CollectionUtils.toMultiValueMap(Collections.EMPTY_MAP) :
-                CollectionUtils.toMultiValueMap(params);
-    }
-
-    private String getRestApiUrl() {
-        if (this.restApiUrl == null) {
-            synchronized (this) {
-                if (this.restApiUrl == null) {
-                    restApiUrl = this.nexusServerUrl + ApiVersion.V1.getApiNamespace();
-                }
-            }
-
-        }
-        return this.restApiUrl;
-    }
-
-    private RestTemplate getRestTemplate() {
-        if (this.restTemplate == null) {
-            synchronized (this) {
-                if (this.restTemplate == null) {
-                    this.restTemplate = new RestTemplateBuilder()
-                            .basicAuthentication(username, password)
-                            .additionalInterceptors((ClientHttpRequestInterceptor) (httpRequest, bytes, clientHttpRequestExecution) -> {
-                                HttpHeaders headers = httpRequest.getHeaders();
-                                headers.add("Accept", CONTENT_TYPE);
-                                return clientHttpRequestExecution.execute(httpRequest, bytes);
-                            })
-                            .build();
-                }
-            }
-        }
-        return restTemplate;
-    }
-}

+ 0 - 16
api/src/main/java/seecoder/devcloud/api/nexus/NexusApiBean.java

@@ -1,16 +0,0 @@
-package seecoder.devcloud.api.nexus;
-
-import seecoder.devcloud.api.ApplicationProperties;
-import seecoder.devcloud.api.nexus.model.ApiVersion;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-
-@Component
-public class NexusApiBean {
-
-    @Bean
-    public NexusApi getNexusApi(ApplicationProperties applicationProperties) {
-        return new NexusApi(applicationProperties.getRegistry().getNexusServer(), ApiVersion.V1, applicationProperties.getRegistry().getUsername(), applicationProperties.getRegistry().getPassword());
-    }
-
-}

+ 0 - 53
api/src/main/java/seecoder/devcloud/api/nexus/TaskApi.java

@@ -1,53 +0,0 @@
-package seecoder.devcloud.api.nexus;
-
-
-
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
-import seecoder.devcloud.api.nexus.model.Task;
-import seecoder.devcloud.api.nexus.model.TaskList;
-
-import java.util.List;
-
-public interface TaskApi {
-
-    /**
-     * 根据continuationToken获取下一页的Task列表
-     * 如果continuationToken为空 则获取第一页的Task列表
-     * @param continuationToken 可以为空
-     * @return
-     * @throws NexusApiException 500 非法continuationToken
-     */
-    TaskList listTasks(String continuationToken) throws NexusApiException;
-
-    /**
-     * 获取所有的任务
-     * 具体实现采用continuationToken获取下一页Task列表,直到continuationToken为空
-     * 如果task数量较多,不要频繁使用该接口机
-     * @return
-     * @throws NexusApiException
-     */
-    List<Task> listAllTasks() throws NexusApiException;
-
-    /**
-     * 根据id获取任务的详细信息
-     * @param id 不能为空
-     * @return
-     * @throws NexusApiException 404 任务不存在
-     */
-    Task readTask(String id) throws NexusApiException;
-
-    /**
-     * 根据id启动任务
-     * @param id 不能为空
-     * @throws NexusApiException 404 任务不存在
-     */
-    void runTask(String id) throws NexusApiException;
-
-    /**
-     * 根据id停止任务
-     * @param id 不能为空
-     * @throws NexusApiException 404 任务不存在
-     * @throws NexusApiException 409 任务无法停止或已经停止
-     */
-    void stopTask(String id) throws NexusApiException;
-}

+ 0 - 73
api/src/main/java/seecoder/devcloud/api/nexus/exception/NexusApiException.java

@@ -1,73 +0,0 @@
-package seecoder.devcloud.api.nexus.exception;
-
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class NexusApiException extends Exception {
-
-    private int code;
-
-    private String message;
-
-    public static final int INSUFFICIENT_PERMISSION = 403;
-    public static final int NOT_FOUND = 404;
-    public static final int CONFLICT = 409;
-    public static final int INVALID_PARAMS = 422;
-    public static final int INTERNAL_SERVER_ERROR = 500;
-
-    public static final String INSUFFICIENT_PERMISSION_DESCRIPTION = "权限不足";
-    public static final String NOT_FOUND_DESCRIPTION = "资源不存在";
-    public static final String INVALID_PARAMS_DESCRIPTION = "非法参数";
-    public static final String INTERNAL_SERVER_ERROR_DESCRIPTION = "内部服务异常";
-    public static final String CONFLICT_DESCRIPTION = "请求与服务器端目标资源的当前状态相冲突";
-
-    public static final Map<Integer, String> error;
-    static {
-        error = new HashMap<>();
-        error.put(INSUFFICIENT_PERMISSION, INSUFFICIENT_PERMISSION_DESCRIPTION);
-        error.put(NOT_FOUND, NOT_FOUND_DESCRIPTION);
-        error.put(INVALID_PARAMS, INVALID_PARAMS_DESCRIPTION);
-        error.put(INTERNAL_SERVER_ERROR, INTERNAL_SERVER_ERROR_DESCRIPTION);
-        error.put(CONFLICT, CONFLICT_DESCRIPTION);
-    }
-
-    public NexusApiException(int code, String message) {
-        super(message);
-        this.code = code;
-        this.message = message;
-    }
-
-    public NexusApiException(int code) {
-        this.code = error.containsKey(code) ? code : INTERNAL_SERVER_ERROR;
-        this.message = error.get(this.code);
-    }
-
-    public NexusApiException(Exception e) {
-        super(e);
-        code = INTERNAL_SERVER_ERROR;
-        message = e.getMessage();
-    }
-
-
-    @Override
-    public String getMessage() {
-        return message;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    public int getCode() {
-        return code;
-    }
-
-    public void setCode(int code) {
-        this.code = code;
-    }
-
-    public boolean isNotFound() {
-        return this.getCode() == NOT_FOUND;
-    }
-}

+ 0 - 99
api/src/main/java/seecoder/devcloud/api/nexus/impl/AbstractApi.java

@@ -1,99 +0,0 @@
-package seecoder.devcloud.api.nexus.impl;
-
-
-import seecoder.devcloud.api.nexus.NexusApi;
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
-import seecoder.devcloud.api.nexus.model.ApiVersion;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.HttpClientErrorException;
-
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-public abstract class AbstractApi implements Constants{
-
-    private final NexusApi nexusApi;
-
-    public AbstractApi(NexusApi nexusApi) {
-        this.nexusApi = nexusApi;
-    }
-
-    /**
-     * 默认处理资源不存在和无权限执行异常,其它异常可以在具体的子接口中覆盖重写
-     * @param responseEntity
-     * @param <T>
-     * @return
-     * @throws NexusApiException
-     */
-    protected <T> ResponseEntity<T> validate(ResponseEntity<T> responseEntity) throws NexusApiException {
-        if (responseEntity.getStatusCode().value() == NexusApiException.NOT_FOUND) {
-            throw new NexusApiException(NexusApiException.NOT_FOUND);
-        } else if (responseEntity.getStatusCode().value() == NexusApiException.INSUFFICIENT_PERMISSION) {
-            throw new NexusApiException(NexusApiException.INSUFFICIENT_PERMISSION);
-        } else if (responseEntity.getStatusCodeValue() == NexusApiException.INTERNAL_SERVER_ERROR) {
-            throw new NexusApiException(NexusApiException.INTERNAL_SERVER_ERROR);
-        } else if (responseEntity.getStatusCodeValue() == NexusApiException.INVALID_PARAMS) {
-            throw new NexusApiException(NexusApiException.INVALID_PARAMS);
-        }
-        return responseEntity;
-    }
-
-    protected  <T> ResponseEntity<T> get(String path, Class<T> responseType, Map<String, List<String>> params, Object... pathVariables) throws NexusApiException {
-        return validate(nexusApi.get(path, responseType, params, pathVariables));
-    }
-
-    protected  <T> ResponseEntity<T> get(String path, Class<T> responseType, Map<String, List<String>> params, Map<String, Object> pathVariables) throws NexusApiException {
-        return validate(nexusApi.get(path, responseType, params, pathVariables));
-    }
-
-    protected  <T> ResponseEntity<T> post(String path, Class<T> responseType, Object data, Map<String, List<String>> params, Object... pathVariables) throws NexusApiException {
-        return validate(nexusApi.post(path, responseType, data, params, pathVariables));
-    }
-
-    protected  <T> ResponseEntity<T> post(String path, Class<T> responseType, Object data, Map<String, List<String>> params, Map<String, Object> pathVariables) throws NexusApiException {
-        return validate(nexusApi.post(path, responseType, data, params, pathVariables));
-    }
-
-    protected ResponseEntity<Void> delete(String path, Map<String, List<String>> params, Object... pathVariables) throws NexusApiException {
-        return validate(nexusApi.delete(path, params, pathVariables));
-    }
-
-    protected ResponseEntity<Void> delete(String path, Map<String, List<String>> params, Map<String, Object> pathVariables) throws NexusApiException {
-        return validate(nexusApi.delete(path, params, pathVariables));
-    }
-
-    protected NexusApiException handle(Exception thrown) {
-        log.error("Nexus异常", thrown);
-        if (thrown instanceof NexusApiException) {
-            return ((NexusApiException) thrown);
-        }
-        if (thrown instanceof HttpClientErrorException) {
-            HttpClientErrorException e = (HttpClientErrorException) thrown;
-            return new NexusApiException(e.getRawStatusCode());
-        }
-        return (new NexusApiException(thrown));
-    }
-
-    protected ApiVersion getApiVersion() {
-        return nexusApi.getApiVersion();
-    }
-
-    protected boolean isApiVersion(ApiVersion apiVersion) {
-        return nexusApi.getApiVersion() == apiVersion;
-    }
-
-    protected NexusApi getNexusApi(){
-        return this.nexusApi;
-    }
-
-    protected void validateId(String id) throws NexusApiException {
-        if (id == null || id.isEmpty()) throw new NexusApiException(NexusApiException.INVALID_PARAMS, "id不能为空");
-    }
-
-    protected void validateRepo(String repo) throws NexusApiException {
-        if (repo == null || repo.isEmpty()) throw new NexusApiException(NexusApiException.INVALID_PARAMS, "仓库名称不能为空");
-    }
-
-}

+ 0 - 67
api/src/main/java/seecoder/devcloud/api/nexus/impl/AssetApiImpl.java

@@ -1,67 +0,0 @@
-package seecoder.devcloud.api.nexus.impl;
-
-
-
-import seecoder.devcloud.api.nexus.AssetApi;
-import seecoder.devcloud.api.nexus.NexusApi;
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
-import seecoder.devcloud.api.nexus.model.Asset;
-import seecoder.devcloud.api.nexus.model.AssetList;
-
-import java.util.*;
-
-public class AssetApiImpl extends AbstractApi implements AssetApi {
-
-    private static final String LIST_ASSETS_PATH = ASSET_PATH;
-    private static final String GET_ASSET_PATH = ASSET_PATH + "/{id}";
-
-    public AssetApiImpl(NexusApi nexusApi) {
-        super(nexusApi);
-    }
-
-    @Override
-    public AssetList listAssets(String repository, String continuationToken) throws NexusApiException {
-        try {
-            validateRepo(repository);
-            Map<String, List<String>> params = new HashMap<>();
-            params.put(REQUEST_PARAM_REPOSITORY, Collections.singletonList(repository));
-            if (continuationToken != null && !continuationToken.isEmpty()) {
-                params.put(REQUEST_PARAM_CONTINUATION_TOKEN, Collections.singletonList(continuationToken));
-            }
-            return get(LIST_ASSETS_PATH, AssetList.class, params).getBody();
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public List<Asset> listAllAssets(String repository) throws NexusApiException {
-        try {
-            validateRepo(repository);
-            List<Asset> result = new ArrayList<>();
-            String continuationToken = "";
-            AssetList assetList;
-            boolean hasNext = true;
-            while (hasNext) {
-                 assetList = listAssets(repository, continuationToken);
-                result.addAll(assetList.getItems());
-                continuationToken = assetList.getContinuationToken();
-                hasNext = (continuationToken != null);
-            }
-            return result;
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public Asset readAsset(String id) throws NexusApiException {
-        try {
-            validateId(id);
-            return get(GET_ASSET_PATH, Asset.class, null, id).getBody();
-        }catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-}

+ 0 - 144
api/src/main/java/seecoder/devcloud/api/nexus/impl/ComponentApiImpl.java

@@ -1,144 +0,0 @@
-package seecoder.devcloud.api.nexus.impl;
-
-
-
-import seecoder.devcloud.api.nexus.ComponentApi;
-import seecoder.devcloud.api.nexus.NexusApi;
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
-import seecoder.devcloud.api.nexus.model.Component;
-import seecoder.devcloud.api.nexus.model.ComponentList;
-import org.springframework.http.ResponseEntity;
-
-import java.util.*;
-
-public class ComponentApiImpl extends AbstractApi implements ComponentApi {
-
-    private static final String LIST_COMPONENTS_PATH = COMPONENTS_PATH;
-    private static final String GET_COMPONENT_PATH = COMPONENTS_PATH + "/{id}";
-    private static final String DELETE_COMPONENT_PATH = COMPONENTS_PATH + "/{id}";
-    private static final String SEARCH_COMPONENT_PATH = SEARCH_PATH;
-    private static final String DOCKER_IMAGE_DEFAULT_VERSION = "latest";
-
-    public ComponentApiImpl(NexusApi nexusApi) {
-        super(nexusApi);
-    }
-
-    @Override
-    public ComponentList listComponents(String repo, String continuationToken) throws NexusApiException {
-        try {
-            validateRepo(repo);
-            Map<String, List<String>> params = new HashMap<>();
-            params.put(REQUEST_PARAM_REPOSITORY, Collections.singletonList(repo));
-            if (continuationToken != null && !continuationToken.isEmpty()) {
-                params.put(REQUEST_PARAM_CONTINUATION_TOKEN, Collections.singletonList(continuationToken));
-            }
-            ResponseEntity<ComponentList> responseEntity = get(LIST_COMPONENTS_PATH, ComponentList.class, params);
-            return responseEntity.getBody();
-        }catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public List<Component> listAllComponents(String repo) throws NexusApiException {
-        try {
-            validateRepo(repo);
-            List<Component> result = new ArrayList<>();
-            String continuationToken = "";
-            ComponentList componentList;
-            boolean hasNext = true;
-            while (hasNext) {
-                componentList = listComponents(repo, continuationToken);
-                result.addAll(componentList.getItems());
-                continuationToken = componentList.getContinuationToken();
-                hasNext = (continuationToken != null);
-            }
-            return result;
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public Component readComponent(String id) throws NexusApiException {
-        try {
-            validateId(id);
-            ResponseEntity<Component> responseEntity = get(GET_COMPONENT_PATH, Component.class, null, id);
-            return responseEntity.getBody();
-        }catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public Component findDockerImage(String repository, String imageName) throws NexusApiException {
-        return findDockerImage(repository, imageName, DOCKER_IMAGE_DEFAULT_VERSION);
-    }
-
-    @Override
-    public Component findDockerImage(String repository, String imageName, String imageTag) throws NexusApiException {
-        try {
-            validateRepo(repository);
-            validateName(imageName);
-            validateVersion(imageTag);
-
-            Map<String, List<String>> params = new HashMap<>();
-            params.put(REQUEST_PARAM_REPOSITORY, Collections.singletonList(repository));
-            params.put(REQUEST_PARAM_DOCKER_IMAGE_NAME, Collections.singletonList(imageName));
-            params.put(REQUEST_PARAM_DOCKER_IMAGE_TAG, Collections.singletonList(imageTag));
-            ResponseEntity<ComponentList> responseEntity = get(SEARCH_COMPONENT_PATH, ComponentList.class, params);
-
-            ComponentList componentList = responseEntity.getBody();
-            Component result = null;
-            if (!componentList.getItems().isEmpty()) {
-                result = componentList.getItems().get(0);
-            }
-            if (result == null) {
-                throw new NexusApiException(NexusApiException.NOT_FOUND);
-            }
-            return result;
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public ComponentList findDockerImages(String repository, String imageName, String continuationToken) throws NexusApiException {
-        try {
-            validateRepo(repository);
-            validateName(imageName);
-
-            Map<String, List<String>> params = new HashMap<>();
-            params.put(REQUEST_PARAM_REPOSITORY, Collections.singletonList(repository));
-            params.put(REQUEST_PARAM_DOCKER_IMAGE_NAME, Collections.singletonList(imageName));
-            if (continuationToken != null && !continuationToken.isEmpty()) {
-                params.put(REQUEST_PARAM_CONTINUATION_TOKEN, Collections.singletonList(continuationToken));
-            }
-            ResponseEntity<ComponentList> responseEntity = get(SEARCH_COMPONENT_PATH, ComponentList.class, params);
-
-            ComponentList componentList = responseEntity.getBody();
-            return componentList;
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public void deleteComponent(String id) throws NexusApiException {
-        try {
-            validateId(id);
-            delete(DELETE_COMPONENT_PATH, null, id);
-        }catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-
-    private void validateName(String name) throws NexusApiException {
-        if (name == null || name.isEmpty()) throw new NexusApiException(NexusApiException.INVALID_PARAMS, "镜像名称不能为空");
-    }
-
-    private void validateVersion(String version) throws NexusApiException {
-        if (version == null || version.isEmpty()) throw new NexusApiException(NexusApiException.INVALID_PARAMS, "版本不能为空");
-    }
-}

+ 0 - 28
api/src/main/java/seecoder/devcloud/api/nexus/impl/Constants.java

@@ -1,28 +0,0 @@
-package seecoder.devcloud.api.nexus.impl;
-
-/**
- * author: rale
- * createdAt: 3/25/19
- */
-public interface Constants {
-
-    String ASSET_PATH = "/assets";
-    String BLOL_STORE_PATH = "/blobstores";
-    String COMPONENTS_PATH = "/components";
-    String FORMATS_PATH = "/formats";
-    String READONLY_PATH = "/read-only";
-    String REPOSITORIES_PATH = "/repositories";
-    String SCRIPT_PATH = "/script";
-    String SEARCH_PATH = "/search";
-    String SUPPORT_PATH = "/support";
-    String TASKS_PATH = "/tasks";
-
-    String REQUEST_PARAM_ID = "id";
-    String REQUEST_PARAM_CONTINUATION_TOKEN = "continuationToken";
-    String REQUEST_PARAM_REPOSITORY = "repository";
-    String REQUEST_PARAM_DOCKER_IMAGE_NAME = "docker.imageName";
-    String REQUEST_PARAM_DOCKER_IMAGE_TAG = "docker.imageTag";
-
-    String DOCKER_COMPONENT_FORMAT = "docker";
-    String MAVEN2_COMPONENT_FORMAT = "maven2";
-}

+ 0 - 89
api/src/main/java/seecoder/devcloud/api/nexus/impl/TaskApiImpl.java

@@ -1,89 +0,0 @@
-package seecoder.devcloud.api.nexus.impl;
-
-
-import seecoder.devcloud.api.nexus.NexusApi;
-import seecoder.devcloud.api.nexus.TaskApi;
-import seecoder.devcloud.api.nexus.exception.NexusApiException;
-import seecoder.devcloud.api.nexus.model.Task;
-import seecoder.devcloud.api.nexus.model.TaskList;
-import org.springframework.http.ResponseEntity;
-
-import java.util.*;
-
-public class TaskApiImpl extends AbstractApi implements TaskApi {
-
-    private static final String LIST_TASKS_PATH = TASKS_PATH;
-    private static final String GET_TASK_PATH = TASKS_PATH + "/{id}";
-    private static final String RUN_TASK_PATH = TASKS_PATH + "/{id}/run";
-    private static final String STOP_TASK_PATH = TASKS_PATH + "/{id}/stop";
-
-    public TaskApiImpl(NexusApi nexusApi) {
-        super(nexusApi);
-    }
-
-    @Override
-    public TaskList listTasks(String continuationToken) throws NexusApiException {
-        try {
-            Map<String, List<String>> params = new HashMap<>();
-            if (continuationToken != null && !continuationToken.isEmpty()) {
-                params.put(REQUEST_PARAM_CONTINUATION_TOKEN, Collections.singletonList(continuationToken));
-            }
-            return get(LIST_TASKS_PATH, TaskList.class, params).getBody();
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public List<Task> listAllTasks() throws NexusApiException {
-        try {
-            List<Task> result = new ArrayList<>();
-            String continuationToken = "";
-            TaskList taskList;
-            boolean hasNext = true;
-            while (hasNext) {
-                taskList = listTasks(continuationToken);
-                result.addAll(taskList.getItems());
-                continuationToken = taskList.getContinuationToken();
-                hasNext = continuationToken != null;
-            }
-            return result;
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public Task readTask(String id) throws NexusApiException {
-        try {
-            validateId(id);
-            return get(GET_TASK_PATH, Task.class, null, id).getBody();
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public void runTask(String id) throws NexusApiException {
-        try {
-            validateId(id);
-            post(RUN_TASK_PATH, Void.class, null,null, id);
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-    @Override
-    public void stopTask(String id) throws NexusApiException {
-        try {
-            validateId(id);
-            ResponseEntity<Void> responseEntity = post(STOP_TASK_PATH, Void.class, null,null, id);
-            if (responseEntity.getStatusCodeValue() == NexusApiException.CONFLICT) {
-                throw new NexusApiException(NexusApiException.CONFLICT, "无法停止该任务");
-            }
-        } catch (Exception e) {
-            throw handle(e);
-        }
-    }
-
-}

+ 0 - 17
api/src/main/java/seecoder/devcloud/api/nexus/model/ApiVersion.java

@@ -1,17 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-/**
- * author: rale
- * createdAt: 3/21/19
- */
-public enum ApiVersion {
-    V1;
-
-    private ApiVersion() {
-
-    }
-
-    public String getApiNamespace() {
-        return ("/service/rest/" + name().toLowerCase());
-    }
-}

+ 0 - 21
api/src/main/java/seecoder/devcloud/api/nexus/model/Asset.java

@@ -1,21 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-import lombok.Data;
-
-import java.util.Map;
-
-@Data
-public class Asset{
-
-    private String downloadUrl;
-
-    private String path;
-
-    private String id;
-
-    private String repository;
-
-    private String format;
-
-    private Map<String, Object> checksum;
-}

+ 0 - 13
api/src/main/java/seecoder/devcloud/api/nexus/model/AssetList.java

@@ -1,13 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.List;
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class AssetList extends NexusList{
-
-    private List<Asset> items;
-}

+ 0 - 23
api/src/main/java/seecoder/devcloud/api/nexus/model/Component.java

@@ -1,23 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class Component {
-
-    private String id;
-
-    private String repository;
-
-    private String format;
-
-    private String group;
-
-    private String name;
-
-    private String version;
-
-    private List<Asset> assets;
-}

+ 0 - 16
api/src/main/java/seecoder/devcloud/api/nexus/model/ComponentList.java

@@ -1,16 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class ComponentList extends NexusList{
-
-    private List<Component> items = new ArrayList<>();
-}

+ 0 - 9
api/src/main/java/seecoder/devcloud/api/nexus/model/NexusList.java

@@ -1,9 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-import lombok.Data;
-
-@Data
-public abstract class NexusList {
-
-    protected String continuationToken;
-}

+ 0 - 25
api/src/main/java/seecoder/devcloud/api/nexus/model/Task.java

@@ -1,25 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-import lombok.Data;
-
-import java.util.Date;
-
-@Data
-public class Task {
-
-    private String id;
-
-    private String name;
-
-    private String type;
-
-    private String message;
-
-    private String currentState;
-
-    private String lastRunResult;
-
-    private Date nextRun;
-
-    private Date lastRun;
-}

+ 0 - 15
api/src/main/java/seecoder/devcloud/api/nexus/model/TaskList.java

@@ -1,15 +0,0 @@
-package seecoder.devcloud.api.nexus.model;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import java.util.List;
-
-@Data
-@ToString(callSuper = true)
-@EqualsAndHashCode(callSuper = true)
-public class TaskList extends NexusList{
-
-    private List<Task> items;
-}

+ 0 - 1
common/src/main/java/seecoder/devcloud/common/CommonAutoConfiguration.java

@@ -1,6 +1,5 @@
 package seecoder.devcloud.common;
 package seecoder.devcloud.common;
 
 
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 import seecoder.devcloud.common.util.JwtTokenUtil;
 import seecoder.devcloud.common.util.JwtTokenUtil;

+ 1 - 1
common/src/main/java/seecoder/devcloud/common/exceptions/ServiceException.java

@@ -7,7 +7,7 @@ import org.springframework.http.HttpStatus;
 @Getter
 @Getter
 @ToString
 @ToString
 public class ServiceException extends RuntimeException {
 public class ServiceException extends RuntimeException {
-	private int code;
+	private final int code;
 
 
 	public ServiceException() {
 	public ServiceException() {
 		this(HttpStatus.INTERNAL_SERVER_ERROR.value(), HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
 		this(HttpStatus.INTERNAL_SERVER_ERROR.value(), HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());

+ 1 - 0
common/src/main/java/seecoder/devcloud/common/util/FileUtil.java

@@ -10,6 +10,7 @@ public class FileUtil {
     public static String readResource(String filepath) throws IOException {
     public static String readResource(String filepath) throws IOException {
         StringBuilder stringBuilder = new StringBuilder();
         StringBuilder stringBuilder = new StringBuilder();
         InputStream inputStream = FileUtil.class.getClassLoader().getResourceAsStream(filepath);
         InputStream inputStream = FileUtil.class.getClassLoader().getResourceAsStream(filepath);
+        assert inputStream != null;
         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
         String buffer;
         String buffer;
         while ((buffer = bufferedReader.readLine()) != null) {
         while ((buffer = bufferedReader.readLine()) != null) {

+ 0 - 2
common/src/main/java/seecoder/devcloud/common/util/JwtTokenUtil.java

@@ -2,11 +2,9 @@ package seecoder.devcloud.common.util;
 
 
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
 import lombok.Data;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.security.core.userdetails.UserDetails;
 
 
 import java.util.Date;
 import java.util.Date;
 
 

+ 1 - 1
common/src/main/java/seecoder/devcloud/common/util/RandomStringUtil.java

@@ -12,7 +12,7 @@ public class RandomStringUtil {
     private static final Random random = new Random();
     private static final Random random = new Random();
 
 
     public static String getRandomString(int length) {
     public static String getRandomString(int length) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
 
         for (int i = 0; i < length; ++i) {
         for (int i = 0; i < length; ++i) {
             int number = random.nextInt(str.length());// [0,62)
             int number = random.nextInt(str.length());// [0,62)

+ 0 - 1
common/src/main/java/seecoder/devcloud/common/util/SpringUtil.java

@@ -3,7 +3,6 @@ package seecoder.devcloud.common.util;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.ApplicationContextAware;
-import org.springframework.stereotype.Component;
 
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PostConstruct;
 
 

+ 3 - 3
core/src/main/java/seecoder/devcloud/core/pipeline/config/HandlerConfigTable.java

@@ -2,6 +2,7 @@ package seecoder.devcloud.core.pipeline.config;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import seecoder.devcloud.core.pipeline.Handler;
 import seecoder.devcloud.core.pipeline.Handler;
+import seecoder.devcloud.core.pipeline.PipelineException;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
@@ -26,13 +27,12 @@ public class HandlerConfigTable {
         //todo 加入表
         //todo 加入表
     }
     }
 
 
-    public static Handler transToHandler(HandlerConfig config){
+    public static Handler transToHandler(HandlerConfig config) throws PipelineException {
         Handler handler = null;
         Handler handler = null;
         try {
         try {
             handler = (Handler) handlerConfigMap.get(config).newInstance();
             handler = (Handler) handlerConfigMap.get(config).newInstance();
         } catch (InstantiationException | IllegalAccessException e) {
         } catch (InstantiationException | IllegalAccessException e) {
-            log.error("流水线配置转换发生错误",e);
-            //todo throw pipeline exception
+            throw new PipelineException("Error: config.getName() 流水线配置转换发生错误: " + e.getMessage());
         }
         }
         return handler;
         return handler;
     }
     }

+ 56 - 53
core/src/main/java/seecoder/devcloud/core/pipeline/handler/K8sIngressHandler.java

@@ -1,53 +1,56 @@
-//package seecoder.devcloud.core.pipeline.handler;
-//
-//import seecoder.devcloud.api.k8s.model.Ingress;
-//import seecoder.devcloud.core.pipeline.Context;
-//import seecoder.devcloud.core.pipeline.Handler;
-//
-//
-//import java.util.Collection;
-//import java.util.HashSet;
-//import java.util.List;
-//import java.util.Set;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author PuHong Weng
-// * @date 2021/1/18
-// * @description:
-// */
-//public class K8sIngressHandler extends AbstractHandler {
-//
-//    @Override
-//    public void process(Context context) {
-//
-//
-//
-//        String groupName = context.getGroupName();
-//
-//        String projectName = context.getProjectName();
-//
-//        Ingress ingress = new Ingress();
-//
-//        ingress.setName(appName + "-" + applicationDTO.getDeployEnvironment());
-//        Set<String> alreadyTaken = new HashSet<>();
-//        List<Ingress.IngressRule> ingressRules = applicationDTO.getContainers()
-//                .stream()
-//                .map(ContainerDTO::getPorts)
-//                .flatMap(Collection::stream)
-//                .filter(PortDTO::isExpose)
-//                .map(portDTO -> {
-//                    Ingress.IngressRule ingressRule = new Ingress.IngressRule();
-//                    ingressRule.setHost(getUniqueHost(projectName, environment, alreadyTaken));
-//                    Ingress.IngressPath ingressPath = new Ingress.IngressPath();
-//                    ingressPath.setPath("/");
-//                    ingressPath.setPort(portDTO.getPort());
-//                    ingressPath.setServiceName(applicationDTO.getName() + "-" + applicationDTO.getDeployEnvironment());
-//                    ingressRule.addRuleValue(ingressPath);
-//                    return ingressRule;
-//                })
-//                .collect(Collectors.toList());
-//        ingress.setHttpRules(ingressRules);
-//        return ingress;
-//    }
-//}
+package seecoder.devcloud.core.pipeline.handler;
+
+import seecoder.devcloud.api.ApplicationProperties;
+import seecoder.devcloud.api.k8s.IngressApi;
+import seecoder.devcloud.api.k8s.K8sConstants;
+import seecoder.devcloud.api.k8s.model.Ingress;
+import seecoder.devcloud.common.util.SpringUtil;
+import seecoder.devcloud.core.pipeline.Context;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/1/18
+ * @description:
+ */
+public class K8sIngressHandler extends AbstractHandler {
+
+    private final ApplicationProperties applicationProperties;
+
+    private final IngressApi ingressApi;
+
+    public K8sIngressHandler() {
+        this.ingressApi = SpringUtil.getBean(IngressApi.class);
+        this.applicationProperties = SpringUtil.getBean(ApplicationProperties.class);
+    }
+
+
+
+    @Override
+    public void process(Context context) {
+
+        String namespace = context.getNamespace();
+        String projectName = context.getProjectName();
+        String servicePort = context.getConfigs().get("servicePort");
+
+        Ingress ingress = new Ingress();
+        ingress.setName(projectName + K8sConstants.INGRESS_SUFFIX);
+        ingress.setNamespace(namespace);
+        Set<String> alreadyTaken = new HashSet<>();
+
+        Ingress.IngressRule ingressRule = new Ingress.IngressRule();
+        ingressRule.setHost(namespace + "." + projectName + applicationProperties.getK8s().getIngressHostSuffix());
+        Ingress.IngressPath path = new Ingress.IngressPath();
+        path.setPath(projectName+K8sConstants.DEPLOYMENT_SUFFIX);
+        path.setPort(Integer.parseInt(servicePort));
+        ingressRule.setRuleValues(Collections.singleton(path));
+        ingress.setHttpRules(Collections.singletonList(ingressRule));
+
+        ingress.setLabel(K8sConstants.APPLICATION_LABEL, projectName);
+
+        ingressApi.create(ingress);
+    }
+}

+ 1 - 7
core/src/main/java/seecoder/devcloud/core/pipeline/template/PipelineTemplateTable.java

@@ -2,9 +2,7 @@ package seecoder.devcloud.core.pipeline.template;
 
 
 import seecoder.devcloud.core.pipeline.PipelineException;
 import seecoder.devcloud.core.pipeline.PipelineException;
 
 
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.HashSet;
-import java.util.List;
 
 
 /**
 /**
  * @author PuHong Weng
  * @author PuHong Weng
@@ -14,7 +12,7 @@ import java.util.List;
 public class PipelineTemplateTable {
 public class PipelineTemplateTable {
 
 
     private static final String TEMPLATE_DOCKERFILE_PREFIX = "TEMPLATE_DOCKERFILE_";
     private static final String TEMPLATE_DOCKERFILE_PREFIX = "TEMPLATE_DOCKERFILE_";
-    private static final String TEMPLATE_CONFIG_JSON_PREFIX = "TEMPLATE_CONFIG_JSON__";
+    private static final String TEMPLATE_CONFIG_JSON_PREFIX = "TEMPLATE_CONFIG_JSON_";
 
 
     private static final HashSet<String> templateNames;
     private static final HashSet<String> templateNames;
 
 
@@ -42,8 +40,4 @@ public class PipelineTemplateTable {
     public static String getTemplateConfigJsonName(String templateName){
     public static String getTemplateConfigJsonName(String templateName){
         return TEMPLATE_DOCKERFILE_PREFIX + templateName;
         return TEMPLATE_DOCKERFILE_PREFIX + templateName;
     }
     }
-
-    public static List<String> getTemplateList(){
-        return 
-    }
 }
 }

+ 9 - 0
core/src/main/resources/template/config/test.json

@@ -0,0 +1,9 @@
+{
+  "test": [
+
+    {
+      "name":
+
+    }
+  ]
+}

+ 15 - 0
core/src/main/resources/template/dockerfile/TEMPLATE_DOCKERFILE_JAVA8

@@ -0,0 +1,15 @@
+# 用于为学生java8项目打包成镜像的dockerfile
+FROM maven:3.6.1 AS compile_stage
+ENV PROJECT_NAME seecoder-paas
+ENV WORK_PATH /opt/$PROJECT_NAME
+COPY settings.xml /root/.m2/settings.xml
+COPY . $WORK_PATH
+RUN cd $WORK_PATH && mvn clean package -DskipTests -DfinalName=$PROJECT_NAME
+
+FROM java:8-jre-alpine
+ENV PROJECT_NAME seecoder-paas
+ENV WORK_PATH /opt/$PROJECT_NAME
+RUN apk add --no-cache git
+WORKDIR /app
+COPY --from=compile_stage $WORK_PATH/target/${PROJECT_NAME}.jar .
+CMD ["sh", "-c", "java -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n -jar -server /app/${PROJECT_NAME}.jar"]

+ 1 - 0
web/src/main/resources/application-wph.yml

@@ -31,6 +31,7 @@ seecoder:
     api-server: https://192.168.99.105:8443
     api-server: https://192.168.99.105:8443
     token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjBmSXc4RlRjNUpBYVpGYWc4QzRDY1MzUWJad1JMdFhKcDI1cngzWGtiRlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXZjbG91ZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXNicXY4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NmIxNzU1ZS0zZjE3LTQ1ZTctODFmYi01MTRhODA3NDRhMzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGV2Y2xvdWQ6ZGVmYXVsdCJ9.W0Y1lR6LBi1ZjylBx35YeqYuq2u2AqH-ayK4FD-LDfC26E89DanOwSv9XLrRMnnDBZFS_ZCRBumbnDeMiS5vw2x7-QnrDqj1M5u9FB2fIJsz2LyUkOhATZZmTzj_Uhewvvg09aDKh16ttj6ZX27m-KVk_6MP-VfiuvZnCVxDbqRkRjK-zsor4ty1CEATPyKK-tvugAwS0RFNHUL94DamfZAq_t1PSnH5ZtEHq0uEMZxY2c7j6u9d_aD9lphm_ZpCy_C8OCHfanM21CQPDHlcJTW_aiOO6bAp8qdc1egPO5uIamHl6Zm0N3RkcsRp4DGOHrltTV9y_cGZHXSWmRHfxw
     token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjBmSXc4RlRjNUpBYVpGYWc4QzRDY1MzUWJad1JMdFhKcDI1cngzWGtiRlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXZjbG91ZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXNicXY4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NmIxNzU1ZS0zZjE3LTQ1ZTctODFmYi01MTRhODA3NDRhMzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGV2Y2xvdWQ6ZGVmYXVsdCJ9.W0Y1lR6LBi1ZjylBx35YeqYuq2u2AqH-ayK4FD-LDfC26E89DanOwSv9XLrRMnnDBZFS_ZCRBumbnDeMiS5vw2x7-QnrDqj1M5u9FB2fIJsz2LyUkOhATZZmTzj_Uhewvvg09aDKh16ttj6ZX27m-KVk_6MP-VfiuvZnCVxDbqRkRjK-zsor4ty1CEATPyKK-tvugAwS0RFNHUL94DamfZAq_t1PSnH5ZtEHq0uEMZxY2c7j6u9d_aD9lphm_ZpCy_C8OCHfanM21CQPDHlcJTW_aiOO6bAp8qdc1egPO5uIamHl6Zm0N3RkcsRp4DGOHrltTV9y_cGZHXSWmRHfxw
     debugging: true
     debugging: true
+    ingressHostSuffix: .devcloud.seec.seecoder.cn
   gitlab:
   gitlab:
     host: http://gitlab.192.168.99.105.nip.io
     host: http://gitlab.192.168.99.105.nip.io
     webHookProxy: http://localhost:3000
     webHookProxy: http://localhost:3000