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

开发对 Java 代码的编译

reghao пре 5 година
родитељ
комит
e1edec451c

+ 11 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/crud/OrchestrateCrudController.java

@@ -95,9 +95,17 @@ public class OrchestrateCrudController {
     @ApiOperation(value = "分页获取项目编排")
     @GetMapping("/proj")
     public ResponseEntity<String> getProjOrchestrationByPage(@RequestParam("page") int page,
-                                                             @RequestParam("size") int size) {
-        PageList<ProjOrchestration> pageList = projCrudService.getByPage(page, size);
-        return ResponseEntity.ok().body(WebResult.success(pageList));
+                                                             @RequestParam("size") int size,
+                                                             @RequestParam("env") String env) {
+        PageList<ProjOrchestration> pageList = projCrudService.getByPage(page, size, env);
+        PageList<ProjVO> 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(ProjVO::from).collect(Collectors.toList()));
+
+        return ResponseEntity.ok().body(WebResult.success(vos));
     }
 
     @ApiOperation(value = "修改项目编排")

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

@@ -36,11 +36,7 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
     // 启用编排
     @Column(nullable = false)
     private boolean enable;
-    // TODO 操作系统类型和版本,CPU 架构
 
-    /* 构建配置 */
-    @Column(nullable = false)
-    private String appType;
     @Column(nullable = false)
     private String appRepo;
     @Column(nullable = false)
@@ -48,15 +44,19 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
     // 应用代码所在目录的名字
     @Column(nullable = false)
     private String dirname;
-    // 编译应用时所处的目录,以仓库目录为起点
-    @Column(nullable = false)
-    private String compileHome;
 
-    // buildConfig 和 projId 二者只能存在一个
+    // TODO 操作系统类型和版本,CPU 架构
+    @Column(nullable = false)
+    private String appType;
+    // 构建配置,buildConfig 和 projId 二者只能存在一个
     private BuildConfig buildConfig;
     @ManyToOne(cascade = CascadeType.PERSIST)
     @JoinColumn(name = "proj_orchestration_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
     private ProjOrchestration proj;
+
+    // 编译应用时所处的目录,以仓库目录为起点
+    @Column(nullable = false)
+    private String compileHome;
     @Lob
     @Column(columnDefinition="text")
     private String dockerfile;

+ 9 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/orchestration/ProjOrchestration.java

@@ -1,17 +1,20 @@
 package cn.reghao.autodop.dmaster.app.entity.config.orchestration;
 
 import cn.reghao.autodop.common.orm.BaseEntity;
+import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;
+import cn.reghao.autodop.dmaster.auth.entity.Role;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
+import javax.persistence.*;
 
 /**
  * @author reghao
  * @date 2020-02-28 14:11:18
  */
+@NoArgsConstructor
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Entity
@@ -22,13 +25,16 @@ public class ProjOrchestration extends BaseEntity implements Cloneable {
 
     @Column(nullable = false)
     private String projRepo;
-    private String branch;
     // 应用代码所在目录的名字
     @Column(nullable = false)
     private String dirname;
     // 同一个项目内所有应用的构建策略是相同的
     private BuildConfig buildConfig;
 
+    public ProjOrchestration(String projId) {
+        this.projId = projId;
+    }
+
     @Override
     public Object clone() throws CloneNotSupportedException {
         Object obj = super.clone();

+ 4 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/ProjOrchestrationRepository.java

@@ -1,6 +1,9 @@
 package cn.reghao.autodop.dmaster.app.repository.orchestration;
 
+import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestration;
+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.Modifying;
 
@@ -13,6 +16,7 @@ import javax.transaction.Transactional;
  */
 public interface ProjOrchestrationRepository extends JpaRepository<ProjOrchestration, Long> {
     ProjOrchestration findByIsDeleteFalseAndProjId(String projId);
+    //Page<ProjOrchestration> findByIsDeleteFalseAndEnv(String env, Pageable pageable);
 
     @Modifying
     @Transactional

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

@@ -144,7 +144,7 @@ public class AppIntegrate {
         ProjOrchestration proj = app.getProj();
         if (proj != null) {
             remote = proj.getProjRepo();
-            branch = proj.getBranch();
+            branch = app.getBranch();
         } else {
             remote = app.getAppRepo();
             branch = app.getBranch();

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

@@ -6,10 +6,12 @@ import cn.reghao.autodop.dmaster.app.entity.config.build.tools.CompilerConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.PackerConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.RepoConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
+import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestration;
 import cn.reghao.autodop.dmaster.app.repository.build.CompilerConfigRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.PackerConfigRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.RepoConfigRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.NotifierRepository;
+import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationRepository;
 import cn.reghao.autodop.dmaster.auth.entity.Role;
 import cn.reghao.autodop.dmaster.auth.repository.RoleRepository;
 import org.springframework.stereotype.Service;
@@ -22,17 +24,20 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class SharedEntityChecker {
+    private ProjOrchestrationRepository projRepository;
     private RepoConfigRepository repoConfigRepository;
     private CompilerConfigRepository compilerConfigRepository;
     private PackerConfigRepository packerConfigRepository;
     private NotifierRepository notifierRepository;
     private RoleRepository roleRepository;
 
-    public SharedEntityChecker(RepoConfigRepository repoConfigRepository,
+    public SharedEntityChecker(ProjOrchestrationRepository projRepository,
+                               RepoConfigRepository repoConfigRepository,
                                CompilerConfigRepository compilerConfigRepository,
                                PackerConfigRepository packerConfigRepository,
                                NotifierRepository notifierRepository,
                                RoleRepository roleRepository) {
+        this.projRepository = projRepository;
         this.repoConfigRepository = repoConfigRepository;
         this.compilerConfigRepository = compilerConfigRepository;
         this.packerConfigRepository = packerConfigRepository;
@@ -40,6 +45,16 @@ public class SharedEntityChecker {
         this.roleRepository = roleRepository;
     }
 
+    public void checkAndSetProj(AppOrchestration app) throws Exception {
+        ProjOrchestration proj = app.getProj();
+        ProjOrchestration projEntity = projRepository.findByIsDeleteFalseAndProjId(proj.getProjId());
+        if (projEntity != null) {
+            app.setProj(projEntity);
+        } else {
+            throw new Exception("项目 " + proj.getProjId() + " 不存在...");
+        }
+    }
+
     /**
      * 检查构建共享配置
      *
@@ -47,6 +62,7 @@ public class SharedEntityChecker {
      * @return
      * @date 2020-09-30 下午3:17
      */
+    @Deprecated
     public void checkAndSetBuildConfig(AppOrchestration app) throws Exception {
         BuildConfig buildConfig = app.getBuildConfig();
         if (buildConfig != null) {

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

@@ -5,7 +5,6 @@ import cn.reghao.autodop.common.utils.data.db.PageList;
 import cn.reghao.autodop.dmaster.app.entity.log.BuildDeployApp;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.AppOrchestrationRepository;
-import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationRepository;
 import cn.reghao.autodop.dmaster.app.service.crud.BuildDeployAppCrudService;
 import cn.reghao.autodop.dmaster.app.service.crud.SharedEntityChecker;
 import org.springframework.data.domain.Page;
@@ -22,23 +21,24 @@ import java.time.LocalDateTime;
 @Service
 public class AppCrudService implements CrudOps<AppOrchestration> {
     private AppOrchestrationRepository appRepository;
-    private ProjOrchestrationRepository projRepository;
     private SharedEntityChecker sharedEntityChecker;
     private BuildDeployAppCrudService buildDeployAppCrudService;
 
     public AppCrudService(AppOrchestrationRepository appRepository,
-                          ProjOrchestrationRepository projRepository,
                           SharedEntityChecker sharedEntityChecker,
                           BuildDeployAppCrudService buildDeployAppCrudService) {
         this.appRepository = appRepository;
-        this.projRepository = projRepository;
         this.sharedEntityChecker = sharedEntityChecker;
         this.buildDeployAppCrudService = buildDeployAppCrudService;
     }
 
     @Override
     public void addOrUpdate(AppOrchestration app) throws Exception {
-        sharedEntityChecker.checkAndSetBuildConfig(app);
+        if (app.getProj() != null) {
+            sharedEntityChecker.checkAndSetProj(app);
+        } else {
+            sharedEntityChecker.checkAndSetBuildConfig(app.getBuildConfig());
+        }
         sharedEntityChecker.checkAndSetNotifier(app);
         sharedEntityChecker.checkAndSetRole(app);
 

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

@@ -2,9 +2,7 @@ package cn.reghao.autodop.dmaster.app.service.crud.orchestarte;
 
 import cn.reghao.autodop.common.utils.data.db.CrudOps;
 import cn.reghao.autodop.common.utils.data.db.PageList;
-import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestration;
-import cn.reghao.autodop.dmaster.app.repository.orchestration.AppOrchestrationRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.ProjOrchestrationRepository;
 import cn.reghao.autodop.dmaster.app.service.crud.SharedEntityChecker;
 import org.springframework.data.domain.Page;
@@ -21,14 +19,11 @@ import java.time.LocalDateTime;
 @Service
 public class ProjCrudService implements CrudOps<ProjOrchestration> {
     private ProjOrchestrationRepository projRepository;
-    private AppOrchestrationRepository appRepository;
     private SharedEntityChecker sharedEntityChecker;
 
     public ProjCrudService(ProjOrchestrationRepository projRepository,
-                           AppOrchestrationRepository appRepository,
                           SharedEntityChecker sharedEntityChecker) {
         this.projRepository = projRepository;
-        this.appRepository = appRepository;
         this.sharedEntityChecker = sharedEntityChecker;
     }
 
@@ -49,7 +44,7 @@ public class ProjCrudService implements CrudOps<ProjOrchestration> {
     }
 
     @Override
-    public PageList<ProjOrchestration> getByPage(int page, int size) {
+    public PageList<ProjOrchestration> getByPage(int page, int size, String env) {
         // 默认按更新时间倒序
         PageRequest pageRequest =
                 PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));

+ 0 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/BuildConfigVO.java

@@ -22,7 +22,6 @@ public class BuildConfigVO {
         vo.repo = buildConfig.getRepoConfig().getName();
         vo.compiler = buildConfig.getCompilerConfig().getName();
         vo.packer = buildConfig.getPackerConfig().getName();
-        //vo.dockerfile = buildConfig.getDockerfile();
         return vo;
     }
 
@@ -43,7 +42,6 @@ public class BuildConfigVO {
             buildConfig.setPackerConfig(new PackerConfig(packer));
         }
 
-        //buildConfig.setDockerfile(vo.getDockerfile());
         return buildConfig;
     }
 }

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -13,6 +13,7 @@ import cn.reghao.autodop.dmaster.app.entity.config.build.tools.*;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.constant.AppType;
 import cn.reghao.autodop.dmaster.app.constant.EnvType;
+import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
 import cn.reghao.autodop.dmaster.app.entity.deploy.LogConfig;
 import cn.reghao.autodop.dmaster.app.entity.deploy.RunningConfig;
@@ -104,7 +105,7 @@ public class AppVO {
         if (vo.getBuildConfigVO() != null) {
             app.setBuildConfig(BuildConfigVO.to(vo.getBuildConfigVO()));
         } else {
-            //app.set(vo.projId);
+            app.setProj(new ProjOrchestration(vo.getProjId()));
         }
 
         app.setDeployConfigs(vo.getDeployConfigs());

+ 44 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/ProjVO.java

@@ -1,5 +1,12 @@
 package cn.reghao.autodop.dmaster.app.vo.orchestration;
 
+import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
+import cn.reghao.autodop.dmaster.app.constant.*;
+import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;
+import cn.reghao.autodop.dmaster.app.entity.config.build.tools.CompilerConfig;
+import cn.reghao.autodop.dmaster.app.entity.config.build.tools.CompilerType;
+import cn.reghao.autodop.dmaster.app.entity.config.build.tools.PackerConfig;
+import cn.reghao.autodop.dmaster.app.entity.config.build.tools.RepoConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestration;
 import cn.reghao.autodop.dmaster.app.vo.BuildConfigVO;
 import lombok.Data;
@@ -13,7 +20,6 @@ public class ProjVO {
     private String projId;
     private String description;
     private String projRepo;
-    private String branch;
     private String dirname;
     private BuildConfigVO buildConfigVO;
 
@@ -22,7 +28,6 @@ public class ProjVO {
         vo.projId = proj.getProjId();
         vo.description = proj.getDescription();
         vo.projRepo = proj.getProjRepo();
-        vo.branch = proj.getBranch();
         vo.dirname = proj.getDirname();
         vo.buildConfigVO = BuildConfigVO.from(proj.getBuildConfig());
         return vo;
@@ -33,9 +38,45 @@ public class ProjVO {
         proj.setProjId(vo.projId);
         proj.setDescription(vo.description);
         proj.setProjRepo(vo.projRepo);
-        proj.setBranch(vo.branch);
         proj.setDirname(vo.dirname);
         proj.setBuildConfig(BuildConfigVO.to(vo.getBuildConfigVO()));
         return proj;
     }
+
+    public static void main(String[] args) {
+        ProjOrchestration proj = new ProjOrchestration();
+        proj.setProjId("spiderlab");
+        proj.setDescription("分布式爬虫系统");
+        proj.setProjRepo("http://git.reghao.cn/reghao/spiderlab.git");
+        proj.setDirname("spiderlab");
+
+        /* 构建配置 */
+        BuildConfig buildConfig = new BuildConfig();
+        RepoConfig repoConfig = new RepoConfig();
+        repoConfig.setName("git-codeup");
+        repoConfig.setType(RepoType.git.name());
+        repoConfig.setAuthType(RepoAuthType.ssh.name());
+        repoConfig.setRsaPrikey("rsa private key");
+        buildConfig.setRepoConfig(repoConfig);
+
+        CompilerConfig compilerConfig = new CompilerConfig();
+        compilerConfig.setName("dotnet5-dev");
+        compilerConfig.setType(CompilerType.dotnet.name());
+        compilerConfig.setHomePath("/home/reghao/dev/env/dotnet/dotnet-sdk-5.0.100-linux-x64");
+        compilerConfig.setBinPath("/home/reghao/dev/env/dotnet/dotnet-sdk-5.0.100-linux-x64/dotnet");
+        compilerConfig.setEnv("dev");
+        compilerConfig.setVersion("5.0");
+        compilerConfig.setCompileCmd("dotnet publish");
+        buildConfig.setCompilerConfig(compilerConfig);
+
+        PackerConfig packerConfig = new PackerConfig();
+        packerConfig.setName("docker-dev");
+        packerConfig.setType(PackerType.docker.name());
+        packerConfig.setTargetPath("docker.alpha.iquizoo.com/iq3x");
+        buildConfig.setPackerConfig(packerConfig);
+        proj.setBuildConfig(buildConfig);
+
+        String json = JsonConverter.objectToJson(ProjVO.from(proj));
+        System.out.println(json);
+    }
 }

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/exception/ControllerExceptionHandler.java

@@ -25,6 +25,7 @@ public class ControllerExceptionHandler {
      */
     @ExceptionHandler({Exception.class})
     public String error(Exception e, HttpServletRequest request) {
+        ExceptionUtil.errorMsg(e);
         String stackTrace = ExceptionUtil.stackTrace(e);
         log.error("请求错误 -> {}", stackTrace);
         String msg = e.getMessage();

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/exception/ExceptionUtil.java

@@ -7,6 +7,7 @@ package cn.reghao.autodop.dmaster.common.exception;
 public class ExceptionUtil {
     public static String errorMsg(Exception e) {
         // TODO 记录栈跟踪
+        // TODO 记录 Hibernate 异常
         String stackTrace = stackTrace(e);
 
         StringBuilder sb = new StringBuilder();

+ 9 - 10
scripts/test1.json

@@ -1,13 +1,12 @@
 {
-  "env":[
-    "ASPNETCORE_ENVIRONMENT=Staging",
-    "ASPNETCORE_URLS=http://192.168.0.111:8002;https://192.168.0.111:8102"
-  ],
-  "hostConfig":{
-    "networkMode":"host",
-    "restartPolicy":{
-      "name":"on-failure",
-      "maximumRetryCount":5
-    }
+  "projId":"spiderlab",
+  "description":"分布式爬虫系统",
+  "projRepo":"http://git.reghao.cn/reghao/spiderlab.git",
+  "branch":"master",
+  "dirname":"spiderlab",
+  "buildConfigVO":{
+    "repo":"git-codeup",
+    "compiler":"dotnet5-dev",
+    "packer":"docker-dev"
   }
 }