使用Spring Boot <2.3的云原生构建包

问题描述

Spring Boot 2.3引入了对使用Spring Boot maven / gradle插件构建优化的Docker映像的支持spring-boot:build-image目标做了很多事情:

  • 创建图层索引
  • 调用Paketo buildpack
  • 构建OCI映像

是否可以使用较旧的Spring Boot版本为模块复制这些步骤?更好的是,这些步骤可以直接集成到Maven / Gradle构建中吗?

解决方法

作为分层jar功能(包括layers.idx文件生成和对Cloud Native Buildpacks / Paketo.io的spring-boot-maven-plugin支持)was introduced in Spring Boot 2.3我会说,您不能真正使用标准工具将其降级。

但我想您可以尝试自己生成layers.idx文件-甚至选择一个默认文件,因为您的应用布局可能毕竟不会发生太大变化。一个示例是(不使用SNAPSHOT依赖关系):

- "dependencies":
  - "BOOT-INF/lib/"
- "spring-boot-loader":
  - "org/"
- "snapshot-dependencies":
- "application":
  - "BOOT-INF/classes/"
  - "BOOT-INF/classpath.idx"
  - "BOOT-INF/layers.idx"
  - "META-INF/"

将此文件放置在适当的位置(意味着将其放置在target文件夹中(例如,您可以使用一个简单的Maven插件将其自动化),pack CLI应该可以将其拾取。因此,install pack CLI并运行Paketo构建,而无需像这样自己使用spring-boot-maven-plugin

pack build yourAppNameHere --path . --builder paketobuildpacks/builder:base

我自己并没有真正尝试过这种方法-如果目录结构在旧版Spring Boot版本中有很大不同,也许您会遇到问题。但我希望听到一些反馈!