Java-buildpack: 在 PCF 微服务中使用 Azul Zulu JDK 时出错

创建于 2021-06-09  ·  21评论  ·  资料来源: cloudfoundry/java-buildpack

我需要删除帖子

question

最有用的评论

@ajay-dbs 如果是离线环境,需要自己打包buildpack。 由于重新分发软件的要求,其他人为您做这件事需要法律许可。 更不用说分发可信软件的安全方面了。 最简单的方法是自己打包 buildpack。

过程记录在此处。 您确实需要从可以访问 Internet 的计算机进行打包,因为它需要下载依赖项,但是,这只是几个命令,并且在相当快的 Internet 连接下花费的时间不会超过几分钟。

所有21条评论

您指向 buildpack 的位置,即repository_root ,必须是有效的存储库。 在那个位置没有index.yml (至少我刚才看的时候)。

请参阅https://github.com/cloudfoundry/java-buildpack/blob/main/docs/extending-repositories.md。

嗯,看起来那个位置曾经有一个index.yml ,但我再也看不到它了。 让我四处打听,看看我能找到什么。

同时,如果您创建自己的index.yml ,请将其托管在某处(无关紧要)并指向该位置的文件(即 https://cdn.azul.com/zulu/bin/zulu9 .0.7.1-jdk9.0.7-linux_x64.tar.gz),你可以解决这个问题。

我们在应用程序的 manifest.yml 中使用了以下变量-
JBP_CONFIG_ZULU_JRE: '[jre: {repository_root: " https://example.com :8443/nexus/repository/SRET/com/example/sret/AppD_zulu11.48.21-ca-jdk/11.0.11-linux_x64/AppD_8zulu2 ca-jdk-11.0.11-linux_x64.gz"}, {version: 11.0.+}]'
JBP_CONFIG_COMPONENTS '{jres: ["JavaBuildpack::Jre::ZuluJRE"]}'

好的,这需要略有不同。 repository_root指向index.yml所在的文件夹。 所以 JBP 用来下载 index.yml 的 URL 是repository_root/index.yml

然后 JBP 将读取 index.yml,选择与您指定的版本过滤器匹配的最新版本,并下载从该版本的 index.yml 引用的资源。

嗨,德米库萨,

那么这是否意味着 Zulu JDK 和 index.yml 应该在同一位置?

好的,我明白你在说什么,JBP_CONFIG_ZULU_JRE 应该设置为

JBP_CONFIG_ZULU_JRE: '[jre: {repository_root: "insert-full-URL-to-index-yml-on-another-server"}, {version: 11.0.+}]'

它需要是 index.yml 所在文件夹/目录的完整 URL。 buildpack 会在生成 URL 以下载 index.yml 文件时将/index.yml附加到它。 所以,你的repository_root应该结束/index.yml

@ajay-dbs - 这可能是原因:

[ConfigurationUtils] WARN 'jres' 的用户配置值无效,现有属性不存在

它忽略了您的部分配置。 你的JBP_CONFIG_COMPONENTS对我来说看起来不错,但你会想要更仔细地看看那里发生了什么。 它没有应用配置的那部分,所以它没有选择你想要的 JDK。

是因为 JBP_CONFIG_COMPONENTS 和值之间缺少“:”吗?

应该是 JBP_CONFIG_COMPONENTS: '{jres: ["JavaBuildpack::Jre::ZuluJRE"]}'

这取决于您如何设置 env 变量。 如果您在清单中设置它们,它之间应该有一个: 。 如果您使用cf set-env设置它们,则它只是name val

大家好,

应用团队在 manifest.yml 文件中使用了这个变量。
JBP_CONFIG_ZULU_JRE: '[jre: {repository_root: " https://example.com :8051/pcf"}, {version: 11.0.+}]'
JBP_CONFIG_COMPONENTS '{jres: ["JavaBuildpack::Jre::ZuluJRE"]}'

@ajay-dbs 因为您在 manifest.yml 中添加了 env 变量,所以似乎缺少冒号可能是问题所在。 请将其修复为

JBP_CONFIG_COMPONENTS: '{jres: ["JavaBuildpack::Jre::ZuluJRE"]}'

[Buildpack] ERROR Finalize 失败,异常 #https://cdn.azul.com/zulu/bin/index.yml>
Zulu JRE 错误:无法找到https://cdn.azul.com/zulu/bin/index.yml 的缓存文件

顺便说一句, https: //cdn.azul.com/zulu/bin/index.yml 的链接现已恢复。

[ERR] [ConfigurationUtils] WARN 'version' 的用户配置值无效,现有属性不存在

是一个不同但相似的错误。 现在似乎接受jres这很好。 您可以看到它现在实际上也在运行 Zulu 容器。

在这种情况下,它现在不喜欢您尝试将版本设置为 11.0.+ 的部分。 你所拥有的并不完全正确。

JBP_CONFIG_ZULU_JRE: '[jre: {repository_root: " https://example.com :8051/pcf"}, {version: 11.0.+}]'

应该

JBP_CONFIG_ZULU_JRE: '[jre: {repository_root: "https://example.com:8051/pcf", version: 11.0.+}]'

versionrepository_root位于同一个jre对象上。 如有疑问,您可以随时查看关联的config/文件。 您添加的JBP_CONFIG_*配置需要与配置文件的格式相匹配,因为它会覆盖在配置之上。

查看祖鲁语的结构: https :

021-06-14T13:14:15.960+05:30 [STG/0] [ERR] [Buildpack] 错误检测失败,异常 #

我记得如果缓存被应用程序弄乱了,我在过去看到过这样的事情。 尝试以“my-cool-app-2”之类的新名称或独特的新名称推送您的应用程序。 如果修复了它,您将需要删除并重新推送您的应用程序,或者让您的管理员清除 buildpacks blobstore 缓存。

https://apidocs.cloudfoundry.org/16.13.0/blobstores/delete_all_blobs_in_the_buildpack_cache_blobstore.html

请注意,后者将清除所有构建包的缓存。 虽然这不是破坏性的,但它会强制所有构建包在下一次应用程序上演时重新下载所有资源。

我们尝试清除缓存,并尝试使用全新的名称和路线部署应用程序。 还是一样的问题。

这通常会解决此类问题,因此很高兴知道它在这里没有帮助。 这可能意味着发生了一些不同的事情。

WARNING: buildpack script '/bin/detect' is not executable
[Buildpack] ERROR Detect failed with exception #<RuntimeError: Zulu JRE error: Unable to find cached file for https://zulu-index-file.dev.apps.example.com/index.yml>
Zulu JRE error: Unable to find cached file for https://zulu-index-file.dev.apps.example.com/index.yml
stat /tmp/buildpacks/674495fe521621eeb364a353eb511ee3/bin/detect: no such file or directory

除了缓存错误之外,让我担心的是关于/bin/detect的警告和 `stat: no such file or directory 错误。 这些应该发生,并且不会发生在我们与发行版一起打包的构建包中。

你从哪里得到你的 buildpack? 您是从 Releases 页面下载并上传到 CF 吗? 您使用的是 github 页面的 URL 吗? 如果是这样,确切的网址是什么? 您是从其他地方获得 buildpack 吗? 您是否正在打包自己的 buildpack? 如果是这样,请尝试使用 Releases 页面中的一个或另一个已知的工作 buildpack 作为基线测试,看看它是否按预期工作,并请说明您如何打包 buildpack? 您可以提供的任何其他详细信息可能有助于发现问题或帮助重现问题。

请在继续测试时继续以新应用名称推送,因为我们希望确保排除缓存问题。

谢谢

还有几个问题......这是以前工作的,最近坏了? 如果有,最近有什么变化? 您是否升级了 buildpack 版本? 您是否更改了托管 Zulu 的服务器上的文件? 您的服务器上是否有新的祖鲁语更新? 如果它从未奏效,或者这是您第一次尝试,也请告诉我们。

谢谢

@mells82我认为index.yml应该是

---
1.8.0_212: https://cdn.azul.com/zulu/bin/zulu8.38.0.13-ca-jre8.0.212-linux_x64.tar.gz
1.8.0_222: https://cdn.azul.com/zulu/bin/zulu8.40.0.25-ca-jre8.0.222-linux_x64.tar.gz
1.8.0_232: https://cdn.azul.com/zulu/bin/zulu8.42.0.23-ca-jre8.0.232-linux_x64.tar.gz
1.8.0_242: https://cdn.azul.com/zulu/bin/zulu8.44.0.11-ca-jre8.0.242-linux_x64.tar.gz
1.8.0_252: https://cdn.azul.com/zulu/bin/zulu8.46.0.19-ca-jre8.0.252-linux_x64.tar.gz
1.8.0_265: https://cdn.azul.com/zulu/bin/zulu8.48.0.53-ca-jre8.0.265-linux_x64.tar.gz
1.8.0_275: https://cdn.azul.com/zulu/bin/zulu8.50.0.51-ca-jre8.0.275-linux_x64.tar.gz
1.8.0_282: https://cdn.azul.com/zulu/bin/zulu8.52.0.23-ca-jre8.0.282-linux_x64.tar.gz
1.8.0_292: https://cdn.azul.com/zulu/bin/zulu8.54.0.21-ca-jre8.0.292-linux_x64.tar.gz
11.0.3: https://cdn.azul.com/zulu/bin/zulu11.31.11-ca-jre11.0.3-linux_x64.tar.gz
11.0.4: https://cdn.azul.com/zulu/bin/zulu11.33.15-ca-jre11.0.4-linux_x64.tar.gz
11.0.5: https://cdn.azul.com/zulu/bin/zulu11.35.15-ca-jre11.0.5-linux_x64.tar.gz
11.0.6: https://cdn.azul.com/zulu/bin/zulu11.37.17-ca-jre11.0.6-linux_x64.tar.gz
11.0.7: https://cdn.azul.com/zulu/bin/zulu11.39.15-ca-jre11.0.7-linux_x64.tar.gz
11.0.8: https://cdn.azul.com/zulu/bin/zulu11.41.23-ca-jre11.0.8-linux_x64.tar.gz
11.0.9: https://cdn.azul.com/zulu/bin/zulu11.43.55-ca-jre11.0.9.1-linux_x64.tar.gz
11.0.10: https://cdn.azul.com/zulu/bin/zulu11.45.27-ca-jre11.0.10-linux_x64.tar.gz
11.0.11: https://cdn.azul.com/zulu/bin/zulu11.48.21-ca-jre11.0.11-linux_x64.tar.gz

删除构建包不会下载 jre 的 https 创建问题。

我们已经从 pivortal 下载了 java offline buildpack 并保存在 PCF 存储库中,然后使用来自 PCF 存储库的 buildpack。
这是我们第一次尝试使用 Azul Zulu JDK 运行应用程序。 默认情况下,oracle JDK 与 Bellsoft VM 一起使用,并且此 Bellsoft VM 不支持对象实例跟踪。 所以我们正在尝试使用 Azul Zulu JDK。

好的,谢谢你的信息。 现在事情变得更有意义了。

Tanzu buildpack 的打包方式是在“离线”模式下完成的。 看到这里,我们运行这个脚本来打包

在“离线”模式下,您只能获得打包到包中的内容。 JBP 不能下载其他东西。

来自“离线”的文档:

它打包了每个依赖项的最新版本(在 config/ 目录中配置)并禁用 remote_downloads。

https://github.com/cloudfoundry/java-buildpack/#offline -package

它这样做是因为它旨在在没有 Internet 访问的离线环境中运行。

我在实验室中使用离线 JBP 进行了尝试,但遇到与您完全相同的错误:

   2021-06-17T15:21:56.72-0400 [STG/0] ERR [Buildpack]                      ERROR Finalize failed with exception #<RuntimeError: Zulu JRE error: Unable to find cached file for https://cdn.azul.com/zulu/bin/index.yml>
   2021-06-17T15:21:56.72-0400 [STG/0] ERR Zulu JRE error: Unable to find cached file for https://cdn.azul.com/zulu/bin/index.yml
   2021-06-17T15:21:56.72-0400 [STG/0] ERR Failed to compile droplet: Failed to run finalize script: exit status 1

这是因为该文件不存在于离线缓存中,并且在离线模式下,它只会在缓存中查找。

如果您想在离线 buildpack 中使用 Azul Zulu,则需要自己将 buildpack 与 Zulu 一起打包。 否则,您需要使用 buildpack 的在线版本。 要打包 buildpack,请参阅此处并确保在打包之前调整components.yml 。 您希望该文件指示祖鲁语。

使用在线 buildpack 有效,但正如@RageZBla所说, index.yml需要正确格式化。 目前, https ://cdn.azul.com/zulu/bin/index.yml 上的 index.yml 格式不正确。 它缺少协议,这会导致问题。 确保您的index.yml的结构类似于@RageZBla评论中的示例。

感谢报告,index.yml 已更新: https ://cdn.azul.com/zulu/bin/index.yml

@ajay-dbs 如果是离线环境,需要自己打包buildpack。 由于重新分发软件的要求,其他人为您做这件事需要法律许可。 更不用说分发可信软件的安全方面了。 最简单的方法是自己打包 buildpack。

过程记录在此处。 您确实需要从可以访问 Internet 的计算机进行打包,因为它需要下载依赖项,但是,这只是几个命令,并且在相当快的 Internet 连接下花费的时间不会超过几分钟。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ghost picture ghost  ·  26评论

metacubed picture metacubed  ·  6评论

bingosummer picture bingosummer  ·  4评论

samzilverberg picture samzilverberg  ·  13评论

thorntonrp picture thorntonrp  ·  4评论