Jelajahi Sumber

将 web 模块中 docker 相关的接口和实现放到 web.devops.docker 包

reghao 5 bulan lalu
induk
melakukan
659e961ddf

+ 1 - 1
web/src/main/java/cn/reghao/bnt/web/devops/app/service/bd/impl/DeployAppImpl.java

@@ -14,7 +14,7 @@ import cn.reghao.bnt.web.devops.app.model.po.log.BuildLog;
 import cn.reghao.bnt.web.devops.app.service.AppDeployService;
 import cn.reghao.bnt.web.devops.app.service.bd.DeployApp;
 import cn.reghao.bnt.web.devops.app.service.bd.task.OssDeployTask;
-import cn.reghao.bnt.web.devops.build.model.po.DockerRegistry;
+import cn.reghao.bnt.web.devops.docker.model.po.DockerRegistry;
 import cn.reghao.bnt.web.devops.machine.service.MachineQuery;
 import cn.reghao.bnt.web.ws.WsSender;
 import cn.reghao.jutil.jdk.event.message.EventMessage;

+ 1 - 1
web/src/main/java/cn/reghao/bnt/web/devops/build/controller/PackerController.java

@@ -2,7 +2,7 @@ package cn.reghao.bnt.web.devops.build.controller;
 
 import cn.reghao.bnt.common.msg.constant.PackType;
 import cn.reghao.bnt.web.util.SelectOption;
-import cn.reghao.bnt.web.devops.build.db.repository.DockerRegistryRepository;
+import cn.reghao.bnt.web.devops.docker.db.repository.DockerRegistryRepository;
 import cn.reghao.bnt.web.devops.build.db.repository.PackerConfigRepository;
 import cn.reghao.bnt.web.devops.build.model.po.PackerConfig;
 import cn.reghao.bnt.web.devops.build.service.PackerConfigService;

+ 1 - 1
web/src/main/java/cn/reghao/bnt/web/devops/build/model/po/PackerConfig.java

@@ -4,6 +4,7 @@ import cn.reghao.bnt.common.docker.model.DockerAuth;
 import cn.reghao.bnt.common.msg.constant.PackType;
 import cn.reghao.bnt.web.devops.build.model.provider.PackerConfigGroupSequenceProvider;
 import cn.reghao.bnt.web.devops.builder.model.PackerDto;
+import cn.reghao.bnt.web.devops.docker.model.po.DockerRegistry;
 import cn.reghao.bnt.web.util.BaseEntity;
 import cn.reghao.jutil.jdk.web.validator.ValidEnum;
 import lombok.Getter;
@@ -18,7 +19,6 @@ import jakarta.persistence.OneToOne;
 import jakarta.persistence.Table;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Pattern;
 
 /**
  * 打包方式配置

+ 0 - 13
web/src/main/java/cn/reghao/bnt/web/devops/build/service/DockerRegistryService.java

@@ -1,13 +0,0 @@
-package cn.reghao.bnt.web.devops.build.service;
-
-import cn.reghao.bnt.common.docker.model.DockerAuth;
-import cn.reghao.jutil.jdk.web.result.Result;
-
-/**
- * @author reghao
- * @date 2024-07-26 19:16:57
- */
-public interface DockerRegistryService {
-    void addOrUpdate(DockerAuth dockerAuth);
-    Result delete(int id);
-}

+ 1 - 1
web/src/main/java/cn/reghao/bnt/web/devops/build/service/impl/PackerConfigServiceImpl.java

@@ -3,7 +3,7 @@ package cn.reghao.bnt.web.devops.build.service.impl;
 import cn.reghao.bnt.common.msg.constant.PackType;
 import cn.reghao.bnt.web.devops.app.db.query.AppBuildQuery;
 import cn.reghao.bnt.web.devops.build.db.repository.PackerConfigRepository;
-import cn.reghao.bnt.web.devops.build.model.po.DockerRegistry;
+import cn.reghao.bnt.web.devops.docker.model.po.DockerRegistry;
 import cn.reghao.bnt.web.devops.build.model.po.PackerConfig;
 import cn.reghao.bnt.web.devops.build.service.PackerConfigService;
 import cn.reghao.bnt.web.devops.builder.chain.BuildTools;

+ 35 - 0
web/src/main/java/cn/reghao/bnt/web/devops/docker/controller/DockerController.java

@@ -0,0 +1,35 @@
+package cn.reghao.bnt.web.devops.docker.controller;
+
+import cn.reghao.bnt.web.devops.docker.model.vo.DockerfileImage;
+import cn.reghao.bnt.web.devops.docker.service.DockerImageService;
+import cn.reghao.jutil.web.WebResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.MediaType;
+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;
+
+/**
+ * @author reghao
+ * @date 2025-12-19 14:37:28
+ */
+@Tag(name = "机器节点页面和接口")
+@RestController
+@RequestMapping("/api/devops/docker")
+public class DockerController {
+    private final DockerImageService dockerImageService;
+
+    public DockerController(DockerImageService dockerImageService) {
+        this.dockerImageService = dockerImageService;
+    }
+
+    @Operation(summary = "Dockerfile 中使用的镜像", description = "N")
+    @GetMapping(value = "/image", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String getDockerfileImage() {
+        List<DockerfileImage> list = dockerImageService.getDockerfileImages();
+        return WebResult.success(list);
+    }
+}

+ 6 - 6
web/src/main/java/cn/reghao/bnt/web/devops/build/controller/DockerRegistryController.java → web/src/main/java/cn/reghao/bnt/web/devops/docker/controller/DockerRegistryController.java

@@ -1,9 +1,9 @@
-package cn.reghao.bnt.web.devops.build.controller;
+package cn.reghao.bnt.web.devops.docker.controller;
 
 import cn.reghao.bnt.common.docker.model.DockerAuth;
-import cn.reghao.bnt.web.devops.build.db.repository.DockerRegistryRepository;
-import cn.reghao.bnt.web.devops.build.model.po.DockerRegistry;
-import cn.reghao.bnt.web.devops.build.service.DockerRegistryService;
+import cn.reghao.bnt.web.devops.docker.db.repository.DockerRegistryRepository;
+import cn.reghao.bnt.web.devops.docker.model.po.DockerRegistry;
+import cn.reghao.bnt.web.devops.docker.service.DockerRegistryService;
 import cn.reghao.jutil.jdk.web.db.PageList;
 import cn.reghao.jutil.web.WebResult;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -20,9 +20,9 @@ import java.util.List;
  * @author reghao
  * @date 2024-07-26 17:36:37
  */
-@Tag(name = "DockerRegistry 配置页面")
+@Tag(name = "Docker 仓库接口")
 @RestController
-@RequestMapping("/api/devops/build/registry")
+@RequestMapping("/api/devops/docker/registry")
 public class DockerRegistryController {
     private final DockerRegistryRepository dockerRegistryRepository;
     private final DockerRegistryService dockerRegistryService;

+ 2 - 2
web/src/main/java/cn/reghao/bnt/web/devops/build/db/repository/DockerRegistryRepository.java → web/src/main/java/cn/reghao/bnt/web/devops/docker/db/repository/DockerRegistryRepository.java

@@ -1,6 +1,6 @@
-package cn.reghao.bnt.web.devops.build.db.repository;
+package cn.reghao.bnt.web.devops.docker.db.repository;
 
-import cn.reghao.bnt.web.devops.build.model.po.DockerRegistry;
+import cn.reghao.bnt.web.devops.docker.model.po.DockerRegistry;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 /**

+ 1 - 1
web/src/main/java/cn/reghao/bnt/web/devops/build/model/po/DockerRegistry.java → web/src/main/java/cn/reghao/bnt/web/devops/docker/model/po/DockerRegistry.java

@@ -1,4 +1,4 @@
-package cn.reghao.bnt.web.devops.build.model.po;
+package cn.reghao.bnt.web.devops.docker.model.po;
 
 import cn.reghao.bnt.common.docker.model.DockerAuth;
 import cn.reghao.bnt.web.util.BaseEntity;

+ 24 - 0
web/src/main/java/cn/reghao/bnt/web/devops/docker/model/vo/DockerfileImage.java

@@ -0,0 +1,24 @@
+package cn.reghao.bnt.web.devops.docker.model.vo;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2025-12-19 14:43:07
+ */
+@NoArgsConstructor
+@Getter
+public class DockerfileImage {
+    private String repoTag;
+    private List<String> appList;
+    private int totalUsed;
+
+    public DockerfileImage(String repoTag, List<String> appList) {
+        this.repoTag = repoTag;
+        this.appList = appList;
+        this.totalUsed = appList.size();
+    }
+}

+ 45 - 0
web/src/main/java/cn/reghao/bnt/web/devops/docker/service/DockerImageService.java

@@ -0,0 +1,45 @@
+package cn.reghao.bnt.web.devops.docker.service;
+
+import cn.reghao.bnt.common.msg.constant.PackType;
+import cn.reghao.bnt.web.devops.app.db.repository.config.AppConfigRepository;
+import cn.reghao.bnt.web.devops.docker.model.vo.DockerfileImage;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * @author reghao
+ * @date 2025-12-19 14:39:33
+ */
+@Service
+public class DockerImageService {
+    private final AppConfigRepository configRepository;
+
+    public DockerImageService(AppConfigRepository configRepository) {
+        this.configRepository = configRepository;
+    }
+
+    public List<DockerfileImage> getDockerfileImages() {
+        Map<String, List<String>> map = new HashMap<>();
+        configRepository.findAll().stream()
+                .filter(appConfig -> appConfig.getPackerConfig().getType().equals(PackType.docker.getName()))
+                .forEach(appConfig -> {
+                    String dockerfile = appConfig.getDockerfile();
+                    String[] lines = dockerfile.split(System.lineSeparator());
+                    for (String line : lines) {
+                        if (line.toLowerCase(Locale.ROOT).startsWith("from")) {
+                            String[] arr = line.split(" ");
+                            String repoTag = arr[1].replace("\r", "");
+                            String appId = appConfig.getAppId();
+                            map.computeIfAbsent(repoTag, k -> new ArrayList<>()).add(appId);
+                        }
+                    }
+                });
+
+        List<DockerfileImage> list = new ArrayList<>();
+        map.forEach((key, value) -> {
+            list.add(new DockerfileImage(key, value));
+        });
+        return list;
+    }
+}

+ 5 - 8
web/src/main/java/cn/reghao/bnt/web/devops/build/service/impl/DockerRegistryServiceImpl.java → web/src/main/java/cn/reghao/bnt/web/devops/docker/service/DockerRegistryService.java

@@ -1,10 +1,9 @@
-package cn.reghao.bnt.web.devops.build.service.impl;
+package cn.reghao.bnt.web.devops.docker.service;
 
 import cn.reghao.bnt.common.docker.DockerImpl;
 import cn.reghao.bnt.common.docker.model.DockerAuth;
-import cn.reghao.bnt.web.devops.build.db.repository.DockerRegistryRepository;
-import cn.reghao.bnt.web.devops.build.model.po.DockerRegistry;
-import cn.reghao.bnt.web.devops.build.service.DockerRegistryService;
+import cn.reghao.bnt.web.devops.docker.db.repository.DockerRegistryRepository;
+import cn.reghao.bnt.web.devops.docker.model.po.DockerRegistry;
 import cn.reghao.jutil.jdk.web.result.Result;
 import cn.reghao.jutil.jdk.web.result.ResultStatus;
 import org.springframework.stereotype.Service;
@@ -14,14 +13,13 @@ import org.springframework.stereotype.Service;
  * @date 2024-07-26 19:16:57
  */
 @Service
-public class DockerRegistryServiceImpl implements DockerRegistryService {
+public class DockerRegistryService {
     private final DockerRegistryRepository dockerAuthRepository;
 
-    public DockerRegistryServiceImpl(DockerRegistryRepository dockerAuthRepository) {
+    public DockerRegistryService(DockerRegistryRepository dockerAuthRepository) {
         this.dockerAuthRepository = dockerAuthRepository;
     }
 
-    @Override
     public void addOrUpdate(DockerAuth dockerAuth) {
         DockerImpl docker = new DockerImpl(dockerAuth);
         docker.auth();
@@ -38,7 +36,6 @@ public class DockerRegistryServiceImpl implements DockerRegistryService {
         dockerAuthRepository.save(dockerRegistry);
     }
 
-    @Override
     public Result delete(int id) {
         dockerAuthRepository.deleteById(id);
         return Result.result(ResultStatus.SUCCESS);