reghao 5 лет назад
Родитель
Сommit
2ee70367db
50 измененных файлов с 589 добавлено и 319 удалено
  1. 6 10
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppBuild.java
  2. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppCompile.java
  3. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppPack.java
  4. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppUpdate.java
  5. 24 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/BuildResult.java
  6. 9 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/BuildStage.java
  7. 9 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/AuthType.java
  8. 20 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/CompilerConfig.java
  9. 9 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/CompilerType.java
  10. 19 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/PackerConfig.java
  11. 9 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/PackerType.java
  12. 19 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/RepoConfig.java
  13. 9 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/RepoType.java
  14. 2 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/AppDeploy.java
  15. 14 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/DeployResult.java
  16. 17 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/RunningConfig.java
  17. 10 25
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/log/BuildLog.java
  18. 6 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/BuildLogRepository.java
  19. 5 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/CommitLogRepository.java
  20. 10 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/LogRepository.java
  21. 9 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/BuildService.java
  22. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/LogManager.java
  23. 4 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/OrchestrateService.java
  24. 10 10
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/StatusManager.java
  25. 77 62
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java
  26. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDeployPipeline.java
  27. 18 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDispatcher.java
  28. 87 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildTask.java
  29. 2 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/compiler/CodeCompiler.java
  30. 12 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/compiler/MavenCompiler.java
  31. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/compiler/NullCompiler.java
  32. 11 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/compiler/ShellCompiler.java
  33. 4 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/CodePacker.java
  34. 10 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/DockerPack.java
  35. 11 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/ZipPack.java
  36. 0 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/ChangedFile.java
  37. 7 7
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/CommitLog.java
  38. 19 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/GitImpl.java
  39. 14 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/SvnImpl.java
  40. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/SharedEntityChecker.java
  41. 0 36
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployTask.java
  42. 19 34
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java
  43. 40 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/DeployTask.java
  44. 12 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/log/LogConsumer.java
  45. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppBuildVO.java
  46. 6 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployResult.java
  47. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildLogVO.java
  48. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployLogVO.java
  49. 1 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3BakLog.java
  50. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/JwtTokenFilter.java

+ 6 - 10
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppBuild.java

@@ -1,5 +1,8 @@
 package cn.reghao.autodop.dmaster.app.entity.build;
 
+import cn.reghao.autodop.dmaster.app.entity.build.tools.CompilerConfig;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.PackerConfig;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.RepoConfig;
 import lombok.Data;
 
 import javax.persistence.*;
@@ -9,15 +12,8 @@ import javax.persistence.*;
  * @date 2020-05-13 16:40:22
  */
 @Data
-@Embeddable
 public class AppBuild {
-    @ManyToOne(cascade = CascadeType.PERSIST)
-    @JoinColumn(name = "app_update_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private AppUpdate appUpdate;
-    @ManyToOne(cascade = CascadeType.PERSIST)
-    @JoinColumn(name = "app_compile_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private AppCompile appCompile;
-    @ManyToOne(cascade = CascadeType.PERSIST)
-    @JoinColumn(name = "app_pack_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private AppPack appPack;
+    private RepoConfig repoConfig;
+    private CompilerConfig compilerConfig;
+    private PackerConfig packerConfig;
 }

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppCompile.java

@@ -14,6 +14,7 @@ import javax.persistence.Entity;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Entity
+@Deprecated
 public class AppCompile extends BaseEntity {
     private String hostId;
     private String compilerType;

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppPack.java

@@ -14,6 +14,7 @@ import javax.persistence.Entity;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Entity
+@Deprecated
 public class AppPack extends BaseEntity {
     private String packerType;
     @Column(nullable = false, unique = true)

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppUpdate.java

@@ -15,6 +15,7 @@ import javax.persistence.Lob;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Entity
+@Deprecated
 public class AppUpdate extends BaseEntity {
     private String repoType;
     @Column(nullable = false, unique = true)

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

@@ -0,0 +1,24 @@
+package cn.reghao.autodop.dmaster.app.entity.build;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 应用构建结果
+ *
+ * @author reghao
+ * @date 2021-02-05 23:49:55
+ */
+@Data
+public class BuildResult {
+    private String appId;
+    private BuildStage stage;
+    private boolean isUpdate;
+    private String commitId;
+    private String packagePath;
+    private long updateTotalTime;
+    private long compileTotalTime;
+    private long packTotalTime;
+    private LocalDateTime buildTime;
+}

+ 9 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/BuildStage.java

@@ -0,0 +1,9 @@
+package cn.reghao.autodop.dmaster.app.entity.build;
+
+/**
+ * @author reghao
+ * @date 2021-02-05 23:56:58
+ */
+public enum BuildStage {
+    update, compile, pack, done
+}

+ 9 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/AuthType.java

@@ -0,0 +1,9 @@
+package cn.reghao.autodop.dmaster.app.entity.build.tools;
+
+/**
+ * @author reghao
+ * @date 2021-02-05 18:50:01
+ */
+public enum AuthType {
+    http, ssh
+}

+ 20 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/CompilerConfig.java

@@ -0,0 +1,20 @@
+package cn.reghao.autodop.dmaster.app.entity.build.tools;
+
+import lombok.Data;
+
+/**
+ * 编译器配置
+ *
+ * @author reghao
+ * @date 2021-02-05 17:37:28
+ */
+@Data
+public class CompilerConfig {
+    private String name;
+    private CompilerType type;
+    private String homePath;
+    private String binPath;
+    private String version;
+    private String env;
+    private String compileCmd;
+}

+ 9 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/CompilerType.java

@@ -0,0 +1,9 @@
+package cn.reghao.autodop.dmaster.app.entity.build.tools;
+
+/**
+ * @author reghao
+ * @date 2021-02-05 22:56:38
+ */
+public enum CompilerType {
+    shell, dotnet, maven, npm, none
+}

+ 19 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/PackerConfig.java

@@ -0,0 +1,19 @@
+package cn.reghao.autodop.dmaster.app.entity.build.tools;
+
+import lombok.Data;
+
+/**
+ * 打包配置
+ *
+ * @author reghao
+ * @date 2020-05-13 16:40:22
+ */
+@Data
+public class PackerConfig {
+    private String name;
+    private PackerType type;
+    // 打包后的应用存放的位置,可以是一个本地目录,也可以是一个网络位置
+    // 根据打包类型来确定
+    private String targetPath;
+    private String dockerfile;
+}

+ 9 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/PackerType.java

@@ -0,0 +1,9 @@
+package cn.reghao.autodop.dmaster.app.entity.build.tools;
+
+/**
+ * @author reghao
+ * @date 2021-02-05 22:59:26
+ */
+public enum PackerType {
+    docker, zip
+}

+ 19 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/RepoConfig.java

@@ -0,0 +1,19 @@
+package cn.reghao.autodop.dmaster.app.entity.build.tools;
+
+import lombok.Data;
+
+/**
+ * 仓库配置
+ *
+ * @author reghao
+ * @date 2020-05-13 22:50:38
+ */
+@Data
+public class RepoConfig {
+    private String name;
+    private RepoType type;
+    private AuthType authType;
+    private String username;
+    private String password;
+    private String rsaPrikey;
+}

+ 9 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/tools/RepoType.java

@@ -0,0 +1,9 @@
+package cn.reghao.autodop.dmaster.app.entity.build.tools;
+
+/**
+ * @author reghao
+ * @date 2021-02-05 22:50:41
+ */
+public enum RepoType {
+    git, svn
+}

+ 2 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/AppDeploy.java

@@ -11,13 +11,9 @@ import java.util.Set;
  * @date 2020-05-13 16:59:20
  */
 @Data
-@Embeddable
 public class AppDeploy {
-    @ElementCollection(fetch = FetchType.EAGER)
-    private Set<String> hosts;
-    /*@ManyToOne(cascade = CascadeType.DETACH)
-    @JoinColumn(name = "machine_registry_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private MachineRegistry machineRegistry;*/
+    private String runningScript;
     // 绝对路径
     private String runningDir;
+    private MachineRegistry machineRegistry;
 }

+ 14 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/DeployResult.java

@@ -0,0 +1,14 @@
+package cn.reghao.autodop.dmaster.app.entity.deploy;
+
+import lombok.Data;
+
+/**
+ * 应用部署结果
+ *
+ * @author reghao
+ * @date 2021-02-05 23:59:05
+ */
+@Data
+public class DeployResult {
+    private String appId;
+}

+ 17 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/RunningConfig.java

@@ -0,0 +1,17 @@
+package cn.reghao.autodop.dmaster.app.entity.deploy;
+
+import cn.reghao.autodop.common.dagent.machine.api.data.MachineRegistry;
+import lombok.Data;
+
+/**
+ * 应用运行配置
+ *
+ * @author reghao
+ * @date 2021-02-05 23:30:27
+ */
+@Data
+public class RunningConfig {
+    private MachineRegistry machineRegistry;
+    private String runningHome;
+    private String script;
+}

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

@@ -1,14 +1,11 @@
 package cn.reghao.autodop.dmaster.app.entity.log;
 
-import cn.reghao.autodop.common.orm.BaseEntity;
-import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
-import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
-import cn.reghao.autodop.dmaster.app.service.build.tools.updater.CommitLog;
+import cn.reghao.autodop.common.orm.BaseDocument;
+import cn.reghao.autodop.dmaster.app.entity.build.BuildStage;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
 
-import javax.persistence.*;
 import java.time.LocalDateTime;
 
 /**
@@ -17,30 +14,18 @@ import java.time.LocalDateTime;
  * @author reghao
  * @date 2020-03-10 11:22:05
  */
-@NoArgsConstructor
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Entity
-public class BuildLog extends BaseEntity {
-    // 0 - 成功 1 - 失败 2 - 未更改
+@Document
+public class BuildLog extends BaseDocument {
+    // 0 - 成功 1 - 失败
     private int statusCode;
-    private String msg;
-    @Column(length = 1024)
     private String errDetail;
-
     private String appId;
-    private String appType;
-    private String env;
-    @ManyToOne(cascade = CascadeType.DETACH)
-    @JoinColumn(name = "commit_log_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private CommitLog commitLog;
-    @ManyToOne(cascade = CascadeType.DETACH)
-    @JoinColumn(name = "app_compile_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private AppCompile appCompile;
-    @ManyToOne(cascade = CascadeType.DETACH)
-    @JoinColumn(name = "app_pack_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
-    private AppPack appPack;
-    private String appPath;
+    private BuildStage stage;
+    private boolean isUpdate;
+    private String commitId;
+    private String packagePath;
     private long updateTotalTime;
     private long compileTotalTime;
     private long packTotalTime;

+ 6 - 13
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/BuildLogRepository.java

@@ -1,25 +1,18 @@
 package cn.reghao.autodop.dmaster.app.repository.log;
 
-import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
-import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
-import cn.reghao.autodop.dmaster.app.service.build.tools.updater.CommitLog;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.mongodb.repository.MongoRepository;
 
 /**
  * @author reghao
  * @date 2020-01-21 14:53:03
  */
-public interface BuildLogRepository extends JpaRepository<BuildLog, Long>, JpaSpecificationExecutor<BuildLog> {
-    BuildLog findFirstByIsDeleteFalseAndAppIdOrderByCreateTimeDesc(String appId);
+public interface BuildLogRepository extends MongoRepository<BuildLog, Long> {
+    BuildLog findFirstByAppIdOrderByCreateTimeDesc(String appId);
     // 应用成功构建的列表
-    Page<BuildLog> findByIsDeleteFalseAndAppIdAndStatusCode(String appId, int statusCode, Pageable pageable);
-    // 应用每个版本正确构建的日志只有唯一一条记录
-    BuildLog findByIsDeleteFalseAndCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
-            CommitLog commitLog, AppCompile appCompile, AppPack appPack, String appId, int statusCode);
-    Page<BuildLog> findByIsDeleteFalseAndEnv(String env, Pageable pageable);
-    Page<BuildLog> findByIsDeleteFalseAndEnvAndAppId(String env, String appId, Pageable pageable);
+    Page<BuildLog> findByAppIdAndStatusCode(String appId, int statusCode, Pageable pageable);
+    Page<BuildLog> find(Pageable pageable);
+    Page<BuildLog> findByAppId(String appId, Pageable pageable);
 }

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

@@ -3,14 +3,14 @@ package cn.reghao.autodop.dmaster.app.repository.log;
 import cn.reghao.autodop.dmaster.app.service.build.tools.updater.CommitLog;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.mongodb.repository.MongoRepository;
 
 /**
  * @author reghao
  * @date 2020-01-21 14:53:03
  */
-public interface CommitLogRepository extends JpaRepository<CommitLog, Long> {
-    CommitLog findByIsDeleteFalseAndCommitId(String commitId);
-    Page<CommitLog> findByIsDeleteFalseAndEnv(String env, Pageable pageable);
-    Page<CommitLog> findByIsDeleteFalseAndEnvAndAppId(String env, String appId, Pageable pageable);
+public interface CommitLogRepository extends MongoRepository<CommitLog, Long> {
+    CommitLog findByCommitId(String commitId);
+    Page<CommitLog> find(Pageable pageable);
+    Page<CommitLog> findByAppId(String appId, Pageable pageable);
 }

+ 10 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/log/LogRepository.java

@@ -30,15 +30,18 @@ public class LogRepository {
         this.deployLogRepository = deployLogRepository;
     }
 
+    public void saveCommitLog(CommitLog commitLog) {
+    }
+
     @Transactional(rollbackFor = {Exception.class})
     public void saveBuildLog(BuildLog buildLog) {
-        CommitLog commitLog = buildLog.getCommitLog();
+        /*CommitLog commitLog = buildLog.getCommitLog();
         CommitLog entity = commitLogRepository.findByIsDeleteFalseAndCommitId(commitLog.getCommitId());
         if (entity == null) {
-            commitLog.setIsDelete(false);
+            //commitLog.setIsDelete(false);
             LocalDateTime now = LocalDateTime.now();
-            commitLog.setCreateTime(now);
-            commitLog.setUpdateTime(now);
+            *//*commitLog.setCreateTime(now);
+            commitLog.setUpdateTime(now);*//*
             commitLogRepository.save(commitLog);
         } else {
             buildLog.setCommitLog(entity);
@@ -53,12 +56,12 @@ public class LogRepository {
             buildLog.setCreateTime(now);
             buildLog.setUpdateTime(now);
             buildLogRepository.save(buildLog);
-        }
+        }*/
     }
 
     @Transactional(rollbackFor = {Exception.class})
     public void saveDeployLog(DeployLog deployLog) {
-        BuildLog buildLog = deployLog.getBuildLog();
+        /*BuildLog buildLog = deployLog.getBuildLog();
         String commitId = buildLog.getCommitLog().getCommitId();
         CommitLog entity = commitLogRepository.findByIsDeleteFalseAndCommitId(commitId);
         if (entity == null) {
@@ -77,6 +80,6 @@ public class LogRepository {
             deployLogRepository.save(deployLog);
         } else {
             log.error("{} 的 {} 版本构建日志未持久化...", buildLog.getAppId(), commitId);
-        }
+        }*/
     }
 }

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

@@ -56,7 +56,7 @@ public class BuildService {
         // 找出每个 app 最新的部署日志
         List<BuildDeployResult> list = new ArrayList<>();
         for (AppOrchestration app : apps.getContent()) {
-            BuildLog buildLog = buildLogRepository.findFirstByIsDeleteFalseAndAppIdOrderByCreateTimeDesc(app.getAppId());
+            BuildLog buildLog = buildLogRepository.findFirstByAppIdOrderByCreateTimeDesc(app.getAppId());
             if (buildLog != null && buildLog.getStatusCode() == 0) {
                 // 若 app 构建成功,则找出其部署日志
                 List<DeployLog> deployLogs = deployLogRepository.findByIsDeleteFalseAndBuildLog(buildLog);
@@ -75,15 +75,15 @@ public class BuildService {
 
     public PageList<SuccessfullyBuildVO> successfullyBuilds(String appId, PageRequest pageRequest) {
         PageList<SuccessfullyBuildVO> pageList = new PageList<>();
-        Page<BuildLog> buildLogs = buildLogRepository.findByIsDeleteFalseAndAppIdAndStatusCode(appId, 0, pageRequest);
+        Page<BuildLog> buildLogs = buildLogRepository.findByAppIdAndStatusCode(appId, 0, pageRequest);
         pageList.setTotalPages(buildLogs.getTotalPages());
         pageList.setTotalSize(buildLogs.getTotalElements());
         pageList.setHasNext(buildLogs.hasNext());
         pageList.setList(buildLogs.stream()
                 .map(buildLog -> {
-                    String commitId = buildLog.getCommitLog().getCommitId();
-                    String commitMsg = buildLog.getCommitLog().getCommitMsg();
-                    String appPath = buildLog.getAppPath();
+                    String commitId = "buildLog.getCommitLog().getCommitId()";
+                    String commitMsg = "buildLog.getCommitLog().getCommitMsg()";
+                    String appPath = "buildLog.getAppPath()";
                     String buildTime = DatetimeConverter.format(buildLog.getBuildTime());
                     return new SuccessfullyBuildVO(commitId, commitMsg, appPath, buildTime);
                 })
@@ -94,9 +94,9 @@ public class BuildService {
     public PageList<CommitLogVO> commitLogs(String env, String appId, PageRequest pageRequest) {
         Page<CommitLog> commitLogs;
         if (appId != null) {
-            commitLogs = commitLogRepository.findByIsDeleteFalseAndEnvAndAppId(env, appId, pageRequest);
+            commitLogs = commitLogRepository.findByAppId(appId, pageRequest);
         } else {
-            commitLogs = commitLogRepository.findByIsDeleteFalseAndEnv(env, pageRequest);
+            commitLogs = commitLogRepository.find(pageRequest);
         }
 
         PageList<CommitLogVO> pageList = new PageList<>();
@@ -110,9 +110,9 @@ public class BuildService {
     public PageList<BuildLogVO> buildLogs(String env, String appId, PageRequest pageRequest) {
         Page<BuildLog> buildLogs;
         if (appId != null) {
-            buildLogs = buildLogRepository.findByIsDeleteFalseAndEnvAndAppId(env, appId, pageRequest);
+            buildLogs = buildLogRepository.findByAppId(appId, pageRequest);
         } else {
-            buildLogs = buildLogRepository.findByIsDeleteFalseAndEnv(env, pageRequest);
+            buildLogs = buildLogRepository.find(pageRequest);
         }
 
         PageList<BuildLogVO> pageList = new PageList<>();

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

@@ -58,9 +58,9 @@ public class LogManager {
             }
         }
 
-        for (String host : app.getAppDeploy().getHosts()) {
+        /*for (String host : app.getAppDeploy().getHosts()) {
             return null;
-        }
+        }*/
 
         return null;
     }

+ 4 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/OrchestrateService.java

@@ -115,21 +115,21 @@ public class OrchestrateService {
         if (appUpdate == null) {
             throw new Exception(updater + " 不存在...");
         }
-        appBuild.setAppUpdate(appUpdate);
+        //appBuild.setAppUpdate(appUpdate);
 
         String compiler = buildVO.getCompiler();
         AppCompile appCompile = appCompileRepository.findByIsDeleteFalseAndCompilerName(compiler);
         if (appCompile == null) {
             throw new Exception(compiler + " 不存在...");
         }
-        appBuild.setAppCompile(appCompile);
+        //appBuild.setAppCompile(appCompile);
 
         String packer = buildVO.getPacker();
         AppPack appPack = appPackRepository.findByIsDeleteFalseAndPackerName(packer);
         if (appPack == null) {
             throw new Exception(packer + " 不存在...");
         }
-        appBuild.setAppPack(appPack);
+        //appBuild.setAppPack(appPack);
         return appBuild;
     }
 
@@ -170,7 +170,7 @@ public class OrchestrateService {
                 newApp.setCreateTime(LocalDateTime.now());
                 newApp.setUpdateTime(LocalDateTime.now());
                 // 处理共享集合
-                newApp.getAppDeploy().setHosts(null);
+                //newApp.getAppDeploy().setHosts(null);
                 newApp.getAppRunning().setLogs(null);
                 appRepository.save(newApp);
                 break;

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

@@ -32,26 +32,26 @@ public class StatusManager {
 
     public void run(String appId, String commitId) throws DockerException {
         AppOrchestration app = caching.findByAppId(appId);
-        for (String host : app.getAppDeploy().getHosts()) {
-        }
+        /*for (String host : app.getAppDeploy().getHosts()) {
+        }*/
     }
 
     public void start(String appId) throws DockerException {
         AppOrchestration app = caching.findByAppId(appId);
-        for (String host : app.getAppDeploy().getHosts()) {
-        }
+        /*for (String host : app.getAppDeploy().getHosts()) {
+        }*/
     }
 
     public void stop(String appId) throws DockerException {
         AppOrchestration app = caching.findByAppId(appId);
-        for (String host : app.getAppDeploy().getHosts()) {
-        }
+        /*for (String host : app.getAppDeploy().getHosts()) {
+        }*/
     }
 
     public void restart(String appId) throws DockerException {
         AppOrchestration app = caching.findByAppId(appId);
-        for (String host : app.getAppDeploy().getHosts()) {
-        }
+        /*for (String host : app.getAppDeploy().getHosts()) {
+        }*/
     }
 
     public List<AppStatus> status(String env, PageRequest pageRequest) {
@@ -60,8 +60,8 @@ public class StatusManager {
         // TODO 异步处理
         try {
             for (DeployedApp deployedApp : page.getContent()) {
-                for (String host : deployedApp.getApp().getAppDeploy().getHosts()) {
-                }
+                /*for (String host : deployedApp.getApp().getAppDeploy().getHosts()) {
+                }*/
             }
         } catch (Exception e) {
             e.printStackTrace();

+ 77 - 62
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java

@@ -1,20 +1,21 @@
 package cn.reghao.autodop.dmaster.app.service.build;
 
-import cn.reghao.autodop.common.utils.text.TextFile;
 import cn.reghao.autodop.dmaster.app.entity.build.AppBuild;
-import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
-import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
-import cn.reghao.autodop.dmaster.app.entity.build.AppUpdate;
-import cn.reghao.autodop.dmaster.app.constant.CompilerType;
-import cn.reghao.autodop.common.dagent.app.api.data.deploy.PackerType;
-import cn.reghao.autodop.dmaster.app.constant.RepoType;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.CompilerConfig;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.PackerConfig;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.RepoConfig;
 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.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.ProjOrchestration;
+import cn.reghao.autodop.dmaster.app.service.build.tools.compiler.CodeCompiler;
+import cn.reghao.autodop.dmaster.app.service.build.tools.compiler.MavenCompiler;
+import cn.reghao.autodop.dmaster.app.service.build.tools.compiler.NullCompiler;
+import cn.reghao.autodop.dmaster.app.service.build.tools.compiler.ShellCompiler;
+import cn.reghao.autodop.dmaster.app.service.build.tools.packer.CodePacker;
+import cn.reghao.autodop.dmaster.app.service.build.tools.packer.DockerPack;
+import cn.reghao.autodop.dmaster.app.service.build.tools.packer.ZipPack;
 import cn.reghao.autodop.dmaster.app.service.deploy.AppDeployer;
-import cn.reghao.autodop.dmaster.app.service.build.tools.compiler.*;
-import cn.reghao.autodop.dmaster.app.service.build.tools.packer.*;
 import cn.reghao.autodop.dmaster.app.service.build.tools.updater.CodeUpdater;
 import cn.reghao.autodop.dmaster.app.service.build.tools.updater.CommitLog;
 import cn.reghao.autodop.dmaster.app.service.build.tools.updater.GitImpl;
@@ -25,14 +26,13 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
-import java.io.File;
 import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Set;
 
 /**
- * 应用构建部署
+ * 应用构建部署,每个应用持有一个对象
  *
  * @author reghao
  * @date 2019-10-09 10:54:43
@@ -62,6 +62,10 @@ public class AppIntegrate {
         return this.app;
     }
 
+    public String appId() {
+        return app.getAppId();
+    }
+
     /**
      * TODO 若 AppOrchestration 发生变化则重新初始化
      *
@@ -75,7 +79,8 @@ public class AppIntegrate {
 
     private void init() {
         initLocalDir();
-        initBuildDeployConfig();
+        initBuildConfig();
+        initDeployConfig();
     }
 
     private void initLocalDir() {
@@ -84,7 +89,14 @@ public class AppIntegrate {
         appPackDir = SysConfig.packDir + "/" + app.getAppId();
     }
 
-    private void initBuildDeployConfig() {
+    /**
+     * 初始化应用构建配置
+     *
+     * @param
+     * @return
+     * @date 2021-02-05 下午11:01
+     */
+    private void initBuildConfig() {
         AppBuild appBuild;
         ProjOrchestration proj = app.getProj();
         if (proj != null) {
@@ -95,54 +107,64 @@ public class AppIntegrate {
         }
 
         // 初始化更新配置
-        AppUpdate appUpdate = appBuild.getAppUpdate();
-        if (appUpdate.getRepoType().equals(RepoType.svn.name())) {
-            codeUpdater = new SvnImpl(appUpdate.getUsername(), appUpdate.getPassword());
-        } else if (appUpdate.getRepoType().equals(RepoType.git.name())) {
-            if ("rsa".equals(appUpdate.getAuthType())) {
-                File tmp = new File(System.getProperty("java.io.tmpdir") + "/rsa_prikey");
-                try {
-                    TextFile.write(tmp, appUpdate.getRsaPrikey());
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-                codeUpdater = new GitImpl(tmp.getAbsolutePath());
-            } else if ("password".equals(appUpdate.getAuthType())) {
-                codeUpdater = new GitImpl(appUpdate.getUsername(), appUpdate.getPassword());
-            }
+        RepoConfig repoConfig = appBuild.getRepoConfig();
+        switch (repoConfig.getType()) {
+            case git:
+                codeUpdater = new GitImpl(repoConfig);
+                break;
+            case svn:
+                codeUpdater = new SvnImpl(repoConfig);
+                break;
+            default:
         }
 
         // 初始化编译配置
-        AppCompile appCompile = appBuild.getAppCompile();
-        if (appCompile.getCompilerType().equals(CompilerType.shell.name())) {
-            codeCompiler = new ShellCompiler(appCompile);
-        } else if (appCompile.getCompilerType().equals(CompilerType.maven.name())) {
-            codeCompiler = new MavenCompiler("");
-        } else if (appCompile.getCompilerType().equals(CompilerType.none.name())) {
-            // 静态应用,不需要编译器
-            codeCompiler = new NullCompiler();
+        CompilerConfig compilerConfig = appBuild.getCompilerConfig();
+        switch (compilerConfig.getType()) {
+            case shell:
+                codeCompiler = new ShellCompiler(compilerConfig);
+                break;
+            case dotnet:
+                break;
+            case maven:
+                codeCompiler = new MavenCompiler(compilerConfig);
+                break;
+            case npm:
+                break;
+            case none:
+                codeCompiler = new NullCompiler();
+                break;
+            default:
         }
 
         // 初始化打包配置
-        AppPack appPack = appBuild.getAppPack();
-        if (appPack.getPackerType().equals(PackerType.docker.name())) {
-            codePacker = new DockerPack(appPack.getLocation());
-        } else if (appPack.getPackerType().equals(PackerType.zip.name())) {
-            codePacker = new ZipPack(appPackDir);
+        PackerConfig packerConfig = appBuild.getPackerConfig();
+        switch (packerConfig.getType()) {
+            case docker:
+                codePacker = new DockerPack(packerConfig);
+                break;
+            case zip:
+                codePacker = new ZipPack(packerConfig);
+                break;
+            default:
         }
     }
 
+    private void initDeployConfig() {
+
+    }
+
     /* 构建:更新 -> 编译 -> 打包 */
     // TODO 处理集群部署时,不同节点使用不同配置文件的问题
     public BuildLog build() {
         BuildLog buildLog = new BuildLog();
-        buildLog.setAppId(app.getAppId());
+        /*buildLog.setAppId(app.getAppId());
         buildLog.setAppType(app.getAppType());
         buildLog.setEnv(app.getEnv());
         buildLog.setAppCompile(app.getAppBuild().getAppCompile());
-        buildLog.setAppPack(app.getAppBuild().getAppPack());
+        buildLog.setAppPack(app.getAppBuild().getAppPack());*/
 
-        boolean isUpdate;
+        /*boolean isUpdate;
         try {
             long start = System.currentTimeMillis();
             isUpdate = update(buildLog);
@@ -185,18 +207,11 @@ public class AppIntegrate {
 
         buildLog.setMsg("构建成功");
         buildLog.setStatusCode(0);
-        buildLog.setBuildTime(LocalDateTime.now());
+        buildLog.setBuildTime(LocalDateTime.now());*/
         return buildLog;
     }
 
-    private void buildException(BuildLog buildLog, Exception e) {
-        buildLog.setStatusCode(1);
-        buildLog.setMsg("构建失败");
-        buildLog.setErrDetail(ExceptionUtil.errorMsg(e));
-        buildLog.setBuildTime(LocalDateTime.now());
-    }
-
-    private boolean update(BuildLog buildLog) throws Exception {
+    public CommitLog update() throws Exception {
         String remote;
         String branch;
         String local = SysConfig.localRepo + "/" + app.getAppId();
@@ -217,18 +232,17 @@ public class AppIntegrate {
         // TODO 代码版本未更改的情况下,是否应该构建
         if (updateStatus.isUpdated || app.isAlwaysBuild()) {
             lastCommitLog = updateStatus.getLastCommitLog();
-            buildLog.setCommitLog(lastCommitLog);
+            //buildLog.setCommitLog(lastCommitLog);
             BuilderUtil.copyToCompileDir(local, app);
-            return true;
-        } else {
-            return false;
         }
+
+        return null;
     }
 
     private UpdateStatus update0(String remote, String branch, String local) throws Exception {
         CommitLog current = codeUpdater.update(remote, branch, local);
         current.setAppId(app.getAppId());
-        current.setEnv(app.getEnv());
+        //current.setEnv(app.getEnv());
         if (lastCommitLog != null) {
             if (lastCommitLog.getCommitId().equals(current.getCommitId())) {
                 return new UpdateStatus(current, false);
@@ -241,15 +255,16 @@ public class AppIntegrate {
         return new UpdateStatus(current, true);
     }
 
-    private void compile() throws Exception {
+    public void compile() throws Exception {
         // TODO 通过脚本调用编译器时会卡住
-        codeCompiler.compile(app.getDirname(), appCompileDir + app.getCompileDir(), app.getEnv());
+        codeCompiler.compile(app.getDirname(), appCompileDir + app.getCompileDir());
     }
 
-    private void pack(BuildLog buildLog) throws Exception {
+    public String pack() throws Exception {
         String appEntryDir = appCompileDir + app.getCompileDir();
         String appPath = codePacker.pack(app.getAppId(), lastCommitLog.getCommitId(), appEntryDir);
-        buildLog.setAppPath(appPath);
+        return appPath;
+        //buildLog.setAppPath(appPath);
     }
 
     /* 部署 */

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDeployPipeline.java

@@ -39,9 +39,9 @@ public class BuildDeployPipeline implements Callable<BuildDeployResult> {
     public BuildDeployResult call() {
         BuildLog buildLog = appIntegrate.build();
         // 更新代码成功后才持久化构建日志
-        if (buildLog.getCommitLog() != null) {
+        /*if (buildLog.getCommitLog() != null) {
             logConsumer.addBuildLog(buildLog);
-        }
+        }*/
 
         if (buildLog.getStatusCode() == 0 && isDeploy) {
             List<DeployLog> deployLogs = appIntegrate.deploy(buildLog, null);

+ 18 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDispatcher.java

@@ -6,6 +6,7 @@ import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
 import cn.reghao.autodop.dmaster.app.constant.NotifierType;
 import cn.reghao.autodop.dmaster.app.entity.Notification;
 import cn.reghao.autodop.dmaster.app.entity.build.AppBuild;
+import cn.reghao.autodop.dmaster.app.entity.build.BuildResult;
 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.log.BuildLogRepository;
@@ -28,7 +29,7 @@ import java.util.concurrent.*;
 import java.util.stream.Collectors;
 
 /**
- * 应用构建分发
+ * 应用构建部署分发
  *
  * @author reghao
  * @date 2019-11-12 17:20:27
@@ -36,13 +37,13 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class BuildDispatcher {
+    private Map<String, AppIntegrate> appIntegrateMap;
     private CommitLogRepository commitLogRepository;
     private BuildLogRepository buildLogRepository;
     private DeployLogRepository deployLogRepository;
     private AppDeployer appDeployer;
     // TODO 多线程访问的集合
     private Set<String> onBuilding;
-    private Map<String, AppIntegrate> map;
     private OrchestrationCache caching;
     private LogConsumer logConsumer;
     private ExecutorService threadPool;
@@ -58,13 +59,22 @@ public class BuildDispatcher {
         this.deployLogRepository = deployLogRepository;
         this.appDeployer = appDeployer;
         this.onBuilding = new HashSet<>();
-        this.map = new HashMap<>();
+        this.appIntegrateMap = new HashMap<>();
         this.caching = caching;
         this.logConsumer = new LogConsumer(logDAO);
         this.threadPool = ThreadPoolWrapper.threadPool("build");
         threadPool.submit(logConsumer);
     }
 
+    public BuildResult build(String appId) {
+        AppIntegrate appIntegrate = appIntegrateMap.get(appId);
+        if (appIntegrate != null) {
+
+        }
+
+        return null;
+    }
+
     public BuildDeployResult buildAndDeploy(String appId, boolean isDeploy) {
         AppOrchestration app = caching.findByAppId(appId);
         return dispatch(app, isDeploy);
@@ -111,12 +121,13 @@ public class BuildDispatcher {
 
     public BuildDeployResult deploy(String appId, String commitId) {
         AppOrchestration app = caching.findByAppId(appId);
-        CommitLog commitLog = commitLogRepository.findByIsDeleteFalseAndCommitId(commitId);
+        CommitLog commitLog = commitLogRepository.findByCommitId(commitId);
         AppBuild appBuild = app.getAppBuild();
-        BuildLog buildLog = buildLogRepository.findByIsDeleteFalseAndCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(
-                commitLog, appBuild.getAppCompile(), appBuild.getAppPack(), appId, 0);
+        //BuildLog buildLog = buildLogRepository.findByIsDeleteFalseAndCommitLogAndAppCompileAndAppPackAndAppIdAndStatusCode(commitLog, appBuild.getAppCompile(), appBuild.getAppPack(), appId, 0);
+        BuildLog buildLog = new BuildLog();
         if (buildLog != null) {
-            Set<String> hosts = app.getAppDeploy().getHosts();
+            //Set<String> hosts = app.getAppDeploy().getHosts();
+            Set<String> hosts = new HashSet<>();
             // 当前 commit 最近一次部署时已部署的主机
             Set<String> deployedHosts = deployLogRepository.findByIsDeleteFalseAndBuildLog(buildLog).stream()
                     .filter(deployLog -> deployLog.getStatusCode() != 0)

+ 87 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildTask.java

@@ -0,0 +1,87 @@
+package cn.reghao.autodop.dmaster.app.service.build;
+
+import cn.reghao.autodop.dmaster.app.entity.build.BuildResult;
+import cn.reghao.autodop.dmaster.app.entity.build.BuildStage;
+import cn.reghao.autodop.dmaster.app.entity.log.BuildLog;
+import cn.reghao.autodop.dmaster.app.service.build.tools.updater.CommitLog;
+import cn.reghao.autodop.dmaster.app.service.log.LogConsumer;
+import cn.reghao.autodop.dmaster.common.exception.ExceptionUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.time.LocalDateTime;
+import java.util.concurrent.Callable;
+
+/**
+ * 更新 -> 编译 -> 打包
+ * 每个应用都对应一个构建任务
+ *
+ * @author reghao
+ * @date 2019-11-16 21:39:53
+ */
+@Slf4j
+public class BuildTask implements Callable<BuildLog> {
+    private AppIntegrate appIntegrate;
+    private LogConsumer logConsumer;
+
+    public BuildTask(AppIntegrate appIntegrate, LogConsumer logConsumer) {
+        this.appIntegrate = appIntegrate;
+        this.logConsumer = logConsumer;
+    }
+
+    /**
+     * 更新 -> 编译 -> 打包 -> 部署流水线
+     *
+     * @param
+     * @return 返回 JSON
+     * @date 2019-11-07 下午10:14
+     */
+    @Override
+    public BuildLog call() {
+        BuildLog buildLog = new BuildLog();
+        buildLog.setAppId(appIntegrate.appId());
+
+        long start = System.currentTimeMillis();
+        try {
+            CommitLog commitLog = appIntegrate.update();
+            buildLog.setUpdate(commitLog.isUpdate());
+            buildLog.setCommitId(commitLog.getCommitId());
+            buildLog.setUpdateTotalTime(System.currentTimeMillis()-start);
+            logConsumer.addCommitLog(commitLog);
+        } catch (Exception e) {
+            buildException(buildLog, BuildStage.update, e);
+            return buildLog;
+        }
+
+        try {
+            start = System.currentTimeMillis();
+            appIntegrate.compile();
+            buildLog.setCompileTotalTime(System.currentTimeMillis()-start);
+        } catch (Exception e) {
+            buildException(buildLog, BuildStage.compile, e);
+            return buildLog;
+        }
+
+        try {
+            start = System.currentTimeMillis();
+            String packagePath = appIntegrate.pack();
+            buildLog.setPackagePath(packagePath);
+            buildLog.setPackTotalTime(System.currentTimeMillis()-start);
+        } catch (Exception e) {
+            buildException(buildLog, BuildStage.pack, e);
+            return buildLog;
+        }
+        
+        buildLog.setStage(BuildStage.done);
+        buildLog.setStatusCode(0);
+        buildLog.setBuildTime(LocalDateTime.now());
+        logConsumer.addBuildLog(buildLog);
+        return buildLog;
+    }
+
+    private void buildException(BuildLog log, BuildStage stage, Exception e) {
+        log.setStage(stage);
+        log.setStatusCode(1);
+        log.setErrDetail(ExceptionUtil.errorMsg(e));
+        log.setBuildTime(LocalDateTime.now());
+    }
+}

+ 2 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/compiler/CodeCompiler.java

@@ -9,10 +9,8 @@ package cn.reghao.autodop.dmaster.app.service.build.tools.compiler;
 public interface CodeCompiler {
     /**
      * @param appName 应用名字
-     * @param appHome 应用目录
-     * @param env 应用环境
-     * @return
+     * @param appCompileHome 应用代码编译目录
      * @date 2020-01-21 下午4:20
      */
-    void compile(String appName, String appHome, String env) throws Exception;
+    void compile(String appName, String appCompileHome) throws Exception;
 }

+ 12 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/compiler/MavenCompiler.java

@@ -1,5 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.compiler;
 
+import cn.reghao.autodop.dmaster.app.entity.build.tools.CompilerConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.maven.shared.invoker.*;
 
@@ -17,21 +18,23 @@ import java.util.List;
  */
 @Slf4j
 public class MavenCompiler implements CodeCompiler {
+    private String env;
     private InvocationRequest request;
     private Invoker invoker;
     private List<String> compileLog;
 
-    public MavenCompiler(String mvnHome) {
-        System.setProperty("maven.home", mvnHome);
+    public MavenCompiler(CompilerConfig compilerConfig) {
+        System.setProperty("maven.home", compilerConfig.getHomePath());
+        this.env = compilerConfig.getEnv();
         this.request = new DefaultInvocationRequest();
         this.invoker = new DefaultInvoker();
         this.compileLog = new ArrayList<>();
     }
 
     @Override
-    public void compile(String appName, String appDir, String env) throws Exception {
-        String pomPath = appDir + "/pom.xml";
-        setInvocationRequest(appName, pomPath, env);
+    public void compile(String appName, String appCompileHome) throws Exception {
+        String pomPath = appCompileHome + "/pom.xml";
+        setInvocationRequest(appName, pomPath);
         InvocationResult result = invoker.execute(request);
         if (result.getExitCode() != 0) {
             log.info("构建失败... {}", result.getExecutionException().getMessage());
@@ -48,7 +51,7 @@ public class MavenCompiler implements CodeCompiler {
      * @return
      * @date 2020-05-12 上午10:36
      */
-    private void setInvocationRequest(String appName, String pomPath, String env) {
+    private void setInvocationRequest(String appName, String pomPath) {
         // 清空前一次构建的日志
         compileLog.clear();
         request.setPomFile(new File(pomPath));
@@ -67,7 +70,8 @@ public class MavenCompiler implements CodeCompiler {
         String mvnHome = "/home/reghao/dev/tools/maven-3.6.0";
         String appdir = "/home/reghao/code/aha/spiderlab";
 
-        CodeCompiler codeCompiler = new MavenCompiler(mvnHome);
-        codeCompiler.compile("crawler", appdir, "test");
+        CompilerConfig compilerConfig = new CompilerConfig();
+        CodeCompiler codeCompiler = new MavenCompiler(compilerConfig);
+        codeCompiler.compile("crawler", appdir);
     }
 }

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

@@ -8,6 +8,6 @@ package cn.reghao.autodop.dmaster.app.service.build.tools.compiler;
  */
 public class NullCompiler implements CodeCompiler {
     @Override
-    public void compile(String appName, String appDir, String env) throws Exception {
+    public void compile(String appId, String appCompileHome) throws Exception {
     }
 }

+ 11 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/compiler/ShellCompiler.java

@@ -4,6 +4,7 @@ import cn.reghao.autodop.common.shell.ShellExecutor;
 import cn.reghao.autodop.common.shell.ShellResult;
 import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.CompilerConfig;
 
 /**
  * 编译代码
@@ -12,17 +13,23 @@ import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
  * @date 2019-10-12 23:55:01
  */
 public class ShellCompiler implements CodeCompiler {
-    private String cmd;
     private ShellExecutor shell;
+    private final String compileCmd;
+
+    public ShellCompiler(CompilerConfig compilerConfig) {
+        this.compileCmd = compilerConfig.getCompileCmd();
+        this.shell = new ShellExecutor();
+    }
 
     public ShellCompiler(AppCompile appCompile) {
-        this.cmd = appCompile.getCompilerHome() + "/" + appCompile.getCompileCmd();
+        //this.cmd = appCompile.getCompilerHome() + "/" + appCompile.getCompileCmd();
         this.shell = new ShellExecutor();
+        this.compileCmd = "compilerConfig.getCompileCmd()";
     }
 
     @Override
-    public void compile(String appName, String appHome, String env) throws Exception {
-        ShellResult result = shell.execCommand(appHome, cmd, true);
+    public void compile(String appName, String appCompileHome) throws Exception {
+        ShellResult result = shell.execCommand(appCompileHome, compileCmd, true);
         if (result.hasError()) {
             throw new Exception(JsonConverter.objectToJson(result.getStderr()));
         }

+ 4 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/CodePacker.java

@@ -11,10 +11,12 @@ public interface CodePacker {
     /**
      * 打包方式确定运行方式
      *
+     * @param appId 应用 ID
      * @param commitId 应用版本
-     * @return 返回 appPath
+     * @param appCompileHome 应用编译目录
+     * @return 返回可执行应用的路径
      *
      * @date 2020-01-21 下午4:19
      */
-    String pack(String appId, String commitId, String appEntryDir) throws Exception;
+    String pack(String appId, String commitId, String appCompileHome) throws Exception;
 }

+ 10 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/DockerPack.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.packer;
 
 import cn.reghao.autodop.common.dockerc.Docker;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.PackerConfig;
 
 /**
  * 打包为 docker 应用
@@ -9,21 +10,23 @@ import cn.reghao.autodop.common.dockerc.Docker;
  * @date 2019-10-14 22:02:04
  */
 public class DockerPack implements CodePacker {
-    private String appRootPath;
+    private String dockerfile;
+    private String targetPath;
 
-    public DockerPack(String appRootPath) {
-        this.appRootPath = appRootPath;
+    public DockerPack(PackerConfig packerConfig) {
+        this.dockerfile = packerConfig.getDockerfile();
+        this.targetPath = packerConfig.getTargetPath();
     }
 
     @Override
-    public String pack(String appId, String version, String appEntryDir) throws Exception {
+    public String pack(String appId, String commitId, String appCompileHome) throws Exception {
         try (Docker docker = new Docker()) {
-            String repo = appRootPath + "/" + appId;
-            String image = repo + ":" + version;
+            String repo = targetPath + "/" + appId;
+            String image = repo + ":" + commitId;
 
             // Dockerfile 默认在 appEntryDir 中
             // TODO Dockerfile 错误导致不能成功构建时,不会抛出异常
-            docker.build(image, appEntryDir);
+            docker.build(image, appCompileHome, dockerfile);
             // TODO 有时不能成功 push,特别是 push 到远程主机上时
             docker.push(image);
             // TODO try-with-resource 中不需要显式调用 close

+ 11 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/packer/ZipPack.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.packer;
 
 import cn.reghao.autodop.common.utils.compression.ZipFiles;
+import cn.reghao.autodop.dmaster.app.entity.build.tools.PackerConfig;
 import lombok.extern.slf4j.Slf4j;
 
 import java.io.File;
@@ -12,21 +13,24 @@ import java.io.File;
 @Slf4j
 public class ZipPack implements CodePacker {
     private final String SUFFIX = ".zip";
-    private String packDir;
+    private String targetPath;
+
+    public ZipPack(PackerConfig packerConfig) {
+        this.targetPath = packerConfig.getTargetPath();
+    }
 
     public ZipPack(String packDir) {
-        this.packDir = packDir;
+        this.targetPath = packDir;
     }
 
     @Override
-    public String pack(String appId, String version, String appEntryDir) throws Exception {
-        String tag = appId + "_" + version + SUFFIX;
-        String dst = packDir + "/" + tag;
+    public String pack(String appId, String commitId, String appCompileHome) throws Exception {
+        String tag = appId + "_" + commitId + SUFFIX;
+        String dst = targetPath + "/" + tag;
         if (new File(dst).exists()) {
             return null;
         }
-        ZipFiles.zip(new File(appEntryDir), dst);
-
+        ZipFiles.zip(new File(appCompileHome), dst);
         return null;
     }
 }

+ 0 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/ChangedFile.java

@@ -2,14 +2,11 @@ package cn.reghao.autodop.dmaster.app.service.build.tools.updater;
 
 import lombok.Data;
 
-import javax.persistence.*;
-
 /**
  * @author reghao
  * @date 2020-05-14 10:49:49
  */
 @Data
-@Embeddable
 public class ChangedFile {
     private String changeType;
     private String oldFilePath;

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

@@ -1,10 +1,10 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.updater;
 
-import cn.reghao.autodop.common.orm.BaseEntity;
+import cn.reghao.autodop.common.orm.BaseDocument;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springframework.data.mongodb.core.mapping.Document;
 
-import javax.persistence.*;
 import java.util.List;
 
 /**
@@ -15,18 +15,18 @@ import java.util.List;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Entity
-public class CommitLog extends BaseEntity {
+@Document
+public class CommitLog extends BaseDocument {
     private String appId;
-    private String env;
+    // 代码是否更新
+    private boolean isUpdate;
     private String remote;
     private String branch;
+    private String local;
     private String commitId;
     private String commitAuthor;
-    @Column(length = 1024)
     private String commitMsg;
     // 毫秒级时间戳
     private long commitTime;
-    @ElementCollection(fetch = FetchType.EAGER)
     private List<ChangedFile> changedFiles;
 }

+ 19 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/GitImpl.java

@@ -1,5 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.updater;
 
+import cn.reghao.autodop.dmaster.app.entity.build.tools.RepoConfig;
 import com.jcraft.jsch.JSch;
 import com.jcraft.jsch.JSchException;
 import com.jcraft.jsch.Session;
@@ -32,10 +33,26 @@ import java.util.Properties;
  * @date 2019-10-12 22:22:00
  */
 public class GitImpl implements CodeUpdater {
-    private SshSessionFactory sshSessionFactory;
     private UsernamePasswordCredentialsProvider credentials;
+    private SshSessionFactory sshSessionFactory;
 
-    public GitImpl(String prikeyFile) {
+    public GitImpl(RepoConfig repoConfig) {
+        switch (repoConfig.getAuthType()) {
+            case http:
+                httpAuth(repoConfig.getUsername(), repoConfig.getPassword());
+                break;
+            case ssh:
+                sshAuth(repoConfig.getRsaPrikey());
+                break;
+            default:
+        }
+    }
+
+    private void httpAuth(String username, String password) {
+        this.credentials = new UsernamePasswordCredentialsProvider(username, password);
+    }
+
+    private void sshAuth(String prikeyFile) {
         this.sshSessionFactory = new JschConfigSessionFactory() {
             @Override
             protected void configure(OpenSshConfig.Host hc, Session session) {
@@ -51,17 +68,11 @@ public class GitImpl implements CodeUpdater {
                 JSch defaultJSch = new JSch();
                 JSch.setConfig("ssh-rsa", JSch.getConfig("signature.rsa"));
                 defaultJSch.addIdentity(prikeyFile);
-                /*String knownHosts = System.getProperty("user.home") + "/.ssh/known_hosts";
-                defaultJSch.setKnownHosts(knownHosts);*/
                 return defaultJSch;
             }
         };
     }
 
-    public GitImpl(String username, String password) {
-        this.credentials = new UsernamePasswordCredentialsProvider(username, password);
-    }
-
     /**
      * 不存在则 clone,存在则 pull
      *
@@ -221,12 +232,4 @@ public class GitImpl implements CodeUpdater {
         int lastIndex = gitUrl.lastIndexOf("/");
         return gitUrl.substring(lastIndex).split(".git")[0];
     }
-
-    public static void main(String[] args) throws Exception {
-        GitImpl git = new GitImpl("azyadmin", "xjV^Ilw2");
-        String remote = "https://codeup.aliyun.com/5f1f8daf6207a1a8b17f6742/background/ContentService.git";
-        String local = "/home/reghao/opt/data/autodop/local-repo/content";
-        CommitLog log = git.update(remote, "develop", local);
-        System.out.println();
-    }
 }

+ 14 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/tools/updater/SvnImpl.java

@@ -1,5 +1,6 @@
 package cn.reghao.autodop.dmaster.app.service.build.tools.updater;
 
+import cn.reghao.autodop.dmaster.app.entity.build.tools.RepoConfig;
 import org.tmatesoft.svn.core.*;
 import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
 import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
@@ -22,6 +23,19 @@ public class SvnImpl implements CodeUpdater {
     private SVNUpdateClient updateClient;
     private SVNStatusClient statusClient;
 
+    public SvnImpl(RepoConfig repoConfig) {
+        ISVNAuthenticationManager authManager =
+                SVNWCUtil.createDefaultAuthenticationManager(repoConfig.getUsername(), repoConfig.getPassword().toCharArray());
+        SVNRepositoryFactoryImpl.setup();
+        DefaultSVNOptions options = SVNWCUtil.createDefaultOptions(true);
+        SVNClientManager clientManager = SVNClientManager.newInstance(options, authManager);
+
+        logClient = clientManager.getLogClient();
+        updateClient = clientManager.getUpdateClient();
+        updateClient.setIgnoreExternals(false);
+        statusClient = clientManager.getStatusClient();
+    }
+
     public SvnImpl(String username, String password) {
         ISVNAuthenticationManager authManager =
                 SVNWCUtil.createDefaultAuthenticationManager(username, password.toCharArray());

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

@@ -48,21 +48,21 @@ public class SharedEntityChecker {
         if (appUpdate == null) {
             throw new Exception(updater + " 不存在...");
         }
-        appBuild.setAppUpdate(appUpdate);
+        //appBuild.setAppUpdate(appUpdate);
 
         String compiler = buildVO.getCompiler();
         AppCompile appCompile = appCompileRepository.findByIsDeleteFalseAndCompilerName(compiler);
         if (appCompile == null) {
             throw new Exception(compiler + " 不存在...");
         }
-        appBuild.setAppCompile(appCompile);
+        //appBuild.setAppCompile(appCompile);
 
         String packer = buildVO.getPacker();
         AppPack appPack = appPackRepository.findByIsDeleteFalseAndPackerName(packer);
         if (appPack == null) {
             throw new Exception(packer + " 不存在...");
         }
-        appBuild.setAppPack(appPack);
+        //appBuild.setAppPack(appPack);
         return appBuild;
     }
 

+ 0 - 36
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployTask.java

@@ -1,36 +0,0 @@
-package cn.reghao.autodop.dmaster.app.service.deploy;
-
-import cn.reghao.autodop.common.deploy.DeployConfig;
-import cn.reghao.autodop.common.amqp.*;
-import cn.reghao.autodop.common.result.RpcResult;
-import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
-
-import java.util.concurrent.Callable;
-
-/**
- * 应用部署任务
- *
- * @author reghao
- * @date 2019-11-16 21:39:53
- */
-public class AppDeployTask implements Callable<RpcResult> {
-    private MessageSender sender;
-    private DeployConfig deployConfig;
-    private String host;
-
-    public AppDeployTask(MessageSender sender, DeployConfig deployConfig, String host) {
-        this.sender = sender;
-        this.deployConfig = deployConfig;
-        this.host = host;
-    }
-
-    @Override
-    public RpcResult call() {
-        String routeKey = "dagent.rpc@" + host;
-        MqMessage<DeployConfig> mqMessage = new MqMessage<>();
-        mqMessage.setMsgType(MsgType.deploy.name());
-        mqMessage.setMsg(deployConfig);
-        mqMessage.setSendTime(System.currentTimeMillis());
-        return sender.callRemote(routeKey, JsonConverter.objectToJson(mqMessage));
-    }
-}

+ 19 - 34
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java

@@ -1,14 +1,12 @@
 package cn.reghao.autodop.dmaster.app.service.deploy;
 
-import cn.reghao.autodop.common.deploy.DeployConfig;
-import cn.reghao.autodop.common.dagent.app.api.data.deploy.PackerType;
-import cn.reghao.autodop.common.amqp.MessageSender;
-import cn.reghao.autodop.common.result.RpcResult;
+import cn.reghao.autodop.common.amqp.RPCResult;
+import cn.reghao.autodop.common.dagent.app.api.data.deploy.AppDeployArgs;
+import cn.reghao.autodop.common.amqp.RabbitProducer;
 import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
 import cn.reghao.autodop.dmaster.app.entity.deploy.AppDeploy;
 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.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.common.exception.ExceptionUtil;
 import cn.reghao.autodop.dmaster.common.thread.ThreadPoolWrapper;
 import org.springframework.stereotype.Component;
@@ -25,10 +23,10 @@ import java.util.concurrent.Future;
  */
 @Component
 public class AppDeployer {
-    private MessageSender sender;
+    private RabbitProducer sender;
     private ExecutorService threadPool = ThreadPoolWrapper.threadPool("deploy");
 
-    public AppDeployer(MessageSender sender) {
+    public AppDeployer(RabbitProducer sender) {
         this.sender = sender;
     }
 
@@ -40,28 +38,29 @@ public class AppDeployer {
      * @date 2020-03-13 下午1:00
      */
     public List<DeployLog> deploy(BuildLog buildLog, AppDeploy appDeploy, Set<String> hosts) {
-        AppPack appPack = buildLog.getAppPack();
-        DeployConfig deployConfig = new DeployConfig();
-        deployConfig.setAppId(buildLog.getAppId());
-        deployConfig.setAppPath(buildLog.getAppPath());
-        deployConfig.setPackerType(appPack.getPackerType());
-        deployConfig.setRunningDir(appDeploy.getRunningDir());
+        //AppPack appPack = buildLog.getAppPack();
+
+        AppDeployArgs appDeployArgs = new AppDeployArgs();
+        /*appDeployArgs.setPackerType(appPack.getPackerType());
+        appDeployArgs.setAppId(buildLog.getAppId());
+        appDeployArgs.setAppPath(buildLog.getAppPath());
+        appDeployArgs.setRunningDir(appDeploy.getRunningDir());*/
 
         if (hosts == null) {
-            hosts = appDeploy.getHosts();
+            //hosts = appDeploy.getHosts();
         }
 
         // TODO 处理 hosts 为空的情况,这会导致 deployLogs 为空
         long startTime = System.currentTimeMillis();
-        Map<String, Future<RpcResult>> futureMap = new HashMap<>();
+        Map<String, Future<RPCResult>> futureMap = new HashMap<>();
         for (String host : hosts) {
-            futureMap.put(host, threadPool.submit(new AppDeployTask(sender, deployConfig, host)));
+            futureMap.put(host, threadPool.submit(new DeployTask(sender, appDeployArgs)));
         }
 
         List<DeployLog> deployLogs = new ArrayList<>();
-        for (Map.Entry<String, Future<RpcResult>> entry : futureMap.entrySet()) {
+        for (Map.Entry<String, Future<RPCResult>> entry : futureMap.entrySet()) {
             String host = entry.getKey();
-            Future<RpcResult> future = entry.getValue();
+            Future<RPCResult> future = entry.getValue();
             while (!future.isDone() && !future.isCancelled()) {
                 // 休眠等待异步任务结束
                 try {
@@ -77,10 +76,10 @@ public class AppDeployer {
             deployLog.setDeployTime(LocalDateTime.now());
             deployLog.setDeployTotalTime(System.currentTimeMillis()-startTime);
             try {
-                RpcResult rpcResult = future.get();
+                RPCResult rpcResult = future.get();
                 if (rpcResult != null) {
                     deployLog.setStatusCode(rpcResult.getStatusCode());
-                    deployLog.setMsg(rpcResult.getMsg());
+                    deployLog.setMsg(rpcResult.getResult());
                 } else {
                     deployLog.setStatusCode(1);
                     deployLog.setMsg("RPC 调用失败");
@@ -93,18 +92,4 @@ public class AppDeployer {
         }
         return deployLogs;
     }
-
-    private String appPath(AppOrchestration app, String commitId) {
-        String appId = app.getAppId();
-        AppPack appPack = app.getAppBuild().getAppPack();
-        String packerPath = appPack.getLocation();
-        switch (PackerType.valueOf(appPack.getPackerType())) {
-            case docker:
-                return packerPath + appId + ":" + commitId;
-            case zip:
-                return null;
-            default:
-                return null;
-        }
-    }
 }

+ 40 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/DeployTask.java

@@ -0,0 +1,40 @@
+package cn.reghao.autodop.dmaster.app.service.deploy;
+
+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.*;
+import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
+
+import java.util.concurrent.Callable;
+
+/**
+ * 应用部署任务
+ *
+ * @author reghao
+ * @date 2019-11-16 21:39:53
+ */
+public class DeployTask implements Callable<RPCResult> {
+    private RabbitProducer sender;
+    private AppDeployArgs appDeployArgs;
+
+    public DeployTask(RabbitProducer sender, AppDeployArgs appDeployArgs) {
+        this.sender = sender;
+        this.appDeployArgs = appDeployArgs;
+    }
+
+    @Override
+    public RPCResult call() {
+        String routeKey = "dagent";
+        String machineId = "5d1a727991f34d3a9c1220a1899e6ebd";
+
+        MQMessage mqMessage = new MQMessage();
+        mqMessage.setMachineId(machineId);
+        mqMessage.setSendTime(System.currentTimeMillis());
+        mqMessage.setRpc(true);
+        mqMessage.setType(MessageType.appType.name());
+        mqMessage.setOps(AppOps.appDeployOps.name());
+        mqMessage.setPayload(JsonConverter.objectToJson(appDeployArgs));
+        RPCResult rpcResult = sender.callRemote(routeKey, mqMessage);
+        return rpcResult;
+    }
+}

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

@@ -3,6 +3,7 @@ package cn.reghao.autodop.dmaster.app.service.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.log.LogRepository;
+import cn.reghao.autodop.dmaster.app.service.build.tools.updater.CommitLog;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
@@ -10,7 +11,7 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 
 /**
- * 日志持久化线程
+ * 日志持久化线程,存储日志到 MongoDB
  *
  * @author reghao
  * @date 2020-05-15 21:29:32
@@ -24,6 +25,10 @@ public class LogConsumer implements Runnable {
         this.logDAO = logDAO;
     }
 
+    public void addCommitLog(CommitLog commitLog) {
+        logQueue.add(commitLog);
+    }
+
     public void addBuildLog(BuildLog buildLog) {
         logQueue.add(buildLog);
     }
@@ -38,14 +43,13 @@ public class LogConsumer implements Runnable {
         while (!Thread.interrupted()) {
             try {
                 Object object = logQueue.take();
-                if (object instanceof BuildLog) {
+                if (object instanceof CommitLog) {
+                    CommitLog commitLog = (CommitLog) object;
+                    logDAO.saveCommitLog(commitLog);
+                    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.getBuildLog().getAppId());
+
                 }
             } catch (InterruptedException e) {
                 // 中断线程

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/AppBuildVO.java

@@ -15,9 +15,9 @@ public class AppBuildVO {
 
     public static AppBuildVO from(AppBuild appBuild) {
         AppBuildVO vo = new AppBuildVO();
-        vo.updater = appBuild.getAppUpdate().getRepoName();
-        vo.compiler = appBuild.getAppCompile().getCompilerName();
-        vo.packer = appBuild.getAppPack().getPackerName();
+        //vo.updater = appBuild.getAppUpdate().getRepoName();
+        //vo.compiler = appBuild.getAppCompile().getCompilerName();
+        //vo.packer = appBuild.getAppPack().getPackerName();
         return vo;
     }
 

+ 6 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildDeployResult.java

@@ -36,7 +36,7 @@ public class BuildDeployResult {
 
     public static BuildDeployResult fromBuildLog(BuildLog buildLog) {
         BuildDeployResult buildDeployResult = new BuildDeployResult();
-        buildDeployResult.setAppId(buildLog.getAppId());
+        /*buildDeployResult.setAppId(buildLog.getAppId());
         buildDeployResult.setBuildTime(DatetimeConverter.format(buildLog.getBuildTime()));
         buildDeployResult.setDeploy(false);
         buildDeployResult.setStatusCode(buildLog.getStatusCode());
@@ -51,13 +51,15 @@ public class BuildDeployResult {
                 buildDeployResult.setCommitMsg(buildLog.getCommitLog().getCommitMsg());
             }
             return buildDeployResult;
-        }
+        }*/
+
+        return buildDeployResult;
     }
 
     public static BuildDeployResult fromDeployLogs(List<DeployLog> deployLogs) {
         BuildLog buildLog = deployLogs.get(0).getBuildLog();
         BuildDeployResult buildDeployResult = new BuildDeployResult();
-        buildDeployResult.setAppId(buildLog.getAppId());
+        /*buildDeployResult.setAppId(buildLog.getAppId());
         buildDeployResult.setBuildTime(DatetimeConverter.format(buildLog.getBuildTime()));
         buildDeployResult.setDeploy(true);
         buildDeployResult.setCommitId(buildLog.getCommitLog().getCommitId());
@@ -83,7 +85,7 @@ public class BuildDeployResult {
         } else {
             buildDeployResult.setStatusCode(1);
             buildDeployResult.setMsg("节点 " + failedHosts.toString() + " 部署失败");
-        }
+        }*/
 
         return buildDeployResult;
     }

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/BuildLogVO.java

@@ -27,7 +27,7 @@ public class BuildLogVO {
 
     public static BuildLogVO from(BuildLog buildLog) {
         BuildLogVO buildLogVO = new BuildLogVO();
-        buildLogVO.appId = buildLog.getAppId();
+        /*buildLogVO.appId = buildLog.getAppId();
         buildLogVO.env = buildLog.getEnv();
         buildLogVO.remote = buildLog.getCommitLog().getRemote();
         buildLogVO.branch = buildLog.getCommitLog().getBranch();
@@ -41,7 +41,7 @@ public class BuildLogVO {
         buildLogVO.updateTotalTime = buildLog.getUpdateTotalTime();
         buildLogVO.compileTotalTime = buildLog.getCompileTotalTime();
         buildLogVO.packTotalTime = buildLog.getPackTotalTime();
-        buildLogVO.totalTime = buildLogVO.updateTotalTime + buildLogVO.compileTotalTime + buildLogVO.packTotalTime;
+        buildLogVO.totalTime = buildLogVO.updateTotalTime + buildLogVO.compileTotalTime + buildLogVO.packTotalTime;*/
         return buildLogVO;
     }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/log/DeployLogVO.java

@@ -20,7 +20,7 @@ public class DeployLogVO {
         BuildLog buildLog = deployLog.getBuildLog();
         DeployLogVO deployLogVO = new DeployLogVO();
         deployLogVO.appId = buildLog.getAppId();
-        deployLogVO.commitId = buildLog.getCommitLog().getCommitId();
+        //deployLogVO.commitId = buildLog.getCommitLog().getCommitId();
         deployLogVO.host = deployLog.getHost();
         deployLogVO.deployTime = DatetimeConverter.format(deployLog.getDeployTime());
         deployLogVO.deployTotalTime = deployLog.getDeployTotalTime();

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

@@ -4,7 +4,6 @@ import cn.reghao.autodop.common.orm.BaseDocument;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springframework.data.mongodb.core.mapping.Document;
-import org.springframework.data.mongodb.core.mapping.Field;
 
 /**
  * 备份日志
@@ -14,14 +13,10 @@ import org.springframework.data.mongodb.core.mapping.Field;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@Document(collection = "app3_bak_log")
+@Document
 public class App3BakLog extends BaseDocument {
-    @Field("app3name")
     private String app3name;
-    @Field("bak_time")
     private String bakTime;
-    @Field("is_success")
     private boolean isSuccess;
-    @Field("result")
     private String result;
 }

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/JwtTokenFilter.java

@@ -21,7 +21,8 @@ import java.util.stream.Collectors;
  * @date 2019-11-18 10:00:22
  */
 public class JwtTokenFilter extends OncePerRequestFilter {
-    private final String uriPattern = "/api/app3&/api/monitor&/api/vm&/api/config";
+    //private final String uriPattern = "/api/app3&/api/monitor&/api/vm&/api/config";
+    private final String uriPattern = "/api";
 
     private boolean matchUri(String uri) {
         for (String str : uriPattern.split("&")) {