资源管理重构修改,影响面

This commit is contained in:
even 2025-07-21 15:35:05 +08:00
parent c5649a7acd
commit 2b2fdaa211
53 changed files with 675 additions and 1555 deletions

View File

@ -238,7 +238,11 @@
<artifactId>module-ci-commons</artifactId> <artifactId>module-ci-commons</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<dependency>
<groupId>cd.casic.boot</groupId>
<artifactId>module-ci-machine</artifactId>
<version>${revision}</version>
</dependency>
<dependency> <dependency>
<groupId>cd.casic.boot</groupId> <groupId>cd.casic.boot</groupId>
<artifactId>module-ci-environment</artifactId> <artifactId>module-ci-environment</artifactId>

View File

@ -2,6 +2,7 @@ package cd.casic.module.execute.docker.dataobject.dto;
import cd.casic.framework.commons.dataobject.BaseDO; import cd.casic.framework.commons.dataobject.BaseDO;
import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint; import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
@ -22,7 +23,7 @@ import java.time.LocalDateTime;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class DockerEndpointDo extends BaseDO { public class DockerEndpointDo extends BaseDO {
@TableId @TableId(type = IdType.ASSIGN_ID)
private String id; private String id;
private String name; private String name;

View File

@ -15,10 +15,6 @@ import java.util.List;
public class DockerController { public class DockerController {
@Resource @Resource
private DockerService dockerService; private DockerService dockerService;
@GetMapping("/imageNameListByResourceDetailId/{resourceDetailId}")
public CommonResult<List<String>> imageList(@PathVariable String resourceDetailId){
return CommonResult.success(dockerService.imageNameList(resourceDetailId));
}
@GetMapping("/imageListByResourceId/{resourceId}") @GetMapping("/imageListByResourceId/{resourceId}")
public CommonResult<List<String>> imageListByResourceId(@PathVariable String resourceId){ public CommonResult<List<String>> imageListByResourceId(@PathVariable String resourceId){
return CommonResult.success(dockerService.imageListByResourceId(resourceId)); return CommonResult.success(dockerService.imageListByResourceId(resourceId));

View File

@ -1,22 +0,0 @@
package cd.casic.ci.api;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
import cd.casic.ci.process.process.service.machine.MachineInfoService;
import cd.casic.framework.commons.pojo.CommonResult;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/machineInfo")
public class MachineController {
@Resource
private MachineInfoService machineInfoService;
@GetMapping("/list")
public CommonResult<List<MachineInfo>> list(){
return CommonResult.success(machineInfoService.list());
}
}

View File

@ -1,19 +1,9 @@
package cd.casic.ci.api; package cd.casic.ci.api;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dto.req.resource.ResourceReq;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.framework.commons.pojo.CommonResult;
import cd.casic.framework.commons.pojo.PageResult;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -33,75 +23,6 @@ public class ResourceManagerController {
@Resource @Resource
private ResourceManagerService resourceManagerService; private ResourceManagerService resourceManagerService;
@PostMapping(path="/createResource")
public CommonResult<String> createResource(@RequestBody @Valid ResourceReq resourceReq){
String resourceId = resourceManagerService.createResource(resourceReq);
return CommonResult.success(resourceId);
}
@PostMapping(path="/deleteResource")
public CommonResult<Void> deleteResource(@RequestBody @Valid BaseIdReq req){
resourceManagerService.deleteResource(req.getId());
return CommonResult.success();
}
@PostMapping(path="/findResourceList")
public CommonResult<List<ResourceFindResp>> findResourceList(@RequestBody @Valid ResourceQueryReq req){
List<ResourceFindResp> ResourceFindRespList = resourceManagerService.findResourceList(req);
return CommonResult.success(ResourceFindRespList);
}
@PostMapping(path="/updateResource")
public CommonResult<Void> updateResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){
resourceManagerService.updateResource(resourceReq);
return CommonResult.success();
}
@PostMapping(path="/findResourcePage")
public CommonResult<PageResult<ResourceFindResp>> findResourcePage(@RequestBody @NotNull @Valid ResourceQueryReq req){
PageResult<ResourceFindResp> respPage = resourceManagerService.findResourcePage(req);
return CommonResult.success(respPage);
}
@PostMapping(path="/findResourceById")
public CommonResult<ResourceFindResp> findResourceById(@RequestBody @Valid BaseIdReq req){
ResourceFindResp resp = resourceManagerService.findResourceById(req.getId());
return CommonResult.success(resp);
}
@PostMapping(path="/findResourceListByType")
public CommonResult<TaskResourceFindResp> findResourceListByType(@RequestBody @Valid ResourceQueryReq req){
TaskResourceFindResp ResourceFindResp = resourceManagerService.findResourceListByType(req);
return CommonResult.success(ResourceFindResp);
}
@PostMapping(path="/findResourceListForObjectByType")
public CommonResult<List> findResourceListForObjectByType(@RequestBody @Valid ResourceQueryReq req){
List resp = resourceManagerService.findResourceListForObjectByType(req);
return CommonResult.success(resp);
}
} }

View File

@ -98,6 +98,10 @@
<groupId>cd.casic.boot</groupId> <groupId>cd.casic.boot</groupId>
<artifactId>module-ci-execute</artifactId> <artifactId>module-ci-execute</artifactId>
</dependency> </dependency>
<dependency>
<groupId>cd.casic.boot</groupId>
<artifactId>module-ci-machine</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>

View File

@ -0,0 +1,33 @@
package cd.casic.ci.process.constant;
public class ResourceConstant {
/**
* 云资源
* */
public static final String RES_TYPE_CLOUD="RES_TYPE_CLOUD";
/**
* 自定义资源
* */
public static final String RES_TYPE_CUSTOM="RES_TYPE_CUSTOM";
/**
* 待申请
* */
public static final String RES_STATE_WAIT_APPLY="RES_STATE_WAIT_APPLY";
/**
* 待申请
* */
public static final String RES_STATE_APPLY_ING="RES_STATE_APPLY_ING";
/**
* 待销毁
* */
public static final String RES_STATE_WAIT_DESTROY="RES_STATE_WAIT_DESTROY";
/**
* 不可用
* */
public static final String RES_STATE_DISABLE="RES_STATE_DISABLE";
/**
* 可用
* */
public static final String RES_STATE_ENABLE="RES_STATE_ENABLE";
}

View File

@ -1,24 +0,0 @@
package cd.casic.ci.process.dto.req.machine;
import lombok.Data;
@Data
public class MachineInfoReq {
/**
* 主机ip
*/
private String machineHost;
/**
* 机器名称
*/
private String machineName;
/**
* 机器状态 1有效 2无效
*/
private String machineStatus;
}

View File

@ -0,0 +1,24 @@
package cd.casic.ci.process.dto.req.resource;
import lombok.Data;
@Data
public class ResourceCreateReq {
/**
* 资源名称
* */
private String resourceName;
/**
* 资源类型ResourceConstant.RES_TYPE_*
* */
private String resourceType;
/**
* 资源类型 RES_TYPE_CUSTOM 必填
* */
private Long machineInfoId;
/**
* docker连接端口选填
* */
private Integer dockerPort;
}

View File

@ -2,7 +2,6 @@ package cd.casic.ci.process.dto.req.resource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud; import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S; import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import lombok.Data; import lombok.Data;
@ -34,7 +33,7 @@ public class ResourceReq {
*/ */
private String resourceName; private String resourceName;
private PipResourceMachine resourceMachine; // private PipResourceMachine resourceMachine;
private DockerEndpointDo dockerEndpoint; private DockerEndpointDo dockerEndpoint;

View File

@ -0,0 +1,25 @@
package cd.casic.ci.process.dto.req.resource;
import lombok.Data;
@Data
public class ResourceUpdateReq {
private String id;
/**
* 资源名称
* */
private String resourceName;
/**
* 资源类型ResourceConstant.RES_TYPE_*
* */
private String resourceType;
/**
* 资源类型 RES_TYPE_CUSTOM 必填
* */
private Long machineInfoId;
/**
* docker连接端口选填
* */
private Integer dockerPort;
}

View File

@ -1,38 +0,0 @@
package cd.casic.ci.process.dto.resp.machine;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class MachineInfoResp {
/**
* 机器描述
*/
private String description;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 主机ip
*/
private String machineHost;
/**
* 机器名称
*/
private String machineName;
/**
* 机器状态 1有效 2无效
*/
private String machineStatus;
/**
* 机器唯一标识
*/
private String machineTag;
}

View File

@ -0,0 +1,40 @@
package cd.casic.ci.process.dto.resp.resource;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import lombok.Data;
@Data
public class ResourceDetailResp {
/**
* docker镜像服务器信息id
*/
private String dockerId;
/**
* k8s服务器信息id
*/
private String k8sId;
/**
* 机器服务器信息id
*/
private Long machineId;
/**
* 弹性云服务器信息id
*/
private String cloudId;
/**
* 资源名称
*/
private String resourceName;
/**
* 资源类型ResourceConstant.RES_TYPE_*
*
* */
private String resourceType;
private MachineInfoDO machineInfo;
private DockerEndpointDo dockerInfo;
}

View File

@ -1,68 +0,0 @@
package cd.casic.ci.process.dto.resp.resource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import lombok.Data;
@Data
public class ResourceFindResp {
/**
* 主键id
*/
private String id;
/**
* docker镜像服务器信息id
*/
private String dockerId;
/**
* k8s服务器信息id
*/
private String k8sId;
/**
* 机器服务器信息id
*/
private String machineId;
/**
* 弹性云服务器信息id
*/
private String cloudId;
/**
* 资源名称
*/
private String resourceName;
//创建人id
private String creator;
//创建人姓名
private String creatorName;
//最后修改人id
private String updater;
//最后修改人姓名
private String updaterName;
//备注
private String remark;
//机器信息
private PipResourceMachine resourceMachine;
//镜像信息
private DockerEndpointDo dockerEndpoint;
//k8s信息
private PipResourceK8S pipResourceK8S;
//弹性云信息
private PipResourceCloud pipResourceCloud;
}

View File

@ -1,60 +0,0 @@
package cd.casic.ci.process.dto.resp.resource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import lombok.Data;
@Data
public class ResourceResp {
/**
* 主键id
*/
private String id;
/**
* docker镜像服务器信息id
*/
private String dockerId;
/**
* k8s服务器信息id
*/
private String k8sId;
/**
* 机器服务器信息id
*/
private String machineId;
/**
* 弹性云服务器信息id
*/
private String cloudId;
/**
* 资源名称
*/
private String resourceName;
//创建人id
private String creator;
//创建人姓名
private String creatorName;
//最后修改人id
private String updater;
//最后修改人姓名
private String updaterName;
private String remark;
private PipResourceMachine resourceMachine;
private PipelineDockerEndpoint dockerEndpoint;
private PipResourceK8S pipResourceK8S;
}

View File

@ -1,21 +0,0 @@
package cd.casic.ci.process.dto.resp.taskResource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import lombok.Data;
import java.util.List;
@Data
public class TaskResourceFindResp {
private List<PipResourceMachine> resourceMachineList;
private List<DockerEndpointDo> dockerEndpointList;
private List<PipResourceK8S> resourceK8SList;
private List<PipResourceCloud> resourceCloudList;
}

View File

@ -18,7 +18,7 @@ public class MemoryPostHandlerManager implements PostHandlerManager {
private final ConcurrentHashMap<String, List<ExecuteTaskPostHandler>> handlerMap = new ConcurrentHashMap<>(); private final ConcurrentHashMap<String, List<ExecuteTaskPostHandler>> handlerMap = new ConcurrentHashMap<>();
@Override @Override
public void registerPostHandler(ExecuteTaskPostHandler handler) { public void registerPostHandler(ExecuteTaskPostHandler handler) {
if (handler==null|| StringUtils.isNotEmpty(handler.getPipelineId())) { if (handler==null|| StringUtils.isEmpty(handler.getPipelineId())) {
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"注册后置处理器失败"); throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"注册后置处理器失败");
} }
List<ExecuteTaskPostHandler> orDefault = handlerMap.getOrDefault(handler.getPipelineId(), new CopyOnWriteArrayList<>()); List<ExecuteTaskPostHandler> orDefault = handlerMap.getOrDefault(handler.getPipelineId(), new CopyOnWriteArrayList<>());

View File

@ -3,12 +3,11 @@ 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.dto.req.resource.ResourceQueryReq; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant;
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.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.target.TargetVersion; import cd.casic.ci.process.process.dataObject.target.TargetVersion;
import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.ci.process.process.service.target.TargetVersionService; import cd.casic.ci.process.process.service.target.TargetVersionService;
@ -16,6 +15,7 @@ import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -23,6 +23,7 @@ import org.springframework.util.CollectionUtils;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* 自定义编译 * 自定义编译
@ -60,12 +61,12 @@ public class CustomCompilerWorker extends SshWorker {
ResourceQueryReq req = new ResourceQueryReq(); ResourceQueryReq req = new ResourceQueryReq();
req.setId(resourceId); req.setId(resourceId);
req.setType(resourceType); req.setType(resourceType);
TaskResourceFindResp resourceListByType = getResourceManagerService().findResourceListByType(req); ResourceDetailResp resource = getResourceManagerService().findResourceDetailById(resourceId);
if (CollectionUtils.isEmpty(resourceListByType.getResourceMachineList())) { if (Objects.isNull(resource.getMachineInfo())) {
append(context,"当前机器不支持machine"); append(context,"当前机器不支持machine");
return; return;
} }
PipResourceMachine resourceMachine = resourceListByType.getResourceMachineList().get(0); MachineInfoDO resourceMachine = resource.getMachineInfo();
//根据目标id查询目标信息 //根据目标id查询目标信息
if (StringUtils.isEmpty(pipeline.getTargetVersionId())){ if (StringUtils.isEmpty(pipeline.getTargetVersionId())){
@ -81,7 +82,7 @@ public class CustomCompilerWorker extends SshWorker {
append(context,"目标文件不存在或不可读"); append(context,"目标文件不存在或不可读");
toBadEnding(); toBadEnding();
} }
append(context,"上传文件"+targetVersion.getFileName()+"到目标服务器IP:"+resourceMachine.getMachineHost()); append(context,"上传文件"+targetVersion.getFileName()+"到目标服务器IP:"+resourceMachine.getHostIp());
append(context,"上传路径:"+"/home/casic/706/ai_test_527"); append(context,"上传路径:"+"/home/casic/706/ai_test_527");
// 上传目标 到目标服务器 // 上传目标 到目标服务器
//通过taskProperties获取制品路径 //通过taskProperties获取制品路径
@ -91,7 +92,7 @@ public class CustomCompilerWorker extends SshWorker {
//则默认路径写死 //则默认路径写死
remoteDir = "/home/casic/706/ai_test_527"; remoteDir = "/home/casic/706/ai_test_527";
} }
SftpUploadUtil.uploadFileViaSftp(resourceMachine.getMachineHost(),Integer.valueOf(resourceMachine.getSshPort()),resourceMachine.getUsername(), CryptogramUtil.doDecrypt(resourceMachine.getPassword()),null,file.getAbsolutePath(),remoteDir,file.getName()); SftpUploadUtil.uploadFileViaSftp(resourceMachine.getHostIp(), resourceMachine.getSshPort(),resourceMachine.getUsername(), resourceMachine.getPassword(),null,file.getAbsolutePath(),remoteDir,file.getName());
//TODO 得改一下 //TODO 得改一下
statusCode = shell(resourceMachine, null,context, statusCode = shell(resourceMachine, null,context,

View File

@ -3,18 +3,20 @@ 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.dto.req.resource.ResourceQueryReq; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant;
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.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.module.machine.dal.dataobject.MachineInfoDO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* 自定义镜像执行命令 * 自定义镜像执行命令
@ -61,12 +63,12 @@ public class DIYImageExecuteCommandWorker extends SshWorker {
ResourceQueryReq req = new ResourceQueryReq(); ResourceQueryReq req = new ResourceQueryReq();
req.setId(resourceId); req.setId(resourceId);
req.setType(resourceType); req.setType(resourceType);
TaskResourceFindResp resourceListByType = getResourceManagerService().findResourceListByType(req); ResourceDetailResp resource = getResourceManagerService().findResourceDetailById(resourceId);
if (CollectionUtils.isEmpty(resourceListByType.getResourceMachineList())) { if (Objects.isNull(resource)||Objects.isNull(resource.getMachineInfo())) {
append(context,"当前机器不支持machine"); append(context,"当前机器不支持machine");
return; return;
} }
PipResourceMachine resourceMachine = resourceListByType.getResourceMachineList().get(0); MachineInfoDO resourceMachine = resource.getMachineInfo();
//TODO 得改一下 //TODO 得改一下
statusCode = shell(resourceMachine, null,context, statusCode = shell(resourceMachine, null,context,
"echo \"自定义镜像执行命令\"", "echo \"自定义镜像执行命令\"",

View File

@ -2,19 +2,17 @@ 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;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
import cd.casic.ci.process.engine.constant.AFLSlotCompileConstant; import cd.casic.ci.process.engine.constant.AFLSlotCompileConstant;
import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.engine.worker.base.DockerWorker; 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.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.target.TargetVersion;
import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.ci.process.process.service.target.TargetVersionService; import cd.casic.ci.process.process.service.target.TargetVersionService;
import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.jcraft.jsch.*; import com.jcraft.jsch.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -45,22 +43,13 @@ public class AFLSlotCompileWorker extends DockerWorker {
Map<String, Object> taskProperties = task.getTaskProperties(); Map<String, Object> taskProperties = task.getTaskProperties();
String managerId = taskProperties.get(AFLSlotCompileConstant.MANAGER_ID) instanceof String ? ((String) taskProperties.get(AFLSlotCompileConstant.MANAGER_ID)) : null; String managerId = taskProperties.get(AFLSlotCompileConstant.MANAGER_ID) instanceof String ? ((String) taskProperties.get(AFLSlotCompileConstant.MANAGER_ID)) : null;
// ssh 上传目标文件 // ssh 上传目标文件
ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(managerId);
String machineId = resourceById.getMachineId();
String dockerId = resourceById.getDockerId();
String imageName = taskProperties.get(AFLSlotCompileConstant.IMAGE_NAME) instanceof String ? ((String) taskProperties.get(AFLSlotCompileConstant.IMAGE_NAME)) : null; String imageName = taskProperties.get(AFLSlotCompileConstant.IMAGE_NAME) instanceof String ? ((String) taskProperties.get(AFLSlotCompileConstant.IMAGE_NAME)) : null;
if (StringUtils.isEmpty(machineId)||StringUtils.isEmpty(dockerId)) { MachineInfoDO machineInfo = resourceById.getMachineInfo();
DockerEndpointDo dockerInfo = resourceById.getDockerInfo();
if (Objects.isNull(machineInfo)||Objects.isNull(dockerInfo)) {
append(context,"该资源不支持docker或者ssh"); 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(); PipPipeline pipeline = (PipPipeline) getContextManager().getContext(task.getPipelineId()).getContextDef();
// 获取目标文件 // 获取目标文件
TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId()); TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId());
@ -80,8 +69,8 @@ public class AFLSlotCompileWorker extends DockerWorker {
try { try {
append(context,"AFL编译上传文件路径:"+realPath); append(context,"AFL编译上传文件路径:"+realPath);
SftpUploadUtil.uploadFileViaSftp( SftpUploadUtil.uploadFileViaSftp(
machineInfo.getMachineHost() machineInfo.getHostIp()
,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(), CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,realPath,file.getName()); ,machineInfo.getSshPort(),machineInfo.getUsername(), machineInfo.getPassword(),"",filePath,realPath,file.getName());
} catch (SftpUploadUtil.SftpUploadException e) { } catch (SftpUploadUtil.SftpUploadException e) {
append(context,"上传文件失败,请确认资源信息是否有误:"+JSON.toJSONString(machineInfo)); append(context,"上传文件失败,请确认资源信息是否有误:"+JSON.toJSONString(machineInfo));
log.error("上传文件报错",e); log.error("上传文件报错",e);
@ -148,16 +137,15 @@ public class AFLSlotCompileWorker extends DockerWorker {
return ""; return "";
} }
private List<String> getCompileResult(TaskRunContext context, String path, PipResourceMachine machineInfo){ private List<String> getCompileResult(TaskRunContext context, String path, MachineInfoDO machineInfo){
String host = machineInfo.getMachineHost(); String host = machineInfo.getHostIp();
String user = machineInfo.getUsername(); String user = machineInfo.getUsername();
String password = CryptogramUtil.doDecrypt(machineInfo.getPassword());
append(context,"AFL编译完毕"); append(context,"AFL编译完毕");
List<String> fileNameList = null; List<String> fileNameList = null;
try { try {
JSch jsch = new JSch(); JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22); Session session = jsch.getSession(user, host, 22);
session.setPassword(password); session.setPassword(machineInfo.getPassword());
session.setConfig("StrictHostKeyChecking", "no"); session.setConfig("StrictHostKeyChecking", "no");
session.connect(); session.connect();
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");

View File

@ -3,9 +3,7 @@ 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.aflManager.AflManagerReq; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; 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.resource.ResourceDetailResp;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
import cd.casic.ci.process.engine.constant.AFLConstant;
import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant;
import cd.casic.ci.process.engine.manager.PostHandlerManager; import cd.casic.ci.process.engine.manager.PostHandlerManager;
import cd.casic.ci.process.engine.postHandler.ExecuteTaskPostHandler; import cd.casic.ci.process.engine.postHandler.ExecuteTaskPostHandler;
@ -30,6 +28,7 @@ import org.springframework.util.CollectionUtils;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import static cd.casic.ci.process.engine.constant.AFLConstant.*; import static cd.casic.ci.process.engine.constant.AFLConstant.*;
@ -55,15 +54,13 @@ public class AFLWorker extends DockerWorker {
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();
//从上下文中获取资源id
String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null; String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null;
// ssh 上传目标文件 // ssh 上传目标文件
ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(managerId);
if (resourceById==null) { if (resourceById==null) {
append(context,"缺少资源信息,请添加编译节点"); append(context,"缺少资源信息,请添加编译节点");
} }
//从taskProperties中获取资源id
String resourceType = "docker";
String resourceId = resourceById.getDockerId();
String commandEnd = taskProperties.get(COMMAND_END) instanceof String ? ((String) taskProperties.get(COMMAND_END)) : null; String commandEnd = taskProperties.get(COMMAND_END) instanceof String ? ((String) taskProperties.get(COMMAND_END)) : null;
String imageName = getVariableNearby(context,IMAGE_NAME) instanceof String ? ((String) getVariableNearby(context,IMAGE_NAME)) : null; String imageName = getVariableNearby(context,IMAGE_NAME) instanceof String ? ((String) getVariableNearby(context,IMAGE_NAME)) : null;
String executableName = taskProperties.get(EXECUTABLE_NAME) instanceof String ? ((String) taskProperties.get(EXECUTABLE_NAME)) : null; String executableName = taskProperties.get(EXECUTABLE_NAME) instanceof String ? ((String) taskProperties.get(EXECUTABLE_NAME)) : null;
@ -74,22 +71,14 @@ public class AFLWorker extends DockerWorker {
String seedPath = (String)getGlobalVariable(context,AFL_DOCKER_SEED_PATH_KEY); String seedPath = (String)getGlobalVariable(context,AFL_DOCKER_SEED_PATH_KEY);
if (StringUtils.isEmpty(seedPath) || if (StringUtils.isEmpty(seedPath) ||
StringUtils.isEmpty(workDir) || StringUtils.isEmpty(workDir) ||
StringUtils.isEmpty(resourceId) || Objects.isNull(resourceById)||
StringUtils.isEmpty(imageName) || StringUtils.isEmpty(imageName) ||
StringUtils.isEmpty(executableName) || StringUtils.isEmpty(executableName) ||
StringUtils.isEmpty(commandEnd) || StringUtils.isEmpty(commandEnd) ||
StringUtils.isEmpty(resourceType)) { Objects.isNull(resourceById.getDockerInfo())) {
// 缺少参数 // 缺少参数
toBadEnding(); toBadEnding();
} }
ResourceQueryReq req = new ResourceQueryReq();
req.setId(resourceId);
req.setType(resourceType);
TaskResourceFindResp resourceListByType = getResourceManagerService().findResourceListByType(req);
if (CollectionUtils.isEmpty(resourceListByType.getDockerEndpointList())) {
append(context,"当前机器不支持docker");
return;
}
String output = workDir +File.separator+ AFL_DOCKER_OUTPUT; String output = workDir +File.separator+ AFL_DOCKER_OUTPUT;
String volumeWorkDirPath = AFL_VOLUME_WORK_DIR_PREFIX; String volumeWorkDirPath = AFL_VOLUME_WORK_DIR_PREFIX;
PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef(); PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef();
@ -113,7 +102,7 @@ public class AFLWorker extends DockerWorker {
Long runningTime = getRunningTime(timeHours); Long runningTime = getRunningTime(timeHours);
append(context,"运行时间"+runningTime); append(context,"运行时间"+runningTime);
// 获取docker 暂时先写固定值 // 获取docker 暂时先写固定值
dockerRun(commandScript,resourceListByType.getDockerEndpointList().get(0),context, runningTime); dockerRun(commandScript,resourceById.getDockerInfo(),context, runningTime);
} catch (Exception e) { } catch (Exception e) {
String errorMessage = "执行afl失败"+e.getMessage() + "\r\n"; String errorMessage = "执行afl失败"+e.getMessage() + "\r\n";
log.error("执行afl失败", e); log.error("执行afl失败", e);

View File

@ -3,12 +3,10 @@ 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;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.engine.worker.base.DockerWorker; 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.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.target.TargetVersion;
import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.ci.process.process.dataObject.testCase.TestCaseInfo; import cd.casic.ci.process.process.dataObject.testCase.TestCaseInfo;
@ -17,6 +15,7 @@ import cd.casic.ci.process.process.service.testCase.TestCaseInfoService;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -50,21 +49,12 @@ public class TestCaseGenerationWorker extends DockerWorker {
String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null; String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null;
Object itemListObject = taskProperties.get(ITEM_LIST); Object itemListObject = taskProperties.get(ITEM_LIST);
List<String> itemList = JSON.parseArray(JSON.toJSONString(itemListObject),String.class); List<String> itemList = JSON.parseArray(JSON.toJSONString(itemListObject),String.class);
ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(managerId);
String machineId = resourceById.getMachineId(); MachineInfoDO machineInfo = resourceById.getMachineInfo();
String dockerId = resourceById.getDockerId(); DockerEndpointDo dockerInfo = resourceById.getDockerInfo();
if (StringUtils.isEmpty(machineId)||StringUtils.isEmpty(dockerId)) { if (Objects.isNull(machineInfo)||Objects.isNull(dockerInfo)) {
append(context,"该资源不支持docker或者ssh"); 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(taskDef.getPipelineId()).getContextDef(); PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef();
TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId()); TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId());
String fileName = targetVersion.getFileName(); String fileName = targetVersion.getFileName();
@ -99,8 +89,8 @@ public class TestCaseGenerationWorker extends DockerWorker {
append(context,"测试用例选用上传模式,种子文件路径:"+filePath+",种子上传路径:"+seedPath); append(context,"测试用例选用上传模式,种子文件路径:"+filePath+",种子上传路径:"+seedPath);
try { try {
SftpUploadUtil.uploadFileViaSftp( SftpUploadUtil.uploadFileViaSftp(
machineInfo.getMachineHost() machineInfo.getHostIp()
,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,seedTarget,file.getName()); ,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),machineInfo.getPassword(),"",filePath,seedTarget,file.getName());
} catch (SftpUploadUtil.SftpUploadException e) { } catch (SftpUploadUtil.SftpUploadException e) {
append(context,"seed文件上传失败"); append(context,"seed文件上传失败");
log.error("seed文件上传失败",e); log.error("seed文件上传失败",e);
@ -118,10 +108,10 @@ public class TestCaseGenerationWorker extends DockerWorker {
try { try {
append(context,"当前上传文件:"+testCaseInfo.getFileName()); append(context,"当前上传文件:"+testCaseInfo.getFileName());
SftpUploadUtil.uploadFileViaSftp( SftpUploadUtil.uploadFileViaSftp(
machineInfo.getMachineHost() machineInfo.getHostIp()
,Integer.valueOf(machineInfo.getSshPort()) ,machineInfo.getSshPort()
,machineInfo.getUsername() ,machineInfo.getUsername()
,CryptogramUtil.doDecrypt(machineInfo.getPassword()) ,machineInfo.getPassword()
,"", testFilePath,seedTarget,testCaseInfo.getFileName()); ,"", testFilePath,seedTarget,testCaseInfo.getFileName());
} catch (SftpUploadUtil.SftpUploadException e) { } catch (SftpUploadUtil.SftpUploadException e) {
toBadEnding(); toBadEnding();

View File

@ -2,9 +2,7 @@ package cd.casic.ci.process.engine.worker.base;
import cd.casic.ci.process.constant.CommandConstant; import cd.casic.ci.process.constant.CommandConstant;
import cd.casic.ci.process.engine.constant.EngineRuntimeConstant;
import cd.casic.ci.process.engine.constant.PipelineBehaviorConstant; import cd.casic.ci.process.engine.constant.PipelineBehaviorConstant;
import cd.casic.ci.process.engine.context.ConstantContext;
import cd.casic.ci.process.engine.enums.ContextStateEnum; import cd.casic.ci.process.engine.enums.ContextStateEnum;
import cd.casic.ci.process.engine.manager.LoggerManager; import cd.casic.ci.process.engine.manager.LoggerManager;
import cd.casic.ci.process.engine.manager.PostHandlerManager; import cd.casic.ci.process.engine.manager.PostHandlerManager;
@ -12,17 +10,10 @@ import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.enums.MachineSystemEnum;
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.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.ci.process.process.service.machine.MachineInfoService;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.ci.process.ssh.SshClient;
import cd.casic.ci.process.ssh.SshClientFactory;
import cd.casic.ci.process.ssh.WinRMHelper;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -46,8 +37,6 @@ public abstract class BaseWorker implements Runnable{
protected RunContextManager contextManager; protected RunContextManager contextManager;
protected String contextKey; protected String contextKey;
@Resource @Resource
protected MachineInfoService machineInfoService;
@Resource
protected LoggerManager loggerManager; protected LoggerManager loggerManager;
@Resource @Resource
protected ResourceManagerService resourceManagerService; protected ResourceManagerService resourceManagerService;

View File

@ -2,13 +2,11 @@ package cd.casic.ci.process.engine.worker.base;
import cd.casic.ci.process.constant.CommandConstant; import cd.casic.ci.process.constant.CommandConstant;
import cd.casic.ci.process.engine.runContext.BaseRunContext; 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.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.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.module.machine.dal.dataobject.MachineInfoDO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.Arrays; import java.util.Arrays;
@ -24,9 +22,9 @@ public abstract class SshWorker extends BaseWorker {
* @param commands 命令 * @param commands 命令
* @return 0 成功其他值 失败 * @return 0 成功其他值 失败
*/ */
public int shell(PipResourceMachine machineInfo, String sudoPassword, BaseRunContext context, String... commands) { public int shell(MachineInfoDO 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.getMachineInfoType())){
return powerShell(machineInfo, commandList); return powerShell(machineInfo, commandList);
} }
// NodeLogger nodeLogger = nodeLoggerThreadLocal.get(); // NodeLogger nodeLogger = nodeLoggerThreadLocal.get();
@ -61,7 +59,7 @@ public abstract class SshWorker extends BaseWorker {
* @param commandList 命令 * @param commandList 命令
* @return 0 成功其他值 失败 * @return 0 成功其他值 失败
*/ */
public int powerShell(PipResourceMachine machineInfo, List<String> commandList) { public int powerShell(MachineInfoDO machineInfo, List<String> commandList) {
int statusCode = -1; int statusCode = -1;
//loggerUuid得转换成String类型才能生成key然后才能通过websocket实时推送节点执行日志 //loggerUuid得转换成String类型才能生成key然后才能通过websocket实时推送节点执行日志

View File

@ -5,7 +5,6 @@ import cd.casic.ci.process.common.WorkAtom;
import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.engine.worker.base.BaseWorker; import cd.casic.ci.process.engine.worker.base.BaseWorker;
import cd.casic.ci.process.constant.PipelineTargetTypeConstant; import cd.casic.ci.process.constant.PipelineTargetTypeConstant;
import cd.casic.ci.process.process.service.machine.MachineInfoService;
import cd.casic.ci.process.process.service.target.TargetVersionService; import cd.casic.ci.process.process.service.target.TargetVersionService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -19,8 +18,6 @@ import lombok.extern.slf4j.Slf4j;
public class TargetSourceCodeWorker extends BaseWorker { public class TargetSourceCodeWorker extends BaseWorker {
@Resource @Resource
private TargetVersionService targetVersionService; private TargetVersionService targetVersionService;
@Resource
private MachineInfoService machineInfoService;
@Override @Override
public void execute(TaskRunContext context) { public void execute(TaskRunContext context) {
// 暂无获取文件方式 todo 先注释掉 // 暂无获取文件方式 todo 先注释掉

View File

@ -9,19 +9,19 @@ public enum MachineSystemEnum {
/** /**
* Linux * Linux
*/ */
LINUX("Linux"), LINUX(1),
/** /**
* Windows * Windows
*/ */
WINDOWS("Windows"); WINDOWS(2);
private final String system; private final Integer system;
MachineSystemEnum(String system) { MachineSystemEnum(Integer system) {
this.system = system; this.system = system;
} }
public String getSystem() { public Integer getSystem() {
return system; return system;
} }
} }

View File

@ -1,24 +0,0 @@
package cd.casic.ci.process.process.converter;
import cd.casic.ci.process.dto.resp.machine.MachineInfoResp;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipelineConverter
* @Date: 2025/5/13 14:39
* @Description:
*/
@Mapper(componentModel = "spring")
public interface MachineConverter {
MachineConverter INSTANCE = Mappers.getMapper(MachineConverter.class);
MachineInfoResp toResp(MachineInfo pipPipeline);
List<MachineInfoResp> toRespList(List<MachineInfo> pipPipelines);
}

View File

@ -1,7 +1,6 @@
package cd.casic.ci.process.process.converter; package cd.casic.ci.process.process.converter;
import cd.casic.ci.process.dto.req.resource.ResourceReq; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
@ -18,10 +17,5 @@ import java.util.List;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface ResourceConverter { public interface ResourceConverter {
ResourceConverter INSTANCE = Mappers.getMapper(ResourceConverter.class); ResourceConverter INSTANCE = Mappers.getMapper(ResourceConverter.class);
ResourceDetailResp converter(PipResourceManager manager);
ResourceFindResp toResp(PipResourceManager req);
List<ResourceFindResp> toRespList(List<PipResourceManager> pipResourceManagers);
PipResourceManager toBean(ResourceReq req);
} }

View File

@ -1,15 +0,0 @@
package cd.casic.ci.process.process.dao.machine;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/**
* 机器信息表
*
* @author herenbin
* @date 2022-09-27 10:10:37
*/
public interface MachineInfoDao extends BaseMapperX<MachineInfo> {
}

View File

@ -1,14 +0,0 @@
package cd.casic.ci.process.process.dao.pipeline;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipResourceDockerEndpointDao
* @Date: 2025/5/13 14:39
* @Description:
*/
public interface PipResourceDockerEndpointDao extends BaseMapperX<PipelineDockerEndpoint> {
}

View File

@ -1,14 +0,0 @@
package cd.casic.ci.process.process.dao.pipeline;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipResourceMachineDao
* @Date: 2025/5/13 14:39
* @Description:
*/
public interface PipResourceMachineDao extends BaseMapperX<PipResourceMachine> {
}

View File

@ -1,84 +0,0 @@
package cd.casic.ci.process.process.dataObject.machine;
import cd.casic.framework.commons.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 机器信息表
*
* @author herenbin
* @date 2022-09-27 10:10:37
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("machine_info")
public class MachineInfo extends BaseDO {
/**
* 机器认证方式 1: 账号认证 2: key认证
*/
private String authType;
/**
* 机器描述
*/
private String description;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 主机ip
*/
private String machineHost;
/**
* 机器名称
*/
private String machineName;
/**
* 机器状态 1有效 2无效
*/
private String machineStatus;
/**
* 机器唯一标识
*/
private String machineTag;
/**
* 机器密码
*/
private String password;
/**
* 代理id
*/
private Long proxyId;
/**
* ssh端口
*/
private Integer sshPort;
/**
* 机器账号
*/
private String username;
/**
* 系统类型
*/
@TableField("os_system")
private String osSystem;
}

View File

@ -1,70 +0,0 @@
package cd.casic.ci.process.process.dataObject.resource;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @ClassName PipResourceMachine
* @Author hopeli
* @Date 2025/31 21:48
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PipResourceMachine extends PipBaseElement {
/**
* 主机地址
*/
private String machineHost;
/**
* 描述
*/
private String description;
/**
* 机器状态
*/
private String machineStatus;
/**
* 登录用户名
*/
private String username;
/**
* SSH 端口
*/
private String sshPort;
/**
* 密码
*/
private String password;
/**
* 秘钥 ID
*/
private Long secretKeyId;
/**
* 代理 ID
*/
private Long proxyId;
/**
* 认证类型编码
*/
private Integer authenticationTypeCode;
/**
* 认证类型
*/
private String authType;
/**
* 操作系统
*/
private String osSystem;
}

View File

@ -26,7 +26,7 @@ public class PipResourceManager extends PipBaseElement {
/** /**
* 机器服务器信息id * 机器服务器信息id
*/ */
private String machineId; private Long machineId;
/** /**
* 弹性云服务器信息id * 弹性云服务器信息id
@ -37,4 +37,8 @@ public class PipResourceManager extends PipBaseElement {
* 资源名称 * 资源名称
*/ */
private String resourceName; private String resourceName;
/**
* 资源类型ResourceConstant.RES_TYPE_*
* */
private String resourceType;
} }

View File

@ -3,7 +3,7 @@ package cd.casic.ci.process.process.service.aflManager.impl;
import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq;
import cd.casic.ci.process.dto.resp.aflManager.AflCrashesInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflCrashesInfoResp;
import cd.casic.ci.process.dto.resp.aflManager.AflCrashesResp; import cd.casic.ci.process.dto.resp.aflManager.AflCrashesResp;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.constant.PipelineVariableConstant;
import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
@ -11,13 +11,13 @@ import cd.casic.ci.process.process.converter.AflManagerConverter;
import cd.casic.ci.process.process.dao.aflManager.AflCrashesInfoDao; import cd.casic.ci.process.process.dao.aflManager.AflCrashesInfoDao;
import cd.casic.ci.process.process.dataObject.aflManager.AflCrashesInfo; import cd.casic.ci.process.process.dataObject.aflManager.AflCrashesInfo;
import cd.casic.ci.process.process.dataObject.aflManager.AflInfo; import cd.casic.ci.process.process.dataObject.aflManager.AflInfo;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.service.aflManager.AflCrashesInfoService; import cd.casic.ci.process.process.service.aflManager.AflCrashesInfoService;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import de.danielbechler.util.Collections; import de.danielbechler.util.Collections;
@ -73,21 +73,21 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl<AflCrashesInfoDao, Af
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null || resourceById.getMachineInfo().getAuthenticationType()!=1) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); String password = resourceMachine.getPassword();
resourceMachine.setPassword(password); resourceMachine.setPassword(password);
try { try {
// 步骤1使用自定义sql获取崩溃文件的创建时间 // 步骤1使用自定义sql获取崩溃文件的创建时间
//查询创建时间 //查询创建时间
List<String> resultList = SftpUploadUtil.findCreateTimeByCommand( List<String> resultList = SftpUploadUtil.findCreateTimeByCommand(
resourceMachine.getMachineHost(), resourceMachine.getHostIp(),
Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getSshPort(),
resourceMachine.getUsername(), resourceMachine.getUsername(),
resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath);
@ -114,8 +114,8 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl<AflCrashesInfoDao, Af
// 步驟2.查询文件大小 // 步驟2.查询文件大小
List<String> fileResultList = SftpUploadUtil.findFileByteByCommand( List<String> fileResultList = SftpUploadUtil.findFileByteByCommand(
resourceMachine.getMachineHost(), resourceMachine.getHostIp(),
Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getSshPort(),
resourceMachine.getUsername(), resourceMachine.getUsername(),
resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath);
@ -141,12 +141,12 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl<AflCrashesInfoDao, Af
// 步骤3列出源目录下的所有文件 // 步骤3列出源目录下的所有文件
List<String> files = SftpUploadUtil.listFilesInRemoteDirectory( List<String> files = SftpUploadUtil.listFilesInRemoteDirectory(
resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath);
if (!CollectionUtils.isEmpty(files)) { if (!CollectionUtils.isEmpty(files)) {
// 步骤4批量复制文件到目标目录 // 步骤4批量复制文件到目标目录
Map<String,String> copiedFiles = SftpUploadUtil.copyRemoteFilesToLocalMap( Map<String,String> copiedFiles = SftpUploadUtil.copyRemoteFilesToLocalMap(
resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/crashes_result/" + UUID.randomUUID() + "/"); resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/crashes_result/" + UUID.randomUUID() + "/");
System.out.println("共复制 " + copiedFiles.size() + " 个文件"); System.out.println("共复制 " + copiedFiles.size() + " 个文件");
//绑定对应的文件路径 //绑定对应的文件路径
@ -242,26 +242,26 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl<AflCrashesInfoDao, Af
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null || resourceById.getMachineInfo().getAuthenticationType()!=1) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); String password = resourceMachine.getPassword();
resourceMachine.setPassword(password); resourceMachine.setPassword(password);
try { try {
// 查询所有崩溃数 // 查询所有崩溃数
List<String> files = SftpUploadUtil.listFilesInRemoteDirectory( List<String> files = SftpUploadUtil.listFilesInRemoteDirectory(
resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath);
if (!CollectionUtils.isEmpty(files)){ if (!CollectionUtils.isEmpty(files)){
aflCrashesResp.setImperfectionCount(files.size()); aflCrashesResp.setImperfectionCount(files.size());
} }
//查询已验证和未验证缺陷数 //查询已验证和未验证缺陷数
AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats");
if (!ObjectUtils.isEmpty(aflInfo)){ if (!ObjectUtils.isEmpty(aflInfo)){
aflCrashesResp.setVerifiedCount(Integer.parseInt(aflInfo.getSavedCrashes())); aflCrashesResp.setVerifiedCount(Integer.parseInt(aflInfo.getSavedCrashes()));
aflCrashesResp.setUnverifiedCount(Integer.parseInt(aflInfo.getPendingFavs())); aflCrashesResp.setUnverifiedCount(Integer.parseInt(aflInfo.getPendingFavs()));
@ -289,21 +289,21 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl<AflCrashesInfoDao, Af
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null || resourceById.getMachineInfo().getAuthenticationType()!=1) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); String password = resourceMachine.getPassword();
resourceMachine.setPassword(password); resourceMachine.setPassword(password);
try { try {
// 步骤1使用自定义sql获取崩溃文件的创建时间 // 步骤1使用自定义sql获取崩溃文件的创建时间
//查询创建时间 //查询创建时间
List<String> resultList = SftpUploadUtil.findCreateTimeByCommand( List<String> resultList = SftpUploadUtil.findCreateTimeByCommand(
resourceMachine.getMachineHost(), resourceMachine.getHostIp(),
Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getSshPort(),
resourceMachine.getUsername(), resourceMachine.getUsername(),
resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath);
@ -331,8 +331,8 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl<AflCrashesInfoDao, Af
// 步驟2.查询文件大小 // 步驟2.查询文件大小
List<String> fileResultList = SftpUploadUtil.findFileByteByCommand( List<String> fileResultList = SftpUploadUtil.findFileByteByCommand(
resourceMachine.getMachineHost(), resourceMachine.getHostIp(),
Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getSshPort(),
resourceMachine.getUsername(), resourceMachine.getUsername(),
resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath);

View File

@ -3,20 +3,20 @@ package cd.casic.ci.process.process.service.aflManager.impl;
import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq;
import cd.casic.ci.process.dto.resp.aflManager.AflBaseInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflBaseInfoResp;
import cd.casic.ci.process.dto.resp.aflManager.AflInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflInfoResp;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.constant.PipelineVariableConstant;
import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
import cd.casic.ci.process.process.converter.AflManagerConverter; import cd.casic.ci.process.process.converter.AflManagerConverter;
import cd.casic.ci.process.process.dao.aflManager.AflInfoDao; import cd.casic.ci.process.process.dao.aflManager.AflInfoDao;
import cd.casic.ci.process.process.dataObject.aflManager.AflInfo; import cd.casic.ci.process.process.dataObject.aflManager.AflInfo;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.service.aflManager.AflInfoService; import cd.casic.ci.process.process.service.aflManager.AflInfoService;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import de.danielbechler.util.Collections; import de.danielbechler.util.Collections;
@ -68,19 +68,17 @@ public class AflInfoServiceImpl extends ServiceImpl<AflInfoDao, AflInfo> impleme
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats");
resourceMachine.setPassword(password);
AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats");
//在本地创建一个新文件夹将远程文件复制一份过去 //在本地创建一个新文件夹将远程文件复制一份过去
List<String> sourceFilePaths = new ArrayList<>(); List<String> sourceFilePaths = new ArrayList<>();
sourceFilePaths.add(remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); sourceFilePaths.add(remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats");
List<String> strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/fuzzer_result/" + UUID.randomUUID() + "/"); List<String> strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/fuzzer_result/" + UUID.randomUUID() + "/");
aflInfo.setFilePath(strings.get(0)); aflInfo.setFilePath(strings.get(0));
aflInfo.setPipelineId(req.getPipelineId()); aflInfo.setPipelineId(req.getPipelineId());
@ -128,15 +126,15 @@ public class AflInfoServiceImpl extends ServiceImpl<AflInfoDao, AflInfo> impleme
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); String password = resourceMachine.getPassword();
resourceMachine.setPassword(password); resourceMachine.setPassword(password);
AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats");
return AflManagerConverter.INSTANCE.toAflInfoResp(aflInfo); return AflManagerConverter.INSTANCE.toAflInfoResp(aflInfo);
} }
@ -211,18 +209,14 @@ public class AflInfoServiceImpl extends ServiceImpl<AflInfoDao, AflInfo> impleme
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
MachineInfoDO resourceMachine = resourceById.getMachineInfo();
PipResourceMachine resourceMachine = resourceById.getResourceMachine();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword());
resourceMachine.setPassword(password);
//找出seed文件夹下的所有测试样例文件计算数量 //找出seed文件夹下的所有测试样例文件计算数量
List<String> files = SftpUploadUtil.listFilesInRemoteDirectory( List<String> files = SftpUploadUtil.listFilesInRemoteDirectory(
resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/SEED/"); resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/SEED/");
if (!CollectionUtils.isEmpty(files)){ if (!CollectionUtils.isEmpty(files)){
resp.setTestCaseCount(files.size()); resp.setTestCaseCount(files.size());

View File

@ -2,20 +2,19 @@ package cd.casic.ci.process.process.service.aflManager.impl;
import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq;
import cd.casic.ci.process.dto.resp.aflManager.AflPlotInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflPlotInfoResp;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.constant.PipelineVariableConstant;
import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
import cd.casic.ci.process.process.converter.AflManagerConverter; import cd.casic.ci.process.process.converter.AflManagerConverter;
import cd.casic.ci.process.process.dao.aflManager.AflPlotInfoDao; import cd.casic.ci.process.process.dao.aflManager.AflPlotInfoDao;
import cd.casic.ci.process.process.dataObject.aflManager.AflPlotInfo; import cd.casic.ci.process.process.dataObject.aflManager.AflPlotInfo;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.service.aflManager.AflPlotInfoService; import cd.casic.ci.process.process.service.aflManager.AflPlotInfoService;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import de.danielbechler.util.Collections; import de.danielbechler.util.Collections;
@ -64,20 +63,17 @@ public class AflPlotInfoServiceImpl extends ServiceImpl<AflPlotInfoDao, AflPlotI
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); AflPlotInfo aflPlotInfo = SftpUploadUtil.downloadFileSftpForLastLineAndSetAflPlotInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/plot_data");
resourceMachine.setPassword(password);
AflPlotInfo aflPlotInfo = SftpUploadUtil.downloadFileSftpForLastLineAndSetAflPlotInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/plot_data");
//在本地创建一个新文件夹将远程文件复制一份过去 //在本地创建一个新文件夹将远程文件复制一份过去
List<String> sourceFilePaths = new ArrayList<>(); List<String> sourceFilePaths = new ArrayList<>();
sourceFilePaths.add(remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/plot_data"); sourceFilePaths.add(remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/plot_data");
List<String> strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/plot_result/" + UUID.randomUUID() + "/"); List<String> strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/plot_result/" + UUID.randomUUID() + "/");
aflPlotInfo.setFilePath(strings.get(0)); aflPlotInfo.setFilePath(strings.get(0));
aflPlotInfo.setPipelineId(req.getPipelineId()); aflPlotInfo.setPipelineId(req.getPipelineId());
@ -125,15 +121,13 @@ public class AflPlotInfoServiceImpl extends ServiceImpl<AflPlotInfoDao, AflPlotI
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); AflPlotInfo aflPlotInfo = SftpUploadUtil.downloadFileSftpForLastLineAndSetAflPlotInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/plot_data");
resourceMachine.setPassword(password);
AflPlotInfo aflPlotInfo = SftpUploadUtil.downloadFileSftpForLastLineAndSetAflPlotInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/plot_data");
return AflManagerConverter.INSTANCE.toAflPlotInfoResp(aflPlotInfo); return AflManagerConverter.INSTANCE.toAflPlotInfoResp(aflPlotInfo);
} }

View File

@ -2,19 +2,19 @@ package cd.casic.ci.process.process.service.aflManager.impl;
import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq;
import cd.casic.ci.process.dto.resp.aflManager.SeedsCountResp; import cd.casic.ci.process.dto.resp.aflManager.SeedsCountResp;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.constant.PipelineVariableConstant;
import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
import cd.casic.ci.process.process.dao.aflManager.AflSeedInfoDao; import cd.casic.ci.process.process.dao.aflManager.AflSeedInfoDao;
import cd.casic.ci.process.process.dataObject.aflManager.AflSeedInfo; import cd.casic.ci.process.process.dataObject.aflManager.AflSeedInfo;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.service.aflManager.AflSeedInfoService; import cd.casic.ci.process.process.service.aflManager.AflSeedInfoService;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import de.danielbechler.util.Collections; import de.danielbechler.util.Collections;
@ -71,16 +71,14 @@ public class AflSeedInfoServiceImpl extends ServiceImpl<AflSeedInfoDao, AflSeedI
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword());
resourceMachine.setPassword(password);
List<String> resultList = SftpUploadUtil.findCreateTimeByCommand(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/queue/"); List<String> resultList = SftpUploadUtil.findCreateTimeByCommand(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/queue/");
//解析resultList //解析resultList
@ -190,23 +188,23 @@ public class AflSeedInfoServiceImpl extends ServiceImpl<AflSeedInfoDao, AflSeedI
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源");
} }
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
if (resourceById == null || resourceById.getResourceMachine() == null) { if (resourceById == null || resourceById.getMachineInfo() == null) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误");
} }
PipResourceMachine resourceMachine = resourceById.getResourceMachine(); MachineInfoDO resourceMachine = resourceById.getMachineInfo();
String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); String password = resourceMachine.getPassword();
resourceMachine.setPassword(password); resourceMachine.setPassword(password);
try { try {
// 步骤1列出源目录下的所有文件 // 步骤1列出源目录下的所有文件
List<String> files = SftpUploadUtil.listFilesInRemoteDirectory( List<String> files = SftpUploadUtil.listFilesInRemoteDirectory(
resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + seedFilePath); resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + seedFilePath);
if (!CollectionUtils.isEmpty(files)) { if (!CollectionUtils.isEmpty(files)) {
// 步骤2批量复制文件到目标目录 // 步骤2批量复制文件到目标目录
List<String> copiedFiles = SftpUploadUtil.copyRemoteFilesToLocal( List<String> copiedFiles = SftpUploadUtil.copyRemoteFilesToLocal(
resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/seed_result/" + UUID.randomUUID() + "/"); resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/seed_result/" + UUID.randomUUID() + "/");
System.out.println("共复制 " + copiedFiles.size() + " 个文件"); System.out.println("共复制 " + copiedFiles.size() + " 个文件");
List<AflSeedInfo> aflSeedInfos = new ArrayList<>(0); List<AflSeedInfo> aflSeedInfos = new ArrayList<>(0);

View File

@ -5,6 +5,5 @@ import org.springframework.web.bind.annotation.PathVariable;
import java.util.List; import java.util.List;
public interface DockerService { public interface DockerService {
List<String> imageNameList(String resourceDetailId);
List<String> imageListByResourceId( String resourceId); List<String> imageListByResourceId( String resourceId);
} }

View File

@ -1,8 +1,7 @@
package cd.casic.ci.process.process.service.docker.impl; package cd.casic.ci.process.process.service.docker.impl;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; 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.resource.ResourceDetailResp;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
import cd.casic.ci.process.process.service.docker.DockerService; import cd.casic.ci.process.process.service.docker.DockerService;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.ServiceException;
@ -29,53 +28,10 @@ import static java.lang.String.format;
public class DockerServiceImpl implements DockerService { public class DockerServiceImpl implements DockerService {
@Resource @Resource
private ResourceManagerService resourceManagerService; private ResourceManagerService resourceManagerService;
@Override
public List<String> imageNameList(String resourceDetailId) {
ResourceQueryReq req = new ResourceQueryReq();
req.setType("docker");
req.setId(resourceDetailId);
TaskResourceFindResp resourceListByType = resourceManagerService.findResourceListByType(req);
List<DockerEndpointDo> dockerEndpointList = resourceListByType.getDockerEndpointList();
if (CollectionUtils.isEmpty(dockerEndpointList)) {
return new ArrayList<>();
}
DockerEndpointDo dockerInfo = dockerEndpointList.get(0);
URI uri = null;
try {
uri = new URI(format("tcp://%s:%s", dockerInfo.getHost(), dockerInfo.getPort()));
} catch (URISyntaxException e) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR);
}
ApacheDockerHttpClient httpClient = new ApacheDockerHttpClient.Builder().dockerHost(uri).build();
DockerClient build = null;
try{
build = DockerClientBuilder.getInstance().withDockerHttpClient(httpClient).build();
List<Image> exec = build.listImagesCmd().exec();
List<String> res = new LinkedList<>();
for (Image image : exec) {
String[] repoTags = image.getRepoTags();
if (image.getRepoTags() != null && repoTags.length > 0) {
res.add(repoTags[0]);
}
}
return res;
} finally {
if (build!=null) {
try {
build.close();
} catch (IOException e) {
}
}
}
}
@Override @Override
public List<String> imageListByResourceId(String resourceId) { public List<String> imageListByResourceId(String resourceId) {
ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId);
DockerEndpointDo dockerInfo = resourceById.getDockerEndpoint(); DockerEndpointDo dockerInfo = resourceById.getDockerInfo();
URI uri = null; URI uri = null;
try { try {
uri = new URI(format("tcp://%s:%s", dockerInfo.getHost(), dockerInfo.getPort())); uri = new URI(format("tcp://%s:%s", dockerInfo.getHost(), dockerInfo.getPort()));

View File

@ -1,20 +0,0 @@
package cd.casic.ci.process.process.service.machine;
import cd.casic.ci.process.dto.req.machine.MachineInfoReq;
import cd.casic.ci.process.dto.resp.machine.MachineInfoResp;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* 机器信息表service接口
*
* @author herenbin
* @date 2022-09-27 10:25:29
*/
public interface MachineInfoService extends IService<MachineInfo> {
List<MachineInfoResp> list(MachineInfoReq req);
}

View File

@ -1,45 +0,0 @@
package cd.casic.ci.process.process.service.machine.impl;
import cd.casic.ci.process.dto.req.machine.MachineInfoReq;
import cd.casic.ci.process.dto.resp.machine.MachineInfoResp;
import cd.casic.ci.process.process.converter.MachineConverter;
import cd.casic.ci.process.process.dao.machine.MachineInfoDao;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
import cd.casic.ci.process.process.service.machine.MachineInfoService;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 机器信息表service接口实现类
* @author herenbin
* @date 2022-09-27 10:25:29
*/
@Slf4j
@Service
public class MachineInfoServiceImpl extends ServiceImpl<MachineInfoDao, MachineInfo> implements MachineInfoService {
@Resource
private MachineInfoDao machineInfoDao;
@Override
public List<MachineInfoResp> list(MachineInfoReq req) {
LambdaQueryWrapper<MachineInfo> wrapper = new LambdaQueryWrapper<>();
// 根据机器名称 查询
if (ObjectUtil.isNotEmpty(req.getMachineName())) {
wrapper.like(MachineInfo::getMachineName, req.getMachineName());
}
// 根据机器状态 1有效 2无效 查询
if (ObjectUtil.isNotEmpty(req.getMachineStatus())) {
wrapper.eq(MachineInfo::getMachineStatus, req.getMachineStatus());
}
List<MachineInfo> machineInfos = machineInfoDao.selectList(wrapper);
return MachineConverter.INSTANCE.toRespList(machineInfos);
}
}

View File

@ -1,15 +1,13 @@
package cd.casic.ci.process.process.service.resource; package cd.casic.ci.process.process.service.resource;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; import cd.casic.ci.process.dto.req.resource.ResourceCreateReq;
import cd.casic.ci.process.dto.req.resource.ResourceReq; import cd.casic.ci.process.dto.req.resource.ResourceUpdateReq;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager;
import cd.casic.framework.commons.pojo.PageResult;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.Valid;
import java.util.List;
/** /**
* @author HopeLi * @author HopeLi
@ -19,19 +17,11 @@ import java.util.List;
* @Description: * @Description:
*/ */
public interface ResourceManagerService extends IService<PipResourceManager> { public interface ResourceManagerService extends IService<PipResourceManager> {
String createResource(@Valid ResourceReq resourceReq); /**
* 创建||申请 资源
void deleteResource(String id); * */
void createResource(ResourceCreateReq req);
void updateResource(@Valid ResourceReq resourceReq); void updateResource(ResourceUpdateReq req);
ResourceDetailResp findResourceDetailById(String resourceId);
ResourceFindResp findResourceById(String id); void deleteResource(String resourceId);
List<ResourceFindResp> findResourceList(@Valid ResourceQueryReq req);
PageResult<ResourceFindResp> findResourcePage(@Valid ResourceQueryReq req);
TaskResourceFindResp findResourceListByType(@Valid ResourceQueryReq req);
List findResourceListForObjectByType(@Valid ResourceQueryReq req);
} }

View File

@ -1,38 +1,26 @@
package cd.casic.ci.process.process.service.resource.impl; package cd.casic.ci.process.process.service.resource.impl;
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; import cd.casic.ci.process.constant.ResourceConstant;
import cd.casic.ci.process.dto.req.resource.ResourceReq; import cd.casic.ci.process.dto.req.resource.ResourceCreateReq;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.req.resource.ResourceUpdateReq;
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
import cd.casic.ci.process.process.converter.ResourceConverter; import cd.casic.ci.process.process.converter.ResourceConverter;
import cd.casic.ci.process.process.dao.pipeline.PipResourceCloudDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceK8SDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceMachineDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceManagerDao; import cd.casic.ci.process.process.dao.pipeline.PipResourceManagerDao;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager;
import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService;
import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.framework.commons.pojo.PageResult;
import cd.casic.framework.security.dal.user.AdminUserDO;
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
import cd.casic.module.execute.docker.dao.DockerEndpointDao; import cd.casic.module.execute.docker.dao.DockerEndpointDao;
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import cd.casic.module.machine.service.MachineInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList; import java.util.Objects;
import java.util.List;
/** /**
* @author HopeLi * @author HopeLi
@ -46,359 +34,97 @@ import java.util.List;
public class ResourceManagerServiceImpl extends ServiceImpl<PipResourceManagerDao, PipResourceManager> implements ResourceManagerService { public class ResourceManagerServiceImpl extends ServiceImpl<PipResourceManagerDao, PipResourceManager> implements ResourceManagerService {
@Resource @Resource
private PipResourceManagerDao pipResourceManagerDao; private PipResourceManagerDao pipResourceManagerDao;
@Resource
private PipResourceMachineDao machineDao;
@Resource @Resource
private DockerEndpointDao dockerEndpointDao; private DockerEndpointDao dockerEndpointDao;
@Resource @Resource
private PipResourceK8SDao k8SDao; private MachineInfoService machineInfoService;
@Resource @Resource
private PipResourceCloudDao cloudDao; private ResourceConverter converter;
@Resource
private AdminUserServiceImpl adminUserService;
@Override @Override
@Transactional(rollbackFor = Exception.class) public void createResource(ResourceCreateReq req) {
public String createResource(ResourceReq resourceReq) { String resourceType = req.getResourceType();
PipResourceManager manager = new PipResourceManager();
PipResourceManager pipResourceManager = ResourceConverter.INSTANCE.toBean(resourceReq); manager.setResourceName(req.getResourceName());
if (ResourceConstant.RES_TYPE_CUSTOM.equals(resourceType)) {
//如果资源类型不属于弹性云则新增如果属于弹性云则走申请流程 manager.setResourceType(ResourceConstant.RES_TYPE_CUSTOM);
if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){ Long machineInfoId = req.getMachineInfoId();
PipResourceMachine resourceMachine = resourceReq.getResourceMachine(); MachineInfoDO machineInfoDO = machineInfoService.validateMachineInfoExists(machineInfoId);
machineDao.insert(resourceMachine); manager.setMachineId(machineInfoDO.getId());
// 判断docker是否需要新增docker记录
pipResourceManager.setMachineId(resourceMachine.getId()); if (Objects.nonNull(req.getDockerPort())) {
} DockerEndpointDo dockerEndpoint = new DockerEndpointDo();
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) { dockerEndpoint.setName(machineInfoDO.getName());
PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S(); dockerEndpoint.setPort(req.getDockerPort());
k8SDao.insert(pipResourceK8S); dockerEndpoint.setHost(machineInfoDO.getHostIp());
dockerEndpoint.setType(DockerEndpoint.DockerEndpointTypeEnum.REMOTE);
pipResourceManager.setK8sId(pipResourceK8S.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) {
DockerEndpointDo dockerEndpoint = resourceReq.getDockerEndpoint();
dockerEndpointDao.insert(dockerEndpoint); dockerEndpointDao.insert(dockerEndpoint);
manager.setDockerId(dockerEndpoint.getId());
pipResourceManager.setDockerId(dockerEndpoint.getId());
} }
} else if(ResourceConstant.RES_TYPE_CLOUD.equals(resourceType)){
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceCloud())) { // 入库申请资源等操作
PipResourceCloud pipResourceCloud = resourceReq.getPipResourceCloud();
cloudDao.insert(pipResourceCloud);
pipResourceManager.setCloudId(pipResourceCloud.getId());
} }
pipResourceManagerDao.insert(pipResourceManager);
return pipResourceManager.getId();
} }
@Override @Override
public void deleteResource(String id) { public void updateResource(ResourceUpdateReq req) {
PipResourceManager pipResourceManager = pipResourceManagerDao.selectById(id); String resourceType = req.getResourceType();
if (!StringUtils.isEmpty(pipResourceManager.getMachineId())){ String id = req.getId();
machineDao.deleteById(pipResourceManager.getMachineId()); PipResourceManager manager = pipResourceManagerDao.selectById(id);
} // 同类型资源修改
if (!StringUtils.isEmpty(pipResourceManager.getK8sId())){ if (manager.getResourceType().equals(resourceType)) {
k8SDao.deleteById(pipResourceManager.getK8sId()); if (ResourceConstant.RES_TYPE_CUSTOM.equals(resourceType)) {
} manager.setResourceType(ResourceConstant.RES_TYPE_CUSTOM);
if (!StringUtils.isEmpty(pipResourceManager.getDockerId())){ Long machineInfoId = req.getMachineInfoId();
dockerEndpointDao.deleteById(pipResourceManager.getDockerId()); MachineInfoDO machineInfoDO = machineInfoService.validateMachineInfoExists(machineInfoId);
} manager.setMachineId(machineInfoDO.getId());
if (!StringUtils.isEmpty(pipResourceManager.getCloudId())){ // 判断docker是否需要新增docker记录,
cloudDao.deleteById(pipResourceManager.getCloudId()); // 1.之前没有维护docker信息之后维护了
} // 2.维护docker信息之后需要修改
pipResourceManagerDao.deleteById(id); // 3.之前维护了docker信息之后不想维护了
} DockerEndpointDo dockerEndpoint = new DockerEndpointDo();
dockerEndpoint.setName(machineInfoDO.getName());
@Override dockerEndpoint.setPort(req.getDockerPort());
public void updateResource(ResourceReq resourceReq) { dockerEndpoint.setHost(machineInfoDO.getHostIp());
PipResourceManager temp = pipResourceManagerDao.selectById(resourceReq.getId()); dockerEndpoint.setType(DockerEndpoint.DockerEndpointTypeEnum.REMOTE);
temp.setResourceName(resourceReq.getResourceName()); if (StringUtils.isEmpty(manager.getDockerId()) &&Objects.nonNull(req.getDockerPort())) {
//先删除旧的资源信息
if (!StringUtils.isEmpty(temp.getMachineId())){
machineDao.deleteById(temp.getMachineId());
}
if (!StringUtils.isEmpty(temp.getK8sId())){
k8SDao.deleteById(temp.getK8sId());
}
if (!StringUtils.isEmpty(temp.getDockerId())){
dockerEndpointDao.deleteById(temp.getDockerId());
}
if (!StringUtils.isEmpty(temp.getCloudId())){
cloudDao.deleteById(temp.getCloudId());
}
//根据新资源信息新增
if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){
PipResourceMachine resourceMachine = resourceReq.getResourceMachine();
machineDao.insert(resourceMachine);
temp.setMachineId(resourceMachine.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) {
PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S();
k8SDao.insert(pipResourceK8S);
temp.setK8sId(pipResourceK8S.getId());
}
if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) {
DockerEndpointDo dockerEndpoint = resourceReq.getDockerEndpoint();
dockerEndpointDao.insert(dockerEndpoint); dockerEndpointDao.insert(dockerEndpoint);
manager.setDockerId(dockerEndpoint.getId());
temp.setDockerId(dockerEndpoint.getId()); } else if (!StringUtils.isEmpty(manager.getDockerId()) &&Objects.nonNull(req.getDockerPort())) {
dockerEndpointDao.updateById(dockerEndpoint);
manager.setDockerId(dockerEndpoint.getId());
} else if (!StringUtils.isEmpty(manager.getDockerId()) &&!Objects.nonNull(req.getDockerPort())) {
String dockerId = manager.getDockerId();
dockerEndpointDao.deleteById(dockerId);
manager.setDockerId(null);
} }
} else if(ResourceConstant.RES_TYPE_CLOUD.equals(resourceType)){
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceCloud())) { // 入库申请资源等操作
PipResourceCloud pipResourceCloud = resourceReq.getPipResourceCloud();
cloudDao.insert(pipResourceCloud);
temp.setCloudId(pipResourceCloud.getId());
} }
pipResourceManagerDao.updateById(temp); } else {
//天河国云资源转机器资源是否需要销毁原本资源还是说可以自由切换预留入口
}
pipResourceManagerDao.updateById(manager);
} }
@Override @Override
public ResourceFindResp findResourceById(String id) { public ResourceDetailResp findResourceDetailById(String id) {
PipResourceManager pipResourceManager = pipResourceManagerDao.selectById(id); PipResourceManager manager = pipResourceManagerDao.selectById(id);
if (ObjectUtils.isEmpty(pipResourceManager)){ Long machineId = manager.getMachineId();
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源不存在"); String dockerId = manager.getDockerId();
} MachineInfoDO machineInfoDO = machineInfoService.validateMachineInfoExists(machineId);
ResourceFindResp resp = ResourceConverter.INSTANCE.toResp(pipResourceManager); DockerEndpointDo dockerEndpointDo = dockerEndpointDao.selectById(dockerId);
ResourceDetailResp resp = converter.converter(manager);
setResource(resp); resp.setMachineInfo(machineInfoDO);
setUserName(resp); resp.setDockerInfo(dockerEndpointDo);
return resp; return resp;
} }
@Override @Override
public List<ResourceFindResp> findResourceList(ResourceQueryReq query) { public void deleteResource(String resourceId) {
QueryWrapper<PipResourceManager> wrapper = new QueryWrapper<>(); if (StringUtils.isEmpty(resourceId)) {
if (!ObjectUtils.isEmpty(query.getId())){ return;
wrapper.eq("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getIdList())){
wrapper.in("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getResourceName())){
wrapper.like("resource_name",query.getResourceName());
}
if (!ObjectUtils.isEmpty(query.getMachineId())){
wrapper.eq("machine_id",query.getMachineId());
}
if (!ObjectUtils.isEmpty(query.getK8sId())){
wrapper.eq("k8s_id",query.getK8sId());
}
if (!ObjectUtils.isEmpty(query.getDockerId())){
wrapper.eq("docker_id",query.getDockerId());
}
if (!ObjectUtils.isEmpty(query.getCloudId())){
wrapper.eq("cloud_id",query.getCloudId());
}
if (!ObjectUtils.isEmpty(query.getCreator())){
wrapper.eq("creator",query.getCreator());
}
List<PipResourceManager> pipResourceManagerList = pipResourceManagerDao.selectList(wrapper);
if (ObjectUtils.isEmpty(pipResourceManagerList)){
return new ArrayList<>(0);
}
List<ResourceFindResp> respList = ResourceConverter.INSTANCE.toRespList(pipResourceManagerList);
//对资源进行赋值
respList.forEach(this::setResource);
respList.forEach(this::setUserName);
return respList;
}
@Override
public PageResult<ResourceFindResp> findResourcePage(ResourceQueryReq query) {
QueryWrapper<PipResourceManager> wrapper = new QueryWrapper<>();
if (!ObjectUtils.isEmpty(query.getId())){
wrapper.eq("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getIdList())){
wrapper.in("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getResourceName())){
wrapper.like("resource_name",query.getResourceName());
}
if (!ObjectUtils.isEmpty(query.getMachineId())){
wrapper.eq("machine_id",query.getMachineId());
}
if (!ObjectUtils.isEmpty(query.getK8sId())){
wrapper.eq("k8s_id",query.getK8sId());
}
if (!ObjectUtils.isEmpty(query.getDockerId())){
wrapper.eq("docker_id",query.getDockerId());
}
if (!ObjectUtils.isEmpty(query.getCloudId())){
wrapper.eq("cloud_id",query.getCloudId());
}
if (!ObjectUtils.isEmpty(query.getCreator())){
wrapper.eq("creator",query.getCreator());
}
Page<PipResourceManager> pipResourceTempPage = pipResourceManagerDao.selectPage(new Page<>(query.getPageNo(), query.getPageSize()), wrapper);
if (ObjectUtils.isEmpty(pipResourceTempPage)){
return new PageResult<>();
}
List<ResourceFindResp> respList = ResourceConverter.INSTANCE.toRespList(pipResourceTempPage.getRecords());
//对资源进行赋值
respList.forEach(this::setResource);
respList.forEach(this::setUserName);
PageResult<ResourceFindResp> pageResult = new PageResult<>(respList,pipResourceTempPage.getTotal(),pipResourceTempPage.getCurrent(),pipResourceTempPage.getSize());
return pageResult;
}
@Override
public TaskResourceFindResp findResourceListByType(ResourceQueryReq query) {
TaskResourceFindResp taskResourceFindResp = new TaskResourceFindResp();
if (StringUtils.isEmpty(query.getType())){
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型不可为空");
}
switch (query.getType()) {
case "docker":
QueryWrapper<DockerEndpointDo> dockerWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
dockerWrapper.eq("id",query.getId());
}
List<DockerEndpointDo> resourceDockerEndpoints = dockerEndpointDao.selectList(dockerWrapper);
if (!ObjectUtils.isEmpty(resourceDockerEndpoints)){
taskResourceFindResp.setDockerEndpointList(resourceDockerEndpoints);
}
return taskResourceFindResp;
case "k8s":
QueryWrapper<PipResourceK8S> k8sWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
k8sWrapper.eq("id",query.getId());
}
List<PipResourceK8S> resourceK8S = k8SDao.selectList(k8sWrapper);
if (!ObjectUtils.isEmpty(resourceK8S)){
taskResourceFindResp.setResourceK8SList(resourceK8S);
}
return taskResourceFindResp;
case "machine":
QueryWrapper<PipResourceMachine> machineWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
machineWrapper.eq("id",query.getId());
}
List<PipResourceMachine> resourceMachines = machineDao.selectList(machineWrapper);
if (!ObjectUtils.isEmpty(resourceMachines)){
taskResourceFindResp.setResourceMachineList(resourceMachines);
}
return taskResourceFindResp;
case "cloud":
QueryWrapper<PipResourceCloud> cloudWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
cloudWrapper.eq("id",query.getId());
}
List<PipResourceCloud> resourceClouds = cloudDao.selectList(cloudWrapper);
if (!ObjectUtils.isEmpty(resourceClouds)){
taskResourceFindResp.setResourceCloudList(resourceClouds);
}
return taskResourceFindResp;
default:
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型错误");
}
}
@Override
public List findResourceListForObjectByType(ResourceQueryReq query) {
if (StringUtils.isEmpty(query.getType())){
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型不可为空");
}
switch (query.getType()) {
case "docker":
QueryWrapper<DockerEndpointDo> dockerWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
dockerWrapper.eq("id",query.getId());
}
return dockerEndpointDao.selectList(dockerWrapper);
case "k8s":
QueryWrapper<PipResourceK8S> k8sWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
k8sWrapper.eq("id",query.getId());
}
return k8SDao.selectList(k8sWrapper);
case "machine":
QueryWrapper<PipResourceMachine> machineWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
machineWrapper.eq("id",query.getId());
}
return machineDao.selectList(machineWrapper);
case "cloud":
QueryWrapper<PipResourceCloud> cloudWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(query.getId())){
cloudWrapper.eq("id",query.getId());
}
return cloudDao.selectList(cloudWrapper);
default:
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型错误");
}
}
private void setResource(ResourceFindResp resourceFindResp) {
if (!StringUtils.isEmpty(resourceFindResp.getMachineId())){
PipResourceMachine resourceMachine = machineDao.selectById(resourceFindResp.getMachineId());
resourceFindResp.setResourceMachine(resourceMachine);
}
if (!StringUtils.isEmpty(resourceFindResp.getK8sId())) {
PipResourceK8S pipResourceK8S = k8SDao.selectById(resourceFindResp.getK8sId());
resourceFindResp.setPipResourceK8S(pipResourceK8S);
}
if (!StringUtils.isEmpty(resourceFindResp.getDockerId())) {
DockerEndpointDo dockerEndpoint = dockerEndpointDao.selectById(resourceFindResp.getDockerId());
resourceFindResp.setDockerEndpoint(dockerEndpoint);
}
if (!StringUtils.isEmpty(resourceFindResp.getCloudId())) {
PipResourceCloud resourceCloud = cloudDao.selectById(resourceFindResp.getCloudId());
resourceFindResp.setPipResourceCloud(resourceCloud);
}
}
private void setUserName(ResourceFindResp resp) {
if (!StringUtils.isEmpty(resp.getCreator())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getCreator()));
if (!ObjectUtils.isEmpty(user)){
resp.setCreatorName(user.getUsername());
}
}
if (!StringUtils.isEmpty(resp.getUpdater())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getUpdater()));
if (!ObjectUtils.isEmpty(user)){
resp.setUpdaterName(user.getUsername());
}
} }
pipResourceManagerDao.deleteById(resourceId);
} }
} }

View File

@ -37,6 +37,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -247,6 +248,9 @@ public class TargetManagerServiceImpl extends ServiceImpl<TargetManagerDao, Targ
@Override @Override
public void deleteVersion(BaseIdReq req) { public void deleteVersion(BaseIdReq req) {
if (pipelineService.targetVersionInUse(Collections.singletonList(req.getId()))) {
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"当前目标正在被流水线使用无法删除");
}
targetVersionDao.deleteById(req.getId()); targetVersionDao.deleteById(req.getId());
} }

View File

@ -1,8 +1,6 @@
package cd.casic.ci.process.ssh; package cd.casic.ci.process.ssh;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
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;
/** /**
@ -36,7 +34,7 @@ public class SshClientFactory {
* 主要包含 用户名 密码 私钥 主机ip 端口 认证类型 * 主要包含 用户名 密码 私钥 主机ip 端口 认证类型
* *
* */ * */
public static SshClient createSsh(PipResourceMachine properties) throws Exception { public static SshClient createSsh(MachineInfoDO properties) throws Exception {
try { try {
return new SshCommand(properties); return new SshCommand(properties);
} catch (JSchException e) { } catch (JSchException e) {

View File

@ -2,10 +2,8 @@ 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.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.module.machine.dal.dataobject.MachineInfoDO;
import cn.hutool.extra.ssh.JschUtil; import cn.hutool.extra.ssh.JschUtil;
import com.jcraft.jsch.ChannelShell; import com.jcraft.jsch.ChannelShell;
import com.jcraft.jsch.JSchException; import com.jcraft.jsch.JSchException;
@ -58,10 +56,10 @@ public class SshCommand implements SshClient {
* *
* @throws JSchException * @throws JSchException
*/ */
public SshCommand(PipResourceMachine machine) throws JSchException { public SshCommand(MachineInfoDO machine) throws JSchException {
// 根据用户名主机ip端口获取一个Session对象 // 根据用户名主机ip端口获取一个Session对象
String decrypt = CryptogramUtil.doDecrypt(machine.getPassword()); String decrypt = machine.getPassword();
this.session = JschUtil.createSession(machine.getMachineHost(), Integer.parseInt(machine.getSshPort()), machine.getUsername(), decrypt); this.session = JschUtil.createSession(machine.getHostIp(), 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,8 +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.resource.PipResourceMachine;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import io.cloudsoft.winrm4j.client.WinRmClientContext; import io.cloudsoft.winrm4j.client.WinRmClientContext;
import io.cloudsoft.winrm4j.winrm.WinRmTool; import io.cloudsoft.winrm4j.winrm.WinRmTool;
import io.cloudsoft.winrm4j.winrm.WinRmToolResponse; import io.cloudsoft.winrm4j.winrm.WinRmToolResponse;
@ -33,10 +32,10 @@ public class WinRMHelper {
this.password = password; this.password = password;
} }
public WinRMHelper(PipResourceMachine machineInfo) { public WinRMHelper(MachineInfoDO machineInfo) {
this.ip = machineInfo.getMachineHost(); this.ip = machineInfo.getHostIp();
this.username = machineInfo.getUsername(); this.username = machineInfo.getUsername();
this.password = CryptogramUtil.doDecrypt(machineInfo.getPassword()); this.password = machineInfo.getPassword();
} }
public int execute(final String command, ExecCallback execCallback) { public int execute(final String command, ExecCallback execCallback) {

View File

@ -53,6 +53,11 @@
<groupId>cd.casic.boot</groupId> <groupId>cd.casic.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
</dependency> </dependency>
<dependency>
<groupId>cd.casic.boot</groupId>
<artifactId>module-ci-machine</artifactId>
<version>${revision}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -70,10 +70,10 @@ spring:
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data: data:
redis: redis:
# host: 127.0.0.1 # 地址 host: 127.0.0.1 # 地址
# port: 16379 # 端口 port: 16379 # 端口
host: 192.168.1.120 # 地址 # host: 192.168.1.120 # 地址
port: 6379 # 端口 # port: 6379 # 端口
database: 0 # 数据库索引 database: 0 # 数据库索引
# password: dev # 密码,建议生产环境开启 # password: dev # 密码,建议生产环境开启
@ -168,7 +168,7 @@ sast:
captcha: clouditera captcha: clouditera
base-url: "http://39.155.212.109:22880" #远程 base-url: "http://39.155.212.109:22880" #远程
# base-url: "http://192.168.31.93" #本地 # base-url: "http://192.168.31.93" #本地
tartet: target:
file-upload: file-upload:
remoteHost: 175.6.27.252 remoteHost: 175.6.27.252
remotePort: 22 remotePort: 22

View File

@ -1,15 +1,6 @@
package cd.casic.server; package cd.casic.server;
import cd.casic.ci.process.dto.req.resource.ResourceReq; import cd.casic.ci.process.dto.req.resource.ResourceReq;
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.converter.ResourceConverter;
import cd.casic.ci.process.process.dao.pipeline.PipResourceCloudDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceK8SDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceMachineDao;
import cd.casic.ci.process.process.dao.pipeline.PipResourceManagerDao;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager;
import cd.casic.ci.process.process.service.resource.impl.ResourceManagerServiceImpl; import cd.casic.ci.process.process.service.resource.impl.ResourceManagerServiceImpl;
import cd.casic.module.execute.docker.dao.DockerEndpointDao; import cd.casic.module.execute.docker.dao.DockerEndpointDao;
@ -31,297 +22,297 @@ import static org.mockito.Mockito.*;
@ActiveProfiles("local") @ActiveProfiles("local")
@Slf4j @Slf4j
public class ResourceTest { public class ResourceTest {
@Autowired // @Autowired
private ResourceManagerServiceImpl resourceManagerService; // private ResourceManagerServiceImpl resourceManagerService;
//
@MockBean // @MockBean
private PipResourceManagerDao pipResourceManagerDao; // private PipResourceManagerDao pipResourceManagerDao;
//
@MockBean // @MockBean
private PipResourceMachineDao machineDao; // private PipResourceMachineDao machineDao;
//
@MockBean // @MockBean
private PipResourceK8SDao k8SDao; // private PipResourceK8SDao k8SDao;
//
@MockBean // @MockBean
private DockerEndpointDao dockerEndpointDao; // private DockerEndpointDao dockerEndpointDao;
//
@MockBean // @MockBean
private PipResourceCloudDao cloudDao; // private PipResourceCloudDao cloudDao;
//
@MockBean // @MockBean
private ResourceConverter resourceConverter; // private ResourceConverter resourceConverter;
//
@Test // @Test
void testCreateResourceWithMachine() { // void testCreateResourceWithMachine() {
// Arrange // // Arrange
ResourceReq resourceReq = new ResourceReq(); // ResourceReq resourceReq = new ResourceReq();
PipResourceMachine resourceMachine = new PipResourceMachine(); // PipResourceMachine resourceMachine = new PipResourceMachine();
resourceMachine.setId("machineId"); // resourceMachine.setId("machineId");
resourceReq.setResourceMachine(resourceMachine); // resourceReq.setResourceMachine(resourceMachine);
//
when(machineDao.insert(any(PipResourceMachine.class))).thenAnswer(invocation -> { // when(machineDao.insert(any(PipResourceMachine.class))).thenAnswer(invocation -> {
PipResourceMachine machine = invocation.getArgument(0); // PipResourceMachine machine = invocation.getArgument(0);
machine.setId("machineId"); // 模拟插入后生成ID // machine.setId("machineId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { // when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> {
PipResourceManager manager = invocation.getArgument(0); // PipResourceManager manager = invocation.getArgument(0);
manager.setId("resourceId"); // 模拟插入后生成ID // manager.setId("resourceId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
// Act // // Act
String result = resourceManagerService.createResource(resourceReq); // String result = resourceManagerService.createResource(resourceReq);
//
// Assert // // Assert
verify(machineDao, times(1)).insert(any(PipResourceMachine.class)); // verify(machineDao, times(1)).insert(any(PipResourceMachine.class));
verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); // verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class));
//
// 验证返回的ID // // 验证返回的ID
assert result.equals("resourceId"); // assert result.equals("resourceId");
} // }
//
@Test // @Test
void testCreateResourceWithK8s() { // void testCreateResourceWithK8s() {
// Arrange // // Arrange
ResourceReq resourceReq = new ResourceReq(); // ResourceReq resourceReq = new ResourceReq();
PipResourceK8S pipResourceK8S = new PipResourceK8S(); // PipResourceK8S pipResourceK8S = new PipResourceK8S();
pipResourceK8S.setId("k8sId"); // pipResourceK8S.setId("k8sId");
resourceReq.setPipResourceK8S(pipResourceK8S); // resourceReq.setPipResourceK8S(pipResourceK8S);
//
when(k8SDao.insert(any(PipResourceK8S.class))).thenAnswer(invocation -> { // when(k8SDao.insert(any(PipResourceK8S.class))).thenAnswer(invocation -> {
PipResourceK8S k8s = invocation.getArgument(0); // PipResourceK8S k8s = invocation.getArgument(0);
k8s.setId("k8sId"); // 模拟插入后生成ID // k8s.setId("k8sId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { // when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> {
PipResourceManager manager = invocation.getArgument(0); // PipResourceManager manager = invocation.getArgument(0);
manager.setId("resourceId"); // 模拟插入后生成ID // manager.setId("resourceId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
// Act // // Act
String result = resourceManagerService.createResource(resourceReq); // String result = resourceManagerService.createResource(resourceReq);
//
// Assert // // Assert
verify(k8SDao, times(1)).insert(any(PipResourceK8S.class)); // verify(k8SDao, times(1)).insert(any(PipResourceK8S.class));
verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); // verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class));
//
// 验证返回的ID // // 验证返回的ID
assert result.equals("resourceId"); // assert result.equals("resourceId");
} // }
//
@Test // @Test
void testCreateResourceWithDocker() { // void testCreateResourceWithDocker() {
// Arrange // // Arrange
ResourceReq resourceReq = new ResourceReq(); // ResourceReq resourceReq = new ResourceReq();
DockerEndpointDo dockerEndpoint = new DockerEndpointDo(); // DockerEndpointDo dockerEndpoint = new DockerEndpointDo();
dockerEndpoint.setId("dockerId"); // dockerEndpoint.setId("dockerId");
resourceReq.setDockerEndpoint(dockerEndpoint); // resourceReq.setDockerEndpoint(dockerEndpoint);
//
when(dockerEndpointDao.insert(any(DockerEndpointDo.class))).thenAnswer(invocation -> { // when(dockerEndpointDao.insert(any(DockerEndpointDo.class))).thenAnswer(invocation -> {
DockerEndpointDo endpoint = invocation.getArgument(0); // DockerEndpointDo endpoint = invocation.getArgument(0);
endpoint.setId("dockerId"); // 模拟插入后生成ID // endpoint.setId("dockerId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { // when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> {
PipResourceManager manager = invocation.getArgument(0); // PipResourceManager manager = invocation.getArgument(0);
manager.setId("resourceId"); // 模拟插入后生成ID // manager.setId("resourceId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
// Act // // Act
String result = resourceManagerService.createResource(resourceReq); // String result = resourceManagerService.createResource(resourceReq);
//
// Assert // // Assert
verify(dockerEndpointDao, times(1)).insert(any(DockerEndpointDo.class)); // verify(dockerEndpointDao, times(1)).insert(any(DockerEndpointDo.class));
verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); // verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class));
//
// 验证返回的ID // // 验证返回的ID
assert result.equals("resourceId"); // assert result.equals("resourceId");
} // }
//
@Test // @Test
void testCreateResourceWithCloud() { // void testCreateResourceWithCloud() {
// Arrange // // Arrange
ResourceReq resourceReq = new ResourceReq(); // ResourceReq resourceReq = new ResourceReq();
PipResourceCloud pipResourceCloud = new PipResourceCloud(); // PipResourceCloud pipResourceCloud = new PipResourceCloud();
pipResourceCloud.setId("cloudId"); // pipResourceCloud.setId("cloudId");
resourceReq.setPipResourceCloud(pipResourceCloud); // resourceReq.setPipResourceCloud(pipResourceCloud);
//
when(cloudDao.insert(any(PipResourceCloud.class))).thenAnswer(invocation -> { // when(cloudDao.insert(any(PipResourceCloud.class))).thenAnswer(invocation -> {
PipResourceCloud cloud = invocation.getArgument(0); // PipResourceCloud cloud = invocation.getArgument(0);
cloud.setId("cloudId"); // 模拟插入后生成ID // cloud.setId("cloudId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { // when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> {
PipResourceManager manager = invocation.getArgument(0); // PipResourceManager manager = invocation.getArgument(0);
manager.setId("resourceId"); // 模拟插入后生成ID // manager.setId("resourceId"); // 模拟插入后生成ID
return null; // return null;
}); // });
//
// Act // // Act
String result = resourceManagerService.createResource(resourceReq); // String result = resourceManagerService.createResource(resourceReq);
//
// Assert // // Assert
verify(cloudDao, times(1)).insert(any(PipResourceCloud.class)); // verify(cloudDao, times(1)).insert(any(PipResourceCloud.class));
verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); // verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class));
//
// 验证返回的ID // // 验证返回的ID
assert result.equals("resourceId"); // assert result.equals("resourceId");
} // }
//
//
//
@Test // @Test
void testDeleteResource_WithAllSubResources() { // void testDeleteResource_WithAllSubResources() {
// Arrange // // Arrange
String resourceId = "res123"; // String resourceId = "res123";
PipResourceManager pipResourceManager = new PipResourceManager(); // PipResourceManager pipResourceManager = new PipResourceManager();
pipResourceManager.setId(resourceId); // pipResourceManager.setId(resourceId);
pipResourceManager.setMachineId("machine123"); // pipResourceManager.setMachineId("machine123");
pipResourceManager.setK8sId("k8s123"); // pipResourceManager.setK8sId("k8s123");
pipResourceManager.setDockerId("docker123"); // pipResourceManager.setDockerId("docker123");
pipResourceManager.setCloudId("cloud123"); // pipResourceManager.setCloudId("cloud123");
//
Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); // Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager);
//
// Act // // Act
resourceManagerService.deleteResource(resourceId); // resourceManagerService.deleteResource(resourceId);
//
// Assert // // Assert
Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123"); // Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123");
Mockito.verify(k8SDao, Mockito.times(1)).deleteById("k8s123"); // Mockito.verify(k8SDao, Mockito.times(1)).deleteById("k8s123");
Mockito.verify(dockerEndpointDao, Mockito.times(1)).deleteById("docker123"); // Mockito.verify(dockerEndpointDao, Mockito.times(1)).deleteById("docker123");
Mockito.verify(cloudDao, Mockito.times(1)).deleteById("cloud123"); // Mockito.verify(cloudDao, Mockito.times(1)).deleteById("cloud123");
Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId); // Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId);
} // }
//
@Test // @Test
void testDeleteResource_WithOnlyMachineResource() { // void testDeleteResource_WithOnlyMachineResource() {
// Arrange // // Arrange
String resourceId = "res123"; // String resourceId = "res123";
PipResourceManager pipResourceManager = new PipResourceManager(); // PipResourceManager pipResourceManager = new PipResourceManager();
pipResourceManager.setId(resourceId); // pipResourceManager.setId(resourceId);
pipResourceManager.setMachineId("machine123"); // pipResourceManager.setMachineId("machine123");
//
Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); // Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager);
//
// Act // // Act
resourceManagerService.deleteResource(resourceId); // resourceManagerService.deleteResource(resourceId);
//
// Assert // // Assert
Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123"); // Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123");
Mockito.verify(k8SDao, never()).deleteById(anyString()); // Mockito.verify(k8SDao, never()).deleteById(anyString());
Mockito.verify(dockerEndpointDao, never()).deleteById(anyString()); // Mockito.verify(dockerEndpointDao, never()).deleteById(anyString());
Mockito.verify(cloudDao, never()).deleteById(anyString()); // Mockito.verify(cloudDao, never()).deleteById(anyString());
Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId); // Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId);
} // }
//
@Test // @Test
void testDeleteResource_ResourceNotFound() { // void testDeleteResource_ResourceNotFound() {
// Arrange // // Arrange
String resourceId = "nonExistent"; // String resourceId = "nonExistent";
//
Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(null); // Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(null);
//
// Act & Assert // // Act & Assert
try { // try {
resourceManagerService.deleteResource(resourceId); // resourceManagerService.deleteResource(resourceId);
} catch (Exception e) { // } catch (Exception e) {
// Expect no exception, just skip deletion // // Expect no exception, just skip deletion
} // }
//
Mockito.verify(machineDao, never()).deleteById(anyString()); // Mockito.verify(machineDao, never()).deleteById(anyString());
Mockito.verify(k8SDao, never()).deleteById(anyString()); // Mockito.verify(k8SDao, never()).deleteById(anyString());
Mockito.verify(dockerEndpointDao, never()).deleteById(anyString()); // Mockito.verify(dockerEndpointDao, never()).deleteById(anyString());
Mockito.verify(cloudDao, never()).deleteById(anyString()); // Mockito.verify(cloudDao, never()).deleteById(anyString());
Mockito.verify(pipResourceManagerDao, never()).deleteById(anyString()); // Mockito.verify(pipResourceManagerDao, never()).deleteById(anyString());
} // }
//
//
@Test // @Test
void testDeleteResourceWithAllSubResources() { // void testDeleteResourceWithAllSubResources() {
// Arrange // // Arrange
String resourceId = "resourceId"; // String resourceId = "resourceId";
PipResourceManager pipResourceManager = new PipResourceManager(); // PipResourceManager pipResourceManager = new PipResourceManager();
pipResourceManager.setId(resourceId); // pipResourceManager.setId(resourceId);
pipResourceManager.setMachineId("machineId"); // pipResourceManager.setMachineId("machineId");
pipResourceManager.setK8sId("k8sId"); // pipResourceManager.setK8sId("k8sId");
pipResourceManager.setDockerId("dockerId"); // pipResourceManager.setDockerId("dockerId");
pipResourceManager.setCloudId("cloudId"); // pipResourceManager.setCloudId("cloudId");
//
when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); // when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager);
//
// Act // // Act
resourceManagerService.deleteResource(resourceId); // resourceManagerService.deleteResource(resourceId);
//
// Assert // // Assert
verify(pipResourceManagerDao, times(1)).selectById(resourceId); // verify(pipResourceManagerDao, times(1)).selectById(resourceId);
verify(machineDao, times(1)).deleteById("machineId"); // verify(machineDao, times(1)).deleteById("machineId");
verify(k8SDao, times(1)).deleteById("k8sId"); // verify(k8SDao, times(1)).deleteById("k8sId");
verify(dockerEndpointDao, times(1)).deleteById("dockerId"); // verify(dockerEndpointDao, times(1)).deleteById("dockerId");
verify(cloudDao, times(1)).deleteById("cloudId"); // verify(cloudDao, times(1)).deleteById("cloudId");
verify(pipResourceManagerDao, times(1)).deleteById(resourceId); // verify(pipResourceManagerDao, times(1)).deleteById(resourceId);
} // }
//
@Test // @Test
void testDeleteResourceWithOnlyMachine() { // void testDeleteResourceWithOnlyMachine() {
// Arrange // // Arrange
String resourceId = "resourceId"; // String resourceId = "resourceId";
PipResourceManager pipResourceManager = new PipResourceManager(); // PipResourceManager pipResourceManager = new PipResourceManager();
pipResourceManager.setId(resourceId); // pipResourceManager.setId(resourceId);
pipResourceManager.setMachineId("machineId"); // pipResourceManager.setMachineId("machineId");
//
when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); // when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager);
//
// Act // // Act
resourceManagerService.deleteResource(resourceId); // resourceManagerService.deleteResource(resourceId);
//
// Assert // // Assert
verify(pipResourceManagerDao, times(1)).selectById(resourceId); // verify(pipResourceManagerDao, times(1)).selectById(resourceId);
verify(machineDao, times(1)).deleteById("machineId"); // verify(machineDao, times(1)).deleteById("machineId");
verify(k8SDao, never()).deleteById(anyString()); // verify(k8SDao, never()).deleteById(anyString());
verify(dockerEndpointDao, never()).deleteById(anyString()); // verify(dockerEndpointDao, never()).deleteById(anyString());
verify(cloudDao, never()).deleteById(anyString()); // verify(cloudDao, never()).deleteById(anyString());
verify(pipResourceManagerDao, times(1)).deleteById(resourceId); // verify(pipResourceManagerDao, times(1)).deleteById(resourceId);
} // }
//
@Test // @Test
void testDeleteResourceWithNoSubResources() { // void testDeleteResourceWithNoSubResources() {
// Arrange // // Arrange
String resourceId = "resourceId"; // String resourceId = "resourceId";
PipResourceManager pipResourceManager = new PipResourceManager(); // PipResourceManager pipResourceManager = new PipResourceManager();
pipResourceManager.setId(resourceId); // pipResourceManager.setId(resourceId);
//
when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); // when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager);
//
// Act // // Act
resourceManagerService.deleteResource(resourceId); // resourceManagerService.deleteResource(resourceId);
//
// Assert // // Assert
verify(pipResourceManagerDao, times(1)).selectById(resourceId); // verify(pipResourceManagerDao, times(1)).selectById(resourceId);
verify(machineDao, never()).deleteById(anyString()); // verify(machineDao, never()).deleteById(anyString());
verify(k8SDao, never()).deleteById(anyString()); // verify(k8SDao, never()).deleteById(anyString());
verify(dockerEndpointDao, never()).deleteById(anyString()); // verify(dockerEndpointDao, never()).deleteById(anyString());
verify(cloudDao, never()).deleteById(anyString()); // verify(cloudDao, never()).deleteById(anyString());
verify(pipResourceManagerDao, times(1)).deleteById(resourceId); // verify(pipResourceManagerDao, times(1)).deleteById(resourceId);
} // }
//
//
//
@Test // @Test
void testFindResourceById_ResourceExists() { // void testFindResourceById_ResourceExists() {
//
ResourceFindResp resourceById = resourceManagerService.findResourceById("1"); // ResourceFindResp resourceById = resourceManagerService.findResourceById("1");
//
assertNull(resourceById); // assertNull(resourceById);
} // }
} }

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,5 @@
package cd.casic.server; package cd.casic.server;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
import cd.casic.ci.process.properties.TargetFileUploadProperties; import cd.casic.ci.process.properties.TargetFileUploadProperties;
import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.ci.process.util.SftpUploadUtil;