代码提交(测试通过)

This commit is contained in:
even 2025-06-07 19:42:30 +08:00
parent 76d2a49da9
commit 5c0196c868
9 changed files with 30 additions and 15 deletions

View File

@ -84,5 +84,7 @@ public class PipelineCreateReq {
private String executeStatus; private String executeStatus;
private String resourceId;
private ResourceReq resourceReq; private ResourceReq resourceReq;
} }

View File

@ -2,12 +2,15 @@ package cd.casic.ci.process.engine.worker;
import cd.casic.ci.process.common.WorkAtom; 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.DIYImageExecuteCommandConstant;
import cd.casic.ci.process.engine.constant.EngineRuntimeConstant; import cd.casic.ci.process.engine.constant.EngineRuntimeConstant;
import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.engine.worker.base.SshWorker; 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.log.PipTaskLog;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo; 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.process.dataObject.task.PipTask;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -54,9 +57,12 @@ public class DIYImageExecuteCommandWorker extends SshWorker {
//如果machineId为0则说明该节点没有配置机器则使用开始节点的机器 //如果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 得改一下 //TODO 得改一下
statusCode = shell(machineInfoDO, null,context, statusCode = shell(resourceMachine, null,context,
"echo \"自定义镜像执行命令\"", "echo \"自定义镜像执行命令\"",
commandScript commandScript
); );

View File

@ -2,12 +2,14 @@ package cd.casic.ci.process.engine.worker;
import cd.casic.ci.process.common.WorkAtom; 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.DIYImageExecuteCommandConstant;
import cd.casic.ci.process.engine.constant.TestCaseGenerationConstant; import cd.casic.ci.process.engine.constant.TestCaseGenerationConstant;
import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.engine.worker.base.SshWorker; 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.machine.MachineInfo;
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; 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.process.dataObject.task.PipTask;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -39,12 +41,12 @@ public class TestCaseGenerationWorker extends SshWorker {
try { try {
//将节点的配置信息反编译成对象 //将节点的配置信息反编译成对象
log.info("构建脚本" + commandScript); log.info("构建脚本" + commandScript);
String resourceId = pipeline.getResourceId();
//如果machineId为0则说明该节点没有配置机器则使用开始节点的机器 //如果machineId为0则说明该节点没有配置机器则使用开始节点的机器
ResourceFindResp resourceById = getResourceManagerService().findResourceById(resourceId);
PipResourceMachine resourceMachine = resourceById.getResourceMachine();
//获取机器 //获取机器
MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId); statusCode = shell(resourceMachine, CryptogramUtil.doDecrypt(resourceMachine.getPassword()), context,
statusCode = shell(machineInfoDO, CryptogramUtil.doDecrypt(machineInfoDO.getPassword()), context,
"echo \"自定义镜像执行命令\"", "echo \"自定义镜像执行命令\"",
commandScript commandScript
); );

View File

@ -2,6 +2,8 @@ package cd.casic.ci.process.engine.worker.base;
import cd.casic.ci.process.engine.runContext.BaseRunContext; 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.dto.DockerEndpointDo;
import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint; import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint;
import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.DockerClient;
@ -47,7 +49,7 @@ public abstract class DockerWorker extends BaseWorker{
if (StringUtils.isEmpty(dockerRunCommand)) { if (StringUtils.isEmpty(dockerRunCommand)) {
log.error("未找到有效指令"); log.error("未找到有效指令");
append(context,"未找到有效指令"); append(context,"未找到有效指令");
return; throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"");
} }
DockerExecHandler handler = null; DockerExecHandler handler = null;
try { try {
@ -75,7 +77,7 @@ public abstract class DockerWorker extends BaseWorker{
commandList[1]="-c"; commandList[1]="-c";
commandList[2]=allCommand; commandList[2]=allCommand;
log.info("容器内执行命令:{}",commandList); log.info("容器内执行命令:{}",commandList);
append(context,"容器创建失败"); // append(context,"容器创建失败");
// 创建命令 // 创建命令
ExecCreateCmdResponse exec = client.execCreateCmd(containerId) ExecCreateCmdResponse exec = client.execCreateCmd(containerId)
.withAttachStdin(true) .withAttachStdin(true)

View File

@ -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.engine.worker.base.BaseWorker;
import cd.casic.ci.process.enums.MachineSystemEnum; import cd.casic.ci.process.enums.MachineSystemEnum;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo; 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.SshClient;
import cd.casic.ci.process.ssh.SshClientFactory; import cd.casic.ci.process.ssh.SshClientFactory;
import cd.casic.ci.process.ssh.WinRMHelper; import cd.casic.ci.process.ssh.WinRMHelper;
@ -23,7 +24,7 @@ public abstract class SshWorker extends BaseWorker {
* @param commands 命令 * @param commands 命令
* @return 0 成功其他值 失败 * @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<String> commandList = Arrays.asList(commands); List<String> commandList = Arrays.asList(commands);
if(MachineSystemEnum.WINDOWS.getSystem().equals(machineInfo.getOsSystem())){ if(MachineSystemEnum.WINDOWS.getSystem().equals(machineInfo.getOsSystem())){
return powerShell(machineInfo, commandList); return powerShell(machineInfo, commandList);
@ -60,7 +61,7 @@ public abstract class SshWorker extends BaseWorker {
* @param commandList 命令 * @param commandList 命令
* @return 0 成功其他值 失败 * @return 0 成功其他值 失败
*/ */
public int powerShell(MachineInfo machineInfo, List<String> commandList) { public int powerShell(PipResourceMachine machineInfo, List<String> commandList) {
int statusCode = -1; int statusCode = -1;
//loggerUuid得转换成String类型才能生成key然后才能通过websocket实时推送节点执行日志 //loggerUuid得转换成String类型才能生成key然后才能通过websocket实时推送节点执行日志

View File

@ -102,7 +102,6 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
pipeline.setColor(randomNumber); pipeline.setColor(randomNumber);
pipeline.setState(1); pipeline.setState(1);
pipeline.setMachineId("1");
this.save(pipeline); this.save(pipeline);

View File

@ -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.machine.MachineInfo;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import com.jcraft.jsch.JSchException; import com.jcraft.jsch.JSchException;
/** /**
@ -35,7 +36,7 @@ public class SshClientFactory {
* 主要包含 用户名 密码 私钥 主机ip 端口 认证类型 * 主要包含 用户名 密码 私钥 主机ip 端口 认证类型
* *
* */ * */
public static SshClient createSsh(MachineInfo properties) throws Exception { public static SshClient createSsh(PipResourceMachine properties) throws Exception {
try { try {
return new SshCommand(properties); return new SshCommand(properties);
} catch (JSchException e) { } catch (JSchException e) {

View File

@ -3,6 +3,7 @@ package cd.casic.ci.process.ssh;
import cd.casic.ci.process.constant.CommandConstant; import cd.casic.ci.process.constant.CommandConstant;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo; 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.ChannelShellUtil;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import cn.hutool.extra.ssh.JschUtil; import cn.hutool.extra.ssh.JschUtil;
@ -57,10 +58,10 @@ public class SshCommand implements SshClient {
* *
* @throws JSchException * @throws JSchException
*/ */
public SshCommand(MachineInfo machine) throws JSchException { public SshCommand(PipResourceMachine machine) throws JSchException {
// 根据用户名主机ip端口获取一个Session对象 // 根据用户名主机ip端口获取一个Session对象
String decrypt = CryptogramUtil.doDecrypt(machine.getPassword()); 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("PreferredAuthentications", "password");
this.session.setConfig("StrictHostKeyChecking", "no"); this.session.setConfig("StrictHostKeyChecking", "no");
// 通过Session建立链接 // 通过Session建立链接

View File

@ -1,6 +1,7 @@
package cd.casic.ci.process.ssh; package cd.casic.ci.process.ssh;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo; 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 cd.casic.ci.process.util.CryptogramUtil;
import io.cloudsoft.winrm4j.client.WinRmClientContext; import io.cloudsoft.winrm4j.client.WinRmClientContext;
import io.cloudsoft.winrm4j.winrm.WinRmTool; import io.cloudsoft.winrm4j.winrm.WinRmTool;
@ -32,7 +33,7 @@ public class WinRMHelper {
this.password = password; this.password = password;
} }
public WinRMHelper(MachineInfo machineInfo) { public WinRMHelper(PipResourceMachine machineInfo) {
this.ip = machineInfo.getMachineHost(); this.ip = machineInfo.getMachineHost();
this.username = machineInfo.getUsername(); this.username = machineInfo.getUsername();
this.password = CryptogramUtil.doDecrypt(machineInfo.getPassword()); this.password = CryptogramUtil.doDecrypt(machineInfo.getPassword());