使用java/spring boot的云原生buildpacks/paketo:如何配置不同的jdk下载uri(例如,不能访问github.com)

vm0i2vca  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(1156)

有一个SpringBoot应用程序,我试着用 spring-boot-maven-plugin 目标 mvn spring-boot:build-image . 但是这个版本无法下载 bellsoft-jre11.0.9.1+1-linux-amd64.tar.gzgithub.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配置为使用它?

w1jd8yoj

w1jd8yoj1#

根据文件:
paketo BuildPack可以从internet下载依赖项。例如,默认情况下,javabuildpack将从libericagithub版本下载bellsoft libericajre。如果生成环境无法访问依赖项uri,则可以使用绑定将新uriMap到给定的依赖项。
目前,使用springbootmaven插件(或gradle插件)配置绑定是不可能的。因此,我们需要切换到packcli。
===使用带有绑定的pack cli来配置不同的jdk下载uri===
pack文档告诉我们绑定目录的总体布局( /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版本
当我们想要更改bellsoft liberica的jdk下载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.单击红色按钮
决定了版本之后,我们需要从 uri 字段指定我们稍后在构建环境中可以访问的位置(因为我们不能访问github.com)。假设我们已经下载了jdk,并且可以在 http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz .
5.创建名为sha256的文件,其中包含jdkuri
现在我们应该根据 sha256 数据的摘要值 [[metadata.dependencies]] 我们在buildpack.toml中选择的jdk版本的一部分。此文件必须包含下载的jdk的uri:

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\u jvm\u version执行pack cli
最后我们可以发布 pack cli命令。确保系统上安装了pack cli。还要确保使用 --env BP_JVM_VERSION=exactJDKversionNumberHere 环境变量配置,它与下载的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 
...
bksxznpy

bksxznpy2#

@jonashackt我有一个解决这个问题的方法,它可以工作
我创建绑定

/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>

当在本地计算机(windows)上构建平台并推送到远程或本地repo时,这种解决方法是有效的。当我在ci上构建这个并从ci推送到远程repo时,它不起作用。。
你试过这样的解决办法吗?

相关问题