Compare commits

..

No commits in common. "dc4ca13ef055a12400c9c990e986c3d74170fe73" and "66293fe5b66aa635ae09b882cd1548cf787829ca" have entirely different histories.

10 changed files with 24 additions and 74 deletions

View File

@ -17,8 +17,6 @@ import cd.casic.ci.process.process.service.machine.MachineInfoService;
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;
import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.Data; import lombok.Data;
@ -61,7 +59,6 @@ public abstract class BaseWorker implements Runnable{
taskRunContext.getLocalVariables().put(EngineRuntimeConstant.LOG_KEY,pipTaskLog); taskRunContext.getLocalVariables().put(EngineRuntimeConstant.LOG_KEY,pipTaskLog);
execute(taskRunContext); execute(taskRunContext);
} catch (Exception e) { } catch (Exception e) {
log.error("================worker执行报错",e);
taskRunContext.changeContextState(ContextStateEnum.BAD_ENDING); taskRunContext.changeContextState(ContextStateEnum.BAD_ENDING);
return; return;
} }
@ -70,7 +67,5 @@ public abstract class BaseWorker implements Runnable{
} }
} }
public abstract void execute(TaskRunContext context); public abstract void execute(TaskRunContext context);
public void toBadEnding(){
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"");
}
} }

View File

@ -2,10 +2,8 @@ package cd.casic.ci.process.engine.worker;
import cd.casic.ci.common.pipeline.annotation.Plugin; import cd.casic.ci.common.pipeline.annotation.Plugin;
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.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement; import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
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.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
@ -25,15 +23,15 @@ import java.util.concurrent.atomic.AtomicInteger;
* @date 2022-11-08 9:59 * @date 2022-11-08 9:59
*/ */
@Slf4j @Slf4j
//@Plugin(taskType = "CUSTOM_IMAGE_EXECUTION_COMMAND") @Plugin(taskType = "CUSTOM_IMAGE_EXECUTION_COMMAND")
//@Plugin(taskType = "test")
public class DIYImageExecuteCommandWorker extends SshWorker { public class DIYImageExecuteCommandWorker extends SshWorker {
@Override @Override
public void execute(TaskRunContext context) { public void execute(TaskRunContext context) {
int statusCode = -1; int statusCode = -1;
Map<String, Object> localVariables = context.getLocalVariables(); AtomicInteger state = context.getState();
PipTaskLog taskLog = (PipTaskLog) localVariables.get(EngineRuntimeConstant.LOG_KEY);
if (context.getContextDef() instanceof PipTask taskDef) { if (context.getContextDef() instanceof PipTask taskDef) {
log.info(taskDef.getTaskName()); log.info(taskDef.getTaskName());
Map<String, Object> taskProperties = taskDef.getTaskProperties(); Map<String, Object> taskProperties = taskDef.getTaskProperties();
@ -45,11 +43,9 @@ public class DIYImageExecuteCommandWorker extends SshWorker {
machineId=Long.valueOf(String.valueOf(machineIdObj)); machineId=Long.valueOf(String.valueOf(machineIdObj));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
log.error("缺少参数:{}",DIYImageExecuteCommandConstant.MACHINE_ID); log.error("缺少参数:{}",DIYImageExecuteCommandConstant.MACHINE_ID);
toBadEnding();
} }
if (StringUtils.isEmpty(commandScript) ||machineIdObj == null) { if (StringUtils.isEmpty(commandScript) ||machineIdObj == null) {
// 缺少参数 throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"缺少参数");
toBadEnding();
} }
try { try {
@ -60,22 +56,21 @@ public class DIYImageExecuteCommandWorker extends SshWorker {
//获取机器 //获取机器
MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId); MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId);
statusCode = shell(machineInfoDO,taskLog, statusCode = shell(machineInfoDO,
"echo \"自定义镜像执行命令\"", "echo \"自定义镜像执行命令\"",
commandScript commandScript
); );
} catch (Exception e) { } catch (Exception e) {
String errorMessage = "该节点配置信息为空,请先配置该节点信息" + "\r\n"; String errorMessage = "该节点配置信息为空,请先配置该节点信息" + "\r\n";
log.error("执行ssh失败:",e); log.error("执行ssh失败:",e);
taskLog.append(errorMessage); // errorHandle(e, errorMessage);
toBadEnding();
} }
if (statusCode == 0) { if (statusCode == 0) {
log.info("节点执行完成"); // log.info("{}节点执行完成", getName());
} else { } else {
log.error("节点执行失败"); // log.error("{}节点执行失败", getName());
} }
localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE,statusCode); context.getLocalVariables().put(DIYImageExecuteCommandConstant.STATUS_CODE,statusCode);
} }
} }
} }

View File

@ -39,7 +39,7 @@ import java.util.*;
* @Description: * @Description:
*/ */
@Slf4j @Slf4j
@Plugin(taskType = "test") @Plugin(taskType = "scaSbom")
public class ScaSbomWorker extends HttpWorker{ public class ScaSbomWorker extends HttpWorker{
private static final int POLLING_INTERVAL = 5000; // 轮询间隔单位毫秒 private static final int POLLING_INTERVAL = 5000; // 轮询间隔单位毫秒
@ -98,7 +98,6 @@ public class ScaSbomWorker extends HttpWorker{
pipTaskLog.append("==================SCA-SBOM节点执行失败================="); pipTaskLog.append("==================SCA-SBOM节点执行失败=================");
pipTaskLog.append("SCA-SBOM节点执行失败失败请检查当前节点配置!"); pipTaskLog.append("SCA-SBOM节点执行失败失败请检查当前节点配置!");
pipTaskLog.append(e.getMessage()); pipTaskLog.append(e.getMessage());
log.error("==================SCA-SBOM节点执行失败=================",e);
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"SCA-SBOM节点执行失败"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"SCA-SBOM节点执行失败");
} }
} }
@ -136,7 +135,6 @@ public class ScaSbomWorker extends HttpWorker{
pollTaskStatus(restTemplate, oldScaTaskId); pollTaskStatus(restTemplate, oldScaTaskId);
} else { } else {
pipTaskLog.append("==================SCA接口异常调用失败================="); pipTaskLog.append("==================SCA接口异常调用失败=================");
log.error(message);
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"SCA-SBOM节点执行失败"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"SCA-SBOM节点执行失败");
} }
} }

View File

@ -2,7 +2,6 @@ package cd.casic.ci.process.engine.worker;
import cd.casic.ci.process.constant.CommandConstant; import cd.casic.ci.process.constant.CommandConstant;
import cd.casic.ci.process.enums.MachineSystemEnum; import cd.casic.ci.process.enums.MachineSystemEnum;
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.ssh.SshClient; import cd.casic.ci.process.ssh.SshClient;
import cd.casic.ci.process.ssh.SshClientFactory; import cd.casic.ci.process.ssh.SshClientFactory;
@ -11,9 +10,6 @@ import lombok.extern.slf4j.Slf4j;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
/**
* 使用ssh的worker的基类
* */
@Slf4j @Slf4j
public abstract class SshWorker extends BaseWorker{ public abstract class SshWorker extends BaseWorker{
/** /**
@ -22,7 +18,7 @@ public abstract class SshWorker extends BaseWorker{
* @param commands 命令 * @param commands 命令
* @return 0 成功其他值 失败 * @return 0 成功其他值 失败
*/ */
public int shell(MachineInfo machineInfo, PipTaskLog taskLog, String... commands) { public int shell(MachineInfo machineInfo, 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);
@ -36,16 +32,17 @@ public abstract class SshWorker extends BaseWorker{
try { try {
ssh = SshClientFactory.createSsh(machineInfo); ssh = SshClientFactory.createSsh(machineInfo);
//执行命令并且把命令的执行回传到前端 //执行命令并且把命令的执行回传到前端
// TODO 记录日志 statusCode = ssh.execNew(commandList, var -> {
// loggerService.sendMessage(key, var); // TODO 记录日志
statusCode = ssh.execNew(commandList, taskLog::append); // loggerService.sendMessage(key, var);
// nodeLogger.append(var);
});
log.info("exit-status: " + statusCode); log.info("exit-status: " + statusCode);
//主动释放当前socket连接 //主动释放当前socket连接
// loggerService.close(key); // loggerService.close(key);
} catch (Exception e) { } catch (Exception e) {
String errorMessage = "与机器建立SSH连接出错" + CommandConstant.ENTER; String errorMessage = "与机器建立SSH连接出错" + CommandConstant.ENTER;
// errorHandle(e, errorMessage); // errorHandle(e, errorMessage);
taskLog.append(errorMessage);
} finally { } finally {
if(ssh!=null) { if(ssh!=null) {
ssh.disconnect(); ssh.disconnect();

View File

@ -8,7 +8,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
//@Plugin(taskType = "test") @Plugin(taskType = "test")
public class TestWorker extends BaseWorker{ public class TestWorker extends BaseWorker{

View File

@ -5,7 +5,6 @@ import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq;
import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp;
import cd.casic.ci.common.pipeline.resp.context.TreeRunContextResp;
import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp;
import cd.casic.ci.common.pipeline.utils.PageResult; import cd.casic.ci.common.pipeline.utils.PageResult;
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
@ -37,5 +36,5 @@ public interface PipelineService extends IService<PipPipeline> {
PipelineFindResp findPipelineById(@Valid PipelineQueryReq pipelineQueryReq); PipelineFindResp findPipelineById(@Valid PipelineQueryReq pipelineQueryReq);
TreeRunContextResp getPipelineRunState(String pipelineId); Map<String, SingletonRunContextResp> getPipelineRunState(String pipelineId);
} }

View File

@ -526,7 +526,7 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
} }
@Override @Override
public TreeRunContextResp getPipelineRunState(String pipelineId) { public Map<String, SingletonRunContextResp> getPipelineRunState(String pipelineId) {
BaseRunContext context = contextManager.getContext(pipelineId); BaseRunContext context = contextManager.getContext(pipelineId);
if (context instanceof PipelineRunContext pipelineRunContext) { if (context instanceof PipelineRunContext pipelineRunContext) {
TreeRunContextResp pipeline = new TreeRunContextResp(); TreeRunContextResp pipeline = new TreeRunContextResp();
@ -554,9 +554,8 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
taskStateMap.put(taskId,taskState); taskStateMap.put(taskId,taskState);
} }
} }
return pipeline;
} }
return new TreeRunContextResp(); return new HashMap<>();
} }
} }

View File

@ -5,7 +5,6 @@ import cd.casic.ci.common.pipeline.req.pipeline.PipelineQueryReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineReq;
import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq; import cd.casic.ci.common.pipeline.req.pipeline.PipelineUpdateReq;
import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp; import cd.casic.ci.common.pipeline.resp.context.SingletonRunContextResp;
import cd.casic.ci.common.pipeline.resp.context.TreeRunContextResp;
import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp; import cd.casic.ci.common.pipeline.resp.pipeline.PipelineFindResp;
import cd.casic.ci.common.pipeline.utils.PageResult; import cd.casic.ci.common.pipeline.utils.PageResult;
import cd.casic.ci.process.engine.executor.PipelineExecutor; import cd.casic.ci.process.engine.executor.PipelineExecutor;
@ -106,7 +105,7 @@ public class PipelineController {
return CommonResult.success(execute); return CommonResult.success(execute);
} }
@PostMapping("/getStageRunState/{pipelineId}") @PostMapping("/getStageRunState/{pipelineId}")
public CommonResult<TreeRunContextResp> getPipelineRunState(@PathVariable String pipelineId){ public CommonResult<Map<String, SingletonRunContextResp>> getPipelineRunState(@PathVariable String pipelineId){
return CommonResult.success(pipelineService.getPipelineRunState(pipelineId)); return CommonResult.success(pipelineService.getPipelineRunState(pipelineId));
} }
} }

View File

@ -41,6 +41,6 @@ public class TasksController {
} }
@PostMapping("/getLogContentByTaskId/{taskId}") @PostMapping("/getLogContentByTaskId/{taskId}")
public CommonResult<PipTaskLog> getLogContentByTaskId(@PathVariable String taskId){ public CommonResult<PipTaskLog> getLogContentByTaskId(@PathVariable String taskId){
return taskService.getLogContentByTaskId(taskId); return null;
} }
} }

View File

@ -1,32 +0,0 @@
package cd.casic.server;
import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.message.TaskRunMessage;
import cd.casic.ci.process.engine.runContext.PipelineRunContext;
import cd.casic.ci.process.engine.runContext.SecondStageRunContext;
import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
import cd.casic.ci.process.process.dataObject.stage.PipStage;
import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.framework.mq.redis.core.RedisMQTemplate;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
@SpringBootTest(classes = {OpsServerApplication.class})
@ActiveProfiles("local")
public class MachineTest {
@Test
public void test01(){
System.out.println("h w !");
String password = "Hnidc@0626cn!@#zyx";
String encrypt = CryptogramUtil.doEncrypt(password);
System.out.println(encrypt);
}
}