|
|
@@ -1,8 +1,14 @@
|
|
|
package cn.reghao.devops.web.mgr.app.service.bd.impl;
|
|
|
|
|
|
+import cn.reghao.devops.common.docker.po.Config;
|
|
|
+import cn.reghao.devops.common.msg.constant.PackType;
|
|
|
+import cn.reghao.devops.web.mgr.app.db.query.AppDeployConfigQuery;
|
|
|
import cn.reghao.devops.web.mgr.app.db.repository.AppDeployingRepository;
|
|
|
+import cn.reghao.devops.web.mgr.app.db.repository.config.AppConfigRepository;
|
|
|
+import cn.reghao.devops.web.mgr.app.db.repository.config.AppDeployConfigRepository;
|
|
|
import cn.reghao.devops.web.mgr.app.db.repository.log.DeployLogRepository;
|
|
|
import cn.reghao.devops.web.mgr.app.model.constant.DeployStatus;
|
|
|
+import cn.reghao.devops.web.mgr.app.model.dto.DeployConfigDto;
|
|
|
import cn.reghao.devops.web.mgr.app.model.po.AppBuilding;
|
|
|
import cn.reghao.devops.web.mgr.app.model.po.AppDeploying;
|
|
|
import cn.reghao.devops.web.mgr.app.model.po.AppDeployingNode;
|
|
|
@@ -22,11 +28,14 @@ import cn.reghao.devops.common.msg.constant.NodeStatus;
|
|
|
import cn.reghao.devops.common.msg.event.EvtAppStatResult;
|
|
|
import cn.reghao.jutil.jdk.converter.DateTimeConverter;
|
|
|
import cn.reghao.jutil.jdk.db.PageList;
|
|
|
+import cn.reghao.jutil.jdk.result.Result;
|
|
|
import cn.reghao.jutil.jdk.result.ResultStatus;
|
|
|
+import cn.reghao.jutil.jdk.serializer.JsonConverter;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -38,18 +47,25 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class DeployStatImpl implements DeployStat {
|
|
|
+ private final AppDeployConfigRepository deployConfigRepository;
|
|
|
+ private final AppDeployingRepository deployingRepository;
|
|
|
private final DeployLogRepository deployLogRepository;
|
|
|
private final BuildDeployNotify buildDeployNotify;
|
|
|
private final MachineService machineService;
|
|
|
- private final AppDeployingRepository deployingRepository;
|
|
|
-
|
|
|
- public DeployStatImpl(DeployLogRepository deployLogRepository,
|
|
|
- BuildDeployNotify buildDeployNotify, MachineService machineService,
|
|
|
- AppDeployingRepository deployingRepository) {
|
|
|
+ private final AppConfigRepository appConfigRepository;
|
|
|
+ private final AppDeployConfigQuery deployConfigQuery;
|
|
|
+
|
|
|
+ public DeployStatImpl(AppDeployConfigRepository deployConfigRepository, AppDeployingRepository deployingRepository,
|
|
|
+ DeployLogRepository deployLogRepository, BuildDeployNotify buildDeployNotify,
|
|
|
+ AppConfigRepository appConfigRepository, AppDeployConfigQuery deployConfigQuery,
|
|
|
+ MachineService machineService) {
|
|
|
+ this.deployConfigRepository = deployConfigRepository;
|
|
|
+ this.deployingRepository = deployingRepository;
|
|
|
this.deployLogRepository = deployLogRepository;
|
|
|
+ this.appConfigRepository = appConfigRepository;
|
|
|
+ this.deployConfigQuery = deployConfigQuery;
|
|
|
this.buildDeployNotify = buildDeployNotify;
|
|
|
this.machineService = machineService;
|
|
|
- this.deployingRepository = deployingRepository;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -66,11 +82,12 @@ public class DeployStatImpl implements DeployStat {
|
|
|
public boolean delete(AppDeployConfig appDeployConfig) {
|
|
|
String appId = appDeployConfig.getAppConfig().getAppId();
|
|
|
String machineId = appDeployConfig.getMachineHost().getMachineId();
|
|
|
- delete(appId, machineId);
|
|
|
+ deleteAppDeploying(appId, machineId);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- public void delete(String appId, String machineId) {
|
|
|
+ @Override
|
|
|
+ public void deleteAppDeploying(String appId, String machineId) {
|
|
|
AppDeploying appDeploying = deployingRepository.findByAppConfig_AppId(appId);
|
|
|
if (appDeploying != null) {
|
|
|
List<AppDeployingNode> deployingNodes = appDeploying.getDeployingNodes();
|
|
|
@@ -85,7 +102,9 @@ public class DeployStatImpl implements DeployStat {
|
|
|
|
|
|
if (idx != -1) {
|
|
|
deployingNodes.remove(idx);
|
|
|
+ deployLogRepository.deleteByMachineHost_MachineId(machineId);
|
|
|
deployingRepository.delete(appDeploying);
|
|
|
+ deployingRepository.deleteByAppConfig_AppId(appId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -296,4 +315,129 @@ public class DeployStatImpl implements DeployStat {
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteDeployLog(String buildLogId) {
|
|
|
+ deployLogRepository.deleteByBuildLog_BuildLogId(buildLogId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public Result addDeployConfig(DeployConfigDto deployConfigDto) {
|
|
|
+ String appId = deployConfigDto.getAppId();
|
|
|
+ AppConfig appConfig = appConfigRepository.findByAppId(appId);
|
|
|
+ if (appConfig == null) {
|
|
|
+ String msg = String.format("%s 不存在", appId);
|
|
|
+ return Result.result(ResultStatus.ERROR, msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ String machineId = deployConfigDto.getMachineId();
|
|
|
+ MachineHost machineHost = machineService.getMachineHost(machineId);
|
|
|
+ if (machineHost == null) {
|
|
|
+ String msg = String.format("%s 不存在", machineId);
|
|
|
+ return Result.result(ResultStatus.ERROR, msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ String startScript = deployConfigDto.getStartScript();
|
|
|
+ String packType = deployConfigDto.getPackType();
|
|
|
+ if (packType.equals(PackType.docker.name())) {
|
|
|
+ Config containerConfig = JsonConverter.jsonToObject(startScript, Config.class);
|
|
|
+ if (startScript == null || startScript.isBlank()) {
|
|
|
+ startScript = "{}";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ AppDeployConfig appDeployConfig = new AppDeployConfig(appConfig, machineHost, startScript);
|
|
|
+ appDeployConfig = deployConfigRepository.save(appDeployConfig);
|
|
|
+
|
|
|
+ add(appDeployConfig);
|
|
|
+ return Result.result(ResultStatus.SUCCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Result updateStartScript(DeployConfigDto deployConfigDto) {
|
|
|
+ String appId = deployConfigDto.getAppId();
|
|
|
+ String machineId = deployConfigDto.getMachineId();
|
|
|
+ AppDeployConfig appDeployConfig = deployConfigQuery.findByAppIdAndMachineId(appId, machineId);
|
|
|
+ if (appDeployConfig == null) {
|
|
|
+ String msg = String.format("%s 在 %s 上的部署配置不存在", appId, machineId);
|
|
|
+ return Result.result(ResultStatus.ERROR, msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ String startScript = deployConfigDto.getStartScript();
|
|
|
+ String packType = deployConfigDto.getPackType();
|
|
|
+ if (packType.equals(PackType.docker.name())) {
|
|
|
+ Config containerConfig = JsonConverter.jsonToObject(startScript, Config.class);
|
|
|
+ if (startScript == null || startScript.isBlank()) {
|
|
|
+ startScript = "{}";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ appDeployConfig.setUnpackScript(deployConfigDto.getUnpackScript());
|
|
|
+ appDeployConfig.setStartHome(deployConfigDto.getStartHome());
|
|
|
+ appDeployConfig.setStartScript(startScript);
|
|
|
+ deployConfigRepository.save(appDeployConfig);
|
|
|
+ return Result.result(ResultStatus.SUCCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public Result deleteDeployConfig(int appDeployConfigId) {
|
|
|
+ deployConfigRepository.deleteById(appDeployConfigId);
|
|
|
+
|
|
|
+ /*AppDeployConfig appDeployConfig = deployConfigQuery.findById(appDeployConfigId);
|
|
|
+ String appId = appDeployConfig.getAppConfig().getAppId();
|
|
|
+ String machineId = appDeployConfig.getMachineHost().getMachineId();
|
|
|
+ if (!isRunning(appId, machineId)) {
|
|
|
+ delete(appDeployConfig);
|
|
|
+ deployConfigRepository.delete(appDeployConfig);
|
|
|
+ }*/
|
|
|
+
|
|
|
+ return Result.result(ResultStatus.SUCCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean delete0(AppDeployConfig appDeployConfig) {
|
|
|
+ String appId = appDeployConfig.getAppConfig().getAppId();
|
|
|
+ String machineId = appDeployConfig.getMachineHost().getMachineId();
|
|
|
+ if (!isRunning(appId, machineId)) {
|
|
|
+ delete(appDeployConfig);
|
|
|
+ deployConfigRepository.delete(appDeployConfig);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void deleteByAppConfig(AppConfig appConfig) {
|
|
|
+ List<AppDeployConfig> deployConfigs = deployConfigRepository.findByAppConfig(appConfig);
|
|
|
+ if (!deployConfigs.isEmpty()) {
|
|
|
+ deployConfigs.forEach(this::delete0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void deleteByMachineHost(MachineHost machineHost) {
|
|
|
+ List<AppDeployConfig> list = deployConfigRepository.findByMachineHost(machineHost);
|
|
|
+ List<String> apps = list.stream()
|
|
|
+ .map(appDeployConfig -> appDeployConfig.getAppConfig().getAppId())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (int i = 0; i < Math.min(3, list.size()); i++) {
|
|
|
+ sb.append(apps.get(i)).append(",");
|
|
|
+ }
|
|
|
+ String msg = sb.toString();
|
|
|
+ if (!msg.isBlank()) {
|
|
|
+ String errMsg = String.format("还有 %s 等应用部署在当前机器上", msg.substring(0, msg.length()-1));
|
|
|
+ log.error(errMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (AppDeployConfig appDeployConfig : list) {
|
|
|
+ String appId = appDeployConfig.getAppConfig().getAppId();
|
|
|
+ String machineId = appDeployConfig.getMachineHost().getMachineId();
|
|
|
+ deleteAppDeploying(appId, machineId);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ deployConfigRepository.deleteByMachineHost(machineHost);
|
|
|
+ }
|
|
|
}
|