gpt4 book ai didi

spring-boot - 缓存 Cloud Native Buildpacks/Paketo.io pack CLI 在 GitHub Actions 上构建(例如,使用 Spring Boot/Java/Maven buildpacks)?

转载 作者:行者123 更新时间:2023-12-03 23:39:29 25 4
gpt4 key购买 nike

我正在处理 a Spring Boot application应该使用 Cloud Native Build Packs/Paketo.io 将其打包到 OCI 容器中。我使用 GitHub Actions 构建它,其中我的工作流程 build.yml看起来像这样:

name: build

on: [push]

jobs:
build-with-paketo-push-2-dockerhub:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Login to DockerHub Container Registry
run: echo $DOCKER_HUB_TOKEN | docker login -u jonashackt --password-stdin
env:
DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}

- name: Install pack CLI via apt. See https://buildpacks.io/docs/tools/pack/#pack-cli
run: |
sudo add-apt-repository ppa:cncf-buildpacks/pack-cli
sudo apt-get update
sudo apt-get install pack-cli

- name: Build app with pack CLI
run: pack build spring-boot-buildpack --path . --builder paketobuildpacks/builder:base

- name: Tag & publish to Docker Hub
run: |
docker tag spring-boot-buildpack jonashackt/spring-boot-buildpack:latest
docker push jonashackt/spring-boot-buildpack:latest
现在步骤 Build app with pack CLI需要相对较长的时间,因为它总是下载 Paketo builder Docker 镜像,然后进行全新的构建。这意味着下载 JDK 和每一个 Maven 依赖项。有没有办法在 GitHub Actions 上缓存 Paketo 构建?

最佳答案

在 GitHub Actions 上缓存 Docker 图像可能是一个选项 - doesn't seem to be that easy .另一种选择是利用 Docker 官方 docker/build-push-action行动,可以to cache the buildx-cache .但是我没有得到 pack CLI 和 buildx-caching 的组合工作(见 this build for example )。
最后我偶然发现了the general Cloud Native Buildpacks approach on how to cache in the docs :

Cache Images are a way to preserve build optimizing layers acrossdifferent host machines. These images can improve performance whenusing pack in ephemeral environments such as CI/CD pipelines.


我发现这个概念很好,因为 它使用第二个缓存图像 ,得到 发布在容器注册表 你的选择。此镜像仅用于在您附加 --cache-image 的每台机器上构建的所有 Paketo pack CLI。参数 - 无论是您的本地桌面还是任何 CI/CD 平台(如 GitHub Actions)。
为了使用 --cache-image参数,我们还必须使用 --publish标志(因为缓存镜像需要发布到您的容器注册表!)。这也意味着我们需要先登录到容器注册表,然后才能运行我们的 pack CLI 命令。使用 Docker Hub 类似于:
echo $DOCKER_HUB_TOKEN | docker login -u YourUserNameHere --password-stdin
此外,Paketo 构建器图像必须是 a trusted one .如 the docs state :

By default, any builder suggested by pack builder suggest isconsidered trusted.


由于我使用建议的构建器,因此我不必在这里做任何事情。如果你想使用另一个默认不信任的构建器, you need to run a pack config trusted-builders add your/builder-to-trust:bionic command在最后的 pack CLI 命令之前。
这是 pack CLI 命令,如果您想构建 Spring Boot 应用程序并使用 Docker Hub 作为容器注册表,该命令已启用缓存:
      pack build index.docker.io/yourApplicationImageNameHere:latest \
--builder paketobuildpacks/builder:base \
--path . \
--cache-image index.docker.io/yourCacheImageNameHere:latest \
--publish
最后是构建和发布示例 Spring Boot 应用程序的 GitHub Action 工作流 https://github.com/jonashackt/spring-boot-buildpack看起来像这样:
name: build

on: [push]

jobs:
build-with-paketo-push-2-dockerhub:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Login to DockerHub Container Registry
run: echo $DOCKER_HUB_TOKEN | docker login -u jonashackt --password-stdin
env:
DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}

- name: Install pack CLI via the official buildpack Action https://github.com/buildpacks/github-actions#setup-pack-cli-action
uses: buildpacks/github-actions/setup-pack@v4.1.0

- name: Build app with pack CLI using Buildpack Cache image (see https://buildpacks.io/docs/app-developer-guide/using-cache-image/) & publish to Docker Hub
run: |
pack build index.docker.io/jonashackt/spring-boot-buildpack:latest \
--builder paketobuildpacks/builder:base \
--path . \
--cache-image index.docker.io/jonashackt/spring-boot-buildpack-paketo-cache-image:latest \
--publish
请注意,使用 pack CLI 的 --publish flag,我们也不需要额外的步骤 Tag & publish to Docker Hub了。因为这已经由 pack CLI 为我们完成了。

关于spring-boot - 缓存 Cloud Native Buildpacks/Paketo.io pack CLI 在 GitHub Actions 上构建(例如,使用 Spring Boot/Java/Maven buildpacks)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66598692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com