Bläddra i källkod

fix: sonar java check if job is running normally

claws 4 år sedan
förälder
incheckning
7e09e46b24

+ 12 - 0
api/src/main/java/cn/seecoder/api/ApplicationProperties.java

@@ -25,6 +25,8 @@ public class ApplicationProperties {
 	private K8s k8s = new K8s();
 	@Valid
 	private Git git = new Git();
+	@Valid
+	private Sonar sonar = new Sonar();
 
 	@Data
 	public static class Gitlab {
@@ -101,6 +103,16 @@ public class ApplicationProperties {
 		private String password;
 	}
 
+	@Data
+	public static class Sonar {
+		@NotEmpty
+		private String host;
+		@NotEmpty
+		private String projectKey;
+		@NotEmpty
+		private String loginToken;
+	}
+
 
 
 }

+ 1 - 0
web/src/main/java/cn/seecoder/web/core/pipeline/PipelineException.java

@@ -19,6 +19,7 @@ public class PipelineException extends Exception{
     public static final String SERVICE_CREATE_ERROR = "K8S service 创建错误";
     public static final String DEPLOYMENT_CREATE_ERROR = "K8S deployment 创建错误";
     public static final String JOB_CREATE_ERROR = "K8S job 创建错误";
+    public static final String JOB_IMAGE_NOT_EXIST_ERROR = "镜像不存在,需要重试";
     public static final String LIMIT_RANGE_CREATE_ERROR = "K8S limit range 创建错误";
 
     public static final String NAMESPACE_CREATE_ERROR = "K8S namespace 创建错误";

+ 26 - 0
web/src/main/java/cn/seecoder/web/core/pipeline/handler/K8sJobHandler.java

@@ -9,6 +9,7 @@ import cn.seecoder.api.k8s.vo.SecretVO;
 import cn.seecoder.common.util.SpringUtil;
 import cn.seecoder.web.core.pipeline.Context;
 import cn.seecoder.web.core.pipeline.PipelineException;
+import io.kubernetes.client.openapi.models.V1JobStatus;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpStatus;
 
@@ -148,5 +149,30 @@ public class K8sJobHandler extends AbstractHandler{
             context.appendErrorResult(PipelineException.JOB_CREATE_ERROR, e);
             throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.JOB_CREATE_ERROR, e);
         }
+
+        // 4 确认Job情况
+        try {
+            Thread.sleep(3000L);
+            List<Job> jobs = jobApi.getByCondition(K8sObjectRequest.builder()
+                    .name(jobName)
+                    .namespace(namespace)
+                    .build());
+            if (jobs.size() == 1){
+                Job k8s_job = jobs.get(0);
+                V1JobStatus status = k8s_job.getStatus();
+                if (status != null && status.getFailed() != null && status.getFailed() > 0) {
+                    throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.JOB_IMAGE_NOT_EXIST_ERROR);
+                }
+            }
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+            throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.JOB_CREATE_ERROR);
+        } catch (K8sApiException e) {
+            context.appendErrorResult(PipelineException.JOB_CREATE_ERROR, e);
+            throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.JOB_CREATE_ERROR, e);
+        } catch (PipelineException e) {
+            context.appendErrorResult(PipelineException.JOB_IMAGE_NOT_EXIST_ERROR, e);
+            throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.JOB_IMAGE_NOT_EXIST_ERROR);
+        }
     }
 }

+ 12 - 3
web/src/main/java/cn/seecoder/web/core/pipeline/handler/SonarJavaImageBuildHandler.java

@@ -1,5 +1,6 @@
 package cn.seecoder.web.core.pipeline.handler;
 
+import cn.seecoder.api.ApplicationProperties;
 import cn.seecoder.api.docker.DockerApi;
 import cn.seecoder.api.git.GitApi;
 import cn.seecoder.common.util.SpringUtil;
@@ -34,12 +35,13 @@ import java.util.List;
 @Slf4j
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class SonarJavaImageBuildHandler extends AbstractHandler{
+public class SonarJavaImageBuildHandler extends AbstractHandler {
 
     private final GitApi gitApi;
     private final DockerApi dockerApi;
     private final ProjectService projectService;
     private final BranchService branchService;
+    private final ApplicationProperties applicationProperties;
 
     // properties from pipeline config json
 //    private String repoUrl;
@@ -52,6 +54,7 @@ public class SonarJavaImageBuildHandler extends AbstractHandler{
         this.dockerApi = SpringUtil.getBean(DockerApi.class);
         this.projectService = SpringUtil.getBean(ProjectService.class);
         this.branchService = SpringUtil.getBean(BranchService.class);
+        this.applicationProperties = SpringUtil.getBean(ApplicationProperties.class);
     }
 
     @Override
@@ -73,6 +76,9 @@ public class SonarJavaImageBuildHandler extends AbstractHandler{
             throw new PipelineException(HttpStatus.SC_SERVICE_UNAVAILABLE, PipelineException.BRANCH_NOT_FOUND_ERROR);
         }
         String commitHash = branch.getCommit().getId();
+        String projectKey = applicationProperties.getSonar().getProjectKey();
+        String loginToken = applicationProperties.getSonar().getLoginToken();
+        String sonarHost = applicationProperties.getSonar().getHost();
 
         // 1. 有git从git拿到地址仓库
         Path directory;
@@ -108,8 +114,11 @@ public class SonarJavaImageBuildHandler extends AbstractHandler{
                 line = line
                         .replace("%commitHash%", commitHash)
                         .replace("%projectId%", Integer.toString(projectId))
-                        .replace("%imageName%",imageName)
-                        .replace("%imageTag%", imageTag);
+                        .replace("%imageName%", imageName)
+                        .replace("%imageTag%", imageTag)
+                        .replace("%projectKey%", projectKey)
+                        .replace("%loginToken%", loginToken)
+                        .replace("%host%", sonarHost);
 
                 sb.append(line).append("\n");
             }

+ 4 - 0
web/src/main/resources/application-lzl.yml

@@ -52,6 +52,10 @@ seecoder:
     registryUsername: admin
     registryPassword: NJU67nexus
     tls: true
+  sonar:
+    host: https://sonarqube-test.seec.seecoder.cn
+    projectKey: test
+    loginToken: 787658b11f0332f631bfb186aa1bfcd7898b0498
 
 
 

+ 4 - 0
web/src/main/resources/application-prod.yaml

@@ -40,6 +40,10 @@ seecoder:
     registryUsername: admin
     registryPassword: NJU67nexus
     tls: false
+  sonar:
+    host: https://sonarqube-test.seec.seecoder.cn
+    projectKey: test
+    loginToken: 787658b11f0332f631bfb186aa1bfcd7898b0498
 
 logging:
   file:

+ 1 - 1
web/src/main/resources/template/dockerfile/SONAR_JAVA8

@@ -3,4 +3,4 @@ ENV WORK_PATH /opt/sonar_test
 COPY settings.xml /root/.m2/settings.xml
 COPY . $WORK_PATH
 #RUN cd $WORK_PATH && mvn clean package -DskipTests
-CMD cd $WORK_PATH && mvn clean verify sonar:sonar  -Dsonar.projectKey=hh  -Dsonar.host.url=https://sonarqube-test.seec.seecoder.cn  -Dsonar.login=c8a0e03bff522764c370588f3e8f5a3e86854ad7 -Dsonar.analysis.projectId=%projectId% -Dsonar.analysis.commitHash=%commitHash% -Dsonar.analysis.imageName=%imageName% -Dsonar.analysis.imageTag=%imageTag%
+CMD cd $WORK_PATH && mvn clean verify sonar:sonar  -Dsonar.projectKey=%projectKey%  -Dsonar.host.url=%host%  -Dsonar.login=%loginToken% -Dsonar.analysis.projectId=%projectId% -Dsonar.analysis.commitHash=%commitHash% -Dsonar.analysis.imageName=%imageName% -Dsonar.analysis.imageTag=%imageTag%