Spring boot 缓存GitHub操作上的云本机Buildpacks/Paketo.io pack CLI构建(例如,使用Spring Boot/Java/Maven Buildpacks)?

Spring boot 缓存GitHub操作上的云本机Buildpacks/Paketo.io pack CLI构建(例如,使用Spring Boot/Java/Maven Buildpacks)?,spring-boot,docker,github-actions,buildpack,paketo,Spring Boot,Docker,Github Actions,Buildpack,Paketo,我正在研究如何使用云本地构建包/Paketo.io将其打包到OCI容器中。我使用GitHub操作构建它,其中我的工作流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 C

我正在研究如何使用云本地构建包/Paketo.io将其打包到OCI容器中。我使用GitHub操作构建它,其中我的工作流
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
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

现在,使用packCLI构建应用程序的步骤
需要相对较长的时间,因为它总是下载Paketo builder Docker映像,然后进行全新的构建。这意味着下载JDK和每个Maven依赖项。有没有一种方法可以缓存Paketo build on GitHub操作?

在GitHub操作上缓存Docker映像可能是一种选择-这是一种选择。另一个选择是利用Docker官方行动,这是可以实现的。但是我没有让packcli和buildx缓存的组合起作用(请参阅)

最后我偶然发现:

缓存映像是一种跨存储层保存构建优化层的方法 不同的主机。当需要时,这些映像可以提高性能 在短暂的环境(如CI/CD管道)中使用pack

我发现这个概念非常好,因为它使用了第二个缓存映像,它将发布到您选择的容器注册表中。此映像仅用于在每台机器上添加
--cache image
参数的所有Paketo pack CLI构建—无论是本地桌面还是任何CI/CD平台(如GitHub操作)

为了使用
--cache image
参数,我们还必须使用
--publish
标志(因为缓存映像需要发布到容器注册表!)。这也意味着我们需要先登录到容器注册表,然后才能运行packcli命令。使用Docker Hub这类似于:

echo $DOCKER_HUB_TOKEN | docker login -u YourUserNameHere --password-stdin
此外,Paketo builder图像必须为空。作为:

默认情况下,
pack builder suggest
建议的任何生成器都是 被认为是可信的

因为我使用了一个建议的构建器,所以我不必在这里做任何事情。如果要使用默认情况下不受信任的另一个生成器,请在使用最终的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操作工作流如下所示:

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
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
标志,我们也不再需要额外的步骤
标记并发布到Docker Hub
。因为这已经由pack CLI为我们完成了