Просмотр исходного кода

规范化 docker 的 repo:tag 字符串格式

reghao 1 день назад
Родитель
Сommit
4c0586652a

+ 17 - 2
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/service/PipelineContext.java

@@ -5,7 +5,6 @@ import cn.reghao.devops.mgr.ops.builder.model.po.AppBuilding;
 import cn.reghao.devops.mgr.ops.app.model.po.AppConfig;
 import cn.reghao.devops.mgr.ops.builder.model.LocalBuildDir;
 import cn.reghao.devops.mgr.ops.builder.tool.repo.CommitInfo;
-import cn.reghao.devops.mgr.ops.build.model.po.DockerRegistry;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
@@ -38,7 +37,7 @@ public class PipelineContext implements AutoCloseable {
     private String compileDir;
     private String dockerfile;
     private CommitInfo commitInfo;
-    private DockerRegistry dockerRegistry;
+    private String dockerRegistry;
     private String buildTargetPath;
 
     // 构建日志
@@ -77,6 +76,22 @@ public class PipelineContext implements AutoCloseable {
         return gitUrl.substring(lastIndex+1).split(".git")[0];
     }
 
+    public String getRepoTag() {
+        String repoTag = String.format("%s:%s", appId, commitInfo.getCommitId());
+        if (dockerRegistry != null) {
+            repoTag = String.format("%s:%s", dockerRegistry, repoTag);
+            repoTag = simplifyPath(repoTag);
+        }
+        return repoTag;
+    }
+
+    private String simplifyPath(String path) {
+        if (path == null) return null;
+        // 将两个及以上的斜杠替换为单个斜杠
+        // 但要小心不要误伤协议头(如 http://)
+        return path.replaceAll("(?<!:)/{2,}", "/");
+    }
+
     /**
      * 更新或创建阶段状态
      */

+ 4 - 1
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/service/PipelineContextFactory.java

@@ -26,7 +26,10 @@ public class PipelineContextFactory {
         PackerConfig packerConfig = appConfig.getPackerConfig();
         String packType = packerConfig.getType();
         if (packType.equals(PackType.docker.getName())) {
-            ctx.setDockerRegistry(packerConfig.getDockerRegistry());
+            String registry = packerConfig.getDockerRegistry().getRegistryUrl();
+            String namespace = packerConfig.getDockerRegistry().getRegistryNamespace();
+            String dockerRegistry = String.format("%s/%s", registry, namespace);
+            ctx.setDockerRegistry(dockerRegistry);
         }
 
         return ctx;

+ 0 - 1
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/tool/DockerBuild.java

@@ -79,7 +79,6 @@ public class DockerBuild {
             for (KeyValue keyValue : keyValueList) {
                 buildImageCmd.withBuildArg(keyValue.getKey(), keyValue.getValue());
             }
-
             buildImageCmd.exec(callback).awaitCompletion();
             /*dockerClient.buildImageCmd()
                     .withCpushares("512")

+ 1 - 3
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/tool/compiler/DockerBuildCompiler.java

@@ -28,10 +28,8 @@ public class DockerBuildCompiler implements CodeCompiler {
 
     @Override
     public void compile(PipelineContext ctx, CompilerConfig compilerConfig) throws Exception {
-        String registryUrl = ctx.getDockerRegistry().getRegistryUrl();
-        String repoTag = String.format("%s/%s:%s", registryUrl, ctx.getAppId(), ctx.getCommitInfo().getCommitId());
+        String repoTag = ctx.getRepoTag();
         String sourceCodeDir = ctx.getCompileDir();
-
         String dockerfileContent = ctx.getDockerfile();
         if (StringUtils.isBlank(dockerfileContent)) {
             throw new Exception("未在配置中找到 Dockerfile 内容");

+ 1 - 9
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/tool/compiler/DockerRunCompiler.java

@@ -6,7 +6,6 @@ import cn.reghao.devops.mgr.ops.build.model.po.CompilerEnv;
 import cn.reghao.devops.mgr.ops.builder.tool.DockerBuild;
 import cn.reghao.devops.mgr.ops.builder.service.PipelineContext;
 import cn.reghao.devops.mgr.ops.build.model.constant.CompileType;
-import cn.reghao.devops.mgr.ops.build.model.po.DockerRegistry;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -29,15 +28,8 @@ public class DockerRunCompiler implements CodeCompiler {
 
     @Override
     public void compile(PipelineContext ctx, CompilerConfig compilerConfig) throws Exception {
-        DockerRegistry dockerRegistry = ctx.getDockerRegistry();
-        String registryUrl = "";
-        if (dockerRegistry != null) {
-            registryUrl = ctx.getDockerRegistry().getRegistryUrl();
-        }
-
-        String repoTag = String.format("%s/%s:%s", registryUrl, ctx.getAppId(), ctx.getCommitInfo().getCommitId());
+        String repoTag = ctx.getRepoTag();
         String sourceCodeDir = ctx.getCompileDir();
-
         String dockerfileContent = ctx.getDockerfile();
         if (StringUtils.isBlank(dockerfileContent)) {
             throw new Exception("未在配置中找到 Dockerfile 内容");

+ 2 - 5
mgr/src/main/java/cn/reghao/devops/mgr/ops/builder/tool/packer/DockerPack.java

@@ -25,9 +25,7 @@ public class DockerPack implements CodePacker {
     @Override
     public void pack(PipelineContext ctx, PackerConfig packerConfig) {
         if (packerConfig.getType().equals(PackType.docker.getName())) {
-            String registryUrl = ctx.getDockerRegistry().getRegistryUrl();
-            String repoTag = String.format("%s/%s:%s", registryUrl, ctx.getAppId(), ctx.getCommitInfo().getCommitId());
-
+            String repoTag = ctx.getRepoTag();
             String sourceCodeDir = ctx.getCompileDir();
             dockerBuild.pack(ctx, sourceCodeDir, repoTag);
             ctx.setBuildTargetPath(repoTag);
@@ -36,8 +34,7 @@ public class DockerPack implements CodePacker {
 
     public void push(PipelineContext ctx, PackerConfig packerConfig) {
         if (packerConfig.getType().equals(PackType.docker.getName())) {
-            String registryUrl = ctx.getDockerRegistry().getRegistryUrl();
-            String repoTag = String.format("%s/%s:%s", registryUrl, ctx.getAppId(), ctx.getCommitInfo().getCommitId());
+            String repoTag = ctx.getRepoTag();
             dockerBuild.push(ctx, repoTag);
         }
     }