소스 검색

配合前端修改接口和数据类型

reghao 5 년 전
부모
커밋
519499b4ed
18개의 변경된 파일145개의 추가작업 그리고 55개의 파일을 삭제
  1. 10 2
      common/src/main/java/cn/reghao/autodop/common/dockerc/Docker.java
  2. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/ConfigOptions.java
  3. 0 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/build/PackerType.java
  4. 11 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ConfigController.java
  5. 0 11
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/config/build/tools/CompilerType.java
  6. 2 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/CompilerConfigRepository.java
  7. 2 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/PackerConfigRepository.java
  8. 2 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/RepoConfigRepository.java
  9. 3 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/NotifierConfigRepository.java
  10. 60 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigOptionsService.java
  11. 5 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java
  12. 5 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/SharedEntityChecker.java
  13. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/build/PackerConfigCrudService.java
  14. 9 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/global/NotifierCrudService.java
  15. 0 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/BuildConfigVO.java
  16. 10 6
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java
  17. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/ProjVO.java
  18. 23 6
      scripts/test1.json

+ 10 - 2
common/src/main/java/cn/reghao/autodop/common/dockerc/Docker.java

@@ -319,7 +319,8 @@ public class Docker implements ImageOps, ContainerOps, AutoCloseable {
     }
 
     /**
-     * 目录中的文件列表
+     * 目录中的文件列表,只返回最近 10 天的日志文件
+     * 需要保证日志文件名的格式类似于 2020-01-01.log
      *
      * @param
      * @return
@@ -329,9 +330,16 @@ public class Docker implements ImageOps, ContainerOps, AutoCloseable {
         String logDirPath = rootfs(containerId) + dirPath;
         File logDir = new File(logDirPath);
         if (logDir.exists()) {
-            return Arrays.stream(Objects.requireNonNull(logDir.listFiles()))
+            List<String> list = Arrays.stream(Objects.requireNonNull(logDir.listFiles()))
                     .map(File::getName)
                     .collect(Collectors.toList());
+
+            // 只返回最近 10 天的日志文件
+            if (list.size() > 10) {
+                list.sort(Comparator.reverseOrder());
+                return list.subList(0, 10);
+            }
+            return list;
         } else {
             return new ArrayList<>();
         }

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/ConfigOptions.java

@@ -8,6 +8,7 @@ package cn.reghao.autodop.dmaster.app.constant;
  */
 public enum ConfigOptions {
     app, env,
+    repoConfig, compilerConfig, packerConfig, notifierConfig,
     notifier,
     repo, compiler, packer, buildDir,
     repoAuth,

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

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

+ 11 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ConfigController.java

@@ -1,11 +1,12 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
+import cn.reghao.autodop.common.dagent.app.api.data.deploy.PackerType;
 import cn.reghao.autodop.common.result.WebResult;
 import cn.reghao.autodop.dmaster.app.constant.*;
 import cn.reghao.autodop.dmaster.app.constant.build.CompilerType;
-import cn.reghao.autodop.dmaster.app.constant.build.PackerType;
 import cn.reghao.autodop.dmaster.app.constant.build.RepoAuthType;
 import cn.reghao.autodop.dmaster.app.constant.build.RepoType;
+import cn.reghao.autodop.dmaster.app.service.ConfigOptionsService;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
@@ -23,6 +24,12 @@ import java.util.Map;
 @RestController
 @RequestMapping("/api/config")
 public class ConfigController {
+    private ConfigOptionsService configOptionsService;
+
+    public ConfigController(ConfigOptionsService configOptionsService) {
+        this.configOptionsService = configOptionsService;
+    }
+
     /**
      * 各种配置类型
      *
@@ -72,6 +79,9 @@ public class ConfigController {
                 break;
             case proj:
             default:
+                configOptionsService.options(type).forEach(name -> {
+                    map.put(name, name);
+                });
         }
         return ResponseEntity.ok().body(WebResult.success(map));
     }

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

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

+ 2 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/CompilerConfigRepository.java

@@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * @author reghao
@@ -12,6 +13,7 @@ import javax.transaction.Transactional;
  */
 public interface CompilerConfigRepository extends JpaRepository<CompilerConfig, Long> {
     CompilerConfig findByIsDeleteFalseAndName(String compilerName);
+    List<CompilerConfig> findAllByIsDeleteFalse();
 
     @Modifying
     @Transactional

+ 2 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/PackerConfigRepository.java

@@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * @author reghao
@@ -12,6 +13,7 @@ import javax.transaction.Transactional;
  */
 public interface PackerConfigRepository extends JpaRepository<PackerConfig, Long> {
     PackerConfig findByIsDeleteFalseAndName(String packerName);
+    List<PackerConfig> findAllByIsDeleteFalse();
 
     @Modifying
     @Transactional

+ 2 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/build/RepoConfigRepository.java

@@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * @author reghao
@@ -12,6 +13,7 @@ import javax.transaction.Transactional;
  */
 public interface RepoConfigRepository extends JpaRepository<RepoConfig, Long> {
     RepoConfig findByIsDeleteFalseAndName(String name);
+    List<RepoConfig> findAllByIsDeleteFalse();
 
     @Modifying
     @Transactional

+ 3 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/NotifierRepository.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/NotifierConfigRepository.java

@@ -5,13 +5,15 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * @author reghao
  * @date 2020-01-21 14:53:03
  */
-public interface NotifierRepository extends JpaRepository<NotifierConfig, Long> {
+public interface NotifierConfigRepository extends JpaRepository<NotifierConfig, Long> {
     NotifierConfig findByIsDeleteFalseAndName(String name);
+    List<NotifierConfig> findAllByIsDeleteFalse();
 
     @Modifying
     @Transactional

+ 60 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigOptionsService.java

@@ -0,0 +1,60 @@
+package cn.reghao.autodop.dmaster.app.service;
+
+import cn.reghao.autodop.dmaster.app.constant.ConfigOptions;
+import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
+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.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.NotifierConfigRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author reghao
+ * @date 2020-02-28 17:10:37
+ */
+@Service
+public class ConfigOptionsService {
+    private RepoConfigRepository repoRepository;
+    private CompilerConfigRepository compilerRepository;
+    private PackerConfigRepository packerRepository;
+    private NotifierConfigRepository notifierRepository;
+
+    public ConfigOptionsService(RepoConfigRepository repoRepository,
+                                CompilerConfigRepository compilerRepository,
+                                PackerConfigRepository packerRepository,
+                                NotifierConfigRepository notifierRepository) {
+        this.repoRepository = repoRepository;
+        this.compilerRepository = compilerRepository;
+        this.packerRepository = packerRepository;
+        this.notifierRepository = notifierRepository;
+    }
+
+    public List<String> options(String type) {
+        switch (ConfigOptions.valueOf(type)) {
+            case repoConfig:
+                return repoRepository.findAllByIsDeleteFalse().stream()
+                        .map(RepoConfig::getName)
+                        .collect(Collectors.toList());
+            case compilerConfig:
+                return compilerRepository.findAllByIsDeleteFalse().stream()
+                        .map(CompilerConfig::getName)
+                        .collect(Collectors.toList());
+            case packerConfig:
+                return packerRepository.findAllByIsDeleteFalse().stream()
+                        .map(PackerConfig::getName)
+                        .collect(Collectors.toList());
+            case notifierConfig:
+                return notifierRepository.findAllByIsDeleteFalse().stream()
+                        .map(NotifierConfig::getName)
+                        .collect(Collectors.toList());
+        }
+        return new ArrayList<>();
+    }
+}

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

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.build;
 
-import cn.reghao.autodop.dmaster.app.constant.build.PackerType;
+import cn.reghao.autodop.common.dagent.app.api.data.deploy.PackerType;
+import cn.reghao.autodop.dmaster.app.constant.build.CompilerType;
 import cn.reghao.autodop.dmaster.app.constant.build.RepoType;
 import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.*;
@@ -110,7 +111,7 @@ public class AppIntegrate {
             case shell:
                 codeCompiler = new ShellCompiler(compilerConfig);
                 break;
-            case dotnet:
+            case dotnetCore:
                 break;
             case maven:
                 codeCompiler = new MavenCompiler(compilerConfig, app.getDirname());
@@ -121,6 +122,8 @@ public class AppIntegrate {
                 codeCompiler = new NullCompiler();
                 break;
             default:
+                log.info("暂未实现,使用 NullCompiler...");
+                codeCompiler = new NullCompiler();
         }
 
         // 初始化打包配置

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

@@ -10,7 +10,7 @@ import cn.reghao.autodop.dmaster.app.entity.config.orchestration.ProjOrchestrati
 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.NotifierConfigRepository;
 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;
@@ -28,20 +28,20 @@ public class SharedEntityChecker {
     private RepoConfigRepository repoConfigRepository;
     private CompilerConfigRepository compilerConfigRepository;
     private PackerConfigRepository packerConfigRepository;
-    private NotifierRepository notifierRepository;
+    private NotifierConfigRepository notifierConfigRepository;
     private RoleRepository roleRepository;
 
     public SharedEntityChecker(ProjOrchestrationRepository projRepository,
                                RepoConfigRepository repoConfigRepository,
                                CompilerConfigRepository compilerConfigRepository,
                                PackerConfigRepository packerConfigRepository,
-                               NotifierRepository notifierRepository,
+                               NotifierConfigRepository notifierConfigRepository,
                                RoleRepository roleRepository) {
         this.projRepository = projRepository;
         this.repoConfigRepository = repoConfigRepository;
         this.compilerConfigRepository = compilerConfigRepository;
         this.packerConfigRepository = packerConfigRepository;
-        this.notifierRepository = notifierRepository;
+        this.notifierConfigRepository = notifierConfigRepository;
         this.roleRepository = roleRepository;
     }
 
@@ -130,7 +130,7 @@ public class SharedEntityChecker {
     public void checkAndSetNotifier(AppOrchestration app) throws Exception {
         NotifierConfig notifierConfig = app.getNotifierConfig();
         if (notifierConfig != null) {
-            NotifierConfig notifierConfigEntity = notifierRepository.findByIsDeleteFalseAndName(notifierConfig.getName());
+            NotifierConfig notifierConfigEntity = notifierConfigRepository.findByIsDeleteFalseAndName(notifierConfig.getName());
             if (notifierConfigEntity != null) {
                 app.setNotifierConfig(notifierConfigEntity);
             } else {

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

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.app.service.crud.build;
 import cn.reghao.autodop.dmaster.common.db.CrudOps;
 import cn.reghao.autodop.dmaster.common.db.PageList;
 import cn.reghao.autodop.dmaster.app.entity.config.build.tools.PackerConfig;
-import cn.reghao.autodop.dmaster.app.constant.build.PackerType;
+import cn.reghao.autodop.common.dagent.app.api.data.deploy.PackerType;
 import cn.reghao.autodop.dmaster.app.repository.build.PackerConfigRepository;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;

+ 9 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/crud/global/NotifierCrudService.java

@@ -3,7 +3,7 @@ package cn.reghao.autodop.dmaster.app.service.crud.global;
 import cn.reghao.autodop.dmaster.common.db.CrudOps;
 import cn.reghao.autodop.dmaster.common.db.PageList;
 import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
-import cn.reghao.autodop.dmaster.app.repository.orchestration.NotifierRepository;
+import cn.reghao.autodop.dmaster.app.repository.orchestration.NotifierConfigRepository;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
@@ -18,23 +18,23 @@ import java.util.stream.Collectors;
  */
 @Service
 public class NotifierCrudService implements CrudOps<NotifierConfig> {
-    private NotifierRepository notifierRepository;
+    private NotifierConfigRepository notifierConfigRepository;
 
-    public NotifierCrudService(NotifierRepository notifierRepository) {
-        this.notifierRepository = notifierRepository;
+    public NotifierCrudService(NotifierConfigRepository notifierConfigRepository) {
+        this.notifierConfigRepository = notifierConfigRepository;
     }
 
     @Override
     public void addOrUpdate(NotifierConfig notifierConfig) throws Exception {
         NotifierConfig notifierEntity =
-                notifierRepository.findByIsDeleteFalseAndName(notifierConfig.getName());
+                notifierConfigRepository.findByIsDeleteFalseAndName(notifierConfig.getName());
         if (notifierEntity != null) {
             notifierConfig.setId(notifierEntity.getId());
             notifierConfig.setCreateTime(notifierEntity.getCreateTime());
             notifierConfig.setUpdateTime(LocalDateTime.now());
         }
         notifierConfig.setIsDelete(false);
-        notifierRepository.save(notifierConfig);
+        notifierConfigRepository.save(notifierConfig);
     }
 
     @Override
@@ -42,7 +42,7 @@ public class NotifierCrudService implements CrudOps<NotifierConfig> {
         // 默认按更新时间倒序
         PageRequest pageRequest =
                 PageRequest.of(page-1, size, Sort.by(Sort.Direction.DESC, "updateTime"));
-        Page<NotifierConfig> notifiers = notifierRepository.findAll(pageRequest);
+        Page<NotifierConfig> notifiers = notifierConfigRepository.findAll(pageRequest);
 
         PageList<NotifierConfig> pageList = new PageList<>();
         pageList.setTotalSize(notifiers.getTotalElements());
@@ -53,12 +53,12 @@ public class NotifierCrudService implements CrudOps<NotifierConfig> {
 
     @Override
     public void delete(String uniqueKey) throws Exception {
-        NotifierConfig notifierEntity = notifierRepository.findByIsDeleteFalseAndName(uniqueKey);
+        NotifierConfig notifierEntity = notifierConfigRepository.findByIsDeleteFalseAndName(uniqueKey);
         if (notifierEntity == null) {
             throw new Exception(uniqueKey + "不存在...");
         }
         // TODO 处理其他实体对共享实体的引用
         notifierEntity.setIsDelete(true);
-        notifierRepository.save(notifierEntity);
+        notifierConfigRepository.save(notifierEntity);
     }
 }

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

@@ -15,7 +15,6 @@ public class BuildConfigVO {
     private String repo;
     private String compiler;
     private String packer;
-    private String dockerfile;
 
     public static BuildConfigVO from(BuildConfig buildConfig) {
         BuildConfigVO vo = new BuildConfigVO();

+ 10 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -3,7 +3,8 @@ package cn.reghao.autodop.dmaster.app.vo.orchestration;
 import cn.reghao.autodop.common.dagent.app.api.data.log.LogLevel;
 import cn.reghao.autodop.common.dagent.app.api.data.log.LogType;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
-import cn.reghao.autodop.dmaster.app.constant.build.PackerType;
+import cn.reghao.autodop.common.dagent.app.api.data.deploy.PackerType;
+import cn.reghao.autodop.dmaster.app.constant.build.CompilerType;
 import cn.reghao.autodop.dmaster.app.constant.build.RepoAuthType;
 import cn.reghao.autodop.dmaster.app.constant.build.RepoType;
 import cn.reghao.autodop.dmaster.app.entity.config.NotifierConfig;
@@ -42,8 +43,9 @@ public class AppVO {
     private String branch;
     private String dirname;
     private String compileHome;
+    private String dockerfile;
 
-    private BuildConfigVO buildConfigVO;
+    private BuildConfigVO buildConfig;
     private String projId;
 
     /* 部署配置 */
@@ -67,9 +69,10 @@ public class AppVO {
         vo.branch = app.getBranch();
         vo.dirname = app.getDirname();
         vo.compileHome = app.getCompileHome();
+        vo.dockerfile = app.getDockerfile();
 
         if (app.getBuildConfig() != null) {
-            vo.buildConfigVO = BuildConfigVO.from(app.getBuildConfig());
+            vo.buildConfig = BuildConfigVO.from(app.getBuildConfig());
         } else {
             vo.projId = app.getProj().getProjId();
         }
@@ -101,9 +104,10 @@ public class AppVO {
         app.setBranch(vo.branch);
         app.setDirname(vo.dirname);
         app.setCompileHome(vo.compileHome);
+        app.setDockerfile(vo.getDockerfile());
 
-        if (vo.getBuildConfigVO() != null) {
-            app.setBuildConfig(BuildConfigVO.to(vo.getBuildConfigVO()));
+        if (vo.getBuildConfig() != null) {
+            app.setBuildConfig(BuildConfigVO.to(vo.getBuildConfig()));
         } else {
             app.setProj(new ProjOrchestration(vo.getProjId()));
         }
@@ -147,7 +151,7 @@ public class AppVO {
 
         CompilerConfig compilerConfig = new CompilerConfig();
         compilerConfig.setName("dotnet5-dev");
-        compilerConfig.setType(CompilerType.dotnet.name());
+        compilerConfig.setType(CompilerType.dotnetCore.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");

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

@@ -2,7 +2,7 @@ package cn.reghao.autodop.dmaster.app.vo.orchestration;
 
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.constant.build.CompilerType;
-import cn.reghao.autodop.dmaster.app.constant.build.PackerType;
+import cn.reghao.autodop.common.dagent.app.api.data.deploy.PackerType;
 import cn.reghao.autodop.dmaster.app.constant.build.RepoAuthType;
 import cn.reghao.autodop.dmaster.app.constant.build.RepoType;
 import cn.reghao.autodop.dmaster.app.entity.config.build.BuildConfig;

+ 23 - 6
scripts/test1.json

@@ -1,8 +1,25 @@
 {
-  "sname":"dlazykj0",
-  "spwd":"azy2018Iquizoo",
-  "scorpid":"",
-  "sprdid":"1012818",
-  "sdst":"15680425297",
-  "smsg":""
+  "appId": "calculate-score",
+  "env": "test",
+  "description": "算分服务",
+  "alwaysBuild": true,
+  "enable": true,
+  "appType": "dotnetCore",
+  "appRepo": "git@codeup.aliyun.com:5f1f8daf6207a1a8b17f6742/background/CalculateScoreService.git",
+  "branch": "develop",
+  "dirname": "CalculateScoreService",
+  "compileHome": "/IQuizoo.CalculateScoreService",
+  "dockerfile": "FROM debian10/dotnetcore/rt:5.0\n\nRUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \\\n    && echo 'Asia/Shanghai' >/etc/timezone\n\nENV ASPNETCORE_ENVIRONMENT Production\nENV ASPNETCORE_URLS http://172.16.45.65:8003;\n\nWORKDIR /app\nCOPY ./bin/Debug/net5.0/publish/ .\nENTRYPOINT [\"dotnet\", \"IQuizoo.CalculateScoreService.dll\"]",
+  "buildConfig": {
+    "repo": "git-codeup",
+    "compiler": "dotnet5-dev",
+    "packer": "docker-test"
+  },
+  "deployConfigs": [],
+  "runningConfig": {
+    "httpPort": 8003,
+    "healthCheck": "/health",
+    "logConfigs": []
+  },
+  "notifier": "ding-dev"
 }