From 07544335cab67633706f9f25c52ff2caf44d5b4d Mon Sep 17 00:00:00 2001 From: even <827656971@qq.com> Date: Mon, 23 Jun 2025 16:13:02 +0800 Subject: [PATCH] =?UTF-8?q?afl=20=E6=8F=92=E8=A3=85=E7=BC=96=E8=AF=91?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=8C=85=E8=B7=AF=E5=BE=84=E5=BE=AE?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PipelineGlobalVariableConstant.java | 29 ++++++ .../worker/afl/AFLSlotCompileWorker.java | 92 +++++++++++++++++++ .../engine/worker/{ => afl}/AFLWorker.java | 2 +- .../{ => afl}/TestCaseGenerationWorker.java | 2 +- .../engine/worker/base/BaseWorker.java | 10 +- .../engine/worker/{ => sast}/SastWorker.java | 2 +- .../worker/{ => sca}/ApplicationWorker.java | 2 +- .../engine/worker/{ => sca}/CodingWorker.java | 2 +- .../worker/{ => sca}/ScaBinaryWorker.java | 2 +- .../worker/{ => sca}/ScaMirrorWorker.java | 2 +- .../worker/{ => sca}/ScaSbomWorker.java | 2 +- 11 files changed, 134 insertions(+), 13 deletions(-) create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/PipelineGlobalVariableConstant.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => afl}/AFLWorker.java (98%) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => afl}/TestCaseGenerationWorker.java (99%) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => sast}/SastWorker.java (99%) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => sca}/ApplicationWorker.java (99%) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => sca}/CodingWorker.java (99%) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => sca}/ScaBinaryWorker.java (99%) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => sca}/ScaMirrorWorker.java (99%) rename modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/{ => sca}/ScaSbomWorker.java (99%) diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/PipelineGlobalVariableConstant.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/PipelineGlobalVariableConstant.java new file mode 100644 index 00000000..eb00053c --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/PipelineGlobalVariableConstant.java @@ -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"; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java new file mode 100644 index 00000000..4e571cdb --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java @@ -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 globalVariables = context.getGlobalVariables(); + if (!globalVariables.containsKey(workDir)) { + globalVariables.put(PipelineGlobalVariableConstant.AFL_WORK_DIR_KEY,workDir); + } + Map 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); + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/AFLWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java similarity index 98% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/AFLWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java index a54acd80..e29a28b3 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/AFLWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java @@ -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.dto.req.resource.ResourceQueryReq; 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/afl/TestCaseGenerationWorker.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/TestCaseGenerationWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/TestCaseGenerationWorker.java index c52019c2..df4b2e96 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/afl/TestCaseGenerationWorker.java @@ -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; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java index e2eef51c..9c6743c1 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java @@ -41,14 +41,14 @@ import java.util.Map; public abstract class BaseWorker implements Runnable{ // 一些属性 @Resource - private RunContextManager contextManager; - private String contextKey; + protected RunContextManager contextManager; + protected String contextKey; @Resource - private MachineInfoService machineInfoService; + protected MachineInfoService machineInfoService; @Resource - private LoggerManager loggerManager; + protected LoggerManager loggerManager; @Resource - private ResourceManagerService resourceManagerService; + protected ResourceManagerService resourceManagerService; @Override diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/SastWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sast/SastWorker.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/SastWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sast/SastWorker.java index 7f6b3a81..7168400e 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/SastWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sast/SastWorker.java @@ -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; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ApplicationWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ApplicationWorker.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ApplicationWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ApplicationWorker.java index 239cf69c..214e756e 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ApplicationWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ApplicationWorker.java @@ -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; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/CodingWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/CodingWorker.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/CodingWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/CodingWorker.java index 01e4edbf..4fa6ffcf 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/CodingWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/CodingWorker.java @@ -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; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaBinaryWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaBinaryWorker.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaBinaryWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaBinaryWorker.java index e369062e..ec58b3dc 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaBinaryWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaBinaryWorker.java @@ -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; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaMirrorWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaMirrorWorker.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaMirrorWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaMirrorWorker.java index a086635d..7ee1747c 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaMirrorWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaMirrorWorker.java @@ -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; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaSbomWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaSbomWorker.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaSbomWorker.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaSbomWorker.java index f6c5b9ef..44d788cb 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/ScaSbomWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/sca/ScaSbomWorker.java @@ -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;