Cloud Native Buildpacks/Paketo с загрузкой Java/Spring: как настроить различные URI загрузки JDK (например, отсутствие доступа к github.com)
Имея приложение Spring Boot, я попытался создать его с помощью
spring-boot-maven-plugin
Цель
mvn spring-boot:build-image
. Но сборка не загружает
bellsoft-jre11.0.9.1+1-linux-amd64.tar.gz
из
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 для его использования?
7 ответов
Пакеты сборки Paketo могут загружать зависимости из Интернета. Например, Java Buildpack по умолчанию загрузит BellSoft Liberica JRE из выпусков Liberica github. Если URI зависимости недоступен из среды сборки, привязку можно использовать для сопоставления нового URI данной зависимости.
На данный момент настройка привязок невозможна с помощью плагина spring-boot-maven-plugin (или плагина Gradle) . Поэтому нам нужно перейти на пакетный CLI .
=== Используйте пакет CLI с привязками для настройки другого uri загрузки JDK ===
Документы пакета рассказывают нам об общем макете каталога привязки (
/platform/bindings
позже создается внутри контейнера сборки пакета):
/chooseYourBindingsName
├── key-name-of-our-buildpacks-binding-configuration
└── type-name-of-our-buildpacks-binding-configuration
1. Создайте каталог привязок
Итак, давайте попробуем создать полностью работающий пример! Чтобы передать конфигурацию привязки в CLI, нам нужно сначала создать каталог :
mkdir bellsoft-jdk-config && cd bellsoft-jdk-config
2. Создайте тип файла, содержащий ключ привязки.
Теперь нам нужно создать внутри этого каталога файл, содержащий ключ привязки для типа привязки bellsoft-liberica :
echo "dependency-mapping" >> type
Новый файл
type
должен присутствовать в каталоге, содержащем строку
dependency-mapping
.
3. Выберите версию JDK из buildpack.toml
Поскольку мы хотим изменить uri загрузки JDK в Bellsoft-liberica, нам нужно решить, какую версию JDK мы хотим использовать. Buildpack.toml пакета сборки bellsoft-liberica дает обзор того, какие версии 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.
Определившись с версией, нам нужно загрузить JDK из места, указанного внутри
uri
в место, к которому у нас есть доступ позже в нашей среде сборки (поскольку у нас нет доступа к github.com). Предположим, у нас есть JDK, загруженный и доступный по адресу.
5. Создайте файл с именем sha256, содержащий URI JDK.
Теперь мы должны создать еще один файл, названный точно в соответствии с
sha256
дайджеста значение из
[[metadata.dependencies]]
раздел версии JDK, которую мы выбрали в . Этот файл должен содержать uri нашего загруженного JDK:
echo "http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz" >> 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
В итоге наш каталог
bellsoft-jdk-config
должен соответствовать пакету документов каталога привязок CLI и выглядит примерно так:
/bellsoft-jdk-config
├── 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
└── type
6. Выполните пакет командной строки с параметром --volume для привязки и BP_JVM_VERSION
Наконец, мы можем выпустить наш
pack
Команда CLI. Убедитесь, что пакет CLI установлен в вашей системе . Также не забудьте указать точный номер версии JDK, используя
--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 загрузит 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
...
@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) и отправке на удаленное или локальное репо. когда я строю это на CI и нажимаю с CI на удаленное репо, это не работает ..
Вы пробовали такое решение?
Это помогает мне. Вы можете попробовать и проверить. Я изменил свою версию Java в pom.xml на 17.
<properties>
<java.version>17</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
Измените версию Java в pom.xml, и все заработает. я изменил его на java 17. и это сработало для меня.
@Hari Rao
менять
--volume bellsoft-jdk-config: / платформа / привязки / bellsoft-jdk-config
к
--volume bellsoft-jdk-config: / platform / bindings
потому что ваш том внутри построителя имеет ненужный дополнительный каталог / платформа / привязки / bellsoft-jdk-config / bellsoft-jdk-config
@jonashackt: - Я пытался сменить JRE. Я хочу использовать открытую JRE 15, поскольку у меня проблема со шрифтами по умолчанию - https://github.com/AdoptOpenJDK/openjdk15-binaries/releases/download/jdk15u-2021-01-22-02-31/OpenJDK15U-jre_x64_linux_hotspot_2021-01-22-02-31.tar.gz
Вышеупомянутый uri находится в файле sha
Выполнил следующую команду
c:\Mine>pack build --clear-cache springbootapp-image --path myspringboot-app --volume bellsoft-jdk-config: / platform / bindings / bellsoft-jdk-config --env BP_JVM_VERSION=15 --builder paketobuildpacks / builder: база
Как бы то ни было, он все еще загружает BellSoft Liberica JRE 15.0.2 ..
Означает ли это, что я не могу перейти на Open JRE? Пожалуйста, поделитесь своими мыслями.
Я изменил версию java в файле pom.xml на 17, и это сработало!