From 5c0196c868da7aae7826afb52d862fdd29bdc328 Mon Sep 17 00:00:00 2001 From: even <827656971@qq.com> Date: Sat, 7 Jun 2025 19:42:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4=EF=BC=88?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/process/dal/req/pipeline/PipelineCreateReq.java | 2 ++ .../engine/worker/DIYImageExecuteCommandWorker.java | 10 ++++++++-- .../engine/worker/TestCaseGenerationWorker.java | 10 ++++++---- .../ci/process/engine/worker/base/DockerWorker.java | 6 ++++-- .../casic/ci/process/engine/worker/base/SshWorker.java | 5 +++-- .../service/pipeline/impl/PipelineServiceImpl.java | 1 - .../java/cd/casic/ci/process/ssh/SshClientFactory.java | 3 ++- .../main/java/cd/casic/ci/process/ssh/SshCommand.java | 5 +++-- .../main/java/cd/casic/ci/process/ssh/WinRMHelper.java | 3 ++- 9 files changed, 30 insertions(+), 15 deletions(-) diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/pipeline/PipelineCreateReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/pipeline/PipelineCreateReq.java index 87af9498..7d06e154 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/pipeline/PipelineCreateReq.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/pipeline/PipelineCreateReq.java @@ -84,5 +84,7 @@ public class PipelineCreateReq { private String executeStatus; + private String resourceId; + private ResourceReq resourceReq; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java index a88f0476..fa76fd42 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java @@ -2,12 +2,15 @@ package cd.casic.ci.process.engine.worker; import cd.casic.ci.process.common.WorkAtom; +import cd.casic.ci.process.dal.resp.resource.ResourceFindResp; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.constant.EngineRuntimeConstant; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.SshWorker; import cd.casic.ci.process.process.dataObject.log.PipTaskLog; import cd.casic.ci.process.process.dataObject.machine.MachineInfo; +import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; +import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.task.PipTask; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -54,9 +57,12 @@ public class DIYImageExecuteCommandWorker extends SshWorker { //如果machineId为0,则说明该节点没有配置机器,则使用开始节点的机器 //获取机器 - MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId); + PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef(); + String resourceId = pipeline.getResourceId(); + ResourceFindResp resourceById = getResourceManagerService().findResourceById(resourceId); + PipResourceMachine resourceMachine = resourceById.getResourceMachine(); //TODO 得改一下 - statusCode = shell(machineInfoDO, null,context, + statusCode = shell(resourceMachine, null,context, "echo \"自定义镜像执行命令\"", commandScript ); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/TestCaseGenerationWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/TestCaseGenerationWorker.java index 9999779a..fe002f3a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/TestCaseGenerationWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/TestCaseGenerationWorker.java @@ -2,12 +2,14 @@ package cd.casic.ci.process.engine.worker; import cd.casic.ci.process.common.WorkAtom; +import cd.casic.ci.process.dal.resp.resource.ResourceFindResp; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.constant.TestCaseGenerationConstant; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.SshWorker; import cd.casic.ci.process.process.dataObject.machine.MachineInfo; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; +import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.util.CryptogramUtil; import lombok.extern.slf4j.Slf4j; @@ -39,12 +41,12 @@ public class TestCaseGenerationWorker extends SshWorker { try { //将节点的配置信息反编译成对象 log.info("构建脚本" + commandScript); - + String resourceId = pipeline.getResourceId(); //如果machineId为0,则说明该节点没有配置机器,则使用开始节点的机器 - + ResourceFindResp resourceById = getResourceManagerService().findResourceById(resourceId); + PipResourceMachine resourceMachine = resourceById.getResourceMachine(); //获取机器 - MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId); - statusCode = shell(machineInfoDO, CryptogramUtil.doDecrypt(machineInfoDO.getPassword()), context, + statusCode = shell(resourceMachine, CryptogramUtil.doDecrypt(resourceMachine.getPassword()), context, "echo \"自定义镜像执行命令\"", commandScript ); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/DockerWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/DockerWorker.java index 2c99a427..63e134fb 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/DockerWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/DockerWorker.java @@ -2,6 +2,8 @@ package cd.casic.ci.process.engine.worker.base; import cd.casic.ci.process.engine.runContext.BaseRunContext; +import cd.casic.framework.commons.exception.ServiceException; +import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint; import com.github.dockerjava.api.DockerClient; @@ -47,7 +49,7 @@ public abstract class DockerWorker extends BaseWorker{ if (StringUtils.isEmpty(dockerRunCommand)) { log.error("未找到有效指令"); append(context,"未找到有效指令"); - return; + throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),""); } DockerExecHandler handler = null; try { @@ -75,7 +77,7 @@ public abstract class DockerWorker extends BaseWorker{ commandList[1]="-c"; commandList[2]=allCommand; log.info("容器内执行命令:{}",commandList); - append(context,"容器创建失败"); +// append(context,"容器创建失败"); // 创建命令 ExecCreateCmdResponse exec = client.execCreateCmd(containerId) .withAttachStdin(true) diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java index f3372981..fc8a1484 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java @@ -5,6 +5,7 @@ import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.worker.base.BaseWorker; import cd.casic.ci.process.enums.MachineSystemEnum; import cd.casic.ci.process.process.dataObject.machine.MachineInfo; +import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.ssh.SshClient; import cd.casic.ci.process.ssh.SshClientFactory; import cd.casic.ci.process.ssh.WinRMHelper; @@ -23,7 +24,7 @@ public abstract class SshWorker extends BaseWorker { * @param commands 命令 * @return 0 成功;其他值 失败 */ - public int shell(MachineInfo machineInfo, String sudoPassword, BaseRunContext context, String... commands) { + public int shell(PipResourceMachine machineInfo, String sudoPassword, BaseRunContext context, String... commands) { List commandList = Arrays.asList(commands); if(MachineSystemEnum.WINDOWS.getSystem().equals(machineInfo.getOsSystem())){ return powerShell(machineInfo, commandList); @@ -60,7 +61,7 @@ public abstract class SshWorker extends BaseWorker { * @param commandList 命令 * @return 0 成功;其他值 失败 */ - public int powerShell(MachineInfo machineInfo, List commandList) { + public int powerShell(PipResourceMachine machineInfo, List commandList) { int statusCode = -1; //loggerUuid得转换成String类型,才能生成key,然后才能通过websocket实时推送节点执行日志 diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java index c03d7525..4a24cd21 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java @@ -102,7 +102,6 @@ public class PipelineServiceImpl extends ServiceImpl i pipeline.setColor(randomNumber); pipeline.setState(1); - pipeline.setMachineId("1"); this.save(pipeline); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClientFactory.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClientFactory.java index dc63dd68..6d3417b2 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClientFactory.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshClientFactory.java @@ -2,6 +2,7 @@ package cd.casic.ci.process.ssh; import cd.casic.ci.process.process.dataObject.machine.MachineInfo; +import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import com.jcraft.jsch.JSchException; /** @@ -35,7 +36,7 @@ public class SshClientFactory { * 主要包含 用户名 密码 私钥 主机ip 端口 认证类型 * * */ - public static SshClient createSsh(MachineInfo properties) throws Exception { + public static SshClient createSsh(PipResourceMachine properties) throws Exception { try { return new SshCommand(properties); } catch (JSchException e) { diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java index 2a95d72d..b45a810f 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java @@ -3,6 +3,7 @@ package cd.casic.ci.process.ssh; import cd.casic.ci.process.constant.CommandConstant; import cd.casic.ci.process.process.dataObject.machine.MachineInfo; +import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.util.ChannelShellUtil; import cd.casic.ci.process.util.CryptogramUtil; import cn.hutool.extra.ssh.JschUtil; @@ -57,10 +58,10 @@ public class SshCommand implements SshClient { * * @throws JSchException */ - public SshCommand(MachineInfo machine) throws JSchException { + public SshCommand(PipResourceMachine machine) throws JSchException { // 根据用户名,主机ip,端口获取一个Session对象 String decrypt = CryptogramUtil.doDecrypt(machine.getPassword()); - this.session = JschUtil.createSession(machine.getMachineHost(), machine.getSshPort(), machine.getUsername(), decrypt); + this.session = JschUtil.createSession(machine.getMachineHost(), Integer.parseInt(machine.getSshPort()), machine.getUsername(), decrypt); this.session.setConfig("PreferredAuthentications", "password"); this.session.setConfig("StrictHostKeyChecking", "no"); // 通过Session建立链接 diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java index 6908eede..31c1ca06 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java @@ -1,6 +1,7 @@ package cd.casic.ci.process.ssh; import cd.casic.ci.process.process.dataObject.machine.MachineInfo; +import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.util.CryptogramUtil; import io.cloudsoft.winrm4j.client.WinRmClientContext; import io.cloudsoft.winrm4j.winrm.WinRmTool; @@ -32,7 +33,7 @@ public class WinRMHelper { this.password = password; } - public WinRMHelper(MachineInfo machineInfo) { + public WinRMHelper(PipResourceMachine machineInfo) { this.ip = machineInfo.getMachineHost(); this.username = machineInfo.getUsername(); this.password = CryptogramUtil.doDecrypt(machineInfo.getPassword());