首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heroku与CNB生命周期创建者-如何指定自定义图像标签?

Heroku与CNB生命周期创建者-如何指定自定义图像标签?
EN

Stack Overflow用户
提问于 2022-03-29 13:09:07
回答 2查看 297关注 0票数 1

我们在GitLab CI/CD管道中使用Heroku,方法是触发运行heroku映像的作业,然后直接调用/cnb/生命周期/创建者,而不是使用包CLI。这是因为不能在我们的集装箱码头上使用码头。

这一切都很好,很好,但我们面临的问题是,不能指定任何定制标签,将添加到产生的图像。默认情况下,添加这些标签:

  • io.buildpacks.lifecycle.metadata
  • io.buildpacks.build.metadata
  • io.buildpacks.project.metadata

但我们也想添加以下标签:

  • org.opencontainers.image.revision
  • org.opencontainers.image.url
  • org.opencontainers.image.source
  • org.opencontainers.image.version
  • org.opencontainers.image.licenses
  • org.opencontainers.image.authors

不幸的是,似乎没有办法具体说明这一点。创建者没有提供任何配置参数来完成这个任务,据我所知,包CLI也是如此。当使用Paketo时,确实有一个指定的buildpack来解决这个问题:https://github.com/paketo-buildpacks/image-labels

在使用Heroku时,有做类似事情的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-19 08:30:33

以下是如何实现这一目标的更详细的答案:

  1. 创建一个自定义构建器映像,其中包含heroku buildpack以及所需的图像标签buildpack by paketo。
  2. 按指定顺序手动运行生命周期可执行文件。
  3. 在检测器运行后,将图像标签buildpack的一个条目添加到group.toml

下面是构建自定义构建器映像的Dockerfile示例:

代码语言:javascript
复制
# paketo
FROM paketobuildpacks/builder:base as paketo

# heroku
FROM heroku/builder-classic:22

USER root

COPY --from=paketo /cnb/buildpacks/paketo-buildpacks_image-labels /cnb/buildpacks/paketo-buildpacks_image-labels

COPY group.toml /opt/group.toml

SHELL ["/bin/bash", "-c"]

USER 1000

/opt/group.toml下的文件如下所示:

代码语言:javascript
复制
[[group]]
    description = "A Cloud Native Buildpack that enables configuration of labels on the created image"
    homepage = "https://github.com/paketo-buildpacks/image-labels"
    id = "paketo-buildpacks/image-labels"
    keywords = ["image-labels", "labels"]
    name = "Paketo Image Labels Buildpack"
    version = "4.2.0"
    sbom-formats = ["application/vnd.cyclonedx+json", "application/vnd.syft+json"]
    api = "0.7"

然后,您可以按以下方式运行生命周期:

代码语言:javascript
复制
export CNB_LAYERS_DIR=${BP_LAYERS_PATH}
export CNB_GROUP_PATH=${BP_LAYERS_PATH}/group.toml

/cnb/lifecycle/detector -layers=${BP_LAYERS_PATH} -platform=${BP_PLATFORM_PATH} -app=.

# add additional logic for image-label-buildpack
[ -f /opt/group.toml ] && echo "$(cat /opt/group.toml)" >> ${CNB_GROUP_PATH}

export BP_LAST_VERSION=${BP_IMAGE_VERSION}
/cnb/lifecycle/analyzer -uid=$(id -u) -gid=0 -cache-dir=${BP_CACHE_PATH} -layers=${BP_LAYERS_PATH} -analyzed=${BP_LAYERS_PATH}/analyzed.toml ${BP_REGISTRY}/${BP_IMAGE_NAME}:${BP_LAST_VERSION}

/cnb/lifecycle/restorer -uid=$(id -u) -gid=0 -cache-dir=${BP_CACHE_PATH} -layers=${BP_LAYERS_PATH} -group=${BP_LAYERS_PATH}/group.toml

/cnb/lifecycle/builder -layers=${BP_LAYERS_PATH} -platform=${BP_PLATFORM_PATH} -app=. -group=${BP_LAYERS_PATH}/group.toml

/cnb/lifecycle/exporter -uid=$(id -u) -gid=0 -cache-dir=${BP_CACHE_PATH} -layers=${BP_LAYERS_PATH} -app=. -analyzed=${BP_LAYERS_PATH}/analyzed.toml -run-image=${BP_RUN_IMAGE} ${BP_REGISTRY}/${BP_IMAGE_NAME}:${BP_IMAGE_VERSION}

确保使用平台规范定义的sane值填充env变量。

票数 1
EN

Stack Overflow用户

发布于 2022-03-29 14:18:06

您可以在Heroku构建包中使用Paketo图像标签buildpack。下面是从pack CLI中执行此操作的一个示例:

代码语言:javascript
复制
$ pack build --builder heroku/buildpacks:20 --buildpack paketo-buildpacks/image-labels my-app

使用CLI,您可以根据需要添加更多的--buildpack选项。

如果您想对此进行编码,您可以创建一个project.toml并使用io.buildpacks.post.group始终在末尾运行图像标签buildpack。

如果您使用的是creator二进制文件,您可以提供一个group.toml https://github.com/buildpacks/spec/blob/main/platform.md#inputs-3

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71662662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档