Browse Source

调试构建部署接口

reghao 5 năm trước cách đây
mục cha
commit
26ef7671a1

+ 4 - 13
common/src/main/java/cn/reghao/autodop/common/dockerc/Docker.java

@@ -5,14 +5,11 @@ import cn.reghao.autodop.common.dockerc.api.ContainerOps;
 import cn.reghao.autodop.common.dockerc.api.DockerApi;
 import cn.reghao.autodop.common.dockerc.api.ImageOps;
 import cn.reghao.autodop.common.dockerc.exception.DockerException;
+import cn.reghao.autodop.common.dockerc.pojo.*;
 import cn.reghao.autodop.common.dockerc.unixdomain.DockerAuth;
 import cn.reghao.autodop.common.dockerc.unixdomain.DockerHeader;
 import cn.reghao.autodop.common.dockerc.unixdomain.UnixSocketClient;
 import cn.reghao.autodop.common.dockerc.unixdomain.HttpClient;
-import cn.reghao.autodop.common.dockerc.pojo.Container;
-import cn.reghao.autodop.common.dockerc.pojo.Config;
-import cn.reghao.autodop.common.dockerc.pojo.ContainerInspect;
-import cn.reghao.autodop.common.dockerc.pojo.HostConfig;
 import cn.reghao.autodop.common.utils.data.serializer.JsonArrayDeserializer;
 import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
 import cn.reghao.autodop.common.utils.security.Base64Util;
@@ -178,16 +175,10 @@ public class Docker implements ImageOps, ContainerOps, AutoCloseable {
     private String create(String name, String image) throws DockerException {
         String uri = DockerApi.createPost + "?name=" + name;
 
-        HostConfig hostConfig = HostConfig.builder()
-                .networkMode("host")
-                .restartPolicy()
-                .build();
+        RestartPolicy restartPolicy = new RestartPolicy("on-failure", 5);
+        HostConfig hostConfig = new HostConfig("host", restartPolicy);
 
-        /*Map<String, String> volumes = new HashMap<>();
-        volumes.put("/home/reghao/tmp/autodop/opt/logs", "/app/Logs");*/
-        // TODO 挂载日志目录到宿主机
-        Config config = Config.builder()
-                .image(image).hostConfig(hostConfig).build();
+        Config config = new Config(image, hostConfig);
         String tmp = JsonConverter.objectToJson(config);
         String json = tmp.replace("image", "Image")
                 .replace("hostConfig", "HostConfig")

+ 23 - 32
common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/Config.java

@@ -1,53 +1,44 @@
 package cn.reghao.autodop.common.dockerc.pojo;
 
+import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.util.ArrayList;
 import java.util.List;
 
 /**
  * @author reghao
  * @date 2020-01-14 23:11:21
  */
+@AllArgsConstructor
+@Data
 public class Config {
-    List<String> env;
+    private List<String> env;
     private String image;
     private HostConfig hostConfig;
     // TODO 挂载 host 上的目录
     //private Map<String, String> volumes;
 
-    public Config(Builder builder) {
-        this.image = builder.image;
-        this.hostConfig = builder.hostConfig;
-        //this.volumes = builder.volumes;
+    public Config(List<String> env, HostConfig hostConfig) {
+        this.env = env;
+        this.hostConfig = hostConfig;
     }
 
-    public static Builder builder() {
-        return new Builder();
+    public Config(String image, HostConfig hostConfig) {
+        this.image = image;
+        this.hostConfig = hostConfig;
     }
 
-    public static class Builder {
-        private String image;
-        private HostConfig hostConfig;
-        //private Map<String, String> volumes;
-
-        public Builder() {
-        }
-
-        public Builder image(final String image) {
-            this.image = image;
-            return this;
-        }
-
-        public Builder hostConfig(final HostConfig hostConfig) {
-            this.hostConfig = hostConfig;
-            return this;
-        }
-
-        /*public Builder volumes(final Map<String, String> volumes) {
-            this.volumes = volumes;
-            return this;
-        }*/
+    public static void main(String[] args) {
+        RestartPolicy restartPolicy = new RestartPolicy("on-failure", 5);
+        HostConfig hostConfig = new HostConfig("host", restartPolicy);
+        List<String> env = new ArrayList<>();
+        env.add("ASPNETCORE_ENVIRONMENT=Production");
+        env.add("ASPNETCORE_URLS=http://172.16.45.67:8002;https://172.16.45.67:8102");
 
-        public Config build() {
-            return new Config(this);
-        }
+        Config config = new Config(env, hostConfig);
+        String tmp = JsonConverter.objectToJson(config);
+        System.out.println();
     }
 }

+ 5 - 31
common/src/main/java/cn/reghao/autodop/common/dockerc/pojo/HostConfig.java

@@ -1,41 +1,15 @@
 package cn.reghao.autodop.common.dockerc.pojo;
 
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
 /**
  * @author reghao
  * @date 2020-01-14 23:16:52
  */
+@AllArgsConstructor
+@Data
 public class HostConfig {
     private String networkMode;
     private RestartPolicy restartPolicy;
-
-    private HostConfig(Builder builder) {
-        this.networkMode = builder.networkMode;
-        this.restartPolicy = builder.restartPolicy;
-    }
-
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    public static final class Builder {
-        private String networkMode;
-        private RestartPolicy restartPolicy;
-
-        public Builder() {
-        }
-
-        public Builder networkMode(final String networkMode) {
-            this.networkMode = networkMode;
-            return this;
-        }
-
-        public Builder restartPolicy() {
-            this.restartPolicy = new RestartPolicy("on-failure", 5);
-            return this;
-        }
-
-        public HostConfig build() {
-            return new HostConfig(this);
-        }
-    }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/DmasterApplication.java

@@ -13,7 +13,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 //@EnableScheduling
 @SpringBootApplication
 @EnableJpaRepositories
-@EntityScan({"cn.reghao.autodop.dmaster", "cn.reghao.autodop.common.dagent.machine.api.data"})
+@EntityScan({"cn.reghao.autodop.dmaster", "cn.reghao.autodop.common"})
 @ComponentScan({"cn.reghao.autodop.dmaster", "cn.reghao.autodop.common"})
 public class DmasterApplication {
 	public static void main(String[] args) {

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

@@ -8,8 +8,11 @@ import cn.reghao.autodop.dmaster.app.entity.deploy.RunningConfig;
 import cn.reghao.autodop.dmaster.auth.entity.Role;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
 
 import javax.persistence.*;
+import java.util.List;
 
 /**
  * TODO 添加定时构建部署参数
@@ -55,7 +58,9 @@ public class AppOrchestration extends BaseEntity implements Cloneable {
     private ProjOrchestration proj;
 
     /* 部署配置 */
-    private DeployConfig deployConfig;
+    @ElementCollection(targetClass = DeployConfig.class)
+    @LazyCollection(LazyCollectionOption.FALSE)
+    private List<DeployConfig> deployConfigs;
     /* 运行配置 */
     private RunningConfig runningConfig;
 

+ 2 - 7
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/DeployConfig.java

@@ -1,12 +1,8 @@
 package cn.reghao.autodop.dmaster.app.entity.deploy;
 
 import lombok.Data;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 
-import javax.persistence.ElementCollection;
 import javax.persistence.Embeddable;
-import java.util.List;
 
 /**
  * 应用部署配置
@@ -17,13 +13,12 @@ import java.util.List;
 @Data
 @Embeddable
 public class DeployConfig {
-    @ElementCollection(targetClass = String.class)
-    @LazyCollection(LazyCollectionOption.FALSE)
-    private List<String> machineIds;
+    private String machineId;
     private String packerType;
     private String startHome;
     private String startScript;
     // docker 启动参数
     // cn.reghao.autodop.common.dockerc.pojo.Config 序列化为 JSON 后的字符串
+    //private Config dockerConfig;
     private String dockerConfig;
 }

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

@@ -155,8 +155,8 @@ public class BuildDeployDispatcher {
             return null;
         }
 
-        DeployConfig deployConfig = cache.findByAppId(appId).getDeployConfig();
-        DeployLog deployLog = appDeployer.deploy(appId, packagePath, deployConfig);
+        List<DeployConfig> deployConfigs = cache.findByAppId(appId).getDeployConfigs();
+        DeployLog deployLog = appDeployer.deploy(appId, packagePath, deployConfigs);
         // TODO 部署完成后发出通知
 
         onDeploying.remove(appId);

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

@@ -70,7 +70,7 @@ public class AppCrudService implements CrudOps<AppOrchestration> {
         app.setCompileHome("");
 
         app.setBuildConfig(null);
-        app.setDeployConfig(null);
+        app.setDeployConfigs(null);
         app.setRunningConfig(null);
         app.setNotifierConfig(null);
 

+ 14 - 11
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java

@@ -8,6 +8,7 @@ import cn.reghao.autodop.common.dagent.app.api.data.deploy.AppDeployArgs;
 import cn.reghao.autodop.common.amqp.RabbitProducer;
 import cn.reghao.autodop.common.dagent.machine.api.data.MachineRegistry;
 import cn.reghao.autodop.common.dagent.machine.hardware.network.NetworkInfo;
+import cn.reghao.autodop.common.dockerc.pojo.Config;
 import cn.reghao.autodop.common.utils.data.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.entity.deploy.DeployConfig;
 import cn.reghao.autodop.dmaster.app.entity.log.DeployLog;
@@ -48,19 +49,21 @@ public class AppDeployer {
      * @return
      * @date 2020-03-13 下午1:00
      */
-    public DeployLog deploy(String appId, String packagePath, DeployConfig deployConfig) {
-        AppDeployArgs appDeployArgs = new AppDeployArgs();
-        appDeployArgs.setAppId(appId);
-        appDeployArgs.setPackagePath(packagePath);
-        appDeployArgs.setPackerType(deployConfig.getPackerType());
-        appDeployArgs.setStartHome(deployConfig.getStartHome());
-        appDeployArgs.setStartScript(deployConfig.getStartScript());
-        appDeployArgs.setDockerConfig(deployConfig.getDockerConfig());
+    public DeployLog deploy(String appId, String packagePath, List<DeployConfig> deployConfigs) {
+        Map<String, Future<RPCResult>> futureMap = new HashMap<>(deployConfigs.size());
+        for (DeployConfig deployConfig : deployConfigs) {
+            AppDeployArgs appDeployArgs = new AppDeployArgs();
+            appDeployArgs.setAppId(appId);
+            appDeployArgs.setPackagePath(packagePath);
+            appDeployArgs.setPackerType(deployConfig.getPackerType());
+            appDeployArgs.setStartHome(deployConfig.getStartHome());
+            appDeployArgs.setStartScript(deployConfig.getStartScript());
+            String config = deployConfig.getDockerConfig();
+            appDeployArgs.setDockerConfig(config);
 
-        Map<String, Future<RPCResult>> futureMap = new HashMap<>(deployConfig.getMachineIds().size());
-        deployConfig.getMachineIds().forEach(machineId -> {
+            String machineId = deployConfig.getMachineId();
             futureMap.put(machineId, threadPool.submit(new DeployTask(machineId, appDeployArgs)));
-        });
+        }
 
         DeployLog deployLog = new DeployLog();
         deployLog.setAppId(appId);

+ 7 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -46,7 +46,7 @@ public class AppVO {
     private String projId;
 
     /* 部署配置 */
-    private DeployConfig deployConfig;
+    private List<DeployConfig> deployConfigs;
     /* 运行配置 */
     private RunningConfig runningConfig;
 
@@ -73,7 +73,7 @@ public class AppVO {
             vo.projId = app.getProj().getProjId();
         }
 
-        vo.deployConfig = app.getDeployConfig();
+        vo.deployConfigs = app.getDeployConfigs();
         vo.runningConfig = app.getRunningConfig();
 
         if (app.getNotifierConfig() != null) {
@@ -102,7 +102,7 @@ public class AppVO {
         app.setCompileHome(vo.compileHome);
 
         app.setBuildConfig(BuildConfigVO.to(vo.getBuildConfigVO()));
-        app.setDeployConfig(vo.getDeployConfig());
+        app.setDeployConfigs(vo.getDeployConfigs());
         app.setRunningConfig(vo.getRunningConfig());
 
         String notifier = vo.getNotifier();
@@ -156,11 +156,14 @@ public class AppVO {
         buildConfig.setPackerConfig(packerConfig);
         app.setBuildConfig(buildConfig);
 
+        List<DeployConfig> list = new ArrayList<>();
         DeployConfig deployConfig = new DeployConfig();
         deployConfig.setPackerType(PackerType.docker.name());
         deployConfig.setStartHome(null);
         deployConfig.setStartScript(null);
-        app.setDeployConfig(deployConfig);
+        deployConfig.setDockerConfig("{\"env\":[\"ASPNETCORE_ENVIRONMENT\\u003dProduction\",\"ASPNETCORE_URLS\\u003dhttp://172.16.45.67:8002;https://172.16.45.67:8102\"],\"hostConfig\":{\"networkMode\":\"host\",\"restartPolicy\":{\"name\":\"on-failure\",\"maximumRetryCount\":5}}}");
+        list.add(deployConfig);
+        app.setDeployConfigs(list);
 
         RunningConfig runningConfig = new RunningConfig();
         runningConfig.setHttpPort(8002);

+ 34 - 22
scripts/test.json

@@ -1,26 +1,38 @@
 {
-  "appId": "dnkt",
-  "env": "dev",
-  "description": "大脑课堂",
-  "alwaysBuild": true,
-  "enable": true,
-  "appType": "npm",
-  "appRepo": "git@codeup.aliyun.com:5f1f8daf6207a1a8b17f6742/FrontEnd/IQuizoo.Game.git",
-  "branch": "develop",
-  "dirname": "IQuizoo.Game",
-  "compileHome": "/IQuizoo.Game",
-  "buildConfigVO": {
-    "repo": "git-codeup",
-    "compiler": "none",
-    "packer": "docker-dev",
-    "dockerfile": "FROM debian10/nginx\n\nRUN sed -i 's/8080/8081/' /etc/nginx/conf.d/http.conf\nCOPY ./dist-test /opt/webroot/"
+  "appId":"content",
+  "env":"test",
+  "description":"内容服务",
+  "alwaysBuild":true,
+  "enable":true,
+  "appType":"dotnetCore",
+  "appRepo":"https://codeup.aliyun.com/5f1f8daf6207a1a8b17f6742/background/ContentService.git",
+  "branch":"develop",
+  "dirname":"ContentService",
+  "compileHome":"",
+  "buildConfigVO":{
+    "repo":"git-codeup",
+    "compiler":"dotnet5-dev",
+    "packer":"docker-dev"
   },
-  "deployConfig": {
-    "machineIds": ["5d1a727991f34d3a9c1220a1899e6ebd"],
-    "packerType": "docker"
+  "deployConfigs":[
+    {
+      "machineId": "5d1a727991f34d3a9c1220a1899e6ebd",
+      "packerType":"docker"
+    }
+  ],
+  "runningConfig":{
+    "httpPort":8002,
+    "healthCheck":"/health",
+    "logs":[
+      {
+        "type":"console",
+        "level":"error"
+      },
+      {
+        "type":"file",
+        "level":"info"
+      }
+    ]
   },
-  "runningConfig": {
-    "logs": []
-  },
-  "notifier": "ding-dev"
+  "notifier":"ding-dev"
 }