簡體   English   中英

Heroku 帶有 CNB 生命周期創建者的 Buildpacks - 如何指定自定義圖像標簽?

[英]Heroku Buildpacks with the CNB lifecycle creator - how to specifiy custom image labels?

我們在 GitLab CI/CD 管道中使用 Heroku Buildpacks,方法是觸發運行 heroku 構建器映像的作業,然后直接調用 /cnbLI/生命周期。 這是因為不能在我們的容器編排器上使用 docker 中的 docker。

這一切都很好,很漂亮,但我們面臨的問題是無法指定將添加到生成的圖像中的任何自定義標簽。 默認情況下,會添加這些標簽:

  • 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

不幸的是,似乎沒有辦法指定這一點。 據我所知,創建者沒有提供任何配置參數來執行此操作,pack CLI 也沒有。 在使用 Paketo buildpacks 時,確實有一個指定的 buildpack 可以解決這個問題: https://github.com/paketo-buildpacks/image-labels

使用 Heroku buildpacks 時有什么方法可以做類似的事情嗎?

您可以將Paketo 圖像標簽構建包與 Heroku 構建包一起使用。 以下是從pack CLI 執行此操作的示例:

$ pack build --builder heroku/buildpacks:20 --buildpack paketo-buildpacks/image-labels my-app

使用 CLI,您可以根據需要添加更多--buildpack選項。

如果您想對此進行編碼,您可以創建一個project.toml並使用io.buildpacks.post.group始終在最后運行 image-labels buildpack。

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

這是有關如何實現此目的的更詳細的答案:

  1. 創建一個自定義構建器映像,其中包含 heroku 構建包以及 paketo 所需的圖像標簽構建包
  2. 手動按指定順序運行生命周期可執行文件
  3. 檢測器運行后,將圖像標簽 buildpack 的條目添加到 group.toml

下面是一個用於構建自定義構建器映像的示例 Dockerfile:

# 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下的文件的樣子:

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

然后您可以按如下方式運行生命周期:

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}

確保使用平台規范定義的合理值填充 env 變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM