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, и это сработало!

Другие вопросы по тегам