GitHub Actions, Docker, GitHub Registry
Долго соображал, куда можно засунуть Docker-контейнеры для одного проекта — не пихать же их на личный аккаунт Docker Hub? Поднимать свой registry тоже так себе вариант... Изучал тему, и обнаружил интересную штуку — GitHub Packages, которая включает в себя GitHub Container Registry (GHCR). Иными словами, это Docker Registry от гитхаба, который можно юзать бесплатно для открытых репозиториев, при этом настроить доступ к самому package (аналог image в Docker Hub) можно отдельно.
А что значит хостинг на самом GitHub? Правильно, более простая настройка GitHub Actions для сбора и выгрузки образа Docker. Самое крутое, что можно сделать универсальный файл workflow, который будет достаточно закинуть в любой репозиторий, чтобы контейнер собирался и выгружался на ghcr.io.
К примеру, вот такой workflow при каждом обновлении ветки соберет и выгрузит образ с тем же названием, что и у репозитория, при этом между запусками кэш будет сохраняться в том же ghcr.io под тегом buildcache
.
buildcache
может не очень красиво смотретьсяНа что стоит обратить внимание (на чем я споткнулся при настройке пайплайна):
- Workflow должен иметь разрешение на запись в
packages
. В противном случае он будет валиться с ошибкой 403 при попытке выгрузить образ. Впрочем, если не указыватьpermissions
вообще, должно по умолчанию быть разрешено работать сpackages
.
permissions: contents: read packages: write
- По умолчанию (у меня так было в организации, по крайней мере) созданные packages будут приватными, даже в публичном репозитории. Это можно настроить на каждом репозитории отдельно, перед этим разрешив другие варианты в настройках организации:
To sum up, настроив один раз Packages в организации и написав универсальный workflow, можно штамповать его везде и не париться о выгрузке контейнеров.