有了Spring应用程序,我尝试使用spring-boot-maven-plugin goal mvn spring-boot:build-image构建它。但是,构建从github.com下载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构建包来代替它呢?
发布于 2020-12-09 07:20:30
Paketo可以从internet下载依赖项。例如,默认情况下将从Liberica发行版下载BellSoft Liberica。如果依赖URI无法从构建环境访问,则可以使用绑定将新URI映射到给定的依赖项。
使用Spring maven-plugin(或Gradle插件)配置绑定需要Spring 2.5+。如果您使用的是旧版本,则需要升级或切换到包CLI。
=== 使用带有绑定的pack CLI配置不同的JDK下载uri ===。
这群医生告诉我们绑定目录的一般布局(稍后在pack容器中创建/platform/bindings):
/chooseYourBindingsName
├── key-name-of-our-buildpacks-binding-configuration
└── type-name-of-our-buildpacks-binding-configuration1.创建绑定目录
因此,让我们尝试创建一个完整运行的示例!为了将绑定配置交给pack CLI,我们需要首先创建一个目录
mkdir bellsoft-jdk-config && cd bellsoft-jdk-config2.创建文件类型,包含绑定键
现在,我们需要在这个目录中创建一个名为type的文件,其中包含dependency-mapping的绑定键。
echo "dependency-mapping" >> type一个新的文件type应该出现在包含字符串dependency-mapping的目录中。
3.从buildpack.toml中选择JDK版本
当我们想要更改JDK的贝尔软包下载uri时,需要决定我们确切地想使用哪个JDK版本,的-liberica的buildpack.toml给出了在构建包中提供哪些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
现在,我们应该创建另一个文件,它完全按照我们在buildpack.toml中选择的JDK版本的[[metadata.dependencies]]部分的摘要值命名。此文件必须包含下载的JDK的uri:
echo "http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz" >> 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502最后,我们的目录bellsoft-jdk-config应该遵从pack CLI绑定目录文档,看起来如下所示:
/bellsoft-jdk-config
├── 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
└── type6.为绑定和BP_JVM_VERSION使用--卷执行pack
最后,我们可以发出pack CLI命令。确保包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现在,贝尔软包将从http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz下载JDK 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-17 17:07:50
我创建绑定:
/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>此解决方案有效,但您必须使用正确的目录权限。
发布于 2021-11-10 04:34:09
我将pom.xml中的Java版本更改为17:
<properties>
<java.version>17</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>https://stackoverflow.com/questions/65212231
复制相似问题