本地镜像管理
This commit is contained in:
parent
e36d596bc7
commit
b4a4e0fe58
@ -1,9 +1,20 @@
|
|||||||
package cd.casic.module.execute.docker.api;
|
package cd.casic.module.execute.docker.api;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.pojo.CommonResult;
|
||||||
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.dto.DockerImageDo;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.model.DockerImage;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.vo.DockerImagePageReqVO;
|
||||||
|
import cd.casic.module.execute.docker.service.IImageService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import static cd.casic.framework.commons.pojo.CommonResult.success;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: TODO
|
* @description: TODO
|
||||||
@ -14,7 +25,26 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@Tag(name = "docker管理 - 镜像管理")
|
@Tag(name = "docker管理 - 镜像管理")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RestController
|
@RestController
|
||||||
|
@Validated
|
||||||
@RequestMapping("/api/images")
|
@RequestMapping("/api/images")
|
||||||
public class DockerImageController {
|
public class DockerImageController {
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IImageService imageService;
|
||||||
|
|
||||||
|
@PostMapping("/localUpload")
|
||||||
|
@Operation(summary = "镜像上传")
|
||||||
|
@PreAuthorize("@ss.hasPermission('docker:images:localUpload')")
|
||||||
|
public CommonResult localImageUpload(@RequestBody DockerImage dockerImage) {
|
||||||
|
return success(imageService.localImageUpload(dockerImage));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "本地镜像分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('docker:images:query')")
|
||||||
|
public CommonResult<PageResult<DockerImageDo>> getLocalImagePage(@Valid DockerImagePageReqVO pageVO) {
|
||||||
|
return success(imageService.getLocalImagePage(pageVO));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
package cd.casic.module.execute.docker.dao;
|
||||||
|
|
||||||
|
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.dto.DockerImageDo;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface DockerImageDao extends BaseMapperX<DockerImageDo> {
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package cd.casic.module.execute.docker.dataobject.convert;
|
||||||
|
|
||||||
|
import cd.casic.module.execute.docker.dataobject.dto.DockerImageDo;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.model.DockerImage;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Yuru Pu
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2025/7/23 17:16
|
||||||
|
*/
|
||||||
|
@Mapper(componentModel = "spring")
|
||||||
|
public interface DockerImageConvert {
|
||||||
|
DockerImageConvert INSTANCE = Mappers.getMapper(DockerImageConvert.class);
|
||||||
|
|
||||||
|
DockerImageDo convert(DockerImage dockerImage);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package cd.casic.module.execute.docker.dataobject.dto;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.dataobject.BaseDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地镜像
|
||||||
|
*
|
||||||
|
* @author Yuru Pu
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2025/7/23 16:22
|
||||||
|
*/
|
||||||
|
@TableName("pipeline_image")
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class DockerImageDo extends BaseDO {
|
||||||
|
|
||||||
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件大小
|
||||||
|
*/
|
||||||
|
private Integer size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件版本
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用途
|
||||||
|
*/
|
||||||
|
private String purpose;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地址路径
|
||||||
|
*/
|
||||||
|
private String path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态 0 可用
|
||||||
|
*/
|
||||||
|
private Boolean state;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package cd.casic.module.execute.docker.dataobject.model;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.dataobject.BaseDO;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地镜像
|
||||||
|
*
|
||||||
|
* @author Yuru Pu
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2025/7/23 16:22
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class DockerImage extends BaseDO {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件大小
|
||||||
|
*/
|
||||||
|
private Integer size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件版本
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用途
|
||||||
|
*/
|
||||||
|
private String purpose;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地址路径
|
||||||
|
*/
|
||||||
|
private String path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态 1 可用
|
||||||
|
*/
|
||||||
|
private Boolean state;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package cd.casic.module.execute.docker.dataobject.vo;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.pojo.PageParam;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: Paul
|
||||||
|
* @create: 2025-07-24 13:49
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class DockerImagePageReqVO extends PageParam {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
}
|
@ -1,5 +1,9 @@
|
|||||||
package cd.casic.module.execute.docker.service;
|
package cd.casic.module.execute.docker.service;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.dto.DockerImageDo;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.model.DockerImage;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.vo.DockerImagePageReqVO;
|
||||||
import com.github.dockerjava.api.command.InspectImageResponse;
|
import com.github.dockerjava.api.command.InspectImageResponse;
|
||||||
import com.github.dockerjava.api.model.Image;
|
import com.github.dockerjava.api.model.Image;
|
||||||
import jakarta.annotation.Nonnull;
|
import jakarta.annotation.Nonnull;
|
||||||
@ -102,4 +106,7 @@ public interface IImageService {
|
|||||||
*/
|
*/
|
||||||
Boolean pushImage(@Nonnull String clientId, String imageId);
|
Boolean pushImage(@Nonnull String clientId, String imageId);
|
||||||
|
|
||||||
|
int localImageUpload(DockerImage dockerImage);
|
||||||
|
|
||||||
|
PageResult<DockerImageDo> getLocalImagePage(DockerImagePageReqVO pageVO);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
package cd.casic.module.execute.docker.service.impl;
|
package cd.casic.module.execute.docker.service.impl;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
|
import cd.casic.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cd.casic.module.execute.docker.DockerClientFactory;
|
import cd.casic.module.execute.docker.DockerClientFactory;
|
||||||
|
import cd.casic.module.execute.docker.dao.DockerImageDao;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.convert.DockerImageConvert;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.dto.DockerImageDo;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.model.DockerImage;
|
||||||
|
import cd.casic.module.execute.docker.dataobject.vo.DockerImagePageReqVO;
|
||||||
import cd.casic.module.execute.docker.service.IImageService;
|
import cd.casic.module.execute.docker.service.IImageService;
|
||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
@ -11,11 +18,12 @@ import com.github.dockerjava.api.exception.NotFoundException;
|
|||||||
import com.github.dockerjava.api.model.Image;
|
import com.github.dockerjava.api.model.Image;
|
||||||
import com.github.dockerjava.api.model.PruneType;
|
import com.github.dockerjava.api.model.PruneType;
|
||||||
import jakarta.annotation.Nonnull;
|
import jakarta.annotation.Nonnull;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -35,6 +43,9 @@ public class ImageService implements IImageService {
|
|||||||
|
|
||||||
private final DockerClientFactory dockerClientFactory;
|
private final DockerClientFactory dockerClientFactory;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private DockerImageDao dockerImageDao;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Image> list(@Nonnull String clientId) {
|
public List<Image> list(@Nonnull String clientId) {
|
||||||
DockerClient dockerClient = dockerClientFactory.getdockerClient(clientId);
|
DockerClient dockerClient = dockerClientFactory.getdockerClient(clientId);
|
||||||
@ -130,4 +141,16 @@ public class ImageService implements IImageService {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public int localImageUpload(DockerImage dockerImage) {
|
||||||
|
return dockerImageDao.insert(DockerImageConvert.INSTANCE.convert(dockerImage));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<DockerImageDo> getLocalImagePage(DockerImagePageReqVO pageVO) {
|
||||||
|
LambdaQueryWrapperX<DockerImageDo> queryWrapperX = new LambdaQueryWrapperX<>();
|
||||||
|
PageResult<DockerImageDo> page = dockerImageDao.selectPage(pageVO, queryWrapperX.likeIfPresent(DockerImageDo::getName, pageVO.getName()).orderByDesc(DockerImageDo::getCreateTime));
|
||||||
|
return page;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user