Преглед изворни кода

重构构建部署接口中...

reghao пре 5 година
родитељ
комит
0a148b8056
21 измењених фајлова са 148 додато и 101 уклоњено
  1. 4 3
      common/src/main/java/cn/reghao/autodop/common/dagent/app/api/data/deploy/AppDeployArgs.java
  2. 1 1
      common/src/main/java/cn/reghao/autodop/common/dagent/machine/api/data/MachineLog.java
  3. 4 0
      common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Config.java
  4. 4 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java
  5. 9 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/OrchestrateCrudController.java
  6. 5 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/DeployConfig.java
  7. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java
  8. 5 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployLog.java
  9. 5 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployResult.java
  10. 4 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/LogRepository.java
  11. 19 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java
  12. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/repo/CommitLog.java
  13. 11 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/repo/GitImpl.java
  14. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/orchestarte/AppCrudService.java
  15. 29 26
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java
  16. 8 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/log/LogConsumer.java
  17. 4 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java
  18. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3BakLog.java
  19. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/cluster/repository/MachineRegistryRepository.java
  20. 9 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/cluster/service/crud/MachineCrudService.java
  21. 22 28
      scripts/test.json

+ 4 - 3
common/src/main/java/cn/reghao/autodop/common/dagent/app/api/data/deploy/AppDeployArgs.java

@@ -10,9 +10,10 @@ import lombok.Data;
  */
 @Data
 public class AppDeployArgs {
+    private String packerType;
     private String appId;
     private String packagePath;
-    private String packerType;
-    private String runningHome;
-    private String runningScript;
+    private String startHome;
+    private String startScript;
+    private String dockerConfig;
 }

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dagent/machine/api/data/MachineLog.java

@@ -11,7 +11,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Document
+@Document("MachineLog")
 public class MachineLog extends BaseDocument {
     private String machineId;
     private long timestamp;

+ 4 - 0
common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Config.java

@@ -1,12 +1,16 @@
 package cn.reghao.autodop.common.dockerc.pojo;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2020-01-14 23:11:21
  */
 public class Config {
+    List<String> env;
     private String image;
     private HostConfig hostConfig;
+    // TODO 挂载 host 上的目录
     //private Map<String, String> volumes;
 
     public Config(Builder builder) {

+ 4 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/BuildController.java

@@ -50,8 +50,7 @@ public class BuildController {
     @PostMapping("/pipeline")
     public String buildAndDeploy(@RequestParam("appId") String appId) throws Exception {
         buildDeployDispatcher.buildAndDeploy(appId, true);
-        //BuildDeployResult buildDeployResult = buildDispatcher.buildAndDeploy(appId, true);
-        return WebResult.success("buildDeployResult");
+        return WebResult.success("pipeline");
     }
 
     @ApiOperation(value = "构建应用")
@@ -61,8 +60,7 @@ public class BuildController {
     @PostMapping("/build")
     public String build(@RequestParam("appId") String appId) throws Exception {
         buildDeployDispatcher.buildAndDeploy(appId, false);
-        //BuildDeployResult buildDeployResult = buildDispatcher.buildAndDeploy(appId, false);
-        return WebResult.success("buildDeployResult");
+        return WebResult.success("build");
     }
 
     @ApiOperation(value = "部署应用")
@@ -73,8 +71,8 @@ public class BuildController {
     @PostMapping("/deploy")
     public String deploy(@RequestParam("appId") String appId, @RequestParam("commitId") String commitId) {
         // TODO 单独部署某个或几个节点
-        //BuildDeployResult buildDeployResult = buildDispatcher.deploy(appId, commitId);
-        return WebResult.success("buildDeployResult");
+        buildDeployDispatcher.deploy1(appId, commitId);
+        return WebResult.success("deploy");
     }
 
     @ApiOperation(value = "某个环境需要构建部署的应用")

+ 9 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/OrchestrateCrudController.java

@@ -14,6 +14,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.stream.Collectors;
+
 /**
  * @author reghao
  * @date 2019-11-27 11:29:43
@@ -54,7 +56,13 @@ public class OrchestrateCrudController {
     public ResponseEntity<String> getAppOrchestrationByPage(@RequestParam("page") int page,
                                                             @RequestParam("size") int size) {
         PageList<AppOrchestration> pageList = appCrudService.getByPage(page, size);
-        return ResponseEntity.ok().body(WebResult.success(pageList));
+        PageList<AppVO> vos = new PageList<>();
+        vos.setTotalPages(pageList.getTotalPages());
+        vos.setTotalSize(pageList.getTotalSize());
+        vos.setHasNext(pageList.isHasNext());
+        vos.setPageSize(pageList.getPageSize());
+        vos.setList(pageList.getList().stream().map(AppVO::from).collect(Collectors.toList()));
+        return ResponseEntity.ok().body(WebResult.success(vos));
     }
 
     @ApiOperation(value = "修改应用编排")

+ 5 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/DeployConfig.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.dmaster.app.entity.deploy;
 
-import cn.reghao.autodop.common.dagent.machine.hardware.network.NetworkInfo;
 import lombok.Data;
 import org.hibernate.annotations.LazyCollection;
 import org.hibernate.annotations.LazyCollectionOption;
@@ -22,7 +21,9 @@ public class DeployConfig {
     @LazyCollection(LazyCollectionOption.FALSE)
     private List<String> machineIds;
     private String packerType;
-    private String runningHome;
-    private String runningScript;
-    // TODO docker 启动参数
+    private String startHome;
+    private String startScript;
+    // docker 启动参数
+    // cn.reghao.autodop.common.dockerc.pojo.Config 序列化为 JSON 后的字符串
+    private String dockerConfig;
 }

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

@@ -16,7 +16,7 @@ import java.time.LocalDateTime;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Document
+@Document("BuildLog")
 public class BuildLog extends BaseDocument {
     // 0 - 成功 1 - 失败
     private int statusCode;

+ 5 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployLog.java

@@ -5,6 +5,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.List;
+
 /**
  * 应用部署日志
  *
@@ -13,9 +15,8 @@ import org.springframework.data.mongodb.core.mapping.Document;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Document
+@Document("DeployLog")
 public class DeployLog extends BaseDocument {
-    // 0 - 全部成功 1 - 部分成功或全部失败
-    private int statusCode;
-    private String msg;
+    private String appId;
+    private List<DeployResult> deployResults;
 }

+ 5 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/DeployResult.java

@@ -10,5 +10,9 @@ import lombok.Data;
  */
 @Data
 public class DeployResult {
-    private String appId;
+    // 0 - 全部成功 1 - 部分成功或全部失败
+    private int statusCode;
+    private String msg;
+    private String machineId;
+    private String deployCostTime;
 }

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

@@ -28,11 +28,14 @@ public class LogRepository {
         this.deployLogRepository = deployLogRepository;
     }
 
+    @Transactional(rollbackFor = {Exception.class})
     public void saveCommitLog(CommitLog commitLog) {
+        commitLogRepository.save(commitLog);
     }
 
     @Transactional(rollbackFor = {Exception.class})
     public void saveBuildLog(BuildLog buildLog) {
+        buildLogRepository.save(buildLog);
         /*CommitLog commitLog = buildLog.getCommitLog();
         CommitLog entity = commitLogRepository.findByIsDeleteFalseAndCommitId(commitLog.getCommitId());
         if (entity == null) {
@@ -59,6 +62,7 @@ public class LogRepository {
 
     @Transactional(rollbackFor = {Exception.class})
     public void saveDeployLog(DeployLog deployLog) {
+        deployLogRepository.save(deployLog);
         /*BuildLog buildLog = deployLog.getBuildLog();
         String commitId = buildLog.getCommitLog().getCommitId();
         CommitLog entity = commitLogRepository.findByIsDeleteFalseAndCommitId(commitId);

+ 19 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildDeployDispatcher.java

@@ -3,7 +3,6 @@ package cn.reghao.autodop.dmaster.app.service;
 import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
 import cn.reghao.autodop.dmaster.app.constant.BuildStage;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
-import cn.reghao.autodop.dmaster.app.entity.log.DeployResult;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildResult;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
@@ -14,6 +13,7 @@ import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestratio
 import cn.reghao.autodop.dmaster.app.repository.log.LogRepository;
 import cn.reghao.autodop.dmaster.app.service.log.LogConsumer;
 import cn.reghao.autodop.dmaster.common.exception.ExceptionUtil;
+import cn.reghao.autodop.dmaster.common.thread.ThreadPoolWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -37,12 +37,15 @@ public class BuildDeployDispatcher {
     private Map<String, AppIntegrate> integrateMap = new ConcurrentHashMap<>();
     private OrchestrationCache 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;
         this.appDeployer = appDeployer;
         this.logConsumer = new LogConsumer(logDAO);
+        threadPool.submit(logConsumer);
     }
 
     /**
@@ -58,7 +61,7 @@ public class BuildDeployDispatcher {
             return null;
         }
 
-        // TODO AppOrchestration 修改后需要重新初始化 AppIntegrate
+        // TODO AppOrchestration 修改后需要重新初始化 AppIntegrate,尝试使用 AOP 来完成
         AppIntegrate appIntegrate = integrateMap.get(appId);
         if (appIntegrate == null) {
             AppOrchestration app = cache.findByAppId(appId);
@@ -73,8 +76,8 @@ public class BuildDeployDispatcher {
 
         // TODO 抛出异常时从 onBuilding 中移除当前应用
         BuildLog buildLog = buildTask(appIntegrate);
-        if (isDeploy) {
-            deploy(buildLog.getAppId(), buildLog.getPackagePath());
+        if (buildLog.getStatusCode() == 0 && isDeploy) {
+            DeployLog deployLog = deploy(buildLog.getAppId(), buildLog.getPackagePath());
         }
 
         onBuilding.remove(appId);
@@ -91,6 +94,7 @@ public class BuildDeployDispatcher {
         buildLog.setAppId(appIntegrate.appId());
 
         long start = System.currentTimeMillis();
+        // TODO 只使用一个 try-catch
         try {
             CommitLog commitLog = appIntegrate.update();
             buildLog.setUpdate(commitLog.isUpdate());
@@ -99,6 +103,7 @@ public class BuildDeployDispatcher {
             logConsumer.addCommitLog(commitLog);
         } catch (Exception e) {
             buildException(buildLog, BuildStage.update, e);
+            logConsumer.addBuildLog(buildLog);
             return buildLog;
         }
 
@@ -108,6 +113,7 @@ public class BuildDeployDispatcher {
             buildLog.setCompileTotalTime(System.currentTimeMillis()-start);
         } catch (Exception e) {
             buildException(buildLog, BuildStage.compile, e);
+            logConsumer.addBuildLog(buildLog);
             return buildLog;
         }
 
@@ -118,12 +124,14 @@ public class BuildDeployDispatcher {
             buildLog.setPackTotalTime(System.currentTimeMillis()-start);
         } catch (Exception e) {
             buildException(buildLog, BuildStage.pack, e);
+            logConsumer.addBuildLog(buildLog);
             return buildLog;
         }
 
         buildLog.setStage(BuildStage.done);
         buildLog.setStatusCode(0);
         buildLog.setBuildTime(LocalDateTime.now());
+        logConsumer.addBuildLog(buildLog);
         return buildLog;
     }
 
@@ -141,17 +149,21 @@ public class BuildDeployDispatcher {
      * @return
      * @date 2021-02-06 上午2:02
      */
-    public DeployResult deploy(String appId, String packagePath) {
+    public DeployLog deploy(String appId, String packagePath) {
         if (!onDeploying.add(appId)) {
             // TODO 应用正在部署中...
             return null;
         }
 
         DeployConfig deployConfig = cache.findByAppId(appId).getDeployConfig();
-        List<DeployLog> deployLogs = appDeployer.deploy(appId, packagePath, deployConfig);
+        DeployLog deployLog = appDeployer.deploy(appId, packagePath, deployConfig);
         // TODO 部署完成后发出通知
 
         onDeploying.remove(appId);
-        return null;
+        logConsumer.addDeployLog(deployLog);
+        return deployLog;
+    }
+
+    public void deploy1(String appId, String commitId) {
     }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/repo/CommitLog.java

@@ -15,7 +15,7 @@ import java.util.List;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Document
+@Document("CommitLog")
 public class CommitLog extends BaseDocument {
     private String appId;
     // 代码是否更新

+ 11 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/repo/GitImpl.java

@@ -1,5 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.repo;
 
+import cn.reghao.autodop.common.utils.text.TextFile;
 import cn.reghao.autodop.dmaster.app.constant.RepoAuthType;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.RepoConfig;
 import com.jcraft.jsch.JSch;
@@ -54,6 +55,15 @@ public class GitImpl implements CodeUpdater {
     }
 
     private void sshAuth(String prikeyFile) {
+        String prikeyPath = System.getProperty("java.io.tmpdir") + "/rsa_prikey";
+        File prikey = new File(prikeyPath);
+        try {
+            new TextFile().write(prikey, prikeyFile);
+        } catch (IOException e) {
+            // TODO 处理异常
+            e.printStackTrace();
+        }
+
         this.sshSessionFactory = new JschConfigSessionFactory() {
             @Override
             protected void configure(OpenSshConfig.Host hc, Session session) {
@@ -68,7 +78,7 @@ public class GitImpl implements CodeUpdater {
             protected JSch createDefaultJSch(FS fs) throws JSchException {
                 JSch defaultJSch = new JSch();
                 JSch.setConfig("ssh-rsa", JSch.getConfig("signature.rsa"));
-                defaultJSch.addIdentity(prikeyFile);
+                defaultJSch.addIdentity(prikeyPath);
                 return defaultJSch;
             }
         };

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

@@ -89,7 +89,7 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
         PageRequest pageRequest =
                 PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
         // TODO 指定额外的参数
-        Page<AppOrchestration> page1 = appRepository.findByIsDeleteFalseAndEnableIsTrueAndEnv("test", pageRequest);
+        Page<AppOrchestration> page1 = appRepository.findByIsDeleteFalseAndEnv("dev", pageRequest);
         PageList<AppOrchestration> pageList = new PageList<>();
         pageList.setTotalSize(page1.getTotalElements());
         pageList.setTotalPages(page1.getTotalPages());

+ 29 - 26
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java

@@ -7,9 +7,12 @@ import cn.reghao.autodop.common.dagent.app.api.AppOps;
 import cn.reghao.autodop.common.dagent.app.api.data.deploy.AppDeployArgs;
 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.utils.data.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
+import cn.reghao.autodop.dmaster.app.entity.log.DeployResult;
+import cn.reghao.autodop.dmaster.cluster.repository.MachineRegistryRepository;
 import cn.reghao.autodop.dmaster.common.exception.ExceptionUtil;
 import cn.reghao.autodop.dmaster.common.thread.ThreadPoolWrapper;
 import org.springframework.stereotype.Component;
@@ -30,10 +33,12 @@ import java.util.concurrent.Future;
 public class AppDeployer {
     private final String routeKey = "dagent";
     private RabbitProducer sender;
-    private ExecutorService threadPool = ThreadPoolWrapper.threadPool("app-deploy");
+    private MachineRegistryRepository machineRepository;
+    private ExecutorService threadPool = ThreadPoolWrapper.threadPool("deploy");
 
-    public AppDeployer(RabbitProducer sender) {
+    public AppDeployer(RabbitProducer sender, MachineRegistryRepository machineRepository) {
         this.sender = sender;
+        this.machineRepository = machineRepository;
     }
 
     /**
@@ -43,26 +48,26 @@ public class AppDeployer {
      * @return
      * @date 2020-03-13 下午1:00
      */
-    public List<DeployLog> deploy(String appId, String packagePath, DeployConfig deployConfig) {
+    public DeployLog deploy(String appId, String packagePath, DeployConfig deployConfig) {
         AppDeployArgs appDeployArgs = new AppDeployArgs();
         appDeployArgs.setAppId(appId);
         appDeployArgs.setPackagePath(packagePath);
         appDeployArgs.setPackerType(deployConfig.getPackerType());
-        appDeployArgs.setRunningHome(deployConfig.getRunningHome());
-        appDeployArgs.setRunningScript(deployConfig.getRunningScript());
+        appDeployArgs.setStartHome(deployConfig.getStartHome());
+        appDeployArgs.setStartScript(deployConfig.getStartScript());
+        appDeployArgs.setDockerConfig(deployConfig.getDockerConfig());
 
-        long startTime = System.currentTimeMillis();
-        Map<String, Future<RPCResult>> futureMap = new HashMap<>();
-        Set<MachineRegistry> machineRegistries = new HashSet<>();
-        //for (MachineRegistry machine : deployConfig.getMachineRegistry()) {
-        for (MachineRegistry machine : machineRegistries) {
-            futureMap.put(machine.getMachineId(),
-                    threadPool.submit(new DeployTask(machine.getMachineId(), appDeployArgs)));
-        }
+        Map<String, Future<RPCResult>> futureMap = new HashMap<>(deployConfig.getMachineIds().size());
+        deployConfig.getMachineIds().forEach(machineId -> {
+            futureMap.put(machineId, threadPool.submit(new DeployTask(machineId, appDeployArgs)));
+        });
 
-        List<DeployLog> deployLogs = new ArrayList<>();
+        DeployLog deployLog = new DeployLog();
+        deployLog.setAppId(appId);
+        List<DeployResult> deployResults = new ArrayList<>();
         for (Map.Entry<String, Future<RPCResult>> entry : futureMap.entrySet()) {
-            String machineId = entry.getKey();
+            DeployResult deployResult = new DeployResult();
+            deployResult.setMachineId(entry.getKey());
             Future<RPCResult> future = entry.getValue();
             while (!future.isDone() && !future.isCancelled()) {
                 // 休眠等待异步任务结束
@@ -73,25 +78,23 @@ public class AppDeployer {
                 }
             }
 
-            DeployLog deployLog = new DeployLog();
             try {
                 RPCResult rpcResult = future.get();
                 if (rpcResult != null) {
-                    deployLog.setStatusCode(rpcResult.getStatusCode());
-                    deployLog.setMsg(rpcResult.getResult());
+                    deployResult.setStatusCode(rpcResult.getStatusCode());
+                    deployResult.setMsg(rpcResult.getResult());
                 } else {
-                    deployLog.setStatusCode(1);
-                    deployLog.setMsg(machineId + " RPC 调用失败");
+                    deployResult.setStatusCode(1);
+                    deployResult.setMsg("RPC 调用失败");
                 }
             } catch (InterruptedException | ExecutionException e) {
-                deployLog.setStatusCode(1);
-                deployLog.setMsg(ExceptionUtil.errorMsg(e));
+                deployResult.setStatusCode(1);
+                deployResult.setMsg(ExceptionUtil.errorMsg(e));
             }
-            deployLogs.add(deployLog);
+            deployResults.add(deployResult);
         }
-
-        long costTime = System.currentTimeMillis() - startTime;
-        return deployLogs;
+        deployLog.setDeployResults(deployResults);
+        return deployLog;
     }
 
     class DeployTask implements Callable<RPCResult> {

+ 8 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/log/LogConsumer.java

@@ -33,8 +33,8 @@ public class LogConsumer implements Runnable {
         logQueue.add(buildLog);
     }
 
-    public void addDeployLogs(List<DeployLog> deployLogs) {
-        logQueue.addAll(deployLogs);
+    public void addDeployLog(DeployLog deployLog) {
+        logQueue.add(deployLog);
     }
 
     @Override
@@ -49,7 +49,12 @@ public class LogConsumer implements Runnable {
                     log.info("持久化 {} 代码提交日志完成...", commitLog.getAppId());
                 } else if (object instanceof BuildLog) {
                     BuildLog buildLog = (BuildLog) object;
-
+                    logDAO.saveBuildLog(buildLog);
+                    log.info("持久化 {} 构建日志完成...", buildLog.getAppId());
+                } else if (object instanceof DeployLog) {
+                    DeployLog deployLog = (DeployLog) object;
+                    logDAO.saveDeployLog(deployLog);
+                    log.info("持久化 {} 部署日志完成...", deployLog.getAppId());
                 }
             } catch (InterruptedException e) {
                 // 中断线程

+ 4 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -73,7 +73,7 @@ public class AppVO {
             vo.projId = app.getProj().getProjId();
         }
 
-        //vo.appDeploy = app.getAppDeploy();
+        vo.deployConfig = app.getDeployConfig();
         vo.runningConfig = app.getRunningConfig();
 
         if (app.getNotifierConfig() != null) {
@@ -102,8 +102,7 @@ public class AppVO {
         app.setCompileHome(vo.compileHome);
 
         app.setBuildConfig(BuildConfigVO.to(vo.getBuildConfigVO()));
-
-        //app.setAppDeploy(vo.appDeploy);
+        app.setDeployConfig(vo.getDeployConfig());
         app.setRunningConfig(vo.getRunningConfig());
 
         String notifier = vo.getNotifier();
@@ -159,8 +158,8 @@ public class AppVO {
 
         DeployConfig deployConfig = new DeployConfig();
         deployConfig.setPackerType(PackerType.docker.name());
-        deployConfig.setRunningHome(null);
-        deployConfig.setRunningScript(null);
+        deployConfig.setStartHome(null);
+        deployConfig.setStartScript(null);
         app.setDeployConfig(deployConfig);
 
         RunningConfig runningConfig = new RunningConfig();

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3BakLog.java

@@ -13,7 +13,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Document
+@Document("App3BakLog")
 public class App3BakLog extends BaseDocument {
     private String app3name;
     private String bakTime;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/cluster/repository/MachineRegistryRepository.java

@@ -14,7 +14,7 @@ import javax.transaction.Transactional;
  */
 public interface MachineRegistryRepository extends JpaRepository<MachineRegistry, Long> {
     Page<MachineRegistry> findByIsDeleteFalse(Pageable pageable);
-    MachineRegistry findByIsDeleteFalseAndMachineId(String machineId);
+    MachineRegistry findByMachineId(String machineId);
 
     @Modifying
     @Transactional

+ 9 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/cluster/service/crud/MachineCrudService.java

@@ -15,17 +15,20 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class MachineCrudService implements CrudOps<MachineRegistry> {
-    private MachineRegistryRepository machineRegistryRepository;
+    private MachineRegistryRepository machineRepository;
 
-    public MachineCrudService(MachineRegistryRepository machineRegistryRepository) {
-        this.machineRegistryRepository = machineRegistryRepository;
+    public MachineCrudService(MachineRegistryRepository machineRepository) {
+        this.machineRepository = machineRepository;
     }
 
     @Override
     public void addOrModify(MachineRegistry machineRegistry) throws Exception {
         // 重复 machineId 则更新
-        machineRegistry.setIsDelete(false);
-        machineRegistryRepository.save(machineRegistry);
+        MachineRegistry machineEntity = machineRepository.findByMachineId(machineRegistry.getMachineId());
+        if (machineEntity == null) {
+            machineRegistry.setIsDelete(false);
+            machineRepository.save(machineRegistry);
+        }
     }
 
     @Override
@@ -34,7 +37,7 @@ public class MachineCrudService implements CrudOps<MachineRegistry> {
         PageRequest pageRequest =
                 PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
 
-        Page<MachineRegistry> page1 = machineRegistryRepository.findByIsDeleteFalse(pageRequest);
+        Page<MachineRegistry> page1 = machineRepository.findByIsDeleteFalse(pageRequest);
         PageList<MachineRegistry> pageList = new PageList<>();
         pageList.setTotalSize(page1.getTotalElements());
         pageList.setTotalPages(page1.getTotalPages());

+ 22 - 28
scripts/test.json

@@ -1,32 +1,26 @@
 {
-  "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/"
   },
-  "runningConfig":{
-    "httpPort":8002,
-    "healthCheck":"/health",
-    "logs":[
-      {
-        "type":"console",
-        "level":"info"
-      },
-      {
-        "type":"console",
-        "level":"info"
-      }
-    ]
+  "deployConfig": {
+    "machineIds": ["5d1a727991f34d3a9c1220a1899e6ebd"],
+    "packerType": "docker"
   },
-  "notifier":"ding-dev"
+  "runningConfig": {
+    "logs": []
+  },
+  "notifier": "ding-dev"
 }