根据文档:
Paketo Buildpacks 可以从 Internet 下载依赖项。例如,Java Buildpack 默认会从 Liberica github 版本下载 BellSoft Liberica JRE。如果从构建环境中无法访问依赖项 URI,则可以使用绑定将新 URI 映射到给定的依赖项。
使用 spring-boot-maven-plugin(或 Gradle 插件)配置绑定需要 Spring Boot 2.5+。如果您使用的是旧版本,则需要升级或切换到pack CLI。
===使用带有绑定的 pack CLI 来配置不同的 JDK 下载 uri ===
包文档告诉我们绑定目录的一般布局(/platform/bindings
稍后在包构建容器中创建):
/chooseYourBindingsName
├── key-name-of-our-buildpacks-binding-configuration
└── type-name-of-our-buildpacks-binding-configuration
1.创建绑定目录
因此,让我们尝试创建一个完全运行的示例!为了将绑定配置移交给pack
CLI,我们需要先创建一个目录:
mkdir bellsoft-jdk-config && cd bellsoft-jdk-config
2.创建文件类型,包含绑定键
type
现在我们需要在此目录中创建一个名为的文件,其中包含bellsoft-liberica 绑定类型dependency-mapping
的绑定密钥:
echo "dependency-mapping" >> type
一个新文件type
应该存在于包含字符串的目录中dependency-mapping
。
3.从buildpack.toml中选择JDK版本
由于我们要更改 JDK 的 bellsoft-liberica 下载 uri,因此我们需要确定要使用的 JDK 版本。bellsoft-liberica buildpack 的buildpack.toml概述了 buildpack 中可用的 JRE/JDK 版本。对于这里的这个例子,我使用了最新的 JDK 版本11
,它是buildpack.toml
这样配置的:
...
[[metadata.dependencies]]
id = "jdk"
name = "BellSoft Liberica JDK"
version = "11.0.9"
uri = "https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz"
sha256 = "786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502"
stacks = [ "io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.cflinuxfs3" ]
...
4.下载JDK
确定版本后,我们需要从uri
字段内提供的位置将 JDK 下载到我们稍后在构建环境中可以访问的位置(因为我们无权访问 github.com)。假设,我们已经下载了 JDK 并在http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
.
5. 创建名为 sha256 的文件,包含 JDK uri
现在我们应该根据我们在buildpack.toml中选择的 JDK 版本部分的摘要值创建另一个文件,该文件完全命名为sha256
。此文件必须包含我们下载的 JDK 的 uri:[[metadata.dependencies]]
echo "http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz" >> 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
最后,我们的目录bellsoft-jdk-config
应该符合pack CLI bindings directory docs,看起来像这样:
/bellsoft-jdk-config
├── 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
└── type
6. 使用--volume for binding & BP_JVM_VERSION 执行pack CLI
最后我们可以发出我们的pack
CLI 命令。确保您的系统上安装了 pack CLI。还要确保使用--env BP_JVM_VERSION=exactJDKversionNumberHere
环境变量配置提供准确的 JDK 版本号,它与您下载的 JDK 版本和buildpack.toml中的部分相匹配:
pack build your-application-name-here \
--path . \
--volume $(pwd)/bellsoft-jdk-config:/platform/bindings/bellsoft-jdk-config \
--env BP_JVM_VERSION=11.0.9 \
--builder paketobuildpacks/builder:base
现在 bellsoft-liberica buildpack 将从以下位置下载 JDK tar.gz http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
:
...
Paketo BellSoft Liberica Buildpack 5.2.1
https://github.com/paketo-buildpacks/bellsoft-liberica
Build Configuration:
$BP_JVM_VERSION 11.0.9 the Java version
Launch Configuration:
$BPL_JVM_HEAD_ROOM 0 the headroom in memory calculation
$BPL_JVM_LOADED_CLASS_COUNT 35% of classes the number of loaded classes in memory calculation
$BPL_JVM_THREAD_COUNT 250 the number of threads in memory calculation
$JAVA_TOOL_OPTIONS the JVM launch flags
BellSoft Liberica JDK 11.0.9: Contributing to layer
Downloading from http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
...