代码提交(测试通过)

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 resourceId;
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.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
);

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.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
);

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.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)

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.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<String> 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<String> commandList) {
public int powerShell(PipResourceMachine machineInfo, List<String> commandList) {
int statusCode = -1;
//loggerUuid得转换成String类型才能生成key然后才能通过websocket实时推送节点执行日志

View File

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

View File

@ -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建立链接

View File

@ -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());