如何使用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
相关产品推荐
相关产品推荐

