如何基于JIB插件分DEV/PROD环境执行Gradle任务并构建Docker镜像?
结合JIB插件分环境构建镜像并关联任务的方案
你可以通过创建环境专属的JIB构建任务,并让现有devtask/prodtask依赖这些JIB任务,实现分环境构建镜像并执行对应任务的需求。以下是具体修改后的build.gradle配置:
plugins { id "com.google.cloud.tools.jib" version "2.4.0" } version = 0.1 group = 'my.company' // -------------------------- // 通用JIB基础配置(所有环境共享) // -------------------------- jib { from { image = "openjdk:14-slim" } to { image = "my-registry.some-provider.com/my-app" } container { mainClass = "${group}.Application" ports = ['80'] volumes = ['/data'] // 通用环境变量,各环境可追加/覆盖 environment = [ 'VERSION': version, 'DATA_DIR': '/data', 'APPLICATION_PORT' : '80' ] } } // -------------------------- // DEV环境专属JIB构建任务 // -------------------------- task devJib(type: com.google.cloud.tools.jib.gradle.JibTask) { // 继承通用JIB配置 dependsOn jib // 覆盖DEV环境专属配置 to { // 给DEV镜像打专属标签,避免和PROD混淆 tags = [version, 'dev-latest'] } container { // DEV环境保留调试参数,可调整堆内存默认值 jvmFlags = ["-Xms${findProperty('MEMORY')?:'512'}m", '-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005'] // 追加DEV专属环境变量 environment = jib.container.environment + [ 'DEVELOPMENT_MODE' : 'true' ] } } // -------------------------- // PROD环境专属JIB构建任务 // -------------------------- task prodJib(type: com.google.cloud.tools.jib.gradle.JibTask) { // 继承通用JIB配置 dependsOn jib // 覆盖PROD环境专属配置 to { // PROD镜像使用正式标签 tags = [version, 'latest'] } container { // PROD环境移除调试参数,加大默认堆内存 jvmFlags = ["-Xms${findProperty('MEMORY')?:'1024'}m"] // 追加PROD专属环境变量 environment = jib.container.environment + [ 'DEVELOPMENT_MODE' : 'false' ] } } // -------------------------- // 关联原有环境任务与JIB构建任务 // -------------------------- task devtask(type: sometask2) { // 执行devtask前先构建DEV镜像 dependsOn devJib // 保留你原有的devtask逻辑 } task prodtask(type: sometask!) { // 执行prodtask前先构建PROD镜像 dependsOn prodJib // 保留你原有的prodtask逻辑 }
执行方式
- 构建DEV镜像并执行devtask:
./gradlew devtask - 构建PROD镜像并执行prodtask:
./gradlew prodtask
核心逻辑说明
- 通用配置抽离:把所有环境共享的JIB配置(如基础镜像、镜像仓库地址、容器端口等)放在根
jib块中,避免重复代码。 - 环境专属JIB任务:创建
devJib和prodJib两个自定义JIB任务,继承通用配置后,分别覆盖各环境的专属配置(镜像标签、JVM参数、环境变量等)。 - 任务依赖关联:让原有
devtask/prodtask依赖对应的JIB构建任务,确保执行环境任务时,自动完成对应环境的镜像构建。
内容的提问来源于stack exchange,提问作者user923499
相关产品推荐
相关产品推荐

