生成Spring Webflux优化的OCI映像的任何构建包吗?



我找不到适合Spring Webflux应用程序的buildpack构建器。例如,Paketo几乎没有自定义空间,并且开箱即用,包括典型Webflux应用程序(例如apache-tomcat(不需要的构建包。是否有任何为 webflux/jvm-reactive 应用程序量身定制的构建包?

看起来你不需要为Spring Webflux做任何具体的事情,与Java相关的CNB只会做正确的事情。

我拿了一个使用 Spring 初始值设定项创建的示例应用程序(刚刚添加了 Webflux 启动器(并针对它运行了pack build(如果您运行./mvnw spring-boot:build-image,您应该得到非常相似的输出(。

这给了我以下输出:

===> DETECTING
[detector] 6 of 17 buildpacks participating
[detector] paketo-buildpacks/bellsoft-liberica 3.2.0
[detector] paketo-buildpacks/maven             3.1.0
[detector] paketo-buildpacks/executable-jar    3.1.0
[detector] paketo-buildpacks/apache-tomcat     2.2.0
[detector] paketo-buildpacks/dist-zip          2.2.0
[detector] paketo-buildpacks/spring-boot       3.2.0

乍一看,这似乎很奇怪。为什么雄猫在那里?看看Tomcat CNB,这是意料之中的。Tomcat CNB 总是会返回成功的检测。

请注意pass如何硬编码为 true。

result := libcnb.DetectResult{
Pass: true,
Plans: []libcnb.BuildPlan{
{
Requires: []libcnb.BuildPlanRequire{
{Name: "jre", Metadata: map[string]interface{}{"launch": true}},
{Name: "jvm-application"},
},
},
},
}

这样做的原因是因为在构建时,如果没有WEB-INF目录,Tomcat CNB 将立即退出(no-op(,而对于 Spring WebFlux 应用程序,则不会有。

file := filepath.Join(context.Application.Path, "WEB-INF")
if _, err := os.Stat(file); err != nil && !os.IsNotExist(err) {
return libcnb.BuildResult{}, fmt.Errorf("unable to stat file %sn%w", file, err)
} else if os.IsNotExist(err) {
return libcnb.BuildResult{}, nil
}

您可以通过查看pack build的完整输出并查找是否存在Paketo Apache Tomcat Buildpack x.x.x(其中 x.x.x 是版本号(来确认这一点。如果Tomcat CNB正在运行并执行任何工作,您将看到该行输出。

paketo-buildpack/dist-zip CNB的工作方式相同,它只是在寻找<APPLICATION_ROOT>/*/bin/*存在。

因此,总而言之,生成的图像应特定于您的应用程序,并且不应包含不必要的内容。如果您运行的是Spring WebFlux,则不应将Tomcat安装到映像中。此外,您还可以获得使用云原生构建包提供的所有优化。

相关内容

最新更新