首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存云本地构建包/Paketo.ioPackcli构建在GitHub操作上(例如,使用Spring /Java/Maven构建包)?

缓存云本地构建包/Paketo.ioPackcli构建在GitHub操作上(例如,使用Spring /Java/Maven构建包)?
EN

Stack Overflow用户
提问于 2021-03-12 11:02:36
回答 1查看 747关注 0票数 6

我正在开发Spring应用程序,应该使用/ Paketo.io将其打包到OCI容器中。我使用GitHub操作构建它,其中工作流build.yml如下所示:

代码语言:javascript
复制
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映像,然后进行完整的新构建。这意味着下载JDK和每个Maven依赖项。有办法在GitHub操作的基础上缓存Paketo吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-12 11:02:36

在GitHub操作上缓存Docker映像可能是一个选项-- 似乎没那么容易。另一种选择是利用Docker正式的码头/建造-推进-行动操作,这是来缓存buildx-cache。。但是,我没有将pack和buildx缓存结合起来(请参阅例如,这个构建)。

最后我偶然发现了关于如何在文档中缓存的通用云原生构建包方法

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

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

为了使用--cache-image参数,我们还必须使用--publish标志(因为缓存映像需要发布到容器注册表!)。这也意味着在我们能够运行pack命令之前,我们需要登录到容器注册表。使用码头集线器--这类似于:

代码语言:javascript
复制
echo $DOCKER_HUB_TOKEN | docker login -u YourUserNameHere --password-stdin

另外,Paketo构建器映像必须是值得信赖的人。As 文档状态

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

因为我用的是一个建议的建筑工人,所以我在这里什么都不用做。如果您想使用默认情况下不受信任的另一个构建器,请在最后一个pack命令之前使用命令

下面是pack命令,如果您想要构建Spring应用程序并使用Docker作为容器注册中心,那么就启用了缓存:

代码语言:javascript
复制
      pack build index.docker.io/yourApplicationImageNameHere:latest \
          --builder paketobuildpacks/builder:base \
          --path . \
          --cache-image index.docker.io/yourCacheImageNameHere:latest \
          --publish

最后,构建和发布示例Spring应用程序的GitHub操作工作流https://github.com/jonashackt/spring-boot-buildpack如下所示:

代码语言:javascript
复制
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的--publish标志,我们也不再需要额外的Tag & publish to Docker Hub了。因为这是由包CLI为我们做的。

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

https://stackoverflow.com/questions/66598692

复制
相关文章

相似问题

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