Browse Source

更新 AppDeployConfig 相关接口和实现

reghao 4 weeks ago
parent
commit
c1cd4f2013

+ 3 - 10
agent/src/main/java/cn/reghao/devops/agent/service/DeployJob.java

@@ -1,5 +1,6 @@
 package cn.reghao.devops.agent.service;
 package cn.reghao.devops.agent.service;
 
 
+import cn.reghao.devops.common.model.DockerParams;
 import cn.reghao.devops.common.msg.DeployStepName;
 import cn.reghao.devops.common.msg.DeployStepName;
 import cn.reghao.devops.common.docker.DockerManager;
 import cn.reghao.devops.common.docker.DockerManager;
 import cn.reghao.devops.common.docker.model.DockerContainerConfig;
 import cn.reghao.devops.common.docker.model.DockerContainerConfig;
@@ -42,16 +43,8 @@ public class DeployJob  {
 
 
             runStep(ctx, DeployStepName.START_NEW.name(), () -> {
             runStep(ctx, DeployStepName.START_NEW.name(), () -> {
                 log.info(">>> [Step 3] 正在启动容器...");
                 log.info(">>> [Step 3] 正在启动容器...");
-                DockerContainerConfig containerConfig = JsonConverter.jsonToObject(task.getStartScript(), DockerContainerConfig.class);
-                if (containerConfig == null) {
-                    containerConfig = new DockerContainerConfig(task.getPackagePath());
-                } else {
-                    containerConfig.setImage(task.getPackagePath());
-                    if (containerConfig.getHostConfig() == null) {
-                        containerConfig.setHostConfig(new DockerContainerConfig.HostConfig());
-                    }
-                }
-
+                DockerParams dockerParams = task.getDockerParams();
+                DockerContainerConfig containerConfig  = new DockerContainerConfig(task.getPackagePath(), dockerParams);
                 DockerManager.getDocker().createAndRun(appId, containerConfig);
                 DockerManager.getDocker().createAndRun(appId, containerConfig);
             });
             });
 
 

+ 19 - 6
common/src/main/java/cn/reghao/devops/common/docker/DockerImpl.java

@@ -216,15 +216,28 @@ public class DockerImpl implements Docker {
             createContainerCmd.withEnv(env);
             createContainerCmd.withEnv(env);
         }
         }
 
 
-        Double cpuQuota = 100000*dockerContainerConfig.getHostConfig().getCpuQuota();
-        int memMb = dockerContainerConfig.getHostConfig().getMemory();
-        int memReservationMb = dockerContainerConfig.getHostConfig().getMemoryReservation();
         HostConfig hostConfig = HostConfig.newHostConfig()
         HostConfig hostConfig = HostConfig.newHostConfig()
-                .withCpuQuota(cpuQuota.longValue())                 // 限制使用 1.0 核 (周期默认为 100000)
-                .withMemory(1024L * 1024 * memMb)      // 限制 1GB 内存
-                .withMemoryReservation(1024L * 1024 * memReservationMb) // 保证 512MB 内存
                 .withNetworkMode("host")
                 .withNetworkMode("host")
                 .withRestartPolicy(RestartPolicy.alwaysRestart());
                 .withRestartPolicy(RestartPolicy.alwaysRestart());
+        if (dockerContainerConfig.getHostConfig().getCpuQuota() != 0.0) {
+            Double cpuQuota = 100000L* dockerContainerConfig.getHostConfig().getCpuQuota();
+            hostConfig.withCpuQuota(cpuQuota.longValue());
+        }
+
+        if (dockerContainerConfig.getHostConfig().getMemory() != 0) {
+            int memMb = dockerContainerConfig.getHostConfig().getMemory();
+            int memReservationMb = dockerContainerConfig.getHostConfig().getMemoryReservation();
+            hostConfig.withMemory(1024L*1024*memMb);
+            hostConfig.withMemoryReservation(1024L*1024*memReservationMb);
+        }
+
+        HostConfig hostConfig1 = HostConfig.newHostConfig()
+                .withCpuQuota(100000L)                 // 限制使用 1.0 核 (周期默认为 100000)
+                .withMemory(1024L * 1024 * 1024)      // 限制 1GB 内存
+                .withMemoryReservation(1024L * 1024 * 512) // 保证 512MB 内存
+                .withNetworkMode("host")
+                .withRestartPolicy(RestartPolicy.alwaysRestart());
+
         if (!dockerContainerConfig.getVolumes().getMap().isEmpty()) {
         if (!dockerContainerConfig.getVolumes().getMap().isEmpty()) {
             List<Bind> list = dockerContainerConfig.getVolumes().getMap().entrySet().stream()
             List<Bind> list = dockerContainerConfig.getVolumes().getMap().entrySet().stream()
                     .map(entry -> {
                     .map(entry -> {

+ 17 - 4
common/src/main/java/cn/reghao/devops/common/docker/model/DockerContainerConfig.java

@@ -1,5 +1,6 @@
 package cn.reghao.devops.common.docker.model;
 package cn.reghao.devops.common.docker.model;
 
 
+import cn.reghao.devops.common.model.DockerParams;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.annotations.SerializedName;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
@@ -9,6 +10,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * docker 容器创建时的配置
  * docker 容器创建时的配置
@@ -26,8 +28,19 @@ public class DockerContainerConfig implements Cloneable {
     @SerializedName("Volumes") private Volumes volumes = new Volumes();
     @SerializedName("Volumes") private Volumes volumes = new Volumes();
     @SerializedName("HostConfig") private HostConfig hostConfig = new HostConfig();
     @SerializedName("HostConfig") private HostConfig hostConfig = new HostConfig();
 
 
-    public DockerContainerConfig(String image) {
+    public DockerContainerConfig(String image, DockerParams dockerParams) {
         this.image = image;
         this.image = image;
+        this.env = dockerParams.getEnvs().stream()
+                .map(keyValue -> String.format("%s=%s", keyValue.getKey(), keyValue.getValue()))
+                .toList();
+        if (dockerParams.getCpu() != 0.0) {
+            hostConfig.setCpuQuota(dockerParams.getCpu());
+        }
+
+        if (dockerParams.getMemory() != 0.0) {
+            hostConfig.setMemory(dockerParams.getMemory());
+            hostConfig.setMemoryReservation(dockerParams.getMemory()/2);
+        }
     }
     }
 
 
     @Override
     @Override
@@ -43,9 +56,9 @@ public class DockerContainerConfig implements Cloneable {
         @SerializedName("MemoryReservation") private int memoryReservation;
         @SerializedName("MemoryReservation") private int memoryReservation;
 
 
         public HostConfig() {
         public HostConfig() {
-            this.cpuQuota = 1.0;
-            this.memory = 1024;
-            this.memoryReservation = 512;
+            this.cpuQuota = 0.0;
+            this.memory = 0;
+            this.memoryReservation = 0;
         }
         }
     }
     }
 
 

+ 22 - 0
common/src/main/java/cn/reghao/devops/common/model/DockerParams.java

@@ -0,0 +1,22 @@
+package cn.reghao.devops.common.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2026-04-08 11:55:41
+ */
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class DockerParams implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private double cpu;
+    private int memory;
+    private List<KeyValue> envs;
+}

+ 5 - 3
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/model/vo/KeyValue.java → common/src/main/java/cn/reghao/devops/common/model/KeyValue.java

@@ -1,14 +1,16 @@
-package cn.reghao.devops.mgr.ops.builder.model.vo;
+package cn.reghao.devops.common.model;
 
 
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
-import lombok.Getter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 
 /**
 /**
  * @author reghao
  * @author reghao
  * @date 2026-03-19 10:46:15
  * @date 2026-03-19 10:46:15
  */
  */
+@NoArgsConstructor
 @AllArgsConstructor
 @AllArgsConstructor
-@Getter
+@Data
 public class KeyValue {
 public class KeyValue {
     private String key;
     private String key;
     private String value;
     private String value;

+ 2 - 2
common/src/main/java/cn/reghao/devops/common/msg/event/EvtAppDeploy.java

@@ -1,6 +1,7 @@
 package cn.reghao.devops.common.msg.event;
 package cn.reghao.devops.common.msg.event;
 
 
 import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.common.docker.model.DockerAuth;
+import cn.reghao.devops.common.model.DockerParams;
 import cn.reghao.jutil.jdk.event.message.Event;
 import cn.reghao.jutil.jdk.event.message.Event;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
@@ -16,7 +17,6 @@ public class EvtAppDeploy extends Event {
     private String appId;
     private String appId;
     private int appPort;
     private int appPort;
     private String packagePath;
     private String packagePath;
-    private String startScript;
-    private String startHome;
+    private DockerParams dockerParams;
     private DockerAuth dockerAuth;
     private DockerAuth dockerAuth;
 }
 }

+ 4 - 16
mgr/src/main/java/cn/reghao/devops/mgr/ops/app/controller/AppDeployConfigPageController.java

@@ -1,10 +1,8 @@
 package cn.reghao.devops.mgr.ops.app.controller;
 package cn.reghao.devops.mgr.ops.app.controller;
 
 
-import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigUpdateDto;
 import cn.reghao.devops.mgr.util.SelectOption;
 import cn.reghao.devops.mgr.util.SelectOption;
 import cn.reghao.devops.mgr.ops.app.db.query.AppDeployQuery;
 import cn.reghao.devops.mgr.ops.app.db.query.AppDeployQuery;
 import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigDto;
 import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigDto;
-import cn.reghao.devops.mgr.ops.app.model.po.AppDeployConfig;
 import cn.reghao.devops.mgr.ops.app.model.vo.AppDeployConfigVO;
 import cn.reghao.devops.mgr.ops.app.model.vo.AppDeployConfigVO;
 import cn.reghao.devops.mgr.ops.app.service.AppDeployService;
 import cn.reghao.devops.mgr.ops.app.service.AppDeployService;
 import cn.reghao.devops.mgr.ops.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.ops.machine.service.MachineQuery;
@@ -41,7 +39,7 @@ public class AppDeployConfigPageController {
         this.appDeployService = appDeployService;
         this.appDeployService = appDeployService;
     }
     }
 
 
-    @Operation(summary = "部署配置列表页面", description = "N")
+    @Operation(summary = "部署配置", description = "N")
     @GetMapping("")
     @GetMapping("")
     public String deployConfigIndexPage(@RequestParam("appId") String appId) {
     public String deployConfigIndexPage(@RequestParam("appId") String appId) {
         List<AppDeployConfigVO> list = appDeployQuery.getByAppId(appId).stream()
         List<AppDeployConfigVO> list = appDeployQuery.getByAppId(appId).stream()
@@ -57,27 +55,17 @@ public class AppDeployConfigPageController {
         return WebResult.success(machines);
         return WebResult.success(machines);
     }
     }
 
 
-    @Operation(summary = "编辑部署配置页面", description = "N")
-    @GetMapping("/edit")
-    public String editAppConfigPage(@RequestParam("appId") String appId,
-                                    @RequestParam("machineId") String machineId,
-                                    Model model) {
-        AppDeployConfig appDeployConfig = appDeployQuery.getByAppIdAndMachineId(appId, machineId);
-        model.addAttribute("appDeployConfig", appDeployConfig);
-        return "/admin/devops/app/deploy_edit";
-    }
-
     @Operation(summary = "添加应用部署配置", description = "N")
     @Operation(summary = "添加应用部署配置", description = "N")
     @PostMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE)
     @PostMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String add(@Validated DeployConfigDto deployConfigDto) {
+    public String add(@RequestBody @Validated DeployConfigDto deployConfigDto) {
         Result result = appDeployService.addDeployConfig(deployConfigDto);
         Result result = appDeployService.addDeployConfig(deployConfigDto);
         return WebResult.result(result);
         return WebResult.result(result);
     }
     }
 
 
     @Operation(summary = "修改应用部署配置", description = "N")
     @Operation(summary = "修改应用部署配置", description = "N")
     @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
     @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String update(@Validated DeployConfigUpdateDto deployConfigUpdateDto) {
-        Result result = appDeployService.updateStartScript(deployConfigUpdateDto);
+    public String update(@RequestBody @Validated DeployConfigDto deployConfigDto) {
+        Result result = appDeployService.updateStartScript(deployConfigDto);
         return WebResult.result(result);
         return WebResult.result(result);
     }
     }
 
 

+ 6 - 2
mgr/src/main/java/cn/reghao/devops/mgr/ops/app/model/dto/DeployConfigDto.java

@@ -1,7 +1,9 @@
 package cn.reghao.devops.mgr.ops.app.model.dto;
 package cn.reghao.devops.mgr.ops.app.model.dto;
 
 
+import cn.reghao.devops.common.model.DockerParams;
 import cn.reghao.devops.common.msg.constant.PackType;
 import cn.reghao.devops.common.msg.constant.PackType;
 import cn.reghao.jutil.jdk.web.validator.ValidEnum;
 import cn.reghao.jutil.jdk.web.validator.ValidEnum;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
@@ -14,6 +16,7 @@ import java.io.Serializable;
  * @author reghao
  * @author reghao
  * @date 2020-05-13 16:59:20
  * @date 2020-05-13 16:59:20
  */
  */
+@AllArgsConstructor
 @NoArgsConstructor
 @NoArgsConstructor
 @Data
 @Data
 public class DeployConfigDto implements Serializable {
 public class DeployConfigDto implements Serializable {
@@ -23,12 +26,13 @@ public class DeployConfigDto implements Serializable {
     private String appId;
     private String appId;
     @NotBlank(message = "machineId 不能为空白字符串")
     @NotBlank(message = "machineId 不能为空白字符串")
     private String machineId;
     private String machineId;
-    private String machineIpv4;
     @ValidEnum(value = PackType.class, message = "请选择正确的打包类型")
     @ValidEnum(value = PackType.class, message = "请选择正确的打包类型")
     private String packType;
     private String packType;
+    private DockerParams dockerParams;
+
     // packType 是 docker 时 startScript 的内容是 cn.reghao.devops.common.dockerc.pojo.DockerContainerConfig 序列化为 JSON 后的字符串
     // packType 是 docker 时 startScript 的内容是 cn.reghao.devops.common.dockerc.pojo.DockerContainerConfig 序列化为 JSON 后的字符串
     // 具体参照 https://docs.docker.com/engine/api/v1.40/#operation/ContainerCreate 的 reqeust body
     // 具体参照 https://docs.docker.com/engine/api/v1.40/#operation/ContainerCreate 的 reqeust body
-    private String startScript;
+    private String startScript = "{}";
     private String unpackScript;
     private String unpackScript;
     private String startHome;
     private String startHome;
 }
 }

+ 0 - 27
mgr/src/main/java/cn/reghao/devops/mgr/ops/app/model/dto/DeployConfigUpdateDto.java

@@ -1,27 +0,0 @@
-package cn.reghao.devops.mgr.ops.app.model.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * @author reghao
- * @date 2025-10-13 09:50:00
- */
-@Setter
-@Getter
-public class DeployConfigUpdateDto {
-    @NotNull
-    @NotBlank
-    private String appId;
-    @NotNull
-    @NotBlank
-    private String machineId;
-    // packType 是 docker 时 startScript 的内容是 cn.reghao.devops.common.dockerc.pojo.DockerContainerConfig 序列化为 JSON 后的字符串
-    // 具体参照 https://docs.docker.com/engine/api/v1.40/#operation/ContainerCreate 的 reqeust body
-    @NotNull
-    @NotBlank
-    private String startScript;
-}

+ 8 - 0
mgr/src/main/java/cn/reghao/devops/mgr/ops/app/model/vo/AppDeployConfigVO.java

@@ -1,6 +1,10 @@
 package cn.reghao.devops.mgr.ops.app.model.vo;
 package cn.reghao.devops.mgr.ops.app.model.vo;
 
 
+import cn.reghao.devops.common.model.DockerParams;
+import cn.reghao.devops.common.msg.constant.PackType;
+import cn.reghao.devops.mgr.ops.app.model.constant.AppType;
 import cn.reghao.devops.mgr.ops.app.model.po.AppDeployConfig;
 import cn.reghao.devops.mgr.ops.app.model.po.AppDeployConfig;
+import cn.reghao.jutil.jdk.serializer.JsonConverter;
 import lombok.Data;
 import lombok.Data;
 
 
 /**
 /**
@@ -16,6 +20,7 @@ public class AppDeployConfigVO {
     private String machineId;
     private String machineId;
     private String machineIpv4;
     private String machineIpv4;
     private String packType;
     private String packType;
+    private DockerParams dockerParams;
     private String startScript;
     private String startScript;
     private String unpackScript;
     private String unpackScript;
     private String startHome;
     private String startHome;
@@ -26,6 +31,9 @@ public class AppDeployConfigVO {
         this.machineId = appDeployConfig.getMachineInfo().getMachineId();
         this.machineId = appDeployConfig.getMachineInfo().getMachineId();
         this.machineIpv4 = appDeployConfig.getMachineInfo().getMachineIpv4();
         this.machineIpv4 = appDeployConfig.getMachineInfo().getMachineIpv4();
         this.packType = appDeployConfig.getAppConfig().getPackerConfig().getType();
         this.packType = appDeployConfig.getAppConfig().getPackerConfig().getType();
+        if (PackType.docker.name().equals(this.packType)) {
+            this.dockerParams = JsonConverter.jsonToObject(appDeployConfig.getStartScript(), DockerParams.class);
+        }
         this.startScript = appDeployConfig.getStartScript();
         this.startScript = appDeployConfig.getStartScript();
         this.unpackScript = appDeployConfig.getUnpackScript();
         this.unpackScript = appDeployConfig.getUnpackScript();
         this.startHome = appDeployConfig.getStartHome();
         this.startHome = appDeployConfig.getStartHome();

+ 1 - 2
mgr/src/main/java/cn/reghao/devops/mgr/ops/app/service/AppDeployService.java

@@ -2,7 +2,6 @@ package cn.reghao.devops.mgr.ops.app.service;
 
 
 import cn.reghao.devops.common.msg.event.EvtAppStatResult;
 import cn.reghao.devops.common.msg.event.EvtAppStatResult;
 import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigDto;
 import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigDto;
-import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigUpdateDto;
 import cn.reghao.devops.mgr.ops.builder.model.po.AppBuilding;
 import cn.reghao.devops.mgr.ops.builder.model.po.AppBuilding;
 import cn.reghao.devops.mgr.ops.machine.model.po.MachineInfo;
 import cn.reghao.devops.mgr.ops.machine.model.po.MachineInfo;
 import cn.reghao.jutil.jdk.web.result.Result;
 import cn.reghao.jutil.jdk.web.result.Result;
@@ -13,7 +12,7 @@ import cn.reghao.jutil.jdk.web.result.Result;
  */
  */
 public interface AppDeployService {
 public interface AppDeployService {
     Result addDeployConfig(DeployConfigDto deployConfigDto);
     Result addDeployConfig(DeployConfigDto deployConfigDto);
-    Result updateStartScript(DeployConfigUpdateDto deployConfigUpdateDto);
+    Result updateStartScript(DeployConfigDto deployConfigDto);
     Result deleteDeployConfig(int appDeployConfigId);
     Result deleteDeployConfig(int appDeployConfigId);
     Result deleteByApp(String appId);
     Result deleteByApp(String appId);
     void deleteByMachineInfo(MachineInfo machineInfo);
     void deleteByMachineInfo(MachineInfo machineInfo);

+ 26 - 27
mgr/src/main/java/cn/reghao/devops/mgr/ops/app/service/impl/AppDeployServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.reghao.devops.mgr.ops.app.service.impl;
 package cn.reghao.devops.mgr.ops.app.service.impl;
 
 
+import cn.reghao.devops.common.model.DockerParams;
 import cn.reghao.devops.common.msg.DeployStepName;
 import cn.reghao.devops.common.msg.DeployStepName;
 import cn.reghao.devops.common.docker.model.DockerContainerConfig;
 import cn.reghao.devops.common.docker.model.DockerContainerConfig;
 import cn.reghao.devops.common.msg.constant.PackType;
 import cn.reghao.devops.common.msg.constant.PackType;
@@ -14,7 +15,6 @@ import cn.reghao.devops.mgr.ops.builder.db.repository.AppDeployingRepository;
 import cn.reghao.devops.mgr.ops.app.db.repository.AppDeployConfigRepository;
 import cn.reghao.devops.mgr.ops.app.db.repository.AppDeployConfigRepository;
 import cn.reghao.devops.mgr.ops.builder.db.repository.DeployLogRepository;
 import cn.reghao.devops.mgr.ops.builder.db.repository.DeployLogRepository;
 import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigDto;
 import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigDto;
-import cn.reghao.devops.mgr.ops.app.model.dto.DeployConfigUpdateDto;
 import cn.reghao.devops.mgr.ops.builder.model.po.AppBuilding;
 import cn.reghao.devops.mgr.ops.builder.model.po.AppBuilding;
 import cn.reghao.devops.mgr.ops.builder.model.po.AppDeploying;
 import cn.reghao.devops.mgr.ops.builder.model.po.AppDeploying;
 import cn.reghao.devops.mgr.ops.app.model.po.AppConfig;
 import cn.reghao.devops.mgr.ops.app.model.po.AppConfig;
@@ -31,6 +31,7 @@ import cn.reghao.jutil.jdk.web.result.NotAvailable;
 import cn.reghao.jutil.jdk.web.result.Result;
 import cn.reghao.jutil.jdk.web.result.Result;
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
+import cn.reghao.jutil.jdk.web.result.ResultStatus;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -82,56 +83,54 @@ public class AppDeployServiceImpl implements AppDeployService {
         AppConfig appConfig = appBuildQuery.getAppConfig(appId);
         AppConfig appConfig = appBuildQuery.getAppConfig(appId);
         if (appConfig == null) {
         if (appConfig == null) {
             String msg = String.format("%s 不存在", appId);
             String msg = String.format("%s 不存在", appId);
-            return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.ERROR, msg);
+            return Result.result(ResultStatus.ERROR, msg);
         }
         }
 
 
         String machineId = deployConfigDto.getMachineId();
         String machineId = deployConfigDto.getMachineId();
         MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
         MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
         if (machineInfo == null) {
         if (machineInfo == null) {
             String msg = String.format("%s 不存在", machineId);
             String msg = String.format("%s 不存在", machineId);
-            return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.ERROR, msg);
-        }
-
-        String startScript = deployConfigDto.getStartScript();
-        if (startScript == null || startScript.isBlank()) {
-            startScript = "{}";
+            return Result.result(ResultStatus.ERROR, msg);
         }
         }
 
 
+        String startScript;
         String packType = deployConfigDto.getPackType();
         String packType = deployConfigDto.getPackType();
         if (packType.equals(PackType.docker.name())) {
         if (packType.equals(PackType.docker.name())) {
-            DockerContainerConfig containerConfig = JsonConverter.jsonToObject(startScript, DockerContainerConfig.class);
+            DockerParams dockerParams = deployConfigDto.getDockerParams();
+            startScript = JsonConverter.objectToJson(dockerParams);
+        } else {
+            startScript = deployConfigDto.getStartScript();
         }
         }
 
 
         AppDeployConfig appDeployConfig = new AppDeployConfig(appConfig, machineInfo, startScript);
         AppDeployConfig appDeployConfig = new AppDeployConfig(appConfig, machineInfo, startScript);
         deployConfigRepository.save(appDeployConfig);
         deployConfigRepository.save(appDeployConfig);
-
         AppDeploying appDeploying = new AppDeploying(appDeployConfig);
         AppDeploying appDeploying = new AppDeploying(appDeployConfig);
         appDeployingRepository.save(appDeploying);
         appDeployingRepository.save(appDeploying);
-        return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.SUCCESS);
+        return Result.result(ResultStatus.SUCCESS);
     }
     }
 
 
     @Override
     @Override
-    public Result updateStartScript(DeployConfigUpdateDto deployConfigUpdateDto) {
-        String appId = deployConfigUpdateDto.getAppId();
-        String machineId = deployConfigUpdateDto.getMachineId();
+    public Result updateStartScript(DeployConfigDto deployConfigDto) {
+        String appId = deployConfigDto.getAppId();
+        String machineId = deployConfigDto.getMachineId();
         AppDeployConfig appDeployConfig = appDeployQuery.getByAppIdAndMachineId(appId, machineId);
         AppDeployConfig appDeployConfig = appDeployQuery.getByAppIdAndMachineId(appId, machineId);
         if (appDeployConfig == null) {
         if (appDeployConfig == null) {
             String msg = String.format("%s 在 %s 上的部署配置不存在", appId, machineId);
             String msg = String.format("%s 在 %s 上的部署配置不存在", appId, machineId);
-            return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.ERROR, msg);
+            return Result.result(ResultStatus.ERROR, msg);
         }
         }
 
 
-        String startScript = deployConfigUpdateDto.getStartScript();
         String packType = appDeployConfig.getAppConfig().getPackerConfig().getType();
         String packType = appDeployConfig.getAppConfig().getPackerConfig().getType();
         if (packType.equals(PackType.docker.name())) {
         if (packType.equals(PackType.docker.name())) {
-            DockerContainerConfig containerConfig = JsonConverter.jsonToObject(startScript, DockerContainerConfig.class);
-            if (startScript == null || startScript.isBlank()) {
-                startScript = "{}";
+            DockerParams dockerParams = deployConfigDto.getDockerParams();
+            if (dockerParams == null) {
+                return Result.result(ResultStatus.FAIL, "param dockerParams is null");
             }
             }
+
+            appDeployConfig.setStartScript(JsonConverter.objectToJson(dockerParams));
+            deployConfigRepository.save(appDeployConfig);
         }
         }
 
 
-        appDeployConfig.setStartScript(startScript);
-        deployConfigRepository.save(appDeployConfig);
-        return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.SUCCESS);
+        return Result.result(ResultStatus.SUCCESS);
     }
     }
 
 
     @Override
     @Override
@@ -144,7 +143,7 @@ public class AppDeployServiceImpl implements AppDeployService {
     public Result deleteDeployConfig(int appDeployConfigId) {
     public Result deleteDeployConfig(int appDeployConfigId) {
         AppDeployConfig appDeployConfig = deployConfigRepository.findById(appDeployConfigId).orElse(null);
         AppDeployConfig appDeployConfig = deployConfigRepository.findById(appDeployConfigId).orElse(null);
         if (appDeployConfig == null) {
         if (appDeployConfig == null) {
-            return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.FAIL, "AppDeployConfig not exists");
+            return Result.result(ResultStatus.FAIL, "AppDeployConfig not exists");
         }
         }
 
 
         return deleteAppDeployConfig(appDeployConfig);
         return deleteAppDeployConfig(appDeployConfig);
@@ -157,10 +156,10 @@ public class AppDeployServiceImpl implements AppDeployService {
             appDeployingRepository.delete(appDeploying);
             appDeployingRepository.delete(appDeploying);
             deployLogRepository.deleteByAppDeployConfig_MachineInfo_MachineId(machineId);
             deployLogRepository.deleteByAppDeployConfig_MachineInfo_MachineId(machineId);
             deployConfigRepository.delete(appDeployConfig);
             deployConfigRepository.delete(appDeployConfig);
-            return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.SUCCESS);
+            return Result.result(ResultStatus.SUCCESS);
         }
         }
 
 
-        return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.FAIL, "app is running");
+        return Result.result(ResultStatus.FAIL, "app is running");
     }
     }
 
 
     @Override
     @Override
@@ -168,12 +167,12 @@ public class AppDeployServiceImpl implements AppDeployService {
         List<AppDeployConfig> list = deployConfigRepository.findByAppConfig_AppId(appId);
         List<AppDeployConfig> list = deployConfigRepository.findByAppConfig_AppId(appId);
         for (AppDeployConfig appDeployConfig : list) {
         for (AppDeployConfig appDeployConfig : list) {
             Result result = deleteAppDeployConfig(appDeployConfig);
             Result result = deleteAppDeployConfig(appDeployConfig);
-            if (result.getCode() != cn.reghao.jutil.jdk.web.result.ResultStatus.SUCCESS.getCode()) {
+            if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
                 return result;
                 return result;
             }
             }
         }
         }
 
 
-        return Result.result(cn.reghao.jutil.jdk.web.result.ResultStatus.SUCCESS);
+        return Result.result(ResultStatus.SUCCESS);
     }
     }
 
 
     @Override
     @Override

+ 1 - 1
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/controller/AppStatController.java

@@ -6,7 +6,7 @@ import cn.reghao.devops.mgr.ops.app.db.query.AppDeployQuery;
 import cn.reghao.devops.mgr.ops.builder.model.vo.AppRunning;
 import cn.reghao.devops.mgr.ops.builder.model.vo.AppRunning;
 import cn.reghao.devops.mgr.ops.builder.model.vo.AppRunningNode;
 import cn.reghao.devops.mgr.ops.builder.model.vo.AppRunningNode;
 import cn.reghao.devops.mgr.ops.app.service.AppRunService;
 import cn.reghao.devops.mgr.ops.app.service.AppRunService;
-import cn.reghao.devops.mgr.ops.mon.PrometheusService;
+import cn.reghao.devops.mgr.ops.mon.service.PrometheusService;
 import cn.reghao.devops.mgr.ops.mon.model.ContainerReportVO;
 import cn.reghao.devops.mgr.ops.mon.model.ContainerReportVO;
 import cn.reghao.jutil.jdk.web.db.PageList;
 import cn.reghao.jutil.jdk.web.db.PageList;
 import cn.reghao.jutil.jdk.web.result.Result;
 import cn.reghao.jutil.jdk.web.result.Result;

+ 6 - 5
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/service/PipelineContext.java

@@ -29,7 +29,7 @@ public class PipelineContext implements AutoCloseable {
     private AppBuildingRepository buildingRepository;
     private AppBuildingRepository buildingRepository;
     private AppConfig appConfig;
     private AppConfig appConfig;
     private String appId;
     private String appId;
-    private String projDir;
+    private String projName;
     private String appType;
     private String appType;
     private String buildId;
     private String buildId;
     private String gitUrl;
     private String gitUrl;
@@ -53,13 +53,13 @@ public class PipelineContext implements AutoCloseable {
         this.buildingRepository = buildingRepository;
         this.buildingRepository = buildingRepository;
         this.appConfig = appConfig;
         this.appConfig = appConfig;
         this.appId = appConfig.getAppId();
         this.appId = appConfig.getAppId();
-        this.projDir = appConfig.getProjName();
+        this.projName = appConfig.getProjName();
         this.appType = appConfig.getAppType();
         this.appType = appConfig.getAppType();
         this.buildId = buildId;
         this.buildId = buildId;
         this.gitUrl = appConfig.getAppRepo();
         this.gitUrl = appConfig.getAppRepo();
         this.branch = appConfig.getRepoBranch();
         this.branch = appConfig.getRepoBranch();
-        this.gitLocal = String.format("%s/%s_%s", LocalBuildDir.localRepo, this.appId, this.projDir);
-        this.compileDir = String.format("%s/%s_%s", LocalBuildDir.compileDir, this.appId, this.projDir);
+        this.gitLocal = String.format("%s/%s_%s", LocalBuildDir.localRepo, this.appId, this.projName);
+        this.compileDir = String.format("%s/%s_%s", LocalBuildDir.compileDir, this.appId, this.projName);
         this.dockerfile = appConfig.getDockerfile();
         this.dockerfile = appConfig.getDockerfile();
         this.logFile = new File(String.format("%s/%s_%s.log", LocalBuildDir.logDir, this.appId, this.buildId));
         this.logFile = new File(String.format("%s/%s_%s.log", LocalBuildDir.logDir, this.appId, this.buildId));
         if (!logFile.getParentFile().exists()) logFile.getParentFile().mkdirs();
         if (!logFile.getParentFile().exists()) logFile.getParentFile().mkdirs();
@@ -76,7 +76,8 @@ public class PipelineContext implements AutoCloseable {
      */
      */
     private String getProjName(String gitUrl) {
     private String getProjName(String gitUrl) {
         int lastIndex = gitUrl.lastIndexOf("/");
         int lastIndex = gitUrl.lastIndexOf("/");
-        return gitUrl.substring(lastIndex+1).split(".git")[0];
+        String projName1 = gitUrl.substring(lastIndex+1).split(".git")[0];
+        return projName;
     }
     }
 
 
     public String getRepoTag() {
     public String getRepoTag() {

+ 4 - 4
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/service/impl/DeployAppImpl.java

@@ -1,5 +1,6 @@
 package cn.reghao.devops.mgr.ops.builder.service.impl;
 package cn.reghao.devops.mgr.ops.builder.service.impl;
 
 
+import cn.reghao.devops.common.model.DockerParams;
 import cn.reghao.devops.common.msg.AgentCommand;
 import cn.reghao.devops.common.msg.AgentCommand;
 import cn.reghao.devops.common.msg.AgentMessage;
 import cn.reghao.devops.common.msg.AgentMessage;
 import cn.reghao.devops.common.docker.model.DockerAuth;
 import cn.reghao.devops.common.docker.model.DockerAuth;
@@ -22,6 +23,7 @@ import cn.reghao.devops.mgr.ops.builder.service.task.OssDeployTask;
 import cn.reghao.devops.mgr.ops.build.model.po.DockerRegistry;
 import cn.reghao.devops.mgr.ops.build.model.po.DockerRegistry;
 import cn.reghao.devops.mgr.ops.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.ops.machine.service.MachineQuery;
 import cn.reghao.devops.mgr.ws.WebSocketSessionManager;
 import cn.reghao.devops.mgr.ws.WebSocketSessionManager;
+import cn.reghao.jutil.jdk.serializer.JsonConverter;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -105,17 +107,15 @@ public class DeployAppImpl implements DeployApp {
         }
         }
 
 
         String startScript = appDeployConfig.getStartScript();
         String startScript = appDeployConfig.getStartScript();
-        String startHome = appDeployConfig.getStartHome();
-        String unpackScript = appDeployConfig.getUnpackScript();
         int appPort = appDeployConfig.getAppConfig().getHttpPort();
         int appPort = appDeployConfig.getAppConfig().getHttpPort();
         EvtAppDeploy deployParam = new EvtAppDeploy();
         EvtAppDeploy deployParam = new EvtAppDeploy();
         deployParam.setAppId(appId);
         deployParam.setAppId(appId);
         deployParam.setAppPort(appPort);
         deployParam.setAppPort(appPort);
         deployParam.setPackagePath(packagePath);
         deployParam.setPackagePath(packagePath);
         deployParam.setPackType(packType);
         deployParam.setPackType(packType);
-        deployParam.setStartScript(startScript);
-        deployParam.setStartHome(startHome);
         if (packType.equals(PackType.docker.getName())) {
         if (packType.equals(PackType.docker.getName())) {
+            DockerParams dockerParams = JsonConverter.jsonToObject(startScript, DockerParams.class);
+            deployParam.setDockerParams(dockerParams);
             DockerRegistry registry = appDeployConfig.getAppConfig().getPackerConfig().getTargetPathDocker();
             DockerRegistry registry = appDeployConfig.getAppConfig().getPackerConfig().getTargetPathDocker();
             if (registry != null) {
             if (registry != null) {
                 String username = registry.getRepoAuthConfig().getUsername();
                 String username = registry.getRepoAuthConfig().getUsername();

+ 1 - 1
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/tool/DockerBuild.java

@@ -3,7 +3,7 @@ package cn.reghao.devops.mgr.ops.builder.tool;
 import cn.reghao.devops.common.docker.DockerManager;
 import cn.reghao.devops.common.docker.DockerManager;
 import cn.reghao.devops.mgr.config.AppProperties;
 import cn.reghao.devops.mgr.config.AppProperties;
 import cn.reghao.devops.mgr.ops.build.model.po.CompilerBind;
 import cn.reghao.devops.mgr.ops.build.model.po.CompilerBind;
-import cn.reghao.devops.mgr.ops.builder.model.vo.KeyValue;
+import cn.reghao.devops.common.model.KeyValue;
 import cn.reghao.devops.mgr.ops.builder.service.PipelineContext;
 import cn.reghao.devops.mgr.ops.builder.service.PipelineContext;
 import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.async.ResultCallback;
 import com.github.dockerjava.api.async.ResultCallback;