wanghongkai 5 년 전
부모
커밋
7b40a4179f

+ 2 - 0
src/main/java/cn/seecoder/paas/service/EnvironmentService.java

@@ -21,4 +21,6 @@ public interface EnvironmentService {
     Map<String,String> getLog(Integer id, String podName) throws ServiceException;
 
     EnvironmentVO restart(Integer id, String podName) throws ServiceException;
+
+    void checkDeployStatus();
 }

+ 70 - 2
src/main/java/cn/seecoder/paas/service/impl/EnvironmentServiceImpl.java

@@ -30,9 +30,12 @@ import org.eclipse.jgit.api.ResetCommand;
 import org.slf4j.Logger;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 import org.springframework.util.CollectionUtils;
 
-import javax.transaction.Transactional;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -203,7 +206,13 @@ public class EnvironmentServiceImpl implements EnvironmentService {
         result.setBuildStatus(BuildStatus.BUILDING);
         result.setBuildStartTime(LocalDateTime.now());
         result.setDeployStatus(DeployStatus.NOT_STARTED);
-        asyncWrapper.asyncInvoke(() -> buildAsync(id));
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+            @Override
+            public void afterCommit() {
+                super.afterCommit();
+                asyncWrapper.asyncInvoke(() -> buildAsync(id));
+            }
+        });
         return EnvironmentConverter.convertToVO(environmentDAO.save(result));
     }
 
@@ -228,6 +237,7 @@ public class EnvironmentServiceImpl implements EnvironmentService {
     }
 
     @Override
+    @Transactional
     public EnvironmentVO restart(Integer id, String podName) throws ServiceException {
         Environment result = environmentDAO.findById(id).orElse(null);
         if (result == null) {
@@ -241,6 +251,64 @@ public class EnvironmentServiceImpl implements EnvironmentService {
         return EnvironmentConverter.convertToVO(environmentDAO.save(result));
     }
 
+    @Override
+    @Transactional
+    public void checkDeployStatus() {
+        LocalDateTime startTime = LocalDateTime.now().minusMinutes(10);
+        List<Environment> environments = environmentDAO.findAllByBuildStatusAndBuildStartTimeBefore(BuildStatus.BUILDING, startTime);
+        if (!CollectionUtils.isEmpty(environments)) {
+            for (Environment environment : environments) {
+                environment.setBuildStatus(BuildStatus.FAIL);
+                environment.setBuildOutput("Timeout interrupt.");
+                logger.info("Interrupt buildTask: " + environment.getId());
+                environmentDAO.save(environment);
+            }
+        }
+        environments = environmentDAO.findAllByDeployStatus(DeployStatus.DEPLOYING);
+        environments.addAll(environmentDAO.findAllByDeployStatus(DeployStatus.RESTARTING));
+        if (!CollectionUtils.isEmpty(environments)) {
+            for (Environment environment : environments) {
+                if (environment.getDeployStartTime().isBefore(startTime)) {
+                    environment.setDeployStatus(DeployStatus.FAIL);
+                    environment.setBuildOutput("Timeout interrupt.");
+                    logger.info("Interrupt deployTask: " + environment.getId());
+                    environmentDAO.save(environment);
+                } else {
+                    String labelValue = ResourceLabel.RESOURCE.getGenerator().gen("environment", String.valueOf(environment.getAppId()), String.valueOf(environment.getId()));
+                    List<Deployment> deployments = deploymentApi.getByCondition(K8sObjectRequest
+                            .builder()
+                            .name(labelValue)
+                            .namespace(applicationProperties.getDeploymentNamespace())
+                            .build());
+                    if (!CollectionUtils.isEmpty(deployments)) {
+                        V1DeploymentStatus status = deployments.get(0).getStatus();
+                        List<V1DeploymentCondition> conditions = status.getConditions();
+                        if (!CollectionUtils.isEmpty(conditions)) {
+                            Collections.sort(conditions, Comparator.comparingLong(c -> ((V1DeploymentCondition)c).getLastUpdateTime().getMillis()).reversed());
+                            V1DeploymentCondition condition = conditions.get(0);
+                            switch (condition.getType()) {
+                                case "Available":
+                                case "Complete":
+                                    environment.setDeployStatus(DeployStatus.SUCCESS);
+                                    environment.setDeployOutput(condition.getMessage());
+                                    break;
+                                case "Progressing":
+                                    environment.setDeployStatus(DeployStatus.DEPLOYING);
+                                    environment.setDeployOutput(condition.getMessage());
+                                    break;
+                                default:
+                                    environment.setDeployStatus(DeployStatus.FAIL);
+                                    environment.setDeployOutput(condition.getMessage());
+                                    break;
+                            }
+                            environmentDAO.save(environment);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     void buildAsync(Integer id) {
         Environment result = environmentDAO.findById(id).get();
         try {

+ 7 - 52
src/main/java/cn/seecoder/paas/service/scheduler/DeployScheduler.java

@@ -2,6 +2,7 @@ package cn.seecoder.paas.service.scheduler;
 
 import cn.seecoder.paas.data.dao.EnvironmentDAO;
 import cn.seecoder.paas.data.entity.Environment;
+import cn.seecoder.paas.service.EnvironmentService;
 import cn.seecoder.paas.service.facade.k8s.DeploymentApi;
 import cn.seecoder.paas.service.facade.k8s.model.Deployment;
 import cn.seecoder.paas.service.facade.k8s.model.K8sObjectRequest;
@@ -16,6 +17,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
+import javax.transaction.Transactional;
 import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.Comparator;
@@ -30,65 +32,18 @@ public class DeployScheduler {
 
     private final ApplicationProperties applicationProperties;
 
+    private final EnvironmentService environmentService;
+
     @Autowired
-    public DeployScheduler(EnvironmentDAO environmentDAO, DeploymentApi deploymentApi, ApplicationProperties applicationProperties) {
+    public DeployScheduler(EnvironmentDAO environmentDAO, DeploymentApi deploymentApi, ApplicationProperties applicationProperties, EnvironmentService environmentService) {
         this.environmentDAO = environmentDAO;
         this.deploymentApi = deploymentApi;
         this.applicationProperties = applicationProperties;
+        this.environmentService = environmentService;
     }
 
     @Scheduled(fixedDelay = 30000)
     public void checkDeployStatus() {
-        LocalDateTime startTime = LocalDateTime.now().minusMinutes(10);
-        List<Environment> environments = environmentDAO.findAllByBuildStatusAndBuildStartTimeBefore(BuildStatus.BUILDING, startTime);
-        if (!CollectionUtils.isEmpty(environments)) {
-            for (Environment environment : environments) {
-                environment.setBuildStatus(BuildStatus.FAIL);
-                environment.setBuildOutput("Timeout interrupt.");
-                environmentDAO.save(environment);
-            }
-        }
-        environments = environmentDAO.findAllByDeployStatus(DeployStatus.DEPLOYING);
-        environments.addAll(environmentDAO.findAllByDeployStatus(DeployStatus.RESTARTING));
-        if (!CollectionUtils.isEmpty(environments)) {
-            for (Environment environment : environments) {
-                if (environment.getDeployStartTime().isBefore(startTime)) {
-                    environment.setDeployStatus(DeployStatus.FAIL);
-                    environment.setBuildOutput("Timeout interrupt.");
-                    environmentDAO.save(environment);
-                } else {
-                    String labelValue = ResourceLabel.RESOURCE.getGenerator().gen("environment", String.valueOf(environment.getAppId()), String.valueOf(environment.getId()));
-                    List<Deployment> deployments = deploymentApi.getByCondition(K8sObjectRequest
-                            .builder()
-                            .name(labelValue)
-                            .namespace(applicationProperties.getDeploymentNamespace())
-                            .build());
-                    if (!CollectionUtils.isEmpty(deployments)) {
-                        V1DeploymentStatus status = deployments.get(0).getStatus();
-                        List<V1DeploymentCondition> conditions = status.getConditions();
-                        if (!CollectionUtils.isEmpty(conditions)) {
-                            Collections.sort(conditions, Comparator.comparingLong(c -> ((V1DeploymentCondition)c).getLastUpdateTime().getMillis()).reversed());
-                            V1DeploymentCondition condition = conditions.get(0);
-                            switch (condition.getType()) {
-                                case "Available":
-                                case "Complete":
-                                    environment.setDeployStatus(DeployStatus.SUCCESS);
-                                    environment.setDeployOutput(condition.getMessage());
-                                    break;
-                                case "Progressing":
-                                    environment.setDeployStatus(DeployStatus.DEPLOYING);
-                                    environment.setDeployOutput(condition.getMessage());
-                                    break;
-                                default:
-                                    environment.setDeployStatus(DeployStatus.FAIL);
-                                    environment.setDeployOutput(condition.getMessage());
-                                    break;
-                            }
-                            environmentDAO.save(environment);
-                        }
-                    }
-                }
-            }
-        }
+        this.environmentService.checkDeployStatus();
     }
 }

+ 1 - 1
src/main/resources/application.yml

@@ -37,7 +37,7 @@ paas:
     api-server: http://k8s-apiserver.seecii.cn
     token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi1zdzlwOCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImY3MzQ2NzVlLWZmYmItMTFlOS1iYTdjLTIyNmUyZmY2ZTdlYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.GvBP7iNM_WNJN7dPm8ZPszDJeykifhHwBYcF58c4W73iAet1ZcZPrmiurqn4mSHcavUHNR8FqPaafnS3OD4eq5dR-i7frdIBt7yiME7AIGA4pDKWNJ3NykhyfG75omCvtQ2Gp-UvFIdf_4peAilxbwDR2NtWpky4sJQOTukZIYzN9fCeYV8My85XDBl7ze20QBsEKfPxTGZkqmytX-4VmjKkQH9ob7YB90NR2ug5VK8CA16_2ZPjf8Fx4QsdTbkyZKdFo7zIrIID0fa2lpOc2TpCKWeYCl335-ULllpxds6kiVwkRXYP-5zkIOfpI_0SshK7kbBjd238OLM3KFDf6A
     validateSSL: false
-    debug: true
+    debug: false
     imageRegistry: 192.168.68.79:18082
   deployment-namespace: seec
   deployment-host: seecii.cn