2

拥有一个 Spring Boot 应用程序,我尝试使用spring-boot-maven-plugin目标构建它mvn spring-boot:build-image。但是构建无法下载bellsoft-jre11.0.9.1+1-linux-amd64.tar.gzfrom github.com,因为我无法从构建管道访问它:

...
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 https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
unable to invoke layer creator
unable to get dependency jdk
unable to download https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
unable to request https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
ERROR: failed to build: exit status 1

有没有办法可以将它下载bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz到我的构建管道可访问的位置并配置 bellsoft-liberica buildpack 来使用它?

4

5 回答 5

9

根据文档

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.创建绑定目录

因此,让我们尝试创建一个完全运行的示例!为了将绑定配置移交给packCLI,我们需要先创建一个目录

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

最后我们可以发出我们的packCLI 命令。确保您的系统上安装了 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 
...
于 2020-12-09T07:20:30.617 回答
1

我创建绑定:

/bindings/bellsoft-jdk-config
├── 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
├── a3092627b082cb3cdbbe4b255d35687126aa604e6b613dcda33be9f7e1277162
├── be27df8838a6d069a2212de5f46da4e39f33f087f2e77c8a725d0f7ec8b5273e
├── d9ff2d84528a2154ff669b85e6dbdee7f244194dcc64e0a8a1bedc470b3bcf56
└── type

然后创建一个 Dockerfile 来复制这些绑定并在之前的基础上构建一个新平台:

FROM paketobuildpacks/builder:0.0.464-base-platform-api-0.3
 
COPY bindings /platform/bindings
 
CMD ["/bin/bash"]
docker build -t your-repo-url/java-builder-test:1 .
docker push your-repo-url/java-builder-test:1

然后我配置了spring插件来使用这个平台:

<configuration>
    <imageBuilder>your-repo-url/java-builder-test:1</imageBuilder>
    <layers>
        <enabled>true</enabled>
    </layers>
    <image>
        <name>your-repo-url/${project.artifactId}:${project.version}</name>
    </image>
</configuration>

此解决方法有效,但您必须使用正确的目录权限。

于 2020-12-17T17:07:50.260 回答
0

我将 pom.xml 文件中的 java 版本更改为 17 并且它有效!

于 2022-02-04T05:42:21.100 回答
0

我将 pom.xml 中的 Java 版本更改为 17:

<properties>
    <java.version>17</java.version>
    <spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
于 2021-11-10T04:34:09.850 回答
0

更改 pom.xml 中的 Java 版本,它将起作用。我已将其更改为 java 17。它对我有用。

于 2022-02-19T17:50:28.840 回答