Sfoglia il codice sorgente

重构构建部署接口...

reghao 5 anni fa
parent
commit
0ab4a5706e
30 ha cambiato i file con 340 aggiunte e 267 eliminazioni
  1. 12 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/cache/BuildDeployCache.java
  2. 12 36
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildDeployController.java
  3. 37 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/BuildDeployApp.java
  4. 0 24
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/DeployedApp.java
  5. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppOrchestration.java
  6. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java
  7. 0 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployLog.java
  8. 16 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/BuildDeployAppRepository.java
  9. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/dao/BaseDAO.java
  10. 0 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/deploy/DeployedAppRepository.java
  11. 4 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/BuildLogRepository.java
  12. 3 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/CommitLogRepository.java
  13. 3 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/DeployLogRepository.java
  14. 5 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/LogRepository.java
  15. 20 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java
  16. 18 42
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildService.java
  17. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/LogManager.java
  18. 10 11
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/StatusManager.java
  19. 62 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/BuildDeployAppCrudService.java
  20. 9 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/orchestarte/AppCrudService.java
  21. 4 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java
  22. 77 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployAppVO.java
  23. 0 60
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployResult.java
  24. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/config/CachingConfig.java
  25. 7 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/exception/ExceptionUtil.java
  26. 1 1
      dmaster/src/main/resources/application.yml
  27. 8 8
      scripts/build.sh
  28. 2 2
      scripts/deploy.sh
  29. 2 2
      scripts/svn_post_commit
  30. 21 30
      scripts/test.json

+ 12 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/cache/OrchestrationCache.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/cache/BuildDeployCache.java

@@ -2,6 +2,8 @@ package cn.reghao.autodop.dmaster.app.cache;
 
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestration;
+import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
+import cn.reghao.autodop.dmaster.app.repository.log.BuildLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.AppOrchestrationRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationRepository;
 import org.springframework.stereotype.Service;
@@ -13,13 +15,17 @@ import org.springframework.stereotype.Service;
  * @date 2020-03-06 15:17:33
  */
 @Service
-public class OrchestrationCache {
+public class BuildDeployCache {
     private AppOrchestrationRepository appRepository;
     private ProjOrchestrationRepository projRepository;
+    private BuildLogRepository buildLogRepository;
 
-    public OrchestrationCache(AppOrchestrationRepository appRepository, ProjOrchestrationRepository projRepository) {
+    public BuildDeployCache(AppOrchestrationRepository appRepository,
+                            ProjOrchestrationRepository projRepository,
+                            BuildLogRepository buildLogRepository) {
         this.appRepository = appRepository;
         this.projRepository = projRepository;
+        this.buildLogRepository = buildLogRepository;
     }
 
     // TODO @Cacheable(cacheNames = "app", key = "#appId")
@@ -31,4 +37,8 @@ public class OrchestrationCache {
     public ProjOrchestration findByProjId(String projId) {
         return null;
     }
+
+    public BuildLog findByAppIdAndCommitId(String appId, String commitId) {
+        return buildLogRepository.findBuildLogByAppIdAndCommitIdAndStatusCode(appId, commitId, 0);
+    }
 }

+ 12 - 36
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildDeployController.java

@@ -1,15 +1,13 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
-import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.constant.EnvType;
 import cn.reghao.autodop.dmaster.app.vo.SuccessfullyBuildVO;
-import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployResult;
+import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployAppVO;
 import cn.reghao.autodop.dmaster.app.service.BuildService;
 import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildLogVO;
 import cn.reghao.autodop.dmaster.app.vo.log.CommitLogVO;
 import cn.reghao.autodop.dmaster.app.vo.log.DeployLogVO;
-import cn.reghao.autodop.dmaster.app.service.OssService;
 import cn.reghao.autodop.dmaster.app.service.BuildDeployDispatcher;
 import cn.reghao.autodop.common.result.WebResult;
 import io.swagger.annotations.Api;
@@ -21,7 +19,6 @@ import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
-import org.tmatesoft.svn.core.SVNException;
 
 /**
  * @author reghao
@@ -31,37 +28,29 @@ import org.tmatesoft.svn.core.SVNException;
 @Api(tags = "应用构建部署接口")
 @RestController
 @RequestMapping("/api/app/bd")
-public class BuildController {
+public class BuildDeployController {
     private BuildService buildService;
     private BuildDeployDispatcher buildDeployDispatcher;
-    private OssService ossService;
 
-    public BuildController(BuildService buildService, BuildDeployDispatcher buildDeployDispatcher, OssService ossService) {
+    public BuildDeployController(BuildService buildService, BuildDeployDispatcher buildDeployDispatcher) {
         this.buildService = buildService;
         this.buildDeployDispatcher = buildDeployDispatcher;
-        this.ossService = ossService;
     }
 
-    // TODO docker 打包时 repository:tag 为空
-    // TODO docker push 没有成功
     @ApiOperation(value = "构建部署应用")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="应用 ID", paramType="query", dataType = "String")
-    )
+    @ApiImplicitParams(@ApiImplicitParam(name="appId", value="应用 ID", paramType="query", dataType = "String"))
     @PostMapping("/update")
     public String buildAndDeploy(@RequestParam("appId") String appId) throws Exception {
-        BuildDeployResult buildDeployResult = buildDeployDispatcher.buildAndDeploy(appId, true);
-        return WebResult.success(buildDeployResult);
+        BuildDeployAppVO buildDeployAppVO = buildDeployDispatcher.buildAndDeploy(appId, true);
+        return WebResult.success(buildDeployAppVO);
     }
 
     @ApiOperation(value = "构建应用")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="应用 ID", paramType="query", dataType = "String")
-    )
+    @ApiImplicitParams(@ApiImplicitParam(name="appId", value="应用 ID", paramType="query", dataType = "String"))
     @PostMapping("/build")
     public String build(@RequestParam("appId") String appId) throws Exception {
-        BuildDeployResult buildDeployResult = buildDeployDispatcher.buildAndDeploy(appId, false);
-        return WebResult.success(buildDeployResult);
+        BuildDeployAppVO buildDeployAppVO = buildDeployDispatcher.buildAndDeploy(appId, false);
+        return WebResult.success(buildDeployAppVO);
     }
 
     @ApiOperation(value = "部署应用")
@@ -71,18 +60,15 @@ public class BuildController {
     })
     @PostMapping("/deploy")
     public String deploy(@RequestParam("appId") String appId, @RequestParam("commitId") String commitId) {
-        // TODO 单独部署某个或几个节点
-        buildDeployDispatcher.deploy1(appId, commitId);
-        return WebResult.success("deploy");
+        BuildDeployAppVO buildDeployAppVO = buildDeployDispatcher.deploy(appId, commitId);
+        return WebResult.success(buildDeployAppVO);
     }
 
     @ApiOperation(value = "某个环境需要构建部署的应用")
     @GetMapping("/list")
     public ResponseEntity<String> buildList(@RequestParam("page") int page, @RequestParam("size") int size,
                                             @RequestParam("env") String env) {
-        PageRequest pageRequest =
-                PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "createTime"));
-        PageList<BuildDeployResult> pageList = buildService.buildList(EnvType.valueOf(env).name(), pageRequest);
+        PageList<BuildDeployAppVO> pageList = buildService.buildList(page, size, EnvType.valueOf(env).name());
         return ResponseEntity.ok().body(WebResult.success(pageList));
     }
 
@@ -171,14 +157,4 @@ public class BuildController {
         PageList<DeployLogVO> pageList = buildService.deployLogs(env1, appId, pageRequest);
         return ResponseEntity.ok().body(WebResult.success(pageList));
     }
-
-    @ApiOperation(value = "部署 OSS 资源")
-    @ApiImplicitParams(
-            @ApiImplicitParam(name="appId", value="应用标识", paramType="query", dataType = "String")
-    )
-    @PostMapping("/deploy/oss/{appId}")
-    public String deployOss(@PathVariable("appId") String appId) throws SVNException {
-        ossService.upload(appId);
-        return WebResult.success("ok");
-    }
 }

+ 37 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/BuildDeployApp.java

@@ -0,0 +1,37 @@
+package cn.reghao.autodop.dmaster.app.entity;
+
+import cn.reghao.autodop.common.orm.BaseEntity;
+import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.persistence.*;
+
+/**
+ * 需要构建部署的应用
+ *
+ * @author reghao
+ * @date 2020-05-20 22:09:53
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Entity
+public class BuildDeployApp extends BaseEntity {
+    @Column(nullable = false, unique = true)
+    private String appId;
+    @Column(nullable = false)
+    private String env;
+    @Column(nullable = false)
+    private boolean enable;
+    private String commitId;
+    private String bdType;
+    private String bdTime;
+
+    public static BuildDeployApp fromAppOrchestration(AppOrchestration app) {
+        BuildDeployApp buildDeployApp = new BuildDeployApp();
+        buildDeployApp.setAppId(app.getAppId());
+        buildDeployApp.setEnv(app.getEnv());
+        buildDeployApp.setEnable(app.isEnable());
+        return buildDeployApp;
+    }
+}

+ 0 - 24
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/DeployedApp.java

@@ -1,24 +0,0 @@
-package cn.reghao.autodop.dmaster.app.entity;
-
-import cn.reghao.autodop.common.orm.BaseEntity;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.*;
-
-/**
- * 已部署的应用(应用第一次部署时添加一条记录,以后每次部署时更新记录)
- *
- * @author reghao
- * @date 2020-05-20 22:09:53
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-@Entity
-public class DeployedApp extends BaseEntity {
-    @OneToOne(cascade = CascadeType.DETACH)
-    @JoinColumn(name = "app_orchestration_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private AppOrchestration app;
-    private String commitId;
-}

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/AppOrchestration.java

@@ -36,6 +36,7 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
     // 启用编排
     @Column(nullable = false)
     private boolean enable;
+    // TODO 操作系统类型和版本,CPU 架构
 
     /* 构建配置 */
     @Column(nullable = false)

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java

@@ -23,6 +23,7 @@ public class BuildLog extends BaseDocument {
     private String errDetail;
     private String appId;
     private BuildStage stage;
+    // 代码是否更新
     private boolean isUpdate;
     private String commitId;
     private String packagePath;

+ 0 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployLog.java

@@ -3,7 +3,6 @@ package cn.reghao.autodop.dmaster.app.entity.log;
 import cn.reghao.autodop.common.orm.BaseDocument;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springframework.data.domain.PageRequest;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.List;

+ 16 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/BuildDeployAppRepository.java

@@ -0,0 +1,16 @@
+package cn.reghao.autodop.dmaster.app.repository;
+
+import cn.reghao.autodop.dmaster.app.entity.BuildDeployApp;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author reghao
+ * @date 2020-01-21 14:53:03
+ */
+public interface BuildDeployAppRepository extends JpaRepository<BuildDeployApp, Long> {
+    BuildDeployApp findByAppId(String appId);
+    BuildDeployApp findByIsDeleteFalseAndAppId(String appId);
+    Page<BuildDeployApp> findByIsDeleteFalseAndEnableIsTrueAndEnv(String env, Pageable pageable);
+}

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/dao/BaseDAO.java

@@ -15,6 +15,7 @@ import java.util.List;
  * @author reghao
  * @date 2020-03-02 16:45:12
  */
+@Deprecated
 @Repository
 public class BaseDAO {
     private EntityManager em;

+ 0 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/deploy/DeployedAppRepository.java

@@ -1,16 +0,0 @@
-package cn.reghao.autodop.dmaster.app.repository.deploy;
-
-import cn.reghao.autodop.dmaster.app.entity.DeployedApp;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-/**
- * @author reghao
- * @date 2020-01-21 14:53:03
- */
-public interface DeployedAppRepository extends JpaRepository<DeployedApp, Long> {
-    DeployedApp findByIsDeleteFalseAndApp(AppOrchestration app);
-    Page<DeployedApp> findByIsDeleteFalseAndApp_Env(String env, Pageable pageable);
-}

+ 4 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/BuildLogRepository.java

@@ -1,6 +1,8 @@
 package cn.reghao.autodop.dmaster.app.repository.log;
 
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.mongodb.repository.MongoRepository;
 
 /**
@@ -9,4 +11,6 @@ import org.springframework.data.mongodb.repository.MongoRepository;
  */
 public interface BuildLogRepository extends MongoRepository<BuildLog, Long> {
     BuildLog findBuildLogByAppIdAndStatusCode(String appId, int statusCode);
+    BuildLog findBuildLogByAppIdAndCommitIdAndStatusCode(String appId, String commitId, int statusCode);
+    Page<BuildLog> findBuildLogByAppIdAndStatusCode(String appId, int statusCode, Pageable pageable);
 }

+ 3 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/CommitLogRepository.java

@@ -1,6 +1,8 @@
 package cn.reghao.autodop.dmaster.app.repository.log;
 
 import cn.reghao.autodop.dmaster.app.service.build.tools.repo.CommitLog;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.mongodb.repository.MongoRepository;
 
 /**
@@ -8,4 +10,5 @@ import org.springframework.data.mongodb.repository.MongoRepository;
  * @date 2020-01-21 14:53:03
  */
 public interface CommitLogRepository extends MongoRepository<CommitLog, Long> {
+    Page<CommitLog> findCommitLogByAppId(String appId, Pageable pageable);
 }

+ 3 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/DeployLogRepository.java

@@ -1,6 +1,8 @@
 package cn.reghao.autodop.dmaster.app.repository.log;
 
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.mongodb.repository.MongoRepository;
 
 /**
@@ -8,4 +10,5 @@ import org.springframework.data.mongodb.repository.MongoRepository;
  * @date 2020-01-21 14:53:03
  */
 public interface DeployLogRepository extends MongoRepository<DeployLog, Long> {
+    Page<DeployLog> findDeployLogByAppId(String appId, Pageable pageable);
 }

+ 5 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/LogRepository.java

@@ -2,6 +2,7 @@ package cn.reghao.autodop.dmaster.app.repository.log;
 
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
+import cn.reghao.autodop.dmaster.app.repository.BuildDeployAppRepository;
 import cn.reghao.autodop.dmaster.app.service.build.tools.repo.CommitLog;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Repository;
@@ -16,13 +17,16 @@ import org.springframework.transaction.annotation.Transactional;
 @Slf4j
 @Repository
 public class LogRepository {
+    private BuildDeployAppRepository buildDeployAppRepository;
     private CommitLogRepository commitLogRepository;
     private BuildLogRepository buildLogRepository;
     private DeployLogRepository deployLogRepository;
 
-    public LogRepository(CommitLogRepository commitLogRepository,
+    public LogRepository(BuildDeployAppRepository buildDeployAppRepository,
+                         CommitLogRepository commitLogRepository,
                          BuildLogRepository buildLogRepository,
                          DeployLogRepository deployLogRepository) {
+        this.buildDeployAppRepository = buildDeployAppRepository;
         this.commitLogRepository = commitLogRepository;
         this.buildLogRepository = buildLogRepository;
         this.deployLogRepository = deployLogRepository;

+ 20 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java

@@ -1,12 +1,12 @@
 package cn.reghao.autodop.dmaster.app.service;
 
-import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
+import cn.reghao.autodop.dmaster.app.cache.BuildDeployCache;
 import cn.reghao.autodop.dmaster.app.constant.BuildStage;
 import cn.reghao.autodop.dmaster.app.constant.NotifierType;
 import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
-import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployResult;
+import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployAppVO;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
 import cn.reghao.autodop.dmaster.app.service.build.AppIntegrate;
 import cn.reghao.autodop.dmaster.app.service.deploy.AppDeployer;
@@ -37,14 +37,14 @@ public class BuildDeployDispatcher {
     private Set<String> onBuilding = new ConcurrentSkipListSet<>();
     private Set<String> onDeploying = new ConcurrentSkipListSet<>();
     private Map<String, AppIntegrate> integrateMap = new ConcurrentHashMap<>();
-    private OrchestrationCache cache;
+    private BuildDeployCache cache;
     private AppDeployer appDeployer;
 
     private ExecutorService threadPool = ThreadPoolWrapper.threadPool("build-deploy");
     private LogConsumer logConsumer;
 
-    public BuildDeployDispatcher(OrchestrationCache orchestrationCache, AppDeployer appDeployer, LogRepository logDAO) {
-        this.cache = orchestrationCache;
+    public BuildDeployDispatcher(BuildDeployCache buildDeployCache, AppDeployer appDeployer, LogRepository logDAO) {
+        this.cache = buildDeployCache;
         this.appDeployer = appDeployer;
         this.logConsumer = new LogConsumer(logDAO);
         threadPool.submit(logConsumer);
@@ -57,7 +57,7 @@ public class BuildDeployDispatcher {
      * @return
      * @date 2021-02-06 上午1:46
      */
-    public BuildDeployResult buildAndDeploy(String appId, boolean isDeploy) throws Exception {
+    public BuildDeployAppVO buildAndDeploy(String appId, boolean isDeploy) throws Exception {
         if (!onBuilding.add(appId)) {
             // TODO 应用正在构建中...
             return null;
@@ -77,22 +77,22 @@ public class BuildDeployDispatcher {
         }
 
         // TODO 抛出异常时从 onBuilding 中移除当前应用
-        BuildLog buildLog = buildTask(appIntegrate);
+        BuildLog buildLog = buildPipeline(appIntegrate);
         onBuilding.remove(appId);
         if (buildLog.getStatusCode() == 0 && isDeploy) {
-            DeployLog deployLog = deploy(appId, buildLog.getPackagePath());
-            return BuildDeployResult.fromDeployLog(deployLog);
+            DeployLog deployLog = deployApp(appId, buildLog.getCommitId(), buildLog.getPackagePath());
+            return BuildDeployAppVO.fromDeployLog(deployLog);
         } else {
-            return BuildDeployResult.fromBuildLog(buildLog);
+            return BuildDeployAppVO.fromBuildLog(buildLog);
         }
     }
 
     /**
-     * 更新 -> 编译 -> 打包 -> 部署流水线
+     * 更新 -> 编译 -> 打包 -> 构建流水线
      *
      * @date 2019-11-07 下午10:14
      */
-    private BuildLog buildTask(AppIntegrate appIntegrate) {
+    private BuildLog buildPipeline(AppIntegrate appIntegrate) {
         BuildLog buildLog = new BuildLog();
         buildLog.setAppId(appIntegrate.appId());
 
@@ -152,22 +152,26 @@ public class BuildDeployDispatcher {
      * @return
      * @date 2021-02-06 上午2:02
      */
-    public DeployLog deploy(String appId, String packagePath) {
+    private DeployLog deployApp(String appId, String commitId, String packagePath) {
         if (!onDeploying.add(appId)) {
             // TODO 应用正在部署中...
             return null;
         }
 
         List<DeployConfig> deployConfigs = cache.findByAppId(appId).getDeployConfigs();
-        DeployLog deployLog = appDeployer.deploy(appId, packagePath, deployConfigs);
+        DeployLog deployLog = appDeployer.deploy(appId, commitId, packagePath, deployConfigs);
         // TODO 部署完成后发出通知
-
         onDeploying.remove(appId);
         logConsumer.addDeployLog(deployLog);
         return deployLog;
     }
 
-    public void deploy1(String appId, String commitId) {
+    public BuildDeployAppVO deploy(String appId, String commitId) {
+        BuildLog buildLog = cache.findByAppIdAndCommitId(appId, commitId);
+        String packagePath = buildLog.getPackagePath();
+        DeployLog deployLog = deployApp(appId, commitId, packagePath);
+        logConsumer.addDeployLog(deployLog);
+        return BuildDeployAppVO.fromDeployLog(deployLog);
     }
 
     public void deployNotify(NotifierConfig notifierConfig, DeployLog deployLog) {

+ 18 - 42
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildService.java

@@ -1,22 +1,20 @@
 package cn.reghao.autodop.dmaster.app.service;
 
+import cn.reghao.autodop.dmaster.app.entity.BuildDeployApp;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
-import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
-import cn.reghao.autodop.dmaster.app.repository.dao.BaseDAO;
 import cn.reghao.autodop.dmaster.app.repository.log.BuildLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.log.CommitLogRepository;
 import cn.reghao.autodop.dmaster.app.repository.log.DeployLogRepository;
-import cn.reghao.autodop.dmaster.app.repository.orchestration.*;
 import cn.reghao.autodop.dmaster.app.service.build.tools.repo.CommitLog;
 import cn.reghao.autodop.common.utils.data.db.PageList;
+import cn.reghao.autodop.dmaster.app.service.crud.BuildDeployAppCrudService;
 import cn.reghao.autodop.dmaster.app.vo.SuccessfullyBuildVO;
 import cn.reghao.autodop.dmaster.app.vo.log.*;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -24,62 +22,40 @@ import java.util.List;
  */
 @Service
 public class BuildService {
-    private AppOrchestrationRepository appRepository;
+    private BuildDeployAppCrudService buildDeployAppCrudService;
     private CommitLogRepository commitLogRepository;
     private BuildLogRepository buildLogRepository;
     private DeployLogRepository deployLogRepository;
-    private BaseDAO baseDAO;
 
-    public BuildService(AppOrchestrationRepository appRepository,
+    public BuildService(BuildDeployAppCrudService buildDeployAppCrudService,
                         CommitLogRepository commitLogRepository,
                         BuildLogRepository buildLogRepository,
-                        DeployLogRepository deployLogRepository,
-                        BaseDAO baseDAO) {
-        this.appRepository = appRepository;
+                        DeployLogRepository deployLogRepository) {
+        this.buildDeployAppCrudService = buildDeployAppCrudService;
         this.commitLogRepository = commitLogRepository;
         this.buildLogRepository = buildLogRepository;
         this.deployLogRepository = deployLogRepository;
-        this.baseDAO = baseDAO;
     }
 
-    public PageList<BuildDeployResult> buildList(String env, PageRequest pageRequest) {
-        PageList<BuildDeployResult> results = new PageList<>();
-        Page<AppOrchestration> apps = appRepository.findByIsDeleteFalseAndEnableIsTrueAndEnv(env, pageRequest);
-        results.setTotalPages(apps.getTotalPages());
-        results.setTotalSize(apps.getTotalElements());
-        results.setHasNext(apps.hasNext());
+    public PageList<BuildDeployAppVO> buildList(int page, int size, String env) {
+        PageList<BuildDeployApp> pageList = buildDeployAppCrudService.getByPage(page, size);
+        PageList<BuildDeployAppVO> vos = new PageList<>();
+        vos.setTotalPages(pageList.getTotalPages());
+        vos.setTotalSize(pageList.getTotalSize());
+        vos.setPageSize(vos.getPageSize());
+        vos.setHasNext(pageList.isHasNext());
+        vos.setList(pageList.getList().stream().map(BuildDeployAppVO::fromBuildDeployApp).collect(Collectors.toList()));
 
-        // TODO 待优化代码,使用一条 SQL 语句完成?
-        // 找出每个 app 最新的部署日志
-        List<BuildDeployResult> list = new ArrayList<>();
-        BuildLog buildLog = buildLogRepository.findBuildLogByAppIdAndStatusCode("content", 0);
-        List<BuildLog> buildLogs = buildLogRepository.findAll();
-
-        /*for (AppOrchestration app : apps.getContent()) {
-            BuildLog buildLog = buildLogRepository.findFirstByAppIdOrderByCreateTimeDesc(app.getAppId());
-            if (buildLog != null && buildLog.getStatusCode() == 0) {
-                // 若 app 构建成功,则找出其部署日志
-                List<DeployLog> deployLogs = deployLogRepository.findByIsDeleteFalseAndBuildLog(buildLog);
-                if (!deployLogs.isEmpty()) {
-                    list.add(BuildDeployResult.fromDeployLogs(deployLogs));
-                } else {
-                    list.add(new BuildDeployResult(app.getAppId()));
-                }
-            } else {
-                list.add(new BuildDeployResult(app.getAppId()));
-            }
-        }*/
-        results.setList(list);
-        return results;
+        return vos;
     }
 
     public PageList<SuccessfullyBuildVO> successfullyBuilds(String appId, PageRequest pageRequest) {
         PageList<SuccessfullyBuildVO> pageList = new PageList<>();
-        /*Page<BuildLog> buildLogs = buildLogRepository.findByAppIdAndStatusCode(appId, 0, pageRequest);
+        Page<BuildLog> buildLogs = buildLogRepository.findBuildLogByAppIdAndStatusCode(appId, 0, pageRequest);
         pageList.setTotalPages(buildLogs.getTotalPages());
         pageList.setTotalSize(buildLogs.getTotalElements());
         pageList.setHasNext(buildLogs.hasNext());
-        pageList.setList(buildLogs.stream()
+        /*pageList.setList(buildLogs.stream()
                 .map(buildLog -> {
                     String commitId = "buildLog.getCommitLog().getCommitId()";
                     String commitMsg = "buildLog.getCommitLog().getCommitMsg()";

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/LogManager.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service;
 
-import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
+import cn.reghao.autodop.dmaster.app.cache.BuildDeployCache;
 import cn.reghao.autodop.dmaster.app.entity.deploy.LogConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.vo.LogFile;
@@ -16,9 +16,9 @@ import java.util.*;
  */
 @Service
 public class LogManager {
-    private OrchestrationCache caching;
+    private BuildDeployCache caching;
 
-    public LogManager(OrchestrationCache caching) {
+    public LogManager(BuildDeployCache caching) {
         this.caching = caching;
     }
 

+ 10 - 11
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/StatusManager.java

@@ -2,10 +2,10 @@ package cn.reghao.autodop.dmaster.app.service;
 
 import cn.reghao.autodop.common.deploy.AppStatus;
 import cn.reghao.autodop.common.dockerc.exception.DockerException;
-import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
-import cn.reghao.autodop.dmaster.app.entity.DeployedApp;
+import cn.reghao.autodop.dmaster.app.cache.BuildDeployCache;
+import cn.reghao.autodop.dmaster.app.entity.BuildDeployApp;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
-import cn.reghao.autodop.dmaster.app.repository.deploy.DeployedAppRepository;
+import cn.reghao.autodop.dmaster.app.repository.BuildDeployAppRepository;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
@@ -21,12 +21,11 @@ import java.util.List;
  */
 @Service
 public class StatusManager {
-    private DeployedAppRepository deployedRepository;
-    private final int GRPC_PORT = 4001;
-    private OrchestrationCache caching;
+    private BuildDeployAppRepository buildDeployAppRepository;
+    private BuildDeployCache caching;
 
-    public StatusManager(OrchestrationCache caching, DeployedAppRepository deployedRepository) {
-        this.deployedRepository = deployedRepository;
+    public StatusManager(BuildDeployCache caching, BuildDeployAppRepository buildDeployAppRepository) {
+        this.buildDeployAppRepository = buildDeployAppRepository;
         this.caching = caching;
     }
 
@@ -55,12 +54,12 @@ public class StatusManager {
     }
 
     public List<AppStatus> status(String env, PageRequest pageRequest) {
-        Page<DeployedApp> page = deployedRepository.findByIsDeleteFalseAndApp_Env(env, pageRequest);
+        Page<BuildDeployApp> page = buildDeployAppRepository.findByIsDeleteFalseAndEnableIsTrueAndEnv(env, pageRequest);
         List<AppStatus> appStatusList = new ArrayList<>();
         // TODO 异步处理
         try {
-            for (DeployedApp deployedApp : page.getContent()) {
-                /*for (String host : deployedApp.getApp().getAppDeploy().getHosts()) {
+            for (BuildDeployApp buildDeployApp : page.getContent()) {
+                /*for (String host : app.getApp().getAppDeploy().getHosts()) {
                 }*/
             }
         } catch (Exception e) {

+ 62 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/BuildDeployAppCrudService.java

@@ -0,0 +1,62 @@
+package cn.reghao.autodop.dmaster.app.service.crud;
+
+import cn.reghao.autodop.common.utils.data.db.CrudOps;
+import cn.reghao.autodop.common.utils.data.db.PageList;
+import cn.reghao.autodop.dmaster.app.entity.BuildDeployApp;
+import cn.reghao.autodop.dmaster.app.repository.BuildDeployAppRepository;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author reghao
+ * @date 2021-02-19 16:39:29
+ */
+@Service
+public class BuildDeployAppCrudService implements CrudOps<BuildDeployApp> {
+    private BuildDeployAppRepository buildDeployAppRepository;
+
+    public BuildDeployAppCrudService(BuildDeployAppRepository buildDeployAppRepository) {
+        this.buildDeployAppRepository = buildDeployAppRepository;
+    }
+
+    @Override
+    public void addOrModify(BuildDeployApp buildDeployApp) throws Exception {
+        BuildDeployApp entity = buildDeployAppRepository.findByAppId(buildDeployApp.getAppId());
+        if (entity != null) {
+            buildDeployApp.setId(entity.getId());
+            buildDeployApp.setCreateTime(entity.getCreateTime());
+            buildDeployApp.setUpdateTime(LocalDateTime.now());
+        }
+        buildDeployApp.setIsDelete(false);
+        buildDeployAppRepository.save(buildDeployApp);
+    }
+
+    @Override
+    public PageList<BuildDeployApp> getByPage(int page, int size) {
+        // 默认按更新时间倒序
+        PageRequest pageRequest =
+                PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
+        Page<BuildDeployApp> page1 =
+                buildDeployAppRepository.findByIsDeleteFalseAndEnableIsTrueAndEnv("dev", pageRequest);
+        PageList<BuildDeployApp> pageList = new PageList<>();
+        pageList.setTotalSize(page1.getTotalElements());
+        pageList.setTotalPages(page1.getTotalPages());
+        pageList.setList(page1.getContent());
+        return pageList;
+    }
+
+    @Override
+    public void delete(String uniqueKey) throws Exception {
+        BuildDeployApp entity = buildDeployAppRepository.findByIsDeleteFalseAndAppId(uniqueKey);
+        if (entity == null) {
+            throw new Exception(uniqueKey + " 不存在");
+        } else {
+            entity.setIsDelete(true);
+            buildDeployAppRepository.save(entity);
+        }
+    }
+}

+ 9 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/orchestarte/AppCrudService.java

@@ -2,9 +2,11 @@ package cn.reghao.autodop.dmaster.app.service.crud.orchestarte;
 
 import cn.reghao.autodop.common.utils.data.db.CrudOps;
 import cn.reghao.autodop.common.utils.data.db.PageList;
+import cn.reghao.autodop.dmaster.app.entity.BuildDeployApp;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.AppOrchestrationRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationRepository;
+import cn.reghao.autodop.dmaster.app.service.crud.BuildDeployAppCrudService;
 import cn.reghao.autodop.dmaster.app.service.crud.SharedEntityChecker;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -22,13 +24,16 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
     private AppOrchestrationRepository appRepository;
     private ProjOrchestrationRepository projRepository;
     private SharedEntityChecker sharedEntityChecker;
+    private BuildDeployAppCrudService buildDeployAppCrudService;
 
     public AppCrudService(AppOrchestrationRepository appRepository,
                           ProjOrchestrationRepository projRepository,
-                          SharedEntityChecker sharedEntityChecker) {
+                          SharedEntityChecker sharedEntityChecker,
+                          BuildDeployAppCrudService buildDeployAppCrudService) {
         this.appRepository = appRepository;
         this.projRepository = projRepository;
         this.sharedEntityChecker = sharedEntityChecker;
+        this.buildDeployAppCrudService = buildDeployAppCrudService;
     }
 
     @Override
@@ -45,6 +50,7 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
         }
         app.setIsDelete(false);
         appRepository.save(app);
+        buildDeployAppCrudService.addOrModify(BuildDeployApp.fromAppOrchestration(app));
     }
 
     public void copy(String from, String to) throws Exception {
@@ -58,6 +64,7 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
             toApp = (AppOrchestration) fromApp.clone();
             copyToDifferentApp(toApp, to);
             appRepository.save(toApp);
+            buildDeployAppCrudService.addOrModify(BuildDeployApp.fromAppOrchestration(toApp));
         }
     }
 
@@ -105,6 +112,7 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
         } else {
             appEntity.setIsDelete(true);
             appRepository.save(appEntity);
+            buildDeployAppCrudService.delete(appEntity.getAppId());
         }
     }
 }

+ 4 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java

@@ -9,6 +9,7 @@ import cn.reghao.autodop.common.amqp.RabbitProducer;
 import cn.reghao.autodop.common.dagent.machine.api.data.MachineRegistry;
 import cn.reghao.autodop.common.dagent.machine.hardware.network.NetworkInfo;
 import cn.reghao.autodop.common.dockerc.pojo.Config;
+import cn.reghao.autodop.common.utils.DatetimeConverter;
 import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
@@ -49,7 +50,7 @@ public class AppDeployer {
      * @return
      * @date 2020-03-13 下午1:00
      */
-    public DeployLog deploy(String appId, String packagePath, List<DeployConfig> deployConfigs) {
+    public DeployLog deploy(String appId, String commitId, String packagePath, List<DeployConfig> deployConfigs) {
         Map<String, Future<RPCResult>> futureMap = new HashMap<>(deployConfigs.size());
         for (DeployConfig deployConfig : deployConfigs) {
             AppDeployArgs appDeployArgs = new AppDeployArgs();
@@ -67,6 +68,8 @@ public class AppDeployer {
 
         DeployLog deployLog = new DeployLog();
         deployLog.setAppId(appId);
+        deployLog.setCommitId(commitId);
+        deployLog.setDeployTime(DatetimeConverter.now());
         List<DeployResult> deployResults = new ArrayList<>();
         for (Map.Entry<String, Future<RPCResult>> entry : futureMap.entrySet()) {
             DeployResult deployResult = new DeployResult();

+ 77 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployAppVO.java

@@ -0,0 +1,77 @@
+package cn.reghao.autodop.dmaster.app.vo.log;
+
+import cn.reghao.autodop.common.utils.DatetimeConverter;
+import cn.reghao.autodop.dmaster.app.entity.BuildDeployApp;
+import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
+import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
+import cn.reghao.autodop.dmaster.app.entity.log.DeployResult;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 应用构建部署结果
+ *
+ * @author reghao
+ * @date 2020-03-12 14:56:05
+ */
+@Data
+@NoArgsConstructor
+public class BuildDeployAppVO {
+    // 0 - 成功 1 - 失败
+    private int statusCode;
+    private String msg;
+
+    private String appId;
+    private String commitId;
+    private String bdType;
+    private String bdTime;
+
+    public static BuildDeployAppVO fromBuildDeployApp(BuildDeployApp buildDeployApp) {
+        BuildDeployAppVO buildDeployAppVO = new BuildDeployAppVO();
+        buildDeployAppVO.setAppId(buildDeployApp.getAppId());
+        buildDeployAppVO.setCommitId(buildDeployApp.getCommitId());
+        buildDeployAppVO.setBdType(buildDeployApp.getBdType());
+        buildDeployAppVO.setBdTime(buildDeployApp.getBdTime());
+
+        return buildDeployAppVO;
+    }
+
+    public static BuildDeployAppVO fromBuildLog(BuildLog buildLog) {
+        BuildDeployAppVO buildDeployAppVO = new BuildDeployAppVO();
+        buildDeployAppVO.setAppId(buildLog.getAppId());
+        buildDeployAppVO.setCommitId(buildLog.getCommitId());
+        buildDeployAppVO.setBdType("构建");
+        buildDeployAppVO.setBdTime(DatetimeConverter.format(buildLog.getBuildTime()));
+        buildDeployAppVO.setStatusCode(buildLog.getStatusCode());
+        if (buildLog.getStatusCode() == 0) {
+            buildDeployAppVO.setMsg("构建成功");
+        } else {
+            buildDeployAppVO.setMsg(buildLog.getErrDetail());
+        }
+
+        return buildDeployAppVO;
+    }
+
+    public static BuildDeployAppVO fromDeployLog(DeployLog deployLog) {
+        BuildDeployAppVO buildDeployAppVO = new BuildDeployAppVO();
+        buildDeployAppVO.setAppId(deployLog.getAppId());
+        buildDeployAppVO.setCommitId(deployLog.getCommitId());
+        buildDeployAppVO.setBdType("部署");
+        buildDeployAppVO.setBdTime(deployLog.getDeployTime());
+
+        List<String> deployFailure = deployLog.getDeployResults().stream()
+                .filter(log -> log.getStatusCode() != 0)
+                .map(DeployResult::getMsg)
+                .collect(Collectors.toList());
+        if (deployFailure.isEmpty()) {
+            buildDeployAppVO.setMsg("部署成功");
+        } else {
+            buildDeployAppVO.setMsg(deployFailure.toString());
+        }
+
+        return buildDeployAppVO;
+    }
+}

+ 0 - 60
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployResult.java

@@ -1,60 +0,0 @@
-package cn.reghao.autodop.dmaster.app.vo.log;
-
-import cn.reghao.autodop.common.utils.DatetimeConverter;
-import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
-import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-/**
- * 应用构建部署结果
- *
- * @author reghao
- * @date 2020-03-12 14:56:05
- */
-@Data
-@NoArgsConstructor
-public class BuildDeployResult {
-    // 0 - 成功 1 - 失败
-    private int statusCode;
-    private String msg;
-
-    private String appId;
-    private String commitId;
-    private String bdType;
-    private String bdTime;
-    private List<String> deploySuccessed;
-    private List<String> deployFailure;
-
-    public static BuildDeployResult fromBuildLog(BuildLog buildLog) {
-        BuildDeployResult buildDeployResult = new BuildDeployResult();
-        buildDeployResult.setAppId(buildLog.getAppId());
-        buildDeployResult.setCommitId(buildLog.getCommitId());
-        buildDeployResult.setBdType("构建");
-        buildDeployResult.setBdTime(DatetimeConverter.format(buildLog.getBuildTime()));
-        buildDeployResult.setStatusCode(buildLog.getStatusCode());
-        if (buildLog.getStatusCode() == 0) {
-            buildDeployResult.setMsg("构建成功");
-        } else {
-            buildDeployResult.setMsg(buildLog.getErrDetail());
-        }
-
-        return buildDeployResult;
-    }
-
-    public static BuildDeployResult fromDeployLog(DeployLog deployLog) {
-        BuildDeployResult buildDeployResult = new BuildDeployResult();
-        buildDeployResult.setAppId(deployLog.getAppId());
-        buildDeployResult.setCommitId(deployLog.getCommitId());
-        buildDeployResult.setBdType("部署");
-        buildDeployResult.setBdTime(deployLog.getDeployTime());
-
-        deployLog.getDeployResults().forEach(deployResult -> {
-
-        });
-
-        return buildDeployResult;
-    }
-}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/config/CachingConfig.java

@@ -46,7 +46,7 @@ public class CachingConfig {
         List<String> names = new ArrayList<>();
         names.add("app");
         names.add("proj");
-        names.add("deployedApp");
+        names.add("buildDeployApp");
 
         return names;
     }

+ 7 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/exception/ExceptionUtil.java

@@ -1,21 +1,19 @@
 package cn.reghao.autodop.dmaster.common.exception;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @author reghao
  * @date 2020-08-10 13:52:13
  */
 public class ExceptionUtil {
     public static String errorMsg(Exception e) {
-        String stack = stackTrace(e);
-        String errMsg = e.getMessage();
-        if (errMsg.length() > 1000) {
-            return errMsg.substring(0, 1000);
-        } else {
-            return errMsg;
+        StringBuilder sb = new StringBuilder();
+        sb.append(e.getMessage());
+        Throwable throwable = e.getCause();
+        if (throwable != null) {
+            sb.append(throwable.getMessage());
         }
+
+        return sb.toString();
     }
 
     public static String stackTrace(Exception e) {

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

@@ -10,7 +10,7 @@ spring:
       max-file-size: 1GB
       max-request-size: 1GB
 #  cache:
-#    cache-names: deployedApp
+#    cache-names: buildDeployApp
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.zaxxer.hikari.HikariDataSource

+ 8 - 8
scripts/build.sh

@@ -4,28 +4,28 @@
 #!/bin/sh
 
 env=$1
-app=$2
-if [ -z ${env} ] || [ -z ${app} ]; then
-  echo 'error: sh build.sh env app'
+buildDeployApp=$2
+if [ -z ${env} ] || [ -z ${buildDeployApp} ]; then
+  echo 'error: sh build.sh env buildDeployApp'
   exit -1
 fi
 
 # 项目根目录
 proj_home="/home/reghao/code/aha/autodop"
 proj=`basename ${proj_home}`
-app_name=${proj}-${app}
+app_name=${proj}-${buildDeployApp}
 cd ${proj_home}
-mvn clean package -am -pl ${app} -Dmaven.test.skip=true -P${env}
-#mvn clean package -am -pl ${app} -DskipTest=true -P${env}
+mvn clean package -am -pl ${buildDeployApp} -Dmaven.test.skip=true -P${env}
+#mvn clean package -am -pl ${buildDeployApp} -DskipTest=true -P${env}
 
 # 存放应用的根目录
-jar_home="/home/reghao/tmp/autodop/app"
+jar_home="/home/reghao/tmp/autodop/buildDeployApp"
 if [ -d ${jar_home}/${app_name} ]; then
   rm -rf ${jar_home}/${app_name}/*
 else
   mkdir -p ${jar_home}/${app_name}
 fi
-cp ${app}/target/${app_name}.jar ${jar_home}/${app_name}
+cp ${buildDeployApp}/target/${app_name}.jar ${jar_home}/${app_name}
 cp scripts/runner.sh ${jar_home}/${app_name}
 
 cd ${jar_home}

+ 2 - 2
scripts/deploy.sh

@@ -10,14 +10,14 @@ remote_host=$2
 password=$3
 
 if [ -z ${app_name} ] || [ -z ${remote_host} ] || [ -z ${password} ]; then
-  echo 'error: sh deploy.sh app remote_host password'
+  echo 'error: sh deploy.sh buildDeployApp remote_host password'
   exit -1
 fi
 
 # 存放应用的根目录
 remote_jar_home="/opt/services/dmaster"
 #remote_jar_home="/opt/services/dagent"
-local_jar_home="/home/reghao/tmp/autodop/app"
+local_jar_home="/home/reghao/tmp/autodop/buildDeployApp"
 cd ${local_jar_home}/${app_name}
 
 # 拷贝 runner.sh 到远程主机

+ 2 - 2
scripts/svn_post_commit

@@ -16,7 +16,7 @@ do
 	grep ${KEY} ${LOGFILE} > /dev/null
 	if [ `echo $?` -eq 0 ]; then
 	  echo ${FE_MAP[${KEY}]} >> ${LOGFILE}
-		#curl -X POST http://192.168.0.50:4000/api/app/build/${FE_MAP[${KEY}]} &
+		#curl -X POST http://192.168.0.50:4000/api/buildDeployApp/build/${FE_MAP[${KEY}]} &
 	fi
 done
 
@@ -25,6 +25,6 @@ do
 	grep ${KEY} ${LOGFILE} > /dev/null
 	if [ `echo $?` -eq 0 ]; then
 	  echo ${BE_MAP[${KEY}]} >> ${LOGFILE}
-		#curl -X POST http://192.168.0.50:4000/api/app/build/${BE_MAP[${KEY}]} &
+		#curl -X POST http://192.168.0.50:4000/api/buildDeployApp/build/${BE_MAP[${KEY}]} &
 	fi
 done

+ 21 - 30
scripts/test.json

@@ -1,38 +1,29 @@
 {
-  "appId":"content",
-  "env":"test",
-  "description":"内容服务",
-  "alwaysBuild":true,
-  "enable":true,
-  "appType":"dotnetCore",
-  "appRepo":"https://codeup.aliyun.com/5f1f8daf6207a1a8b17f6742/background/ContentService.git",
-  "branch":"develop",
-  "dirname":"ContentService",
-  "compileHome":"",
-  "buildConfigVO":{
-    "repo":"git-codeup",
-    "compiler":"dotnet5-dev",
-    "packer":"docker-dev"
+  "appId": "dnkt",
+  "env": "dev",
+  "description": "大脑课堂",
+  "alwaysBuild": true,
+  "enable": true,
+  "appType": "npm",
+  "appRepo": "git@codeup.aliyun.com:5f1f8daf6207a1a8b17f6742/FrontEnd/IQuizoo.Game.git",
+  "branch": "develop",
+  "dirname": "IQuizoo.Game",
+  "compileHome": "/IQuizoo.Game",
+  "buildConfigVO": {
+    "repo": "git-codeup",
+    "compiler": "none",
+    "packer": "docker-dev",
+    "dockerfile": "FROM debian10/nginx\n\nRUN sed -i 's/8080/8081/' /etc/nginx/conf.d/http.conf\nCOPY ./dist-test /opt/webroot/\n"
   },
-  "deployConfigs":[
+  "deployConfigs": [
     {
       "machineId": "5d1a727991f34d3a9c1220a1899e6ebd",
-      "packerType":"docker"
+      "packerType": "docker",
+      "dockerConfig": "{\n  \"env\":[\n    \"appName=dnkt\",\n    \"ASPNETCORE_ENVIRONMENT=Production\",\n    \"ASPNETCORE_URLS=http://172.16.45.67:8002;https://172.16.45.67:8102\"\n  ],\n  \"hostConfig\":{\n    \"networkMode\":\"host\",\n    \"restartPolicy\":{\n      \"name\":\"on-failure\",\n      \"maximumRetryCount\":5\n    }\n  }\n}"
     }
   ],
-  "runningConfig":{
-    "httpPort":8002,
-    "healthCheck":"/health",
-    "logs":[
-      {
-        "type":"console",
-        "level":"error"
-      },
-      {
-        "type":"file",
-        "level":"info"
-      }
-    ]
+  "runningConfig": {
+    "logs": []
   },
-  "notifier":"ding-dev"
+  "notifier": "ding-dev"
 }