Cache Cloud Native Buildpacks/Paketo.io pack CLI строится на GitHub Actions (например, с пакетами сборки Spring Boot/Java/Maven)?
Я работаю над приложением Spring Boot, которое должно быть упаковано в контейнер OCI с использованием Cloud Native Build Packs / Paketo.io. Я создаю его с помощью 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
занимает относительно много времени, так как он всегда загружает образ Docker сборщика Paketo, а затем выполняет полную новую сборку. Это означает загрузку JDK и всех зависимостей Maven. Есть ли способ кэшировать сборку Paketo на GitHub Actions?
1 ответ
Кэширование образов Docker в действиях GitHub может быть вариантом, что не кажется таким простым . Другой вариант - использовать официальное действие Docker docker / build-push-action , которое может кэшировать buildx-cache . Но я не смог заставить работать комбинацию pack CLI и buildx-caching (см., Например, эту сборку ).
Наконец, я наткнулся на общий подход Cloud Native Buildpacks к кешированию документации :
Кэш-образы - это способ сохранить слои оптимизации сборки на разных хост-машинах. Эти образы могут повысить производительность при использовании пакета в эфемерных средах, таких как конвейеры CI / CD.
Я нашел эту концепцию довольно хорошей, поскольку в ней используется второй образ кеша , который публикуется в выбранном вами реестре контейнеров . И этот образ просто используется для всех сборок интерфейса командной строки Paketo pack на каждой машине, на которой вы добавляете параметр - будь то локальный рабочий стол или любая платформа CI / CD (например, GitHub Actions).
Чтобы использовать
--cache-image
параметр, мы также должны использовать флаг (поскольку образ кеша должен быть опубликован в реестре вашего контейнера!). Это также означает, что нам нужно войти в реестр контейнеров, прежде чем мы сможем запустить нашу команду CLI pack. Используя Docker Hub, это примерно так:
echo $DOCKER_HUB_TOKEN | docker login -u YourUserNameHere --password-stdin
Также образ конструктора Paketo должен быть доверенным . Как говорится в документации :
По умолчанию любой конструктор, предложенный
pack builder suggest
считается доверенным.
Поскольку я использую предложенный конструктор, мне не нужно здесь ничего делать. Если вы хотите использовать другой конструктор, которому по умолчанию не доверяют, вам нужно запустить <tcode id="21825531"></tcode>Команда перед окончательной командой CLI пакета.
Вот команда CLI pack, для которой включен кеш, если вы хотите создать приложение Spring Boot и использовать Docker Hub в качестве реестра контейнеров:
pack build index.docker.io/yourApplicationImageNameHere:latest \
--builder paketobuildpacks/builder:base \
--path . \
--cache-image index.docker.io/yourCacheImageNameHere:latest \
--publish
Наконец, рабочий процесс GitHub Action для создания и публикации примера приложения Spring Boot 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
Обратите внимание, что с использованием пакета CLI
--publish
флаг, лишний шаг нам тоже не нужен
Tag & publish to Docker Hub
больше. Поскольку это уже сделано для нас с помощью CLI пакета.