From 23ceadc1636d01a0a9138065ea85fe299b992706 Mon Sep 17 00:00:00 2001 From: mianbin Date: Tue, 27 May 2025 22:29:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BD=E4=B8=80=E4=B8=AAcommand=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E7=9A=84=E7=B1=BB=EF=BC=8C=E9=87=8C=E9=9D=A2=E7=9A=84?= =?UTF-8?q?buffer=E4=B8=BA=E4=BA=86=E4=BB=A5=E5=90=8E=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E7=9A=84=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker/callback/CommandExecCallback.java | 58 +++++++++++++++++++ .../docker/callback/LoggingCallback.java | 57 ------------------ .../docker/service/impl/ContainerService.java | 4 +- .../ContainerServiceTest.java | 51 +--------------- 4 files changed, 63 insertions(+), 107 deletions(-) create mode 100644 modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/CommandExecCallback.java delete mode 100644 modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/LoggingCallback.java diff --git a/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/CommandExecCallback.java b/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/CommandExecCallback.java new file mode 100644 index 00000000..52e5bc83 --- /dev/null +++ b/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/CommandExecCallback.java @@ -0,0 +1,58 @@ +package cd.casic.module.execute.docker.callback; + +import com.github.dockerjava.api.async.ResultCallback; +import com.github.dockerjava.api.model.Frame; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * @description: 自定义执行命令回调类,用于处理命令执行过程中的输出和错误信息。目前这里是直接输出,随取随用,后面改 + * @author: mianbin + * @date: 2025/5/27 22:23 + * @version: 1.0 + */ +@Slf4j +@RequiredArgsConstructor +public class CommandExecCallback extends ResultCallback.Adapter { + + private final String containerId; + private StringBuffer buffer = new StringBuffer(1024); + @Override + public void onNext(Frame frame) { + String output = new String(frame.getPayload(), StandardCharsets.UTF_8); + switch (frame.getStreamType()) { + case STDOUT: + System.out.print(output); + log.info("标准输出: {}", output.trim()); + break; + case STDERR: + System.err.print(output); + log.error("错误输出: {}", output.trim()); + break; + default: + log.warn("未知流类型: {}", frame.getStreamType()); + } + super.onNext(frame); + } + + @Override + public void onError(Throwable throwable) { + log.error("执行命令时出错: {}", throwable.getMessage(), throwable); + super.onError(throwable); + } + + @Override + public void onComplete() { + log.info("命令执行完毕"); + super.onComplete(); + } + + @Override + public void close() throws IOException { + log.debug("回调已关闭"); + super.close(); + } +} diff --git a/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/LoggingCallback.java b/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/LoggingCallback.java deleted file mode 100644 index 7d437519..00000000 --- a/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/callback/LoggingCallback.java +++ /dev/null @@ -1,57 +0,0 @@ -package cd.casic.module.execute.docker.callback; - -import com.github.dockerjava.api.async.ResultCallback; -import com.github.dockerjava.api.model.Frame; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -/** - * @description: 之前版本用的ExecStartResultCallback实现,现在废弃了,使用ResultCallback.Adapter,未测试 - * @author: mianbin - * @date: 2025/5/26 18:09 - * @version: 1.0 - */ -@Slf4j -@RequiredArgsConstructor -public class LoggingCallback extends ResultCallback.Adapter { - - private final String containerId; - private final String execId; - private StringBuffer buffer = new StringBuffer(1024); - - @Override - public void onNext(Frame frame) { - String streamType = frame.getStreamType().name(); - String message = new String(frame.getPayload(), StandardCharsets.UTF_8); - if (streamType.equals("STDOUT")) { - log.info("[容器: {}, ExecID: {}] 标准输出: {}", containerId, execId, message.trim()); - } else if (streamType.equals("STDERR")) { - log.error("[容器: {}, ExecID: {}] 错误输出: {}", containerId, execId, message.trim()); - } - buffer.append(message); - super.onNext(frame); - } - - @Override - public void onError(Throwable throwable) { - log.error("[容器: {}, ExecID: {}] 执行命令时出错: {}", containerId, execId, throwable.getMessage()); - super.onError(throwable); - } - - @Override - public void onComplete() { - log.info("[容器: {}, ExecID: {}] 命令执行完毕", containerId, execId); - super.onComplete(); - } - - @Override - public void close() throws IOException { - - log.debug("[容器: {}, ExecID: {}] 回调已关闭", containerId, execId); - super.close(); - } - -} diff --git a/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/service/impl/ContainerService.java b/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/service/impl/ContainerService.java index 8e477d93..b5e9fea2 100644 --- a/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/service/impl/ContainerService.java +++ b/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/service/impl/ContainerService.java @@ -3,7 +3,7 @@ package cd.casic.module.execute.docker.service.impl; import cd.casic.framework.commons.util.json.JsonUtils; import cd.casic.framework.security.core.util.SecurityFrameworkUtils; import cd.casic.module.execute.docker.DockerClientFactory; -import cd.casic.module.execute.docker.callback.LoggingCallback; +import cd.casic.module.execute.docker.callback.CommandExecCallback; import cd.casic.module.execute.docker.dataobject.model.OperateRecord; import cd.casic.module.execute.docker.dataobject.model.RunNewContainer; import cd.casic.module.execute.docker.service.IContainerService; @@ -156,7 +156,7 @@ public class ContainerService implements IContainerService { .withTty(true) .exec().getId(); // 执行命令并记录日志 - ResultCallback callback = new LoggingCallback(containerId, execId); + ResultCallback callback = new CommandExecCallback(containerId); /*这个是异步的方法*/ dockerClient.execStartCmd(execId) .withTty(true) diff --git a/modules/module-ci-execute/src/test/java/cd.casic.module.execute/ContainerServiceTest.java b/modules/module-ci-execute/src/test/java/cd.casic.module.execute/ContainerServiceTest.java index d082bf05..fc89e9ad 100644 --- a/modules/module-ci-execute/src/test/java/cd.casic.module.execute/ContainerServiceTest.java +++ b/modules/module-ci-execute/src/test/java/cd.casic.module.execute/ContainerServiceTest.java @@ -1,6 +1,6 @@ package cd.casic.module.execute; -import cd.casic.module.execute.docker.callback.LoggingCallback; +import cd.casic.module.execute.docker.callback.CommandExecCallback; import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.async.ResultCallback; @@ -16,10 +16,8 @@ import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -170,7 +168,7 @@ public class ContainerServiceTest { .withTty(true) .exec().getId(); // 执行命令并记录日志 - ResultCallback callback = new LoggingCallback(containerId, execId); + ResultCallback callback = new CommandExecCallback(containerId); /*这个是异步的方法*/ dockerClient.execStartCmd(execId) .withTty(true) @@ -189,50 +187,7 @@ public class ContainerServiceTest { .exec(); dockerClient .execStartCmd(execCreateCmdResponse.getId()) - .exec(new CustomExecCallback()) + .exec(new CommandExecCallback(containerId)) .awaitCompletion(); } - - /** - * 自定义执行命令回调类,用于处理命令执行过程中的输出和错误信息。 - */ - private static class CustomExecCallback extends ResultCallback.Adapter { - - @Override - public void onNext(Frame frame) { - String output = new String(frame.getPayload(), StandardCharsets.UTF_8); - switch (frame.getStreamType()) { - case STDOUT: - System.out.print(output); -// log.info("标准输出: {}", output.trim()); - break; - case STDERR: - System.err.print(output); - log.error("错误输出: {}", output.trim()); - break; - default: - log.warn("未知流类型: {}", frame.getStreamType()); - } - super.onNext(frame); - } - - @Override - public void onError(Throwable throwable) { - log.error("执行命令时出错: {}", throwable.getMessage(), throwable); - super.onError(throwable); - } - - @Override - public void onComplete() { - log.info("命令执行完毕"); - super.onComplete(); - } - - @Override - public void close() throws IOException { - log.debug("回调已关闭"); - super.close(); - } - } - }