问题描述
如 Cloud Native Buildpack 功能中所述,它们添加了 a rebasing capability 和
无需重新构建即可即时更新基础映像。
Paketo 的 pack CLI 的In the buildpacks docs the rebase operation 被描述为这样执行:
pack rebase my-app:my-tag
由于这是 Cloud Native Buildpacks 的关键功能之一 - 并且是大多数基于微服务的架构迫切需要的功能 - 很高兴知道如何在 CI/CD 管道内实现自动化,例如GitHub Actions 或依赖管理工具,如 renovate。 Renovate already supports Docker,但是因为没有 Paketo 的依赖管理文件,所以它现在不会创建拉取请求。
那么问题是如何在没有人工交互的情况下自动执行 Paketo/Buildpacks rebase 操作以创建 PR?
解决方法
pack rebase
命令将换出容器使用的运行映像。运行映像是您在构建映像时选择的构建器的一部分。
例如,有 Paketo paketobuildpacks/builder:base
构建器。您可以运行 pack inspect-builder paketobuildpacks/builder:base
并且 pack 将为您提供有关构建器的大量详细信息。其中包含一个部分,告诉您此构建器的运行映像以及使用此构建器构建的任何映像。
Run Images:
index.docker.io/paketobuildpacks/run:base-cnb
gcr.io/paketo-buildpacks/run:base-cnb
注意列出了两个,但它们是相同的图像,只是托管在两个不同的地方。
鉴于此,您将需要设置 CI 系统以监视构建器的运行映像的新版本。当有新的运行映像时,您需要 pack rebase
以便更新您的映像以使用最新的运行映像。
我没有使用过 Renovate,但听起来 Docker 支持可能正是您想要的。将其指向您的基本图像并使用它来触发 pack rebase
命令。
我们有一些 Github 动作来监控 Paketo 图像(不是为了这个特定目的,但想法是一样的)。没有很好的方法来做到这一点(至少在我写这篇文章的时候),但我们使用 schedule 定期检查图像的更新。然后启动工作流,在这种情况下,工作流基本上是运行 pack rebase
。