首页 > 解决方案 > 基于另一个创建 paketo builder

问题描述

Spring Boot maven 插件使用 paketo builder 构建图像。

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

我想做的是在这个构建器正在做的事情上增加另一个步骤。我创建了自己的 buildpack 并尝试创建包含基本 buildpack 的构建器。

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 中创建一个构建器,而无需详细了解内部发生的事情?

标签: spring-bootdockerbuildpackpaketo

解决方案


目前,我不相信有办法“扩展”构建器。尽管要添加这样的功能,但有一个针对 buildpacks 规范的 Github 问题。见这里

一种选择是为您希望扩展的构建器完全复制 builder.toml。然后编辑/修改它并创建一个新的 builder。这可能会很棘手,因为 builder.toml 在我写这篇文章的时候还没有发布在任何容易找到和复制它们的地方。

一种可能更接近您想要的替代方法是使用元 CNB(元 CNB 是构建包的集合)。如果您在 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 元 CNB 之前运行。您也可以让它在 Java 元 CNB 之后运行,或者甚至定义自定义订单,因为您可以参考订单组中元 CNB 版本所包含的构建包 ID/构建包版本。


推荐阅读