向 Spring Boot 应用程序添加了 jprofiler 构建包,不支持“BPL”标志

问题描述 投票:0回答:1

我正在经历一种我不理解的行为。这是一个错误还是我走错了路?

当使用 Spring Boot mvn 插件构建容器映像时,我无法以我期望的方式贡献自定义构建包。 (也如Buildpack建议:添加opentelemetry需要自定义

buildpack 配置是否会否决所有

BP_...
标志并仅提供列出的所有包?

这可能是 jprofiler buildpack 中的一个错误,其中

BPL_JPROFILER_ENABLED
标志评估有错误吗?


示例存储库和步骤:https://github.com/jakesmolka/spring-boot-buildpack-jprofiler

奔跑

mvn spring-boot:build-image -DskipTests

奔跑

docker run -e BPL_JPROFILER_ENABLED=true docker.io/library/spring-boot-buildpack-jprofiler:0.0.1-SNAPSHOT

Jprofiler 启动。

奔跑

docker run -e BPL_JPROFILER_ENABLED=false docker.io/library/spring-boot-buildpack-jprofiler:0.0.1-SNAPSHOT

Jprofiler 也启动了。

奔跑

docker run docker.io/library/spring-boot-buildpack-jprofiler:0.0.1-SNAPSHOT

Jprofiler 未启动。

从 pom 中删除

<buildpacks>
部分并重建映像:jprofiler 支持不会贡献给映像。

重新添加该部分。

<BP_JPROFILER_ENABLED>
env 设置为 false 并重建图像。输出显示没有差异,无论如何,jprofiler 都会得到贡献。


BPL_DEBUG_ENABLED
交叉检查行为:

奔跑

docker run -e BPL_DEBUG_ENABLED=false docker.io/library/spring-boot-buildpack-jprofiler:0.0.1-SNAPSHOT

未启用调试。

奔跑

docker run -e BPL_DEBUG_ENABLED=true docker.io/library/spring-boot-buildpack-jprofiler:0.0.1-SNAPSHOT

调试已启用。

所以

BPL_DEBUG_ENABLED
按预期工作。

spring spring-boot jprofiler buildpack
1个回答
0
投票

buildpack 配置是否会否决所有 BP_... 标志并仅提供列出的所有包?

当您使用 Spring Boot buildpack 工具或

pack
cli 设置 buildpack 列表时,有两件事会发生变化:

  1. 您的列表现在成为完整且唯一的一组将运行的构建包。如果它不在您的列表中,则这些构建包不会运行。因此,当您设置自定义构建包列表时,它需要是运行应用程序所需的所有构建包的完整列表。找到此列表的任何简单方法都是运行一次,复制运行的构建包列表并从那里进行调整。

  2. 指定的所有构建包都是必需的。当您指定列表时,没有可选的构建包。这意味着如果您添加的构建包之一未能检测到,则构建将会失败。所有构建包都是必需的。如果您不需要该构建包,请将其从列表中删除。

除此之外,它不应该影响环境变量的设置或 buildpack 如何解释这些环境变量。

这可能是 jprofiler 构建包中的一个错误,其中 BPL_JPROFILER_ENABLED 标志评估有错误吗?

Paketo 团队在环境变量前面使用前缀来表明他们的意图。

  • BP_
    环境变量是影响构建时间的变量
  • BPL_
    环境变量是影响启动时间(即应用程序实际启动时)的变量
  • BPI_
    环境变量是那些旨在内部而非用户操纵的变量(即 buildpack 设置这些变量以将数据从构建传递到启动)
  • BPE_
    环境变量特定于环境变量 buildpack。

在本例中,您询问的是

BPL_
前缀的环境变量,因此它不会影响构建时发生的任何事情,但它应该会影响启动时的 JProfiler 行为。特别是这个,您可以在启动时打开/关闭 JProfiler 代理,而无需重建容器。

如果您想在构建时告诉 JProfiler 构建包不包含自身,那么您需要设置

BP_JPROFILER_ENABLED=false
,但请参阅上面注释中的 2.),因为这将导致 JProfiler 构建包检测失败,因此您的构建是将会失败。如果您根本不希望 JProfiler 包含在图像中,只需将其从构建包列表中删除即可。

这至少是预期的行为。我们正在努力清理一些构建包,它们实际上并不查看布尔变量的状态。他们只是查看变量的存在。因此,如果设置了

BPL_JPROFILER_ENABLED
,则将其视为
true
;如果未设置,则将其视为 false,而不查看值本身。

我快速浏览了一下,这个构建包和您提到的设置就是其中之一。所以是的,它是有缺陷的,并且行为不正常。我为此创建了一个错误:https://github.com/paketo-buildpacks/jprofiler/issues/120。欢迎投稿。

© www.soinside.com 2019 - 2024. All rights reserved.