afl 插装编译,以及包路径微调
This commit is contained in:
parent
3237c23db0
commit
07544335ca
@ -0,0 +1,29 @@
|
|||||||
|
package cd.casic.ci.process.engine.constant;
|
||||||
|
|
||||||
|
public class PipelineGlobalVariableConstant {
|
||||||
|
/**
|
||||||
|
* AFL线基础工作目录,完整的工作目录为 基础工作目录 + /PIP_${pipelineId}
|
||||||
|
* */
|
||||||
|
public static final String AFL_WORK_DIR_PREFIX = "/home/casic/706/yunqi/PIP_";
|
||||||
|
/**
|
||||||
|
* 真正用于绑定AFL docker卷挂载的目录的全局变量的key,值为 基础工作目录 + /PIP_${pipelineId}
|
||||||
|
* */
|
||||||
|
public static final String AFL_WORK_DIR_KEY = "AFL_PIPELINE_WORK_DIR";
|
||||||
|
/**
|
||||||
|
* 目标上传到工作目录下文件夹的前缀(TASK_${taskId})
|
||||||
|
* */
|
||||||
|
public static final String AFL_SLOT_COMPILE_PATH_PREFIX = "TASK_";
|
||||||
|
/**
|
||||||
|
* 执行插装编译节点以后输出目录,用于设置到全局变量给后续节点使用
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
public static final String AFL_SLOT_COMPILE_PATH_KEY = "AFL_SLOT_COMPILE_PATH";
|
||||||
|
/**
|
||||||
|
* 测试用例生成,ai生成或者直接文件上传的路径,工作目录下 SEED
|
||||||
|
* */
|
||||||
|
public static final String AFL_SEED_PATH="SEED";
|
||||||
|
/**
|
||||||
|
* AFL输出目录
|
||||||
|
* */
|
||||||
|
public static final String AFL_OUTPUT = "ai_afl";
|
||||||
|
}
|
@ -0,0 +1,92 @@
|
|||||||
|
package cd.casic.ci.process.engine.worker.afl;
|
||||||
|
|
||||||
|
import cd.casic.ci.process.common.WorkAtom;
|
||||||
|
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
|
||||||
|
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
|
||||||
|
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
|
||||||
|
import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant;
|
||||||
|
import cd.casic.ci.process.engine.constant.PipelineGlobalVariableConstant;
|
||||||
|
import cd.casic.ci.process.engine.runContext.TaskRunContext;
|
||||||
|
import cd.casic.ci.process.engine.worker.base.DockerWorker;
|
||||||
|
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.target.TargetVersion;
|
||||||
|
import cd.casic.ci.process.process.dataObject.task.PipTask;
|
||||||
|
import cd.casic.ci.process.process.service.resource.ResourceManagerService;
|
||||||
|
import cd.casic.ci.process.process.service.target.TargetVersionService;
|
||||||
|
import cd.casic.ci.process.util.SftpUploadUtil;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@WorkAtom(taskType = "AFL_SLOT_COMPILE")
|
||||||
|
@Slf4j
|
||||||
|
public class AFLSlotCompileWorker extends DockerWorker {
|
||||||
|
@Resource
|
||||||
|
private TargetVersionService targetVersionService;
|
||||||
|
@Override
|
||||||
|
public void execute(TaskRunContext context) {
|
||||||
|
PipTask task = context.getContextDef() instanceof PipTask ? ((PipTask) context.getContextDef()) : null;
|
||||||
|
String workDir = PipelineGlobalVariableConstant.AFL_WORK_DIR_PREFIX + task.getPipelineId();
|
||||||
|
Map<String, Object> globalVariables = context.getGlobalVariables();
|
||||||
|
if (!globalVariables.containsKey(workDir)) {
|
||||||
|
globalVariables.put(PipelineGlobalVariableConstant.AFL_WORK_DIR_KEY,workDir);
|
||||||
|
}
|
||||||
|
Map<String, Object> taskProperties = task.getTaskProperties();
|
||||||
|
String managerId = taskProperties.get("managerId") instanceof String ? ((String) taskProperties.get("resourceId")) : null;
|
||||||
|
// ssh 上传目标文件
|
||||||
|
ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId);
|
||||||
|
String machineId = resourceById.getMachineId();
|
||||||
|
String dockerId = resourceById.getDockerId();
|
||||||
|
if (StringUtils.isEmpty(machineId)||StringUtils.isEmpty(dockerId)) {
|
||||||
|
append(context,"该资源不支持docker或者ssh");
|
||||||
|
}
|
||||||
|
ResourceQueryReq req = new ResourceQueryReq();
|
||||||
|
req.setId(machineId);
|
||||||
|
req.setType("machine");
|
||||||
|
TaskResourceFindResp machineQuery = resourceManagerService.findResourceListByType(req);
|
||||||
|
req.setId(dockerId);
|
||||||
|
req.setType("docker");
|
||||||
|
TaskResourceFindResp dockerQuery = resourceManagerService.findResourceListByType(req);
|
||||||
|
PipResourceMachine machineInfo = machineQuery.getResourceMachineList().get(0);
|
||||||
|
DockerEndpointDo dockerInfo = dockerQuery.getDockerEndpointList().get(0);
|
||||||
|
PipPipeline pipeline = (PipPipeline) getContextManager().getContext(task.getPipelineId()).getContextDef();
|
||||||
|
// 获取目标文件
|
||||||
|
TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId());
|
||||||
|
String filePath = targetVersion.getFilePath();
|
||||||
|
File file = new File(filePath);
|
||||||
|
if (!file.exists() || !file.canRead()) {
|
||||||
|
log.error("目标文件不存在或不可读");
|
||||||
|
append(context,"目标文件不存在或不可读");
|
||||||
|
toBadEnding();
|
||||||
|
}
|
||||||
|
// 工作目录下的相对路径
|
||||||
|
String compilePath = PipelineGlobalVariableConstant.AFL_SLOT_COMPILE_PATH_PREFIX+task.getId();
|
||||||
|
String realWorkDir = workDir + compilePath;
|
||||||
|
// 上传目标文件 到指定资源服务器
|
||||||
|
try {
|
||||||
|
SftpUploadUtil.uploadFileViaSftp(
|
||||||
|
machineInfo.getMachineHost()
|
||||||
|
,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),machineInfo.getPassword(),"",compilePath,filePath,file.getName());
|
||||||
|
} catch (SftpUploadUtil.SftpUploadException e) {
|
||||||
|
append(context,"上传文件失败,请确认资源信息是否有误:"+JSON.toJSONString(machineInfo));
|
||||||
|
toBadEnding();
|
||||||
|
}
|
||||||
|
// 执行预设命令 ,进入目录
|
||||||
|
String allCommand = "docker run -v "+workDir+":/test -it aflplusplus/aflplusplus bash\n" +
|
||||||
|
"cd /test\n"+
|
||||||
|
"cd "+compilePath+"\n";
|
||||||
|
Object commandScriptObj = taskProperties.get(DIYImageExecuteCommandConstant.COMMAND_SCRIPT);
|
||||||
|
String commandScript = commandScriptObj instanceof String ? ((String) commandScriptObj) : null;
|
||||||
|
allCommand += commandScript;
|
||||||
|
dockerRun(allCommand,dockerInfo,context);
|
||||||
|
// 更新全局变量
|
||||||
|
globalVariables.put(PipelineGlobalVariableConstant.AFL_SLOT_COMPILE_PATH_KEY,compilePath);
|
||||||
|
globalVariables.put(PipelineGlobalVariableConstant.AFL_WORK_DIR_KEY,workDir);
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.afl;
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
||||||
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
|
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.afl;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
@ -41,14 +41,14 @@ import java.util.Map;
|
|||||||
public abstract class BaseWorker implements Runnable{
|
public abstract class BaseWorker implements Runnable{
|
||||||
// 一些属性
|
// 一些属性
|
||||||
@Resource
|
@Resource
|
||||||
private RunContextManager contextManager;
|
protected RunContextManager contextManager;
|
||||||
private String contextKey;
|
protected String contextKey;
|
||||||
@Resource
|
@Resource
|
||||||
private MachineInfoService machineInfoService;
|
protected MachineInfoService machineInfoService;
|
||||||
@Resource
|
@Resource
|
||||||
private LoggerManager loggerManager;
|
protected LoggerManager loggerManager;
|
||||||
@Resource
|
@Resource
|
||||||
private ResourceManagerService resourceManagerService;
|
protected ResourceManagerService resourceManagerService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.sast;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.sca;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.sca;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.sca;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.sca;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
@ -1,4 +1,4 @@
|
|||||||
package cd.casic.ci.process.engine.worker;
|
package cd.casic.ci.process.engine.worker.sca;
|
||||||
|
|
||||||
|
|
||||||
import cd.casic.ci.process.common.WorkAtom;
|
import cd.casic.ci.process.common.WorkAtom;
|
Loading…
x
Reference in New Issue
Block a user