You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BootBuildImage任务将镜像发布至多个镜像仓库?

解决BootBuildImage发布到多个镜像仓库的正确方式

直接通过tasks.named引用不存在的任务是错误的,正确做法是创建多个独立的BootBuildImage类型任务,每个任务单独配置镜像仓库、认证信息等属性,避免属性复用冲突。

以下是修正后的Gradle配置:

// 配置默认的bootBuildImage任务(发布到第一个仓库)
tasks.named<BootBuildImage>("bootBuildImage") {
    imageName = "<my-custom-registry>/<image-name>:<tag>"
    publish = true
    // 第一个仓库的认证配置(按需添加)
    docker {
        publishRegistry {
            username = System.getenv("FIRST_REGISTRY_USERNAME")
            password = System.getenv("FIRST_REGISTRY_PASSWORD")
        }
    }
}

// 创建第二个独立的发布任务(发布到第二个仓库)
tasks.register<BootBuildImage>("buildAndPublishToSecondRegistry") {
    group = "application"
    description = "Build and publish the image to the second custom registry"
    
    imageName = "<my-other-custom-registry>/<image-name>:<tag>"
    publish = true
    
    // 第二个仓库的认证配置
    docker {
        publishRegistry {
            username = System.getenv("SECOND_REGISTRY_USERNAME")
            password = System.getenv("SECOND_REGISTRY_PASSWORD")
        }
    }
    
    // 复用默认任务的构建配置(如构建器、buildpacks等,减少重复代码)
    val defaultTask = tasks.named<BootBuildImage>("bootBuildImage").get()
    builder = defaultTask.builder
    buildpacks = defaultTask.buildpacks
    environment = defaultTask.environment
    // 其他需要复用的属性可按需添加
}

关键说明:

  • 使用tasks.register创建新的BootBuildImage任务,tasks.named仅用于引用已存在的内置任务。
  • 每个任务独立配置imageName和认证信息,避免属性相互覆盖导致的初始化问题。
  • 若需复用默认任务的构建规则(比如构建器、环境变量),可通过获取默认任务的属性直接赋值,减少重复配置。
  • 执行时,分别运行./gradlew bootBuildImage和./gradlew buildAndPublishToSecondRegistry即可发布到对应仓库。

内容的提问来源于stack exchange,提问作者Eddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:32:05