Browse Source

feat: sonar java test(fix namespace)

claws 4 years ago
parent
commit
9aa1f3aac7

+ 50 - 6
web/src/main/java/cn/seecoder/web/core/pipeline/handler/K8sJobHandler.java

@@ -2,13 +2,9 @@ package cn.seecoder.web.core.pipeline.handler;
 
 
 import cn.seecoder.api.ApplicationProperties;
-import cn.seecoder.api.k8s.JobApi;
-import cn.seecoder.api.k8s.K8sConstants;
-import cn.seecoder.api.k8s.SecretApi;
+import cn.seecoder.api.k8s.*;
 import cn.seecoder.api.k8s.exception.K8sApiException;
-import cn.seecoder.api.k8s.model.Container;
-import cn.seecoder.api.k8s.model.Job;
-import cn.seecoder.api.k8s.model.K8sObjectRequest;
+import cn.seecoder.api.k8s.model.*;
 import cn.seecoder.api.k8s.vo.SecretVO;
 import cn.seecoder.common.util.SpringUtil;
 import cn.seecoder.web.core.pipeline.Context;
@@ -24,6 +20,8 @@ public class K8sJobHandler extends AbstractHandler{
 
     private final SecretApi secretApi;
     private final JobApi jobApi;
+    private final NamespaceApi namespaceApi;
+    private final LimitRangeApi limitRangeApi;
     private final ApplicationProperties applicationProperties;
     private final static String DEFAULT_IMAGE_PULL_SECRET_NAME = "seecoder-devcloud-image-pull-secret";
 
@@ -31,10 +29,56 @@ public class K8sJobHandler extends AbstractHandler{
         this.applicationProperties = SpringUtil.getBean(ApplicationProperties.class);
         secretApi = SpringUtil.getBean(SecretApi.class);
         jobApi = SpringUtil.getBean(JobApi.class);
+        namespaceApi = SpringUtil.getBean(NamespaceApi.class);
+        limitRangeApi = SpringUtil.getBean(LimitRangeApi.class);
     }
 
     @Override
     public void process(Context context) throws PipelineException {
+        //1. 创建namespace 和 limit range
+        Namespace k8sNamespace = new Namespace();
+        k8sNamespace.setName(context.getNamespace());
+        //todo namespace在底下资源未删除时,不能轻易删除重建,只能直接通过异常查是否已创建,丑陋,待修改
+        try {
+            List<Namespace> namespaces = namespaceApi.getByCondition(K8sObjectRequest.builder()
+                    .name(context.getNamespace()).build());
+            if (namespaces.size() == 0) {
+                namespaceApi.create(k8sNamespace);
+                log.info("Namespace创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
+            } else {
+                log.info("Namespace已经存在, 无需新建: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
+            }
+        } catch (K8sApiException e) {
+            context.appendErrorResult(PipelineException.NAMESPACE_CREATE_ERROR, e);
+            throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.NAMESPACE_CREATE_ERROR, e);
+        }
+        context.appendSuccessResult("K8s Namespace创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
+
+        LimitRange limitRange = new LimitRange();
+        limitRange.setNamespace(context.getNamespace());
+        limitRange.setName(context.getDeployName()+K8sConstants.LIMIT_RANGE_SUFFIX);
+//        limitRange.setMinCpu("100m");
+//        limitRange.setMaxCpu("2000m");
+//        limitRange.setMinMemory("512Mi");
+//        limitRange.setMaxMemory("1024Mi");
+        try {
+            List<LimitRange> limitRanges = limitRangeApi.getByCondition(K8sObjectRequest.builder()
+                    .namespace(limitRange.getNamespace()).name(limitRange.getName()).build());
+            if (limitRanges.size() == 0) {
+                limitRangeApi.create(limitRange);
+                log.info("limitRange创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
+            } else {
+                limitRangeApi.update(limitRange);
+                log.info("limitRange更新成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
+
+            }
+        } catch (K8sApiException e) {
+            context.appendErrorResult(PipelineException.LIMIT_RANGE_CREATE_ERROR, e);
+            throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.LIMIT_RANGE_CREATE_ERROR, e);
+        }
+        context.appendSuccessResult("K8s limit range创建成功: [namespace: " + context.getNamespace() + ", deployName: " + context.getDeployName() + "]");
+
+
         context.appendSuccessResult("成功开始执行K8sHandler");
         // 0 变量
         // imageName 是 namespace-deployName-sonar

+ 2 - 2
web/src/main/resources/sql/data_init.sql

@@ -33,6 +33,6 @@ INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (
 INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (17, 'username', 'root', 0, 9);
 INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (18, 'password', 'root', 1, 9);
 INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (19, 'branchName', '#todo', 1, 10);
-INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (20, 'projectId', '{projectId}', 1, 10);
+INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (20, 'projectId', '{projectId}', 0, 10);
 INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (21, 'branchName', 'master', 1, 11);
-INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (22, 'projectId', '{projectId}', 1, 11);
+INSERT INTO devcloud.stage_config (id, name, value, editable, stage_id) VALUES (22, 'projectId', '{projectId}', 0, 11);