我在 build.gradle 文件中设置了 2 个 gradle 任务,每个任务针对一个环境(例如 DEV 和 PROD)。
plugins {
id "com.google.cloud.tools.jib" version "2.4.0"
}
version = 0.1
group = my.company
jib {
from {
image = "openjdk:14-slim"
}
to {
image = "my-registry.some-provider.com/my-app"
tags = [version, 'latest']
}
container {
mainClass = "${group}.Application"
jvmFlags = ["-Xms${findProperty('MEMORY')?:'256'}m", '-Xdebug']
ports = ['80']
volumes = ['/data']
environment = [
'VERSION': version
'DATA_DIR': '/data',
'APPLICATION_PORT' : '80',
'DEVELOPMENT_MODE' : 'false'
]
}
}
task prodtask(type: sometask!) { }
task devtask(type: sometask2) { }
我使用 gradlew 命令在命令行中运行这些任务,
./gradlew i devtask (in DEV) and
./gradlew i prodtask (in PROD)
如何使用使用 JIB 插件构建的 docker 镜像在开发和生产环境中分别运行这两个任务?
我不太明白
jib
和 dev
/ prod
环境之间的区别,但您可以简单地添加一个 gradle env
属性,并根据该值动态选择要执行的操作,例如在 gradle kts 脚本中:
...
val env: String by project
when (env) {
"dev" -> tasks.register<Task>("sometask") {
doLast { println("hello") }
dependsOn("jib")
}
"prod" -> tasks.register<Task>("sometask2") {
doLast { println("world") }
dependsOn("jib")
}
else -> throw RuntimeException("Unknown env")
}
...