Bläddra i källkod

优化部署接口

reghao 4 år sedan
förälder
incheckning
c52190a682

+ 7 - 9
common/src/main/java/cn/reghao/autodop/common/docker/DockerImpl.java

@@ -154,10 +154,15 @@ public class DockerImpl implements Docker {
     }
 
     @Override
-    public void stopAndDelete(String containerName) throws DockerException {
+    public void stopAndDelete(String containerName) {
         String containerId = getContainerIdByName(containerName);
         if (containerId != null) {
-            dockerClient.stopContainerCmd(containerId).exec();
+            InspectContainerResponse containerInfo = inspectContainer(containerId);
+            InspectContainerResponse.ContainerState state = containerInfo.getState();
+            boolean isRunning = state.getRunning() != null ? state.getRunning() : false;
+            if (isRunning) {
+                dockerClient.stopContainerCmd(containerId).exec();
+            }
             dockerClient.removeContainerCmd(containerId).exec();
         }
     }
@@ -204,11 +209,4 @@ public class DockerImpl implements Docker {
     public void start(String containerId) {
         dockerClient.startContainerCmd(containerId).exec();
     }
-
-    public static void main(String[] args) throws DockerException {
-        Docker docker = new DockerImpl();
-        String appId = "dnkt";
-        String containerId = docker.getContainerIdByName(appId);
-        System.out.println();
-    }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/log/BuildLogQueryImpl.java

@@ -35,7 +35,7 @@ public class BuildLogQueryImpl implements BuildLogQuery {
     public BuildLog findLatestBuildingByAppId(String appId) {
         Query query = new Query();
         query.addCriteria(Criteria.where("appId").is(appId));
-        query.with(Sort.by(Sort.Order.desc("buildTime"))).limit(1);
+        query.with(Sort.by(Sort.Order.desc("createTime"))).limit(1);
         List<BuildLog> list = mongoTemplate.find(query, BuildLog.class);
         return list.isEmpty() ? null : list.get(0);
     }

+ 23 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/bd/AppBuildingServiceImpl.java

@@ -7,26 +7,38 @@ import cn.reghao.autodop.dmaster.app.db.query.log.BuildLogQuery;
 import cn.reghao.autodop.dmaster.app.model.po.AppBuilding;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.autodop.dmaster.app.model.po.log.BuildLog;
+import cn.reghao.autodop.dmaster.monitor.db.query.AppMonitorQuery;
+import cn.reghao.autodop.dmaster.monitor.model.po.AppMonitor;
+import cn.reghao.autodop.dmaster.notification.model.po.NotifyGroup;
+import cn.reghao.autodop.dmaster.notification.model.vo.BuildNotifyMsg;
+import cn.reghao.autodop.dmaster.notification.service.NotifyService;
 import cn.reghao.autodop.dmaster.rbac.UserContext;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 /**
  * @author reghao
  * @date 2021-10-22 14:48:26
  */
+@Slf4j
 @Service
 public class AppBuildingServiceImpl implements AppBuildingService {
     private final AppBuildingQuery buildingQuery;
     private final AppBuildingCrud buildingCrud;
     private final BuildLogQuery buildLogQuery;
     private final BuildLogCrud buildLogCrud;
+    private final AppMonitorQuery appMonitorQuery;
+    private final NotifyService notifyService;
 
     public AppBuildingServiceImpl(AppBuildingQuery buildingQuery, AppBuildingCrud buildingCrud,
-                                  BuildLogQuery buildLogQuery, BuildLogCrud buildLogCrud) {
+                                  BuildLogQuery buildLogQuery, BuildLogCrud buildLogCrud,
+                                  AppMonitorQuery appMonitorQuery, NotifyService notifyService) {
         this.buildingQuery = buildingQuery;
         this.buildingCrud = buildingCrud;
         this.buildLogQuery = buildLogQuery;
         this.buildLogCrud = buildLogCrud;
+        this.appMonitorQuery = appMonitorQuery;
+        this.notifyService = notifyService;
     }
 
     @Override
@@ -78,5 +90,15 @@ public class AppBuildingServiceImpl implements AppBuildingService {
 
     @Override
     public void sendBuildNotify(BuildLog buildLog) {
+        String appId = buildLog.getAppId();
+        AppMonitor appMonitor = appMonitorQuery.findByAppId(appId);
+        if (appMonitor == null || appMonitor.getAppBuild() == null) {
+            log.error("{} 没有构建通知配置", appId);
+            return;
+        }
+
+        NotifyGroup notifyGroup = appMonitor.getAppBuild();
+        BuildNotifyMsg buildNotifyMsg = new BuildNotifyMsg(buildLog);
+        notifyService.notify(notifyGroup, buildNotifyMsg.dingMsg());
     }
 }

+ 13 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/impl/BuildDeployServiceImpl.java

@@ -7,10 +7,12 @@ import cn.reghao.autodop.common.util.thread.ThreadPoolWrapper;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppDeployConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.query.log.BuildLogQuery;
+import cn.reghao.autodop.dmaster.app.db.query.log.DeployLogQuery;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppDeployConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.LocalBuildDir;
 import cn.reghao.autodop.dmaster.app.model.po.log.BuildLog;
+import cn.reghao.autodop.dmaster.app.model.po.log.DeployLog;
 import cn.reghao.autodop.dmaster.app.service.AppBuildSupplier;
 import cn.reghao.autodop.dmaster.app.service.BuildDeployService;
 import cn.reghao.autodop.dmaster.app.service.AppDeployer;
@@ -46,12 +48,13 @@ public class BuildDeployServiceImpl implements BuildDeployService {
     private final UploadDownload uploadDownload;
     private final AppConfigQuery appConfigQuery;
     private final BuildLogQuery buildLogQuery;
-    private AppDeployConfigQuery deployConfigQuery;
+    private final AppDeployConfigQuery deployConfigQuery;
+    private final DeployLogQuery deployLogQuery;
 
     public BuildDeployServiceImpl(AsyncMqttClient mqttClient, AppDeployer appDeployer,
                                   AppBuildingService buildingService, UploadDownload uploadDownload,
                                   AppConfigQuery appConfigQuery, BuildLogQuery buildLogQuery,
-                                  AppDeployConfigQuery deployConfigQuery) {
+                                  AppDeployConfigQuery deployConfigQuery, DeployLogQuery deployLogQuery) {
         this.threadPool = ThreadPoolWrapper.threadPool("build-deploy");
         this.mqttClient = mqttClient;
         this.buildingService = buildingService;
@@ -60,6 +63,7 @@ public class BuildDeployServiceImpl implements BuildDeployService {
         this.appConfigQuery = appConfigQuery;
         this.buildLogQuery = buildLogQuery;
         this.deployConfigQuery = deployConfigQuery;
+        this.deployLogQuery = deployLogQuery;
     }
 
     @Override
@@ -92,7 +96,9 @@ public class BuildDeployServiceImpl implements BuildDeployService {
                             return;
                         }
                         log.info("{} 构建完成", appId);
-                        buildingService.sendBuildNotify(buildLog);
+                        if (!isDeploy) {
+                            buildingService.sendBuildNotify(buildLog);
+                        }
                     } catch (Exception e) {
                         log.error("构建后处理发生错误: {}", ExceptionUtil.errorMsg(e));
                     } finally {
@@ -112,6 +118,7 @@ public class BuildDeployServiceImpl implements BuildDeployService {
                             String errMsg = ExceptionUtil.errorMsg(e);
                             log.error("部署 {} 时抛出异常: {}", appId, errMsg);
                         } finally {
+                            // TODO RPC 异步调用返回后部署才算完成
                             onDeploying.remove(appId);
                         }
                     }
@@ -120,11 +127,12 @@ public class BuildDeployServiceImpl implements BuildDeployService {
 
     @Override
     public void deploy(String buildLogId, String machineId) throws MqttException {
-        BuildLog buildLog = buildLogQuery.findById(buildLogId);
-        if (buildLog == null) {
+        DeployLog deployLog = deployLogQuery.findByBuildLogIdAndMachineId(buildLogId, machineId);
+        if (deployLog != null) {
             return;
         }
 
+        BuildLog buildLog = buildLogQuery.findById(buildLogId);
         String appId = buildLog.getAppId();
         if (!onDeploying.add(appId)) {
             return;