reghao 5 лет назад
Родитель
Сommit
9efd7e3b72
55 измененных файлов с 546 добавлено и 495 удалено
  1. 1 1
      common/src/main/java/cn/reghao/autodop/common/deploy/PackerType.java
  2. 33 0
      common/src/main/java/cn/reghao/autodop/common/grpc/common/utils/Serializer.java
  3. 30 0
      common/src/main/java/cn/reghao/autodop/common/mq/MessageSender.java
  4. 13 0
      common/src/main/java/cn/reghao/autodop/common/mq/MqMessage.java
  5. 21 0
      common/src/main/java/cn/reghao/autodop/common/mq/MsgType.java
  6. 33 0
      common/src/main/java/cn/reghao/autodop/common/mq/Serializer.java
  7. 15 16
      common/src/main/java/cn/reghao/autodop/common/shell/ShellExecutor.java
  8. 22 35
      common/src/main/java/cn/reghao/autodop/common/utils/NetworkUtil.java
  9. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/DagentApplication.java
  10. 40 0
      dagent/src/main/java/cn/reghao/autodop/dagent/mq/RabbitConfig.java
  11. 46 0
      dagent/src/main/java/cn/reghao/autodop/dagent/mq/ReceiverHandler.java
  12. 14 12
      dagent/src/main/java/cn/reghao/autodop/dagent/service/MachineStatusScheduler.java
  13. 7 3
      dagent/src/main/java/cn/reghao/autodop/dagent/utils/AfterStart.java
  14. 2 2
      dagent/src/main/resources/application-dev.yml
  15. 2 2
      dagent/src/main/resources/application-prod.yml
  16. 2 2
      dagent/src/main/resources/application-test.yml
  17. 1 1
      dagent/src/main/resources/application.yml
  18. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/DmasterApplication.java
  19. 21 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/AppType.java
  20. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/CompilerType.java
  21. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/ConfigType.java
  22. 21 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/RepoAuthType.java
  23. 6 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/ConfigController.java
  24. 3 4
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/LocalDir.java
  25. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppCompile.java
  26. 5 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppUpdate.java
  27. 2 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/orchestration/AppOrchestration.java
  28. 0 198
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppRepository.java
  29. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/LocalDirRepository.java
  30. 20 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigService.java
  31. 7 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppBuildPipeline.java
  32. 36 19
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppIntegrate.java
  33. 14 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDispatcher.java
  34. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuilderUtil.java
  35. 14 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployTask.java
  36. 11 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployer.java
  37. 2 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/CodeCompiler.java
  38. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/DefaultCompiler.java
  39. 9 15
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/MavenCompiler.java
  40. 3 3
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/ShellCompiler.java
  41. 44 27
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/GitImpl.java
  42. 0 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/BuildConfig.java
  43. 10 5
      dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/controller/IndexController.java
  44. 10 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/common/utils/AfterAppStart.java
  45. 0 13
      dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/RouteMeta.java
  46. 0 30
      dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/SelectOption.java
  47. 0 16
      dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/VueRole.java
  48. 0 21
      dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/VueRoute.java
  49. 2 2
      dmaster/src/main/resources/application-dev.yml
  50. 2 2
      dmaster/src/main/resources/application-prod.yml
  51. 2 2
      dmaster/src/main/resources/application-test.yml
  52. 4 4
      dmaster/src/test/java/cn/reghao/autodop/dmaster/app/entity/orchestration/AppOrchestrationTest.java
  53. 2 2
      dmaster/src/test/java/cn/reghao/autodop/dmaster/app/entity/orchestration/ProjOrchestrationTest.java
  54. 2 2
      pom.xml
  55. 1 1
      scripts/deploy.sh

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/deploy/PackerType.java

@@ -7,7 +7,7 @@ package cn.reghao.autodop.common.deploy;
  * @date 2019-11-15 21:59:35
  */
 public enum PackerType {
-    docker("Docker"), jar("Jar"), dotnetBinary("DotnetBinary"), zip("Zip");
+    docker("Docker"), zip("Zip");
 
     private String value;
 

+ 33 - 0
common/src/main/java/cn/reghao/autodop/common/grpc/common/utils/Serializer.java

@@ -0,0 +1,33 @@
+package cn.reghao.autodop.common.grpc.common.utils;
+
+import com.google.gson.Gson;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * JSON 序列化和反序列化
+ *
+ * @author reghao
+ * @date 2019-11-29 00:05:57
+ */
+public class Serializer {
+    private static Gson gson = new Gson();
+
+    public static String serialize(Object object) {
+        return gson.toJson(object);
+    }
+
+    public static List<String> serialize(List<Object> objects) {
+        List<String> list = new ArrayList<>();
+        objects.forEach(object -> {
+            list.add(gson.toJson(object));
+        });
+
+        return list;
+    }
+
+    public static Object deserialize(String json, Class clazz) {
+        return new Gson().fromJson(json, clazz);
+    }
+}

+ 30 - 0
common/src/main/java/cn/reghao/autodop/common/mq/MessageSender.java

@@ -0,0 +1,30 @@
+package cn.reghao.autodop.common.mq;
+
+import cn.reghao.autodop.common.grpc.common.utils.Serializer;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * 发送消息
+ *
+ * @author reghao
+ * @date 2020-09-03 22:11:18
+ */
+@Component
+public class MessageSender {
+    private RabbitTemplate rabbitTemplate;
+
+    public MessageSender(RabbitTemplate rabbitTemplate) {
+        this.rabbitTemplate = rabbitTemplate;
+    }
+
+    public void send(String routeKey, Object obj) {
+        String msg = Serializer.serialize(obj);
+        rabbitTemplate.convertAndSend(routeKey, msg);
+    }
+
+    public Object callRemote(String routeKey, String msg) {
+        rabbitTemplate.setReplyTimeout(60_000);
+        return rabbitTemplate.convertSendAndReceive(routeKey, msg);
+    }
+}

+ 13 - 0
common/src/main/java/cn/reghao/autodop/common/mq/MqMessage.java

@@ -0,0 +1,13 @@
+package cn.reghao.autodop.common.mq;
+
+import lombok.Data;
+
+/**
+ * @author reghao
+ * @date 2020-09-04 20:17:45
+ */
+@Data
+public class MqMessage {
+    private String msgType;
+    private Object msg;
+}

+ 21 - 0
common/src/main/java/cn/reghao/autodop/common/mq/MsgType.java

@@ -0,0 +1,21 @@
+package cn.reghao.autodop.common.mq;
+
+/**
+ * MQ 消息类型
+ *
+ * @author reghao
+ * @date 2019-10-18 14:31:29
+ */
+public enum MsgType {
+    deployConfig("DeployConfig"), deployResult("DeployResult");
+
+    private String value;
+
+    MsgType(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

+ 33 - 0
common/src/main/java/cn/reghao/autodop/common/mq/Serializer.java

@@ -0,0 +1,33 @@
+package cn.reghao.autodop.common.mq;
+
+import com.google.gson.Gson;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * JSON 序列化和反序列化
+ *
+ * @author reghao
+ * @date 2019-11-29 00:05:57
+ */
+public class Serializer {
+    private static Gson gson = new Gson();
+
+    public static String serialize(Object object) {
+        return gson.toJson(object);
+    }
+
+    public static List<String> serialize(List<Object> objects) {
+        List<String> list = new ArrayList<>();
+        objects.forEach(object -> {
+            list.add(gson.toJson(object));
+        });
+
+        return list;
+    }
+
+    public static Object deserialize(String json, Class clazz) {
+        return new Gson().fromJson(json, clazz);
+    }
+}

+ 15 - 16
common/src/main/java/cn/reghao/autodop/common/shell/ShellExecutor.java

@@ -7,7 +7,6 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * TODO: 改造 shell 执行器,提升执行效率
@@ -21,15 +20,13 @@ public class ShellExecutor {
     private InputStreamReader errstream;
 
     // TODO: 输出流有大量数据时程序会阻塞
-    public ShellResult execute(String cmd, String... args) {
-        if (args.length != 0) {
-            StringBuilder cmdBuilder = new StringBuilder(cmd);
-            for (String arg : args) {
-                cmdBuilder.append(" ").append(arg);
-            }
-            cmd = cmdBuilder.toString();
+    public ShellResult execute(String dir, String script) {
+        if (dir == null) {
+            dir = System.getProperty("user.home");
         }
 
+        String cmd = "cd " + dir + " && ";
+        cmd += script;
         ShellResult result = new ShellResult();
         ProcessBuilder pb = new ProcessBuilder("sh", "-c", cmd);
         try {
@@ -70,14 +67,6 @@ public class ShellExecutor {
         return result;
     }
 
-    // TODO 修改环境变量以执行一些特定的命令
-    private void modifyPathEnv(Map<String, String> env, String compilerHome1) {
-        String compilerHome = "/home/reghao/opt/env/dotnet/dotnet-sdk-2.2.101";
-        String path = env.get("PATH");
-        path += path + ":" + compilerHome;
-        env.put("PATH", path);
-    }
-
     static class ShellOutput extends Thread {
         private BufferedReader in;
         private List<String> output = new ArrayList<>();
@@ -113,4 +102,14 @@ public class ShellExecutor {
             }
         }
     }
+
+    public static void main(String[] args) {
+        String appDir = "/home/reghao/code/aha/spiderlab/crawler";
+        String script = "/home/reghao/dev/env/dotnet/dotnet-sdk-2.2.101/dotnet --info";
+        script = "/home/reghao/dev/tools/maven-3.6.0/bin/mvn clean package";
+        ShellExecutor shell = new ShellExecutor();
+        ShellResult result = shell.execute(appDir, script);
+        System.out.println("----------------------------------------------");
+        result.getStdout().forEach(System.out::println);
+    }
 }

+ 22 - 35
common/src/main/java/cn/reghao/autodop/common/utils/NetworkUtil.java

@@ -1,5 +1,8 @@
 package cn.reghao.autodop.common.utils;
 
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
 import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
@@ -13,53 +16,25 @@ import java.util.List;
  * @date 2020-03-11 09:12:36
  */
 public class NetworkUtil {
-    public static String hostAddress(String prefix) {
-        try {
-            Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();
-            // 遍历接口
-            while (ifaces.hasMoreElements()) {
-                NetworkInterface iface = ifaces.nextElement();
-                Enumeration<InetAddress> addresses = iface.getInetAddresses();
-                // 遍历接口上的地址
-                while (addresses.hasMoreElements()) {
-                    InetAddress inetAddress = addresses.nextElement();
-                    if (!inetAddress.isLoopbackAddress()) {
-                        if (inetAddress.isSiteLocalAddress()) {
-                            if (inetAddress.getHostAddress().startsWith(prefix)) {
-                                return inetAddress.getHostAddress();
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return null;
-    }
-
     /**
      * 获取本机物理网卡 IPv4 地址(不获取 loopback 和虚拟接口的地址)
      *
-     * @param
-     * @return
      * @date 2019-10-23 下午9:27
      */
-    public static List<String> ipv4() throws SocketException {
-        List<String> addresses = new ArrayList<>();
+    public static List<IPAddress> ipv4() throws SocketException {
+        List<IPAddress> addresses = new ArrayList<>();
 
-        Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
+        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
         while (interfaces.hasMoreElements()) {
-            NetworkInterface iface = (NetworkInterface) interfaces.nextElement();
-
+            NetworkInterface iface = interfaces.nextElement();
             Enumeration<InetAddress> inetAddrs = iface.getInetAddresses();
             while (inetAddrs.hasMoreElements()) {
                 InetAddress address = inetAddrs.nextElement();
                 if (address instanceof Inet4Address && !address.isLoopbackAddress()) {
+                    String iface1 = iface.getName();
                     String addr = address.getHostAddress();
-                    if (addr.contains("192.168") || addr.contains("172.16")) {
-                        addresses.add(addr);
+                    if (!iface1.startsWith("docker") && !iface1.startsWith("v")) {
+                        addresses.add(new IPAddress(iface1, addr));
                     }
                 }
             }
@@ -67,4 +42,16 @@ public class NetworkUtil {
 
         return addresses;
     }
+
+    @Data
+    @AllArgsConstructor
+    static public class IPAddress {
+        private String iface;
+        private String address;
+    }
+
+    public static void main(String[] args) throws SocketException {
+        List<IPAddress> list = NetworkUtil.ipv4();
+        System.out.println(list.get(0).getAddress());
+    }
 }

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/DagentApplication.java

@@ -6,7 +6,7 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 //@EnableScheduling
-@ComponentScan({"cn.reghao.autodop.common.grpc", "cn.reghao.autodop.dagent"})
+@ComponentScan({"cn.reghao.autodop.common.grpc", "cn.reghao.autodop.dagent", "cn.reghao.autodop.common.mq"})
 @SpringBootApplication
 public class DagentApplication {
 	public static void main(String[] args) {

+ 40 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/mq/RabbitConfig.java

@@ -0,0 +1,40 @@
+package cn.reghao.autodop.dagent.mq;
+
+import cn.reghao.autodop.common.utils.NetworkUtil;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.net.SocketException;
+
+/**
+ * @author reghao
+ * @date 2020-09-04 10:57:56
+ */
+@Configuration
+public class RabbitConfig {
+    private RabbitTemplate rabbitTemplate;
+
+    public RabbitConfig(RabbitTemplate rabbitTemplate) {
+        this.rabbitTemplate = rabbitTemplate;
+    }
+
+    @Bean
+    public Queue dagentQueue() throws SocketException {
+        String address = NetworkUtil.ipv4().get(0).getAddress();
+        String queueName = "dagent.rpc@" + address;
+        return new Queue(queueName, true);
+    }
+
+    @Bean
+    public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory) throws SocketException {
+        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
+        container.setConnectionFactory(connectionFactory);
+        container.setMessageListener(new ReceiverHandler(rabbitTemplate));
+        container.addQueues(dagentQueue());
+        return container;
+    }
+}

+ 46 - 0
dagent/src/main/java/cn/reghao/autodop/dagent/mq/ReceiverHandler.java

@@ -0,0 +1,46 @@
+package cn.reghao.autodop.dagent.mq;
+
+import cn.reghao.autodop.common.mq.MqMessage;
+import cn.reghao.autodop.common.mq.MsgType;
+import cn.reghao.autodop.common.mq.Serializer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageListener;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+
+/**
+ * @author reghao
+ * @date 2020-09-04 11:00:22
+ */
+@Slf4j
+public class ReceiverHandler implements MessageListener {
+    private RabbitTemplate rabbitTemplate;
+
+    public ReceiverHandler(RabbitTemplate rabbitTemplate) {
+        this.rabbitTemplate = rabbitTemplate;
+    }
+
+    @Override
+    public void onMessage(Message msg) {
+        MessageProperties messageProperties = msg.getMessageProperties();
+        String body = new String(msg.getBody());
+        MqMessage mqMessage = (MqMessage) Serializer.deserialize(body, MqMessage.class);
+        switch (MsgType.valueOf(mqMessage.getMsgType())) {
+            case deployConfig:
+                log.info("deployConfig -> {}", mqMessage.getMsg());
+                break;
+            case deployResult:
+                log.info("deployResult -> {}", mqMessage.getMsg());
+                break;
+        }
+
+        String replyTo = messageProperties.getReplyTo();
+        String correlationId = messageProperties.getCorrelationId();
+        String message = "return msg";
+        rabbitTemplate.convertAndSend(replyTo, message, message1 -> {
+            message1.getMessageProperties().setCorrelationId(correlationId);
+            return message1;
+        });
+    }
+}

+ 14 - 12
dagent/src/main/java/cn/reghao/autodop/dagent/service/MachineStatusScheduler.java

@@ -1,8 +1,5 @@
 package cn.reghao.autodop.dagent.service;
 
-import cn.reghao.autodop.common.http.DefaultWebRequest;
-import cn.reghao.autodop.common.http.HttpApi;
-import cn.reghao.autodop.common.http.WebRequest;
 import cn.reghao.autodop.common.machine.Cpu;
 import cn.reghao.autodop.common.machine.Memory;
 import cn.reghao.autodop.common.machine.Network;
@@ -12,9 +9,9 @@ import cn.reghao.autodop.common.machine.pojo.SysStat;
 import cn.reghao.autodop.common.machine.pojo.cpu.CpuUsage;
 import cn.reghao.autodop.common.machine.pojo.mem.MemUsage;
 import cn.reghao.autodop.common.machine.pojo.net.NetConnStat;
-import cn.reghao.autodop.common.utils.JsonUtil;
 import cn.reghao.autodop.common.utils.NetworkUtil;
-import cn.reghao.autodop.dagent.config.DmasterProperties;
+import cn.reghao.autodop.common.mq.MessageSender;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -26,20 +23,21 @@ import java.util.List;
  * @author reghao
  * @date 2020-03-20 17:04:48
  */
+@Slf4j
 @Component
 public class MachineStatusScheduler {
-    private DmasterProperties properties;
+    private MessageSender sender;
     private Cpu cpu;
     private Memory mem;
     private Process proc;
     private Network net;
 
-    public MachineStatusScheduler(DmasterProperties properties) {
-        this.properties = properties;
+    public MachineStatusScheduler(MessageSender sender) {
         this.cpu = new Cpu();
         this.mem = new Memory();
         this.proc = new Process();
         this.net = new Network();
+        this.sender = sender;
     }
 
     @Scheduled(fixedRate = 3_000)
@@ -50,14 +48,18 @@ public class MachineStatusScheduler {
         List<NetConnStat> connStats = net.netstat();
 
         SysStat sysStat = new SysStat();
-        sysStat.setHost(NetworkUtil.hostAddress("192.168"));
+        sysStat.setHost(NetworkUtil.ipv4().get(0).getAddress());
         sysStat.setCpu(cpuUsage);
         sysStat.setMem(memUsage);
         sysStat.setProcessStats(processes);
         sysStat.setConnStats(connStats);
 
-        WebRequest request = new DefaultWebRequest();
-        String url = HttpApi.url(properties.getAddress(), properties.getPort(), properties.getApi());
-        request.postJson(url, JsonUtil.objectToJson(sysStat));
+        sendToMq(sysStat);
+    }
+
+    private void sendToMq(SysStat sysStat) {
+        String routeKey = "dmaster@localhost";
+        sender.send(routeKey, sysStat);
+        log.info("发送主机状态信息到 {}", routeKey);
     }
 }

+ 7 - 3
dagent/src/main/java/cn/reghao/autodop/dagent/utils/AfterStart.java

@@ -23,7 +23,7 @@ public class AfterStart implements ApplicationRunner {
     }
 
     @Override
-    public void run(ApplicationArguments args) throws Exception {
+    public void run(ApplicationArguments args) {
         activate();
     }
 
@@ -34,8 +34,12 @@ public class AfterStart implements ApplicationRunner {
      * @return
      * @date 2019-09-26 下午5:23
      */
-    private void activate() throws Exception {
-        String url = HttpApi.url(properties.getAddress(), properties.getPort(), properties.getApi());
+    private void activate() {
+        registerToMaster();
         log.info("dagent 应用已启动...");
     }
+
+    private void registerToMaster() {
+        String url = HttpApi.url(properties.getAddress(), properties.getPort(), properties.getApi());
+    }
 }

+ 2 - 2
dagent/src/main/resources/application-dev.yml

@@ -6,6 +6,6 @@ spring:
   rabbitmq:
     host: localhost
     port: 5672
-    virtual-host: /
     username: reghao
-    password: 12345678
+    password: 12345678
+    virtual-host: /

+ 2 - 2
dagent/src/main/resources/application-prod.yml

@@ -6,6 +6,6 @@ spring:
   rabbitmq:
     host: localhost
     port: 5672
-    virtual-host: /
     username: reghao
-    password: 12345678
+    password: 12345678
+    virtual-host: /

+ 2 - 2
dagent/src/main/resources/application-test.yml

@@ -6,6 +6,6 @@ spring:
   rabbitmq:
     host: localhost
     port: 5672
-    virtual-host: /
     username: reghao
-    password: 12345678
+    password: 12345678
+    virtual-host: /

+ 1 - 1
dagent/src/main/resources/application.yml

@@ -2,7 +2,7 @@ spring:
   application:
     name: autodop-agent
   profiles:
-    # 这行注释后控制台没有日志
+    # 注释这行后控制台没有日志
     active: @profile.active@
   grpc:
     enable: true

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

@@ -17,7 +17,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 @EntityScan
 // TODO gRPC 服务端接口所在包,定义了 gRPC 服务端提供的服务
 @GrpcServiceScan(packages = {"cn.reghao.autodop.common.grpc.facade"})
-@ComponentScan({"cn.reghao.autodop.common.grpc", "cn.reghao.autodop.dmaster"})
+@ComponentScan({"cn.reghao.autodop.common.grpc", "cn.reghao.autodop.dmaster", "cn.reghao.autodop.common.mq"})
 public class DmasterApplication {
 	public static void main(String[] args) {
 		SpringApplication.run(DmasterApplication.class, args);

+ 21 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/AppType.java

@@ -0,0 +1,21 @@
+package cn.reghao.autodop.dmaster.app.constant;
+
+/**
+ * 应用类型
+ *
+ * @author reghao
+ * @date 2019-10-18 14:31:29
+ */
+public enum AppType {
+    maven("Maven"), dotnetCore("DotnetCore"), npm("NPM");
+
+    private String value;
+
+    AppType(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

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

@@ -7,7 +7,7 @@ package cn.reghao.autodop.dmaster.app.constant;
  * @date 2019-10-18 14:31:29
  */
 public enum CompilerType {
-    none("None"), mvn("Maven"), dotnet("Dotnet"), npm("NPM");
+    shell("Shell 脚本"), none("None"), maven("Maven");
 
     private String value;
 

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/ConfigType.java

@@ -9,7 +9,8 @@ package cn.reghao.autodop.dmaster.app.constant;
 public enum ConfigType {
     appEnv("AppEnv"),
     localDir("LocalDir"), notifier("Notifier"),
-    repo("Repo"), compiler("Compiler"), packer("Packer");
+    repo("Repo"), compiler("Compiler"), packer("Packer"),
+    repoAuth("RepoAuth");
 
     private String value;
 

+ 21 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/constant/RepoAuthType.java

@@ -0,0 +1,21 @@
+package cn.reghao.autodop.dmaster.app.constant;
+
+/**
+ * 代码仓库认证方式
+ *
+ * @author reghao
+ * @date 2019-10-18 14:31:29
+ */
+public enum RepoAuthType {
+    password("帐号密码"), rsa("RSA 密钥对");
+
+    private String value;
+
+    RepoAuthType(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

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

@@ -1,9 +1,9 @@
 package cn.reghao.autodop.dmaster.app.controller;
 
 import cn.reghao.autodop.common.deploy.PackerType;
-import cn.reghao.autodop.common.dockerc.pojo.ContainerInspect;
 import cn.reghao.autodop.dmaster.app.constant.*;
 import cn.reghao.autodop.dmaster.app.service.ConfigService;
+import cn.reghao.autodop.dmaster.app.constant.RepoAuthType;
 import cn.reghao.autodop.dmaster.app.vo.PageList;
 import cn.reghao.autodop.dmaster.common.webresult.WebResult;
 import io.swagger.annotations.Api;
@@ -96,6 +96,11 @@ public class ConfigController {
                     map.put(config.name(), config.getValue());
                 }
                 break;
+            case repoAuth:
+                for (RepoAuthType config : RepoAuthType.values()) {
+                    map.put(config.name(), config.getValue());
+                }
+                break;
             default:
         }
 

+ 3 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/LocalFsDir.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/LocalDir.java

@@ -3,11 +3,10 @@ package cn.reghao.autodop.dmaster.app.entity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import javax.persistence.Column;
 import javax.persistence.Entity;
 
 /**
- * 应用构建时需要的本地文件系统目录
+ * 应用构建时需要的本地目录
  *
  * @author reghao
  * @date 2019-08-27 00:17:55
@@ -15,7 +14,7 @@ import javax.persistence.Entity;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Entity
-public class LocalFsDir extends BaseEntity {
+public class LocalDir extends BaseEntity {
     // 本地仓库
     private String localRepo;
     // 编译目录
@@ -23,7 +22,7 @@ public class LocalFsDir extends BaseEntity {
     // 打包目录
     private String packDir;
 
-    public LocalFsDir vo() {
+    public LocalDir vo() {
         this.setId(null);
         this.setIsDelete(null);
         this.setCreateTime(null);

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppCompile.java

@@ -21,7 +21,7 @@ public class AppCompile extends BaseEntity {
     private String compilerName;
     private String compilerHome;
     private String versionCmd;
-    private String compileCmd;
+    private String script;
 
     public AppCompile vo() {
         ClassUtil.setParentFieldNull(this);

+ 5 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/build/AppUpdate.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.Lob;
 
 /**
  * @author reghao
@@ -19,6 +20,10 @@ public class AppUpdate extends BaseEntity {
     private String repoType;
     @Column(nullable = false, unique = true)
     private String repoName;
+    private String authType;
+    @Lob
+    @Column(columnDefinition="text")
+    private String rsaPrikey;
     private String username;
     private String password;
 

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

@@ -24,6 +24,8 @@ import java.util.Set;
 public class AppOrchestration extends BaseEntity implements Cloneable {
     @Column(nullable = false, unique = true)
     private String appId;
+    @Column(nullable = false)
+    private String appType;
     // 应用代码所在目录的名字
     @Column(nullable = false)
     private String dirname;

+ 0 - 198
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/AppRepository.java

@@ -9,7 +9,6 @@ import cn.reghao.autodop.dmaster.app.repository.build.AppCompileRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.AppPackRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.AppUpdateRepository;
 import cn.reghao.autodop.dmaster.app.vo.BuildConfig;
-import cn.reghao.autodop.dmaster.vue.SelectOption;
 import org.springframework.stereotype.Repository;
 
 import java.util.*;
@@ -57,203 +56,6 @@ public class AppRepository {
         return buildConfig;
     }
 
-    /*public BuildConfig buildConfig() {
-        List<AppUpdate> appUpdates = updateRepository.findAll();
-        List<AppCompile> appCompiles = compileRepository.findAll();
-        List<AppPack> appPacks = packRepository.findAll();
-        List<Notification> notifications = notificationRepository.findAll();
-
-        List<SelectOption> updateOptions = new ArrayList<>();
-        convertToAppUpdates(appUpdates, updateOptions);
-        List<SelectOption> compileOptions = new ArrayList<>();
-        convertToAppCompiles(appCompiles, compileOptions);
-        List<SelectOption> packOptions = new ArrayList<>();
-        convertToAppPacks(appPacks, packOptions);
-        List<SelectOption> notificationOptions = new ArrayList<>();
-        convertToNotifications(notifications, notificationOptions);
-
-        BuildConfig buildConfig = new BuildConfig();
-        buildConfig.setAppUpdates(updateOptions);
-        buildConfig.setAppCompiles(compileOptions);
-        buildConfig.setAppPacks(packOptions);
-        buildConfig.setNotifications(notificationOptions);
-
-        return buildConfig;
-    }*/
-
-    private void convertToAppUpdates(List<AppUpdate> appUpdates, List<SelectOption> options) {
-        Map<String, Integer> keys1 = new HashMap<>();
-        Map<String, Integer> keys2 = new HashMap<>();
-        Map<String, Integer> keys3 = new HashMap<>();
-        for (AppUpdate appUpdate : appUpdates) {
-            String repoType = appUpdate.getRepoType();
-            String repoName = appUpdate.getRepoName();
-            String username = appUpdate.getUsername();
-
-            Integer index1 = keys1.get(repoType);
-            Integer index2 = keys2.get(repoType + repoName);
-            Integer index3 = keys3.get(repoType + repoName + username);
-            if (index3 == null) {
-                if (index2 == null) {
-                    if (index1 == null) {
-                        SelectOption option1 = new SelectOption();
-                        option1.setValue(repoType);
-                        options.add(option1);
-                        keys1.put(repoType, options.size()-1);
-
-                        SelectOption option2 = new SelectOption();
-                        option2.setValue(repoName);
-                        List<SelectOption> list2 = new ArrayList<>();
-                        list2.add(option2);
-                        option1.setChildren(list2);
-                        keys2.put(repoType + repoName, list2.size()-1);
-
-                        SelectOption option3 = new SelectOption();
-                        option3.setValue(username);
-                        List<SelectOption> list3 = new ArrayList<>();
-                        list3.add(option3);
-                        option2.setChildren(list3);
-                        keys3.put(repoType + repoName + username, list3.size()-1);
-                    } else {
-                        SelectOption option1 = options.get(index1);
-
-                        SelectOption option2 = new SelectOption();
-                        option2.setValue(repoName);
-                        List<SelectOption> list2 = new ArrayList<>();
-                        list2.add(option2);
-                        option1.setChildren(list2);
-                        keys2.put(repoType + repoName, list2.size()-1);
-
-                        SelectOption option3 = new SelectOption();
-                        option3.setValue(username);
-                        List<SelectOption> list3 = new ArrayList<>();
-                        list3.add(option3);
-                        option2.setChildren(list3);
-                        keys3.put(repoType + repoName + username, list3.size()-1);
-                    }
-                } else {
-                    SelectOption option1 = options.get(index1);
-                    SelectOption option2 = option1.getChildren().get(index2);
-
-                    SelectOption option3 = new SelectOption();
-                    option3.setValue(username);
-                    List<SelectOption> list3 = new ArrayList<>();
-                    list3.add(option3);
-                    option2.setChildren(list3);
-                    keys3.put(repoType + repoName + username, list3.size()-1);
-                }
-            }
-        }
-    }
-
-    private void convertToAppCompiles(List<AppCompile> appCompiles, List<SelectOption> options) {
-        Map<String, Integer> keys1 = new HashMap<>();
-        Map<String, Integer> keys2 = new HashMap<>();
-        for (AppCompile appCompile : appCompiles) {
-            String compilerType = appCompile.getCompilerType();
-            String compilerName = appCompile.getCompilerName();
-
-            Integer index1 = keys1.get(compilerType);
-            Integer index2 = keys2.get(compilerType + compilerName);
-            if (index2 == null) {
-                if (index1 == null) {
-                    SelectOption option1 = new SelectOption();
-                    option1.setValue(compilerType);
-                    options.add(option1);
-                    keys1.put(compilerType, options.size()-1);
-
-                    SelectOption option2 = new SelectOption();
-                    option2.setValue(compilerName);
-                    List<SelectOption> list2 = new ArrayList<>();
-                    list2.add(option2);
-                    option1.setChildren(list2);
-                    keys2.put(compilerType + compilerName, list2.size()-1);
-                } else {
-                    SelectOption option1 = options.get(index1);
-
-                    SelectOption option2 = new SelectOption();
-                    option2.setValue(compilerName);
-                    List<SelectOption> list2 = option1.getChildren();
-                    list2.add(option2);
-                    option1.setChildren(list2);
-                    keys2.put(compilerType + compilerName, list2.size()-1);
-                }
-            }
-        }
-    }
-
-    private void convertToAppPacks(List<AppPack> appPacks, List<SelectOption> options) {
-        Map<String, Integer> keys1 = new HashMap<>();
-        Map<String, Integer> keys2 = new HashMap<>();
-        for (AppPack appPack : appPacks) {
-            String packerType = appPack.getPackerType();
-            String packerName = appPack.getPackerName();
-
-            Integer index1 = keys1.get(packerType);
-            Integer index2 = keys2.get(packerType + packerName);
-            if (index2 == null) {
-                if (index1 == null) {
-                    SelectOption option1 = new SelectOption();
-                    option1.setValue(packerType);
-                    options.add(option1);
-                    keys1.put(packerType, options.size()-1);
-
-                    SelectOption option2 = new SelectOption();
-                    option2.setValue(packerName);
-                    List<SelectOption> list2 = new ArrayList<>();
-                    list2.add(option2);
-                    option1.setChildren(list2);
-                    keys2.put(packerType + packerName, list2.size()-1);
-                } else {
-                    SelectOption option1 = options.get(index1);
-
-                    SelectOption option2 = new SelectOption();
-                    option2.setValue(packerName);
-                    List<SelectOption> list2 = option1.getChildren();
-                    list2.add(option2);
-                    option1.setChildren(list2);
-                    keys2.put(packerType + packerName, list2.size()-1);
-                }
-            }
-        }
-    }
-
-    private void convertToNotifications(List<Notification> notifications, List<SelectOption> options) {
-        Map<String, Integer> keys1 = new HashMap<>();
-        Map<String, Integer> keys2 = new HashMap<>();
-        for (Notification notification : notifications) {
-            String notifierType = notification.getNotifierType();
-            String notifierName = notification.getNotifierName();
-
-            Integer index1 = keys1.get(notifierType);
-            Integer index2 = keys2.get(notifierType + notifierName);
-            if (index2 == null) {
-                if (index1 == null) {
-                    SelectOption option1 = new SelectOption();
-                    option1.setValue(notifierType);
-                    options.add(option1);
-                    keys1.put(notifierType, options.size()-1);
-
-                    SelectOption option2 = new SelectOption();
-                    option2.setValue(notifierName);
-                    List<SelectOption> list2 = new ArrayList<>();
-                    list2.add(option2);
-                    option1.setChildren(list2);
-                    keys2.put(notifierType + notifierName, list2.size()-1);
-                } else {
-                    SelectOption option1 = options.get(index1);
-
-                    SelectOption option2 = new SelectOption();
-                    option2.setValue(notifierName);
-                    List<SelectOption> list2 = option1.getChildren();
-                    list2.add(option2);
-                    option1.setChildren(list2);
-                    keys2.put(notifierType + notifierName, list2.size()-1);
-                }
-            }
-        }
-    }
-
     public void projs(BuildConfig buildConfig) {
         List<String> projs = projRepository.findAll().stream()
                 .map(ProjOrchestration::getProjId)

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/LocalFsDirRepository.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/orchestration/LocalDirRepository.java

@@ -1,6 +1,6 @@
 package cn.reghao.autodop.dmaster.app.repository.orchestration;
 
-import cn.reghao.autodop.dmaster.app.entity.LocalFsDir;
+import cn.reghao.autodop.dmaster.app.entity.LocalDir;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 /**
@@ -8,5 +8,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
  * @author reghao
  * @date 2020-01-21 14:53:03
  */
-public interface LocalFsDirRepository extends JpaRepository<LocalFsDir, Long> {
+public interface LocalDirRepository extends JpaRepository<LocalDir, Long> {
 }

+ 20 - 13
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/ConfigService.java

@@ -1,18 +1,19 @@
 package cn.reghao.autodop.dmaster.app.service;
 
+import cn.reghao.autodop.common.shell.ShellExecutor;
+import cn.reghao.autodop.common.shell.ShellResult;
 import cn.reghao.autodop.common.utils.JsonUtil;
 import cn.reghao.autodop.dmaster.app.constant.ConfigType;
-import cn.reghao.autodop.dmaster.app.constant.NotifierType;
 import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
 import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
 import cn.reghao.autodop.dmaster.app.entity.build.AppUpdate;
-import cn.reghao.autodop.dmaster.app.entity.LocalFsDir;
+import cn.reghao.autodop.dmaster.app.entity.LocalDir;
 import cn.reghao.autodop.dmaster.app.entity.Notification;
 import cn.reghao.autodop.dmaster.app.repository.build.AppCompileRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.AppPackRepository;
 import cn.reghao.autodop.dmaster.app.repository.build.AppUpdateRepository;
 import cn.reghao.autodop.dmaster.app.repository.dao.ConfigDAO;
-import cn.reghao.autodop.dmaster.app.repository.orchestration.LocalFsDirRepository;
+import cn.reghao.autodop.dmaster.app.repository.orchestration.LocalDirRepository;
 import cn.reghao.autodop.dmaster.app.repository.orchestration.NotificationRepository;
 import cn.reghao.autodop.dmaster.app.vo.PageList;
 import org.springframework.data.domain.Page;
@@ -20,7 +21,6 @@ import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -30,14 +30,14 @@ import java.util.stream.Collectors;
  */
 @Service
 public class ConfigService {
-    private LocalFsDirRepository configRepository;
+    private LocalDirRepository configRepository;
     private NotificationRepository notifyRepository;
     private AppUpdateRepository updateRepository;
     private AppCompileRepository compileRepository;
     private AppPackRepository packRepository;
     private ConfigDAO configDAO;
 
-    public ConfigService(LocalFsDirRepository configRepository,
+    public ConfigService(LocalDirRepository configRepository,
                          NotificationRepository notifyRepository,
                          AppUpdateRepository updateRepository,
                          AppCompileRepository compileRepository,
@@ -55,8 +55,8 @@ public class ConfigService {
         switch (ConfigType.valueOf(configType)) {
             // 本地文件系统目录
             case localDir:
-                LocalFsDir localFsDir = (LocalFsDir) JsonUtil.jsonToObject(json, LocalFsDir.class);
-                configRepository.save(localFsDir);
+                LocalDir localDir = (LocalDir) JsonUtil.jsonToObject(json, LocalDir.class);
+                configRepository.save(localDir);
 
                 /*AppEnv configEntity = configRepository.findByEnv(appEnv.getEnv());
                 if (configEntity == null) {
@@ -104,11 +104,11 @@ public class ConfigService {
     public PageList getByPage(String configType, PageRequest pageRequest) throws Exception {
         switch (ConfigType.valueOf(configType)) {
             case localDir:
-                Page<LocalFsDir> configs = configRepository.findAll(pageRequest);
-                PageList<LocalFsDir> pageList = new PageList<>();
+                Page<LocalDir> configs = configRepository.findAll(pageRequest);
+                PageList<LocalDir> pageList = new PageList<>();
                 pageList.setTotalSize(configs.getTotalElements());
                 pageList.setTotalPages(configs.getTotalPages());
-                pageList.setList(configs.getContent().stream().map(LocalFsDir::vo).collect(Collectors.toList()));
+                pageList.setList(configs.getContent().stream().map(LocalDir::vo).collect(Collectors.toList()));
                 return pageList;
             case notifier:
                 Page<Notification> notifiers = notifyRepository.findAll(pageRequest);
@@ -147,8 +147,8 @@ public class ConfigService {
         switch (ConfigType.valueOf(configType)) {
             // 本地文件系统目录
             case localDir:
-                LocalFsDir localFsDir = (LocalFsDir) JsonUtil.jsonToObject(json, LocalFsDir.class);
-                configRepository.save(localFsDir);
+                LocalDir localDir = (LocalDir) JsonUtil.jsonToObject(json, LocalDir.class);
+                configRepository.save(localDir);
                 /*AppEnv configEntity = configRepository.findByEnv(appEnv.getEnv());
                 if (configEntity != null && !configEntity.equals(appEnv)) {
                     appEnv.setId(configEntity.getId());
@@ -192,6 +192,13 @@ public class ConfigService {
             // 编译器配置
             case compiler:
                 AppCompile appCompile = (AppCompile) JsonUtil.jsonToObject(json, AppCompile.class);
+                String cmd = appCompile.getCompilerHome() + "/" + appCompile.getVersionCmd();
+                ShellExecutor executor = new ShellExecutor();
+                ShellResult result = executor.execute(null, cmd);
+                if (result.getExitCode() != 0) {
+                    return;
+                }
+
                 AppCompile compileEntity = compileRepository.findByCompilerName(appCompile.getCompilerName());
                 if (compileEntity != null && !compileEntity.equals(appCompile)) {
                     appCompile.setId(compileEntity.getId());

+ 7 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/AppBuildPipeline.java

@@ -2,6 +2,7 @@ package cn.reghao.autodop.dmaster.app.service.build;
 
 import cn.reghao.autodop.dmaster.app.constant.BuildStage;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployLog;
+import lombok.extern.slf4j.Slf4j;
 
 import java.util.concurrent.Callable;
 
@@ -12,6 +13,7 @@ import java.util.concurrent.Callable;
  * @author reghao
  * @date 2019-11-16 21:39:53
  */
+@Slf4j
 public class AppBuildPipeline implements Callable<BuildDeployLog> {
     private AppIntegrate appIntegrate;
     private boolean isDeploy;
@@ -33,21 +35,26 @@ public class AppBuildPipeline implements Callable<BuildDeployLog> {
      */
     @Override
     public BuildDeployLog call() {
+        String appId = appIntegrate.getApp().getAppId();
         if (!appIntegrate.update()) {
             return appIntegrate.log();
         }
+        log.info("{} 更新代码完成...", appId);
 
         if (!appIntegrate.compile()) {
             return appIntegrate.log();
         }
+        log.info("{} 编译代码完成...", appId);
 
         if (!appIntegrate.pack()) {
             return appIntegrate.log();
         }
+        log.info("{} 打包代码完成...", appId);
         buildSuccessfully();
 
         if (isDeploy) {
             appIntegrate.deploy();
+            log.info("{} 部署代码完成...", appId);
         }
 
         return appIntegrate.log();

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

@@ -1,5 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.build;
 
+import cn.reghao.autodop.common.utils.text.TextFile;
+import cn.reghao.autodop.dmaster.app.constant.AppType;
 import cn.reghao.autodop.dmaster.app.entity.build.AppBuild;
 import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
 import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
@@ -25,6 +27,8 @@ import cn.reghao.autodop.dmaster.common.config.SysConfig;
 import cn.reghao.autodop.dmaster.common.exception.ExceptionUtil;
 import lombok.extern.slf4j.Slf4j;
 
+import java.io.File;
+import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.Set;
 
@@ -53,6 +57,8 @@ public class AppIntegrate {
     private CodeCompiler codeCompiler;
     private CodePacker codePacker;
 
+    private AppDeployer appDeployer;
+
     /*public AppIntegrate() {
     }
 
@@ -61,11 +67,16 @@ public class AppIntegrate {
         init();
     }*/
 
-    public AppIntegrate(AppOrchestration app) {
+    public AppIntegrate(AppOrchestration app, AppDeployer appDeployer) {
         this.app = app;
+        this.appDeployer = appDeployer;
         init();
     }
 
+    public AppOrchestration getApp() {
+        return this.app;
+    }
+
     /**
      * 若 AppOrchestration 发生变化则重新初始化
      *
@@ -73,7 +84,7 @@ public class AppIntegrate {
      * @return
      * @date 2020-08-06 上午10:39
      */
-    public void reInit() {
+    public void reInit() throws IOException {
         init();
     }
 
@@ -109,15 +120,29 @@ public class AppIntegrate {
         if (appUpdate.getRepoType().equals(RepoType.svn.name())) {
             codeUpdater = new SvnImpl(appUpdate.getUsername(), appUpdate.getPassword());
         } else if (appUpdate.getRepoType().equals(RepoType.git.name())) {
-            codeUpdater = new GitImpl("/home/reghao/id_rsa_codeup");
+            if ("rsa".equals(appUpdate.getAuthType())) {
+                File tmp = new File(System.getProperty("java.io.tmpdir") + "/rsa_prikey");
+                try {
+                    TextFile.write(tmp, appUpdate.getRsaPrikey());
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                codeUpdater = new GitImpl(tmp.getAbsolutePath());
+            } else if ("password".equals(appUpdate.getAuthType())) {
+                codeUpdater = new GitImpl(appUpdate.getUsername(), appUpdate.getPassword());
+            }
         }
 
         // 初始化编译配置
         AppCompile appCompile = appBuild.getAppCompile();
-        if (appCompile.getCompilerType().equals(CompilerType.dotnet.name())) {
-            preCompile = new DotnetPreCompile();
+        if (appCompile.getCompilerType().equals(CompilerType.shell.name())) {
             codeCompiler = new ShellCompiler(appCompile);
-        } else if (appCompile.getCompilerType().equals(CompilerType.mvn.name())) {
+            if (app.getAppType().equals(AppType.dotnetCore.name())) {
+                preCompile = new DotnetPreCompile();
+            } else {
+                preCompile = null;
+            }
+        } else if (appCompile.getCompilerType().equals(CompilerType.maven.name())) {
             codeCompiler = new MavenCompiler("");
         } else if (appCompile.getCompilerType().equals(CompilerType.none.name())) {
             // 静态应用,不需要编译器
@@ -128,27 +153,19 @@ public class AppIntegrate {
         AppPack appPack = appBuild.getAppPack();
         if (appPack.getPackerType().equals(PackerType.docker.name())) {
             codePacker = new DockerPack(appPack.getPackerPath());
-        } else if (appPack.getPackerType().equals(PackerType.jar.name())) {
-            codePacker = null;
         } else if (appPack.getPackerType().equals(PackerType.zip.name())) {
             codePacker = new ZipPack(appPackDir);
-        } else if (appPack.getPackerType().equals(PackerType.dotnetBinary.name())) {
-            codePacker = null;
         }
 
         // TODO 特定于 dnkt-mgr 项目的处理
-        if (app.getAppId().startsWith("dnkt-mgr")) {
+        /*if (app.getAppId().startsWith("dnkt-mgr")) {
             codePacker = new DntkMgrDockerPack(appPack.getPackerPath(), app.getEnv());
-        }
+        }*/
 
         // TODO 初始化部署配置
         AppDeploy appDeploy = app.getAppDeploy();
     }
 
-    public boolean needPreCompile() {
-        return preCompile != null;
-    }
-
     /**
      * 编译源码前的操作(一般是调整配置)
      *
@@ -228,11 +245,11 @@ public class AppIntegrate {
 
     public boolean compile() {
         try {
-            if (needPreCompile()) {
+            if (preCompile != null) {
                 preCompile(appCompileDir + app.getCompileDir());
             }
             // TODO 通过脚本调用编译器时会卡住
-            codeCompiler.compile(app.getDirname(), appCompileDir + app.getCompileDir());
+            codeCompiler.compile(app.getDirname(), appCompileDir + app.getCompileDir(), app.getEnv());
             return true;
         } catch (Exception e) {
             e.printStackTrace();
@@ -262,7 +279,7 @@ public class AppIntegrate {
     }
 
     public void deploy() {
-        deployLog = AppDeployer.deploy(app, buildLog);
+        deployLog = appDeployer.deploy(app, buildLog);
     }
 
     /**

+ 14 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/build/BuildDispatcher.java

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.build;
 
 import cn.reghao.autodop.dmaster.app.cache.OrchestrationCache;
+import cn.reghao.autodop.dmaster.app.service.deploy.AppDeployer;
 import cn.reghao.autodop.dmaster.app.vo.log.BuildDeployLog;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.repository.log.LogRepository;
@@ -22,13 +23,15 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class BuildDispatcher {
+    private AppDeployer appDeployer;
     // TODO 多线程访问的集合
     private Set<String> onBuilding;
     private OrchestrationCache caching;
     private LogConsumer logConsumer;
     private ExecutorService threadPool;
 
-    public BuildDispatcher(OrchestrationCache caching, LogRepository logDAO) {
+    public BuildDispatcher(AppDeployer appDeployer, OrchestrationCache caching, LogRepository logDAO) {
+        this.appDeployer = appDeployer;
         this.onBuilding = new HashSet<>();
         this.caching = caching;
         this.logConsumer = new LogConsumer(logDAO);
@@ -47,28 +50,23 @@ public class BuildDispatcher {
         List<BuildDeployLog> results = new ArrayList<>();
         List<AppOrchestration> existApps = new ArrayList<>();
         // 分离出存在的应用和不存在的应用
-        if (appIds.remove("all")) {
-            // 处理所有需编译的应用
-        } else {
-            appIds.forEach(appId -> {
-                AppOrchestration app = caching.findByAppId(appId);
-                if (app != null && !onBuilding.contains(appId)) {
+        appIds.forEach(appId -> {
+            AppOrchestration app = caching.findByAppId(appId);
+            if (app != null) {
+                if (!onBuilding.contains(appId)) {
                     onBuilding.add(appId);
                     existApps.add(app);
                 } else {
-                    // TODO 应用不存在或正在构建中
-                    /*BuildLog buildLog = new BuildLog();
-                    buildLog.setAppId(appId);
-                    buildLog.setCode(1);
-                    buildLog.setMsg("应用不存在");
-                    results.add(buildLog);*/
+                    log.info("{} 正在构建中...", appId);
                 }
-            });
-        }
+            } else {
+                log.info("{} 不存在...", appId);
+            }
+        });
 
         // TODO 缓存 appIntegrates,AppOrchestration 没有变化时 AppIntegrate 也应该不变
         List<AppIntegrate> appIntegrates = existApps.stream()
-                .map(AppIntegrate::new)
+                .map(app -> new AppIntegrate(app, appDeployer))
                 .collect(Collectors.toList());
 
         List<Future<BuildDeployLog>> appFutures = new ArrayList<>();

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

@@ -2,6 +2,7 @@ package cn.reghao.autodop.dmaster.app.service.build;
 
 import cn.reghao.autodop.common.utils.FileUtil;
 import cn.reghao.autodop.common.utils.text.ReplaceCharacter;
+import cn.reghao.autodop.dmaster.app.constant.AppType;
 import cn.reghao.autodop.dmaster.app.constant.CompilerType;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.orchestration.ProjOrchestration;
@@ -42,7 +43,7 @@ public class BuilderUtil {
         }
 
         // Dotnet 应用需要额外的处理
-        if (app.getAppBuild().getAppCompile().getCompilerType().equals(CompilerType.dotnet.name())) {
+        if (app.getAppType().equals(AppType.dotnetCore.name())) {
             // Dotnet 应用需要替换一些字符
             BuilderUtil.replaceCharacter(appCompileDir);
         }

+ 14 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/deploy/AppDeployTask.java

@@ -3,6 +3,9 @@ package cn.reghao.autodop.dmaster.app.service.deploy;
 import cn.reghao.autodop.common.deploy.DeployConfig;
 import cn.reghao.autodop.common.grpc.client.GrpcClientProxy;
 import cn.reghao.autodop.common.grpc.facade.app.AppDeployService;
+import cn.reghao.autodop.common.mq.MessageSender;
+import cn.reghao.autodop.common.mq.MqMessage;
+import cn.reghao.autodop.common.mq.Serializer;
 
 import java.util.concurrent.Callable;
 
@@ -15,19 +18,28 @@ import java.util.concurrent.Callable;
 public class AppDeployTask implements Callable<Void> {
     // TODO 配置文件中指定 gRPC 服务器端口
     private static final int GRPC_PORT = 4001;
+    private MessageSender sender;
     private DeployConfig deployConfig;
 
-    public AppDeployTask(DeployConfig deployConfig) {
+    public AppDeployTask(MessageSender sender, DeployConfig deployConfig) {
+        this.sender = sender;
         this.deployConfig = deployConfig;
     }
 
     // 异常在 Future 中抛出
     @Override
     public Void call() throws Exception {
+        // TODO 向 mq 发送消息
+        String routeKey = "dagent.rpc@" + deployConfig.getHost();
+        MqMessage mqMessage = new MqMessage();
+        mqMessage.setMsgType("deployConfig");
+        mqMessage.setMsg(deployConfig);
+        Object object = sender.callRemote(routeKey, Serializer.serialize(mqMessage));
+
         // TODO 公共网络下,gRPC 调用需要经过认证
+        // TODO 处理超时未返回的情况
         AppDeployService appDeployService = (AppDeployService)new GrpcClientProxy<AppDeployService>()
                 .getProxy(deployConfig.getHost(), GRPC_PORT, AppDeployService.class);
-        // TODO 处理超时未返回的情况
         appDeployService.deploy(deployConfig);
         return null;
     }

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

@@ -1,6 +1,7 @@
 package cn.reghao.autodop.dmaster.app.service.deploy;
 
 import cn.reghao.autodop.common.deploy.DeployConfig;
+import cn.reghao.autodop.common.mq.MessageSender;
 import cn.reghao.autodop.common.notification.DingNotify;
 import cn.reghao.autodop.common.notification.Notify;
 import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
@@ -13,6 +14,7 @@ import cn.reghao.autodop.dmaster.app.entity.orchestration.AppOrchestration;
 import cn.reghao.autodop.dmaster.app.entity.Notification;
 import cn.reghao.autodop.dmaster.common.thread.ThreadPoolWrapper;
 import lombok.Data;
+import org.springframework.stereotype.Component;
 
 import java.util.*;
 import java.util.concurrent.ExecutorService;
@@ -22,8 +24,14 @@ import java.util.concurrent.Future;
  * @author reghao
  * @date 2020-03-13 10:26:22
  */
+@Component
 public class AppDeployer {
-    private static ExecutorService threadPool = ThreadPoolWrapper.threadPool("deploy");
+    private MessageSender sender;
+    private ExecutorService threadPool = ThreadPoolWrapper.threadPool("deploy");
+
+    public AppDeployer(MessageSender sender) {
+        this.sender = sender;
+    }
 
     /**
      * 部署应用
@@ -32,7 +40,7 @@ public class AppDeployer {
      * @return
      * @date 2020-03-13 下午1:00
      */
-    public static DeployLog deploy(AppOrchestration app, BuildLog buildLog) {
+    public DeployLog deploy(AppOrchestration app, BuildLog buildLog) {
         Notification notification = app.getNotification();
         String notifierType = notification.getNotifierType();
         String dest = notification.getUrl();
@@ -52,7 +60,7 @@ public class AppDeployer {
             deployConfig.setHost(host);
             deployConfig.setRunningDir(appDeploy.getRunningDir());
 
-            futureMap.put(host, threadPool.submit(new AppDeployTask(deployConfig)));
+            futureMap.put(host, threadPool.submit(new AppDeployTask(sender, deployConfig)));
         }
 
         DeployLog deployLog = new DeployLog();

+ 2 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/CodeCompiler.java

@@ -10,8 +10,9 @@ public interface CodeCompiler {
     /**
      * @param appName 应用名字
      * @param appDir 应用目录
+     * @param env 应用环境
      * @return
      * @date 2020-01-21 下午4:20
      */
-    void compile(String appName, String appDir) throws Exception;
+    void compile(String appName, String appDir, String env) throws Exception;
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/DefaultCompiler.java

@@ -8,6 +8,6 @@ package cn.reghao.autodop.dmaster.app.service.tools.compiler;
  */
 public class DefaultCompiler implements CodeCompiler {
     @Override
-    public void compile(String appName, String appDir) throws Exception {
+    public void compile(String appName, String appDir, String env) throws Exception {
     }
 }

+ 9 - 15
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/MavenCompiler.java

@@ -1,6 +1,5 @@
 package cn.reghao.autodop.dmaster.app.service.tools.compiler;
 
-import cn.reghao.autodop.dmaster.app.service.tools.packer.CodePacker;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.maven.shared.invoker.*;
 
@@ -17,7 +16,7 @@ import java.util.List;
  * @date 2019-10-12 23:55:01
  */
 @Slf4j
-public class MavenCompiler implements CodeCompiler, CodePacker {
+public class MavenCompiler implements CodeCompiler {
     private InvocationRequest request;
     private Invoker invoker;
     private List<String> compileLog;
@@ -30,12 +29,12 @@ public class MavenCompiler implements CodeCompiler, CodePacker {
     }
 
     @Override
-    public void compile(String appName, String appDir) throws Exception {
+    public void compile(String appName, String appDir, String env) throws Exception {
         String pomPath = appDir + "/pom.xml";
-        setInvocationRequest(appName, pomPath);
+        setInvocationRequest(appName, pomPath, env);
         InvocationResult result = invoker.execute(request);
         if (result.getExitCode() != 0) {
-            log.info("构建失败...");
+            log.info("构建失败... {}", result.getExecutionException().getMessage());
         } else {
             log.info("构建成功...");
         }
@@ -49,7 +48,7 @@ public class MavenCompiler implements CodeCompiler, CodePacker {
      * @return
      * @date 2020-05-12 上午10:36
      */
-    private void setInvocationRequest(String appName, String pomPath) {
+    private void setInvocationRequest(String appName, String pomPath, String env) {
         // 清空前一次构建的日志
         compileLog.clear();
         request.setPomFile(new File(pomPath));
@@ -58,22 +57,17 @@ public class MavenCompiler implements CodeCompiler, CodePacker {
         // -am
         request.setAlsoMake(true);
         // -Ptest
-        request.setProfiles(Collections.singletonList("test"));
+        request.setProfiles(Collections.singletonList(env));
         // -pl auth
         request.setProjects(Collections.singletonList(appName));
         request.setOutputHandler(line -> compileLog.add(line));
     }
 
-    @Override
-    public String pack(String appId, String version, String appEntryDir) throws Exception {
-        return null;
-    }
-
     public static void main(String[] args) throws Exception {
-        String mvnHome = "/home/reghao/opt/tools/maven-3.6.0";
-        String projPath = "/home/reghao/code/aha/emall";
+        String mvnHome = "/home/reghao/dev/tools/maven-3.6.0";
+        String appdir = "/home/reghao/code/aha/spiderlab";
 
         CodeCompiler codeCompiler = new MavenCompiler(mvnHome);
-        codeCompiler.compile("file", projPath);
+        codeCompiler.compile("crawler", appdir, "test");
     }
 }

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/compiler/ShellCompiler.java

@@ -20,13 +20,13 @@ public class ShellCompiler implements CodeCompiler {
     private ShellExecutor shell;
 
     public ShellCompiler(AppCompile appCompile) {
-        this.script = appCompile.getCompilerHome() + "/" + appCompile.getCompileCmd();
+        this.script = appCompile.getCompilerHome() + "/" + appCompile.getScript();
         this.shell = new ShellExecutor();
     }
 
     @Override
-    public void compile(String appName, String appDir) throws Exception {
-        ShellResult result = shell.execute(script, appDir);
+    public void compile(String appName, String appDir, String env) throws Exception {
+        ShellResult result = shell.execute(appDir, script);
         if (result.hasError()) {
             Map<String, List<String>> map = new HashMap<>();
             map.put("stdout", result.getStdout());

+ 44 - 27
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/tools/updater/GitImpl.java

@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
 
 /**
  * TODO git 实现
@@ -31,13 +32,34 @@ import java.util.List;
  * @date 2019-10-12 22:22:00
  */
 public class GitImpl implements CodeUpdater {
-    private String privateKey;
+    private SshSessionFactory sshSessionFactory;
+    private UsernamePasswordCredentialsProvider credentials;
 
-    //private final UsernamePasswordCredentialsProvider credentials;
+    public GitImpl(String prikeyFile) {
+        this.sshSessionFactory = new JschConfigSessionFactory() {
+            @Override
+            protected void configure(OpenSshConfig.Host hc, Session session) {
+                // 不检查 RSA 公钥
+                // TODO 后期使用 jsch 实现 ssh-keyscan 命令,动态生成 fingerprint
+                Properties properties = new Properties();
+                properties.put("StrictHostKeyChecking", "no");
+                session.setConfig(properties);
+            }
+
+            @Override
+            protected JSch createDefaultJSch(FS fs) throws JSchException {
+                JSch defaultJSch = new JSch();
+                JSch.setConfig("ssh-rsa", JSch.getConfig("signature.rsa"));
+                defaultJSch.addIdentity(prikeyFile);
+                /*String knownHosts = System.getProperty("user.home") + "/.ssh/known_hosts";
+                defaultJSch.setKnownHosts(knownHosts);*/
+                return defaultJSch;
+            }
+        };
+    }
 
-    public GitImpl(String privateKey) {
-        this.privateKey = privateKey;
-        //this.credentials = new UsernamePasswordCredentialsProvider(username, password);
+    public GitImpl(String username, String password) {
+        this.credentials = new UsernamePasswordCredentialsProvider(username, password);
     }
 
     /**
@@ -62,7 +84,14 @@ public class GitImpl implements CodeUpdater {
             commitLog.setRemoteRepoUrl(remote);
         } else {
             try (Repository repo = new FileRepository(localRepo.getAbsolutePath())) {
-                PullCommand gitPull = new Git(repo).pull();
+                PullCommand gitPull = new Git(repo).pull().setTransportConfigCallback(new TransportConfigCallback() {
+                    @Override
+                    public void configure(Transport transport) {
+                        SshTransport sshTransport = (SshTransport) transport;
+                        sshTransport.setSshSessionFactory(sshSessionFactory);
+                    }
+                });
+
                 gitPull.call();
                 commitLog = commitInfo(repo, branch);
                 commitLog.setRemoteRepoUrl(remote);
@@ -73,19 +102,6 @@ public class GitImpl implements CodeUpdater {
     }
 
     private CommitLog clone(String remote, String branch, String local) throws Exception {
-        SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() {
-            @Override
-            protected void configure(OpenSshConfig.Host hc, Session session) {
-            }
-
-            @Override
-            protected JSch createDefaultJSch(FS fs) throws JSchException {
-                JSch defaultJSch = super.createDefaultJSch(fs);
-                defaultJSch.addIdentity(privateKey);
-                return defaultJSch;
-            }
-        };
-
         CloneCommand gitClone = Git.cloneRepository()
                 .setURI(remote)
                 .setBranch(branch)
@@ -190,17 +206,18 @@ public class GitImpl implements CodeUpdater {
     }
 
     public static void main(String[] args) throws Exception {
-        String privateKey = "/home/reghao/id_rsa_codeup";
-        GitImpl git = new GitImpl(privateKey);
+        String prikeyFile = "/home/reghao/id_rsa_codeup";
+        GitImpl git = new GitImpl(prikeyFile);
         String iqbms = "git@codeup.aliyun.com:5f1f8daf6207a1a8b17f6742/FrontEnd/IQuizoo.BMS.git";
-        String iqService = "git@codeup.aliyun.com:5f1f8daf6207a1a8b17f6742/background/IQuizoo.Service.git";
         String dnkt = "git@codeup.aliyun.com:5f1f8daf6207a1a8b17f6742/FrontEnd/IQuizoo.Game.git";
-        String user = "git@codeup.aliyun.com:5f1f8daf6207a1a8b17f6742/background/UserService.git";
+        String spiderlab = "git@git.reghao.cn:reghao/spiderlab.git";
 
-        String local = "/home/reghao/Downloads/codeup/dnkt";
-        String branch = "develop";
-        CommitLog commitLog = git.update(dnkt, branch, local);
-        //CommitLog commitLog = git.lastCommitInfo(local, branch);
+        String local = "/home/reghao/Downloads/codeup/spiderlab";
+        String branch = "master";
+        CommitLog commitLog = git.update(spiderlab, branch, local);
         System.out.println();
+
+        /*String spiderlab = "http://git.reghao.cn/reghao/spiderlab.git";
+        GitImpl git1 = new GitImpl("reghao", "gjs");*/
     }
 }

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

@@ -4,7 +4,6 @@ import cn.reghao.autodop.dmaster.app.entity.Notification;
 import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
 import cn.reghao.autodop.dmaster.app.entity.build.AppPack;
 import cn.reghao.autodop.dmaster.app.entity.build.AppUpdate;
-import cn.reghao.autodop.dmaster.vue.SelectOption;
 import lombok.Data;
 
 import java.util.List;

+ 10 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/controller/IndexController.java

@@ -8,8 +8,6 @@ import cn.reghao.autodop.dmaster.auth.entity.UserAuth;
 import cn.reghao.autodop.dmaster.auth.repository.PermissionRepository;
 import cn.reghao.autodop.dmaster.auth.repository.RoleRepository;
 import cn.reghao.autodop.dmaster.common.utils.UserContext;
-import cn.reghao.autodop.dmaster.common.webresult.WebResult;
-import cn.reghao.autodop.dmaster.vue.VueRole;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -74,8 +72,8 @@ public class IndexController {
         resultData.setCode(0);
 
         RoleData roleData = new RoleData();
-        List<VueRole> allRoles = new ArrayList<>();
-        VueRole role1 = new VueRole();
+        List<UserRole> allRoles = new ArrayList<>();
+        UserRole role1 = new UserRole();
         role1.setKey("admin");
         role1.setDescription("I am admin");
         List<String> list1 = new ArrayList<>();
@@ -142,6 +140,13 @@ public class IndexController {
 
     @Data
     static class RoleData {
-        private List<VueRole> allRoles;
+        private List<UserRole> allRoles;
+    }
+
+    @Data
+    static class UserRole {
+        private String key;
+        private String description;
+        private List<String> pages;
     }
 }

+ 10 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/utils/AfterAppStart.java

@@ -3,10 +3,10 @@ package cn.reghao.autodop.dmaster.common.utils;
 import cn.reghao.autodop.common.shell.ShellExecutor;
 import cn.reghao.autodop.common.shell.ShellResult;
 import cn.reghao.autodop.common.utils.FileUtil;
-import cn.reghao.autodop.dmaster.app.entity.LocalFsDir;
+import cn.reghao.autodop.dmaster.app.entity.LocalDir;
 import cn.reghao.autodop.dmaster.app.entity.build.AppCompile;
 import cn.reghao.autodop.dmaster.app.repository.build.AppCompileRepository;
-import cn.reghao.autodop.dmaster.app.repository.orchestration.LocalFsDirRepository;
+import cn.reghao.autodop.dmaster.app.repository.orchestration.LocalDirRepository;
 import cn.reghao.autodop.dmaster.common.config.SysConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.ApplicationArguments;
@@ -30,32 +30,33 @@ import java.util.stream.Collectors;
 @Slf4j
 @Component
 public class AfterAppStart implements ApplicationRunner {
-    private LocalFsDirRepository localDirRepository;
+    private LocalDirRepository localDirRepository;
     private AppCompileRepository compileRepository;
 
-    public AfterAppStart(LocalFsDirRepository localDirRepository, AppCompileRepository compileRepository) {
+    public AfterAppStart(LocalDirRepository localDirRepository, AppCompileRepository compileRepository) {
         this.localDirRepository = localDirRepository;
         this.compileRepository = compileRepository;
     }
 
     @Override
     public void run(ApplicationArguments args) {
-        List<LocalFsDir> list = localDirRepository.findAll();
-        LocalFsDir localDir;
+        List<LocalDir> list = localDirRepository.findAll();
+        LocalDir localDir;
         if (list.size() != 0) {
             localDir = list.get(0);
         } else {
-            String home = System.getenv("HOME");
-            localDir = new LocalFsDir();
+            String home = System.getProperty("user.home");
+            localDir = new LocalDir();
             localDir.setLocalRepo(home + "/opt/data/autodop/local-repo");
             localDir.setCompileDir(home + "/opt/data/autodop/compile-dir");
             localDir.setPackDir(home + "/opt/data/autodop/pack-dir");
             localDirRepository.save(localDir);
         }
         initialize(localDir);
+        log.info("autodop-master 初始化完成...");
     }
 
-    public void initialize(LocalFsDir localDir) {
+    public void initialize(LocalDir localDir) {
         // TODO 放入缓存
         SysConfig.localRepo = localDir.getLocalRepo();
         SysConfig.compileDir = localDir.getCompileDir();

+ 0 - 13
dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/RouteMeta.java

@@ -1,13 +0,0 @@
-package cn.reghao.autodop.dmaster.vue;
-
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2020-06-22 23:21:30
- */
-@Data
-public class RouteMeta {
-    private String title;
-    private String icon;
-}

+ 0 - 30
dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/SelectOption.java

@@ -1,30 +0,0 @@
-package cn.reghao.autodop.dmaster.vue;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-/**
- * 对应前端 select 元素的 option
- *
- * @author reghao
- * @date 2020-06-09 10:15:45
- */
-@NoArgsConstructor
-@Data
-public class SelectOption {
-    private String label;
-    private String value;
-    List<SelectOption> children;
-
-    public SelectOption(String label, String value) {
-        this.label = label;
-        this.value = value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-        this.label = value;
-    }
-}

+ 0 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/VueRole.java

@@ -1,16 +0,0 @@
-package cn.reghao.autodop.dmaster.vue;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-06-23 09:24:02
- */
-@Data
-public class VueRole {
-    private String key;
-    private String description;
-    private List<String> pages;
-}

+ 0 - 21
dmaster/src/main/java/cn/reghao/autodop/dmaster/vue/VueRoute.java

@@ -1,21 +0,0 @@
-package cn.reghao.autodop.dmaster.vue;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * Vue 路由
- *
- * @author reghao
- * @date 2020-06-22 23:20:20
- */
-@Data
-public class VueRoute {
-    private String path;
-    private String name;
-    private String component;
-    private RouteMeta meta;
-    private String redirect;
-    private List<VueRoute> children;
-}

+ 2 - 2
dmaster/src/main/resources/application-dev.yml

@@ -6,6 +6,6 @@ spring:
   rabbitmq:
     host: localhost
     port: 5672
-    virtual-host: /
     username: reghao
-    password: 12345678
+    password: 12345678
+    virtual-host: /

+ 2 - 2
dmaster/src/main/resources/application-prod.yml

@@ -6,6 +6,6 @@ spring:
   rabbitmq:
     host: localhost
     port: 5672
-    virtual-host: /
     username: reghao
-    password: 12345678
+    password: 12345678
+    virtual-host: /

+ 2 - 2
dmaster/src/main/resources/application-test.yml

@@ -6,6 +6,6 @@ spring:
   rabbitmq:
     host: localhost
     port: 5672
-    virtual-host: /
     username: reghao
-    password: 12345678
+    password: 12345678
+    virtual-host: /

+ 4 - 4
dmaster/src/test/java/cn/reghao/autodop/dmaster/app/entity/orchestration/AppOrchestrationTest.java

@@ -27,9 +27,9 @@ class AppOrchestrationTest {
 
         AppCompile appCompile = new AppCompile();
         appCompile.setCompilerName("dotnet2.2");
-        appCompile.setCompilerType(CompilerType.dotnet.name());
+        appCompile.setCompilerType(CompilerType.shell.name());
         appCompile.setCompilerHome("/home/reghao/opt/env/dotnet/dotnet-sdk-2.2.101");
-        appCompile.setCompileCmd("dotnet publish");
+        appCompile.setScript("dotnet publish");
 
         AppPack appPack = new AppPack();
         appPack.setPackerName("docker");
@@ -59,9 +59,9 @@ class AppOrchestrationTest {
 
         AppCompile appCompile = new AppCompile();
         appCompile.setCompilerName("dotnet2.2");
-        appCompile.setCompilerType(CompilerType.dotnet.name());
+        appCompile.setCompilerType(CompilerType.shell.name());
         appCompile.setCompilerHome("/home/reghao/opt/env/dotnet/dotnet-sdk-2.2.101");
-        appCompile.setCompileCmd("dotnet publish");
+        appCompile.setScript("dotnet publish");
 
         AppPack appPack = new AppPack();
         appPack.setPackerName("docker");

+ 2 - 2
dmaster/src/test/java/cn/reghao/autodop/dmaster/app/entity/orchestration/ProjOrchestrationTest.java

@@ -22,9 +22,9 @@ class ProjOrchestrationTest {
 
         AppCompile appCompile = new AppCompile();
         appCompile.setCompilerName("dotnet2.2");
-        appCompile.setCompilerType(CompilerType.dotnet.name());
+        appCompile.setCompilerType(CompilerType.shell.name());
         appCompile.setCompilerHome("/home/reghao/opt/env/dotnet/dotnet-sdk-2.2.101");
-        appCompile.setCompileCmd("dotnet publish");
+        appCompile.setScript("dotnet publish");
 
         AppPack appPack = new AppPack();
         appPack.setPackerName("docker");

+ 2 - 2
pom.xml

@@ -38,7 +38,7 @@
             <scope>true</scope>
         </dependency>
 
-        <!--<dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
@@ -46,7 +46,7 @@
         <dependency>
             <groupId>org.springframework.amqp</groupId>
             <artifactId>spring-rabbit</artifactId>
-        </dependency>-->
+        </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 1 - 1
scripts/deploy.sh

@@ -15,7 +15,7 @@ if [ -z ${app_name} ] || [ -z ${remote_host} ] || [ -z ${password} ]; then
 fi
 
 # 存放应用的根目录
-remote_jar_home="/opt/servers/jars/autodop/app"
+remote_jar_home="/opt/services/jars/autodop/app"
 local_jar_home="/home/reghao/tmp/autodop/app"
 cd ${local_jar_home}/${app_name}