问题描述
Spring boot maven插件正在使用paketo构建器来构建映像。
gcr.io/paketo-buildpacks/builder:base-platform-api-0.3
我想做的是向此构建器正在执行的操作添加另一步。 我已经创建了自己的buildpack,并尝试创建包含基本buildpacks的构建器。
builder.toml
...
...
[[buildpacks]]
image = "my-own-buildpack"
[[buildpacks]]
image = "gcr.io/paketo-buildpacks/builder:base-platform-api-0.3"
...
我遇到的第一个问题是尝试从builder.toml中创建构建器时出现此错误:
ERROR: Failed to add buildpacks to builder: extracting buildpacks from gcr.io/paketo-buildpacks/builder:base-platform-api-0.3: Could not find label io.buildpacks.buildpackage.Metadata
另一个问题是,即使可行,我想我仍然必须从paketo:base指定所有order.group。
实际上是否有一种方法可以从paketo-buildpacks / builder中创建一个构建器,而无需深入了解内部发生的事情?
解决方法
目前,我不认为有一种方法可以“扩展”构建器。尽管添加了这样的功能,但针对buildpacks规范存在一个Github问题。 See here。
一种选择是完全复制要扩展的构建器的builder.toml。然后编辑/修改它,然后create a new builder。这可能很棘手,因为在我撰写本文时,builder.toml尚未发布在易于查找和复制的任何地方。
一种可能更接近您想要的替代方法是使用元CNB(元CNB是buildpack的集合)。如果您在builder.toml的buildpacks部分中引用了元CNB,它将提取所有引用的buildpacks。然后,您可以定义自己的自定义订单。
例如:
[[buildpacks]]
id = "paketo-buildpacks/node-engine"
image = "gcr.io/paketo-buildpacks/node-engine:0.1.1"
[[buildpacks]]
id = "paketo-buildpacks/java"
image = "gcr.io/paketo-buildpacks/java:3.1.0"
[[order]]
[[order.group]]
id = "paketo-buildpacks/node-engine"
version = "0.1.1"
[[order.group]]
id = "paketo-buildpacks/java"
version = "3.1.0"
[stack]
id = "io.buildpacks.stacks.bionic"
build-image = "gcr.io/paketo-buildpacks/build:base-cnb"
run-image = "gcr.io/paketo-buildpacks/run:base-cnb"
此示例将添加节点引擎CNB,并使它在Java meta CNB之前运行。您也可以选择使其在Java meta CNB之后运行,甚至可以定义自定义订单,因为您可以在订单组中引用meta CNB版本所包含的buildpack id / buildpack版本。