我使用Jib为Java应用程序创建了一个基本映像,我想使用Jib对其进行扩展。(Java应用程序通过从类路径加载额外的Jar来提供可扩展性(
在扩展gradle项目中,我这样做了:
jib {
....
container {
entrypoint = 'INHERIT'
}
...
}
它允许我重用在基本映像中添加的入口点和args属性,但我也想扩展/重用基本类路径文件。由于Jib在扩展gradle项目中创建/app/Jib类路径文件,所以基本层/app/jibclasspath文件不可见(我认为(。为了解决这个问题,我在扩展容器配置块中添加了这个。
extraClasspath = ['/app/libs/*']
在Jib中有没有一种惯用的方法来实现这一点?我想的一个选项是在基础和扩展项目中指定唯一的类路径文件在Java命令行中这样使用它们:java-cp@/app/jib-BASE-classpath文件@/app/gib-EXTENDED-classpath文件,但我找不到指定类路径文件的选项。推荐的方法是什么?感谢
不是一个完整的解决方案,但它展示了如何从子映像构建中完全删除jvm args层。
//build.gradle.kts
buildscript {
dependencies {
classpath("com.google.cloud.tools:jib-layer-filter-extension-gradle:0.1.0")
}
}
...
jib {
...
pluginExtensions {
pluginExtension {
implementation = "com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension"
configuration (Action<com.google.cloud.tools.jib.gradle.extension.layerfilter.Configuration> {
filters { filter { glob ="**/jib-*-file" } }
})
}
}
}
这会过滤掉在给定悬臂构建的任何给定层中添加的文件。如果像这种情况一样过滤掉一个层中的所有文件,则该层永远不会添加到图像中。
遗憾的是,这并不能让你在基本图像中看到java-classpath-file
的内容,你需要能够扩展它
参考文献:
- https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin#jib-扩展
- https://github.com/GoogleContainerTools/jib-extensions/tree/master/first-party/jib-layer-filter-extension-gradle
- https://github.com/GoogleContainerTools/jib-extensions