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

如何基于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
    

核心逻辑说明

  1. 通用配置抽离:把所有环境共享的JIB配置(如基础镜像、镜像仓库地址、容器端口等)放在根jib块中,避免重复代码。
  2. 环境专属JIB任务:创建devJib和prodJib两个自定义JIB任务,继承通用配置后,分别覆盖各环境的专属配置(镜像标签、JVM参数、环境变量等)。
  3. 任务依赖关联:让原有devtask/prodtask依赖对应的JIB构建任务,确保执行环境任务时,自动完成对应环境的镜像构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:40:34