基于另一个创建 paketo 构建器

Create paketo builder based on another

Spring boot maven 插件正在使用 paketo builder 构建镜像。

gcr.io/paketo-buildpacks/builder:base-platform-api-0.3

我想做的是在此构建器正在完成的工作中再添加一个步骤。 我创建了自己的构建包并尝试创建包含基本构建包的构建器。

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。然后 edit/modify 它和 create a new builder。这可能很棘手,因为 builder.toml 在我撰写本文时并未发布在任何易于查找和复制的地方。

另一种可能更接近您想要的方法是使用元 CNB(元 CNB 是构建包的集合)。如果您在 builder.toml 的构建包部分引用元 CNB,它将引入所有引用的构建包。然后您可以定义自己的自定义订单。

例如:

[[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"

此示例将添加 node-engine CNB 并使其 运行 在 Java 元 CNB 之前。您也可以在 Java 元 CNB 之后使其成为 运行,或者甚至定义自定义顺序,因为您可以在订单中引用您的元 CNB 版本包含的构建包 id/version团体。