|
|
@@ -8,10 +8,7 @@ import cn.reghao.bnt.web.devops.app.service.bd.BuildApp;
|
|
|
import cn.reghao.bnt.web.devops.app.service.bd.BuildDeployNotify;
|
|
|
import cn.reghao.bnt.web.devops.app.service.bd.BuildStat;
|
|
|
import cn.reghao.bnt.web.devops.app.service.bd.DeployApp;
|
|
|
-import cn.reghao.bnt.web.devops.build.chain.Bootstrap;
|
|
|
-import cn.reghao.bnt.web.devops.build.chain.BuildHandlers;
|
|
|
-import cn.reghao.bnt.web.devops.build.chain.BuildTools;
|
|
|
-import cn.reghao.bnt.web.devops.build.chain.Handler;
|
|
|
+import cn.reghao.bnt.web.devops.build.chain.*;
|
|
|
import cn.reghao.bnt.web.devops.build.chain.impl.BuildChainParam;
|
|
|
import cn.reghao.bnt.web.devops.build.chain.impl.BuildChainResult;
|
|
|
import cn.reghao.bnt.web.devops.build.model.AppDto;
|
|
|
@@ -22,7 +19,9 @@ import cn.reghao.jutil.tool.id.IdGenerator;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
|
|
|
@@ -35,6 +34,7 @@ import java.util.concurrent.ExecutorService;
|
|
|
public class BuildAppImpl implements BuildApp {
|
|
|
private final IdGenerator idGenerator = new IdGenerator(10, "build-log-id");
|
|
|
private final ExecutorService threadPool = ThreadPoolWrapper.threadPool("build-pool", 10);
|
|
|
+ private final Map<String, CompletableFuture<HandlerResult>> buildMap = new HashMap<>(10);
|
|
|
private final BuildStat buildStat;
|
|
|
private final DeployApp deployApp;
|
|
|
private final BuildDeployNotify buildDeployNotify;
|
|
|
@@ -54,6 +54,11 @@ public class BuildAppImpl implements BuildApp {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (buildMap.size() >= 10) {
|
|
|
+ log.info("已有 {} 个 app 正在构建中", buildMap.size());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
AppConfig appConfig = buildStat.getAppConfig(appId);
|
|
|
if (appConfig == null) {
|
|
|
throw new Exception(appId + " 不存在");
|
|
|
@@ -75,12 +80,13 @@ public class BuildAppImpl implements BuildApp {
|
|
|
String appId = appDto.getAppId();
|
|
|
log.info("{} 开始异步构建", appId);
|
|
|
buildStat.beforeBuild(appId, buildBy);
|
|
|
- CompletableFuture.supplyAsync(buildChain, threadPool)
|
|
|
+ CompletableFuture<HandlerResult> future = CompletableFuture.supplyAsync(buildChain, threadPool)
|
|
|
.whenComplete((chainResult, throwable) -> {
|
|
|
BuildChainResult buildChainResult = (BuildChainResult) chainResult;
|
|
|
Result result = buildChainResult.getResult();
|
|
|
AppBuilding appBuilding = buildStat.afterBuild(buildChainResult);
|
|
|
log.info("{} 异步构建完成", appId);
|
|
|
+ buildMap.remove(appId);
|
|
|
if (appBuilding == null) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -91,6 +97,21 @@ public class BuildAppImpl implements BuildApp {
|
|
|
buildDeployNotify.buildNotify(appBuilding);
|
|
|
}
|
|
|
});
|
|
|
+ buildMap.put(appId, future);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void getBuildStat() {
|
|
|
+ buildMap.forEach((appId, future) -> {
|
|
|
+ if (future.isDone()) {
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public synchronized void cancel(String appId) {
|
|
|
+ CompletableFuture<HandlerResult> future = buildMap.get(appId);
|
|
|
+ if (future != null && !future.isDone()) {
|
|
|
+ future.cancel(true);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void remoteBuild(AppDto appDto, String buildBy) {
|