Browse Source

优化本地构建目录结构

reghao 5 years ago
parent
commit
0d54d14c78

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

@@ -45,6 +45,7 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
     private String branch;
     // 应用代码所在目录的名字
     @Column(nullable = false)
+    // TODO 检查 dirname 格式
     private String dirname;
 
     // TODO 操作系统类型和版本,CPU 架构
@@ -58,6 +59,7 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
 
     // 编译应用时所处的目录,以仓库目录为起点
     @Column(nullable = false)
+    // TODO 检查 compileHome 格式
     private String compileHome;
     @Lob
     @Column(columnDefinition="text")

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

@@ -36,6 +36,24 @@ public class BuildDeployApp extends BaseEntity {
     private int statusCode;
     private String result;
 
+    public static BuildDeployApp onBuilding(String appId) {
+        BuildDeployApp buildDeployApp = new BuildDeployApp();
+        buildDeployApp.setAppId(appId);
+        buildDeployApp.setBdType("构建");
+        buildDeployApp.setStatusCode(0);
+        buildDeployApp.setResult("正在构建中");
+        return buildDeployApp;
+    }
+
+    public static BuildDeployApp onDeploying(String appId) {
+        BuildDeployApp buildDeployApp = new BuildDeployApp();
+        buildDeployApp.setAppId(appId);
+        buildDeployApp.setBdType("部署");
+        buildDeployApp.setStatusCode(0);
+        buildDeployApp.setResult("正在部署中");
+        return buildDeployApp;
+    }
+
     public static BuildDeployApp of(AppOrchestration app) {
         BuildDeployApp buildDeployApp = new BuildDeployApp();
         buildDeployApp.setAppId(app.getAppId());

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

@@ -56,8 +56,7 @@ public class BuildDeployDispatcher {
      */
     public BuildDeployApp buildAndDeploy(String appId, boolean isDeploy) throws Exception {
         if (!onBuilding.add(appId)) {
-            // TODO 应用正在构建中...
-            return null;
+            return BuildDeployApp.onBuilding(appId);
         }
 
         // TODO AppOrchestration 修改后需要重新初始化 AppIntegrate,尝试使用 AOP 来完成
@@ -80,7 +79,9 @@ public class BuildDeployDispatcher {
         BuildDeployApp buildDeployApp;
         if (buildLog.getStatusCode() == 0 && isDeploy) {
             DeployResult deployResult = deployApp(buildLog);
-            assert deployResult != null;
+            if (deployResult == null) {
+                return BuildDeployApp.onDeploying(appId);
+            }
             buildDeployApp = BuildDeployApp.of(deployResult);
         } else {
             buildDeployApp = BuildDeployApp.of(buildLog);
@@ -155,7 +156,6 @@ public class BuildDeployDispatcher {
      */
     private DeployResult deployApp(BuildLog buildLog) {
         if (!onDeploying.add(buildLog.getAppId())) {
-            // TODO 应用正在部署中...
             return null;
         }
 
@@ -170,7 +170,9 @@ public class BuildDeployDispatcher {
     public BuildDeployApp deploy(String appId, String commitId) {
         BuildLog buildLog = cache.findByAppIdAndCommitId(appId, commitId);
         DeployResult deployResult = deployApp(buildLog);
-        assert deployResult != null;
+        if (deployResult == null) {
+            return BuildDeployApp.onDeploying(appId);
+        }
         BuildDeployApp buildDeployApp = BuildDeployApp.of(deployResult);
         buildDeployLogConsumer.addBuildDeployApp(buildDeployApp);
         return buildDeployApp;

+ 6 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java

@@ -183,12 +183,15 @@ public class AppIntegrate {
     public void compile() throws Exception {
         // TODO 通过脚本调用编译器时会卡住
         // TODO 编译主目录分为项目中的应用和独立应用
-        codeCompiler.compile(app.getAppId(), appCompileDir + app.getCompileHome());
+        codeCompiler.compile(app.getAppId(), compileDir());
     }
 
     public String pack() throws Exception {
-        String appEntryDir = appCompileDir + app.getCompileHome();
-        return codePacker.pack(app.getAppId(), lastCommitLog.getCommitId(), appEntryDir);
+        return codePacker.pack(app.getAppId(), lastCommitLog.getCommitId(), compileDir());
+    }
+
+    private String compileDir() {
+        return "/".equals(app.getCompileHome()) ? appCompileDir : appCompileDir + app.getCompileHome();
     }
 
     @Data

+ 4 - 24
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuilderUtil.java

@@ -35,12 +35,13 @@ public class BuilderUtil {
         }
 
         ProjOrchestration proj = app.getProj();
+        String dirname;
         if (proj != null) {
-            appLocalRepo += dirname(proj.getProjRepo());
-            FileOps.copyDirContentToDir(appLocalRepo, appCompileDir);
+            dirname = proj.getDirname();
         } else {
-            FileOps.copyDirToDir(appLocalRepo + "/" + app.getDirname(), appCompileDir);
+            dirname = app.getDirname();
         }
+        FileOps.copyDirContentToDir(appLocalRepo + "/" + dirname, appCompileDir);
 
         // Dotnet 应用需要额外的处理
         if (app.getAppType().equals(AppType.dotnetCore.name())) {
@@ -49,27 +50,6 @@ public class BuilderUtil {
         }
     }
 
-    /**
-     * 获取目录名字
-     *
-     * @param
-     * @return
-     * @date 2020-08-06 上午10:42
-     */
-    public static String dirname(String repoUrl) {
-        int lastIndex = repoUrl.lastIndexOf("/");
-        if (repoUrl.endsWith(".git")) {
-            return repoUrl.substring(lastIndex).split(".git")[0];
-        } else if (repoUrl.startsWith("svn://")) {
-            return repoUrl.substring(lastIndex);
-        } else if (repoUrl.startsWith("/")) {
-            // 文件系统地址,直接返回
-            return repoUrl;
-        }
-
-        return "";
-    }
-
     /**
      * TODO 判断文件编码
      *