Поиск по сайту:

Как настроить автоматическую сборку образов Docker на GitHub


В GitHub есть функция GitHub Actions, которая запускает автоматические сборки, тесты и другие скрипты всякий раз, когда вы вносите изменения в репозиторий. Одним из удобных вариантов использования этого является автоматическое создание и отправка контейнеров Docker в реестр контейнеров.

Новый реестр контейнеров GitHub

Новый реестр контейнеров GitHub, называемый GitHub Container Registry, немного отличается от большинства реестров, таких как Docker Hub. Он функционирует как расширение GitHub Packages, системы хранения пакетов, которая связывает пакеты с их репозиториями исходного кода. Пакеты можно создавать и отправлять из репозитория, часто автоматически с помощью конвейера GitHub Actions.

Реестр контейнеров GitHub просто добавляет специфичную для Docker совместимость с пакетами GitHub, заставляя его функционировать как реестр контейнеров для запуска docker pull и других команд CLI.

Вам не нужно публиковать в реестр контейнеров GitHub — вы все равно можете публиковать в Docker Hub из действия с некоторой конфигурацией. Однако предварительно созданные действия работают с GHCR из коробки, поэтому его намного проще настроить.

Как настроить автоматическую сборку пакетов GitHub

Для начала вам понадобится репозиторий. Даже если вы только публикуете пакеты, вам все равно понадобится репозиторий, потому что формат для GHCR:

ghcr.io/username/repository/image:version

Настройте репо, затем нажмите «Действия», чтобы создать новое действие. В разделе «Дополнительные рабочие процессы непрерывной интеграции» нажмите «Опубликовать контейнер Docker».

Это создает начальный шаблон, который требует нескольких изменений для работы. Во-первых, переменная IMAGE_NAME должна быть изменена на имя вашего изображения.

Затем в строке 39 вы найдете, где он входит в GHCR.

run: echo "${{ secrets.CR_PAT }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin

В настоящее время единственной поддерживаемой схемой аутентификации являются токены личного доступа (PAT), которые не очень хороши для безопасности, поскольку они предоставляют доступ для всей учетной записи. GitHub знает об этом и работает над лучшим исправлением на будущее, но в то же время, если вы хотите использовать GHCR из рабочего процесса GitHub Actions, вам нужно будет сохранить PAT в Secrets для вашего репозитория, потому что, очевидно, просто вставить здесь было бы ужасно.

Во-первых, вам нужно перейти в «Настройки»> «Настройки разработчика»> «Токены личного доступа» и создать новый токен. Для этого токена необходимы настройки write:packages и delete:packages . Обратите внимание, что по какой-то причине при выборе пакетов для записи автоматически выбирается «Полный доступ к репозиториям», который необходимо снять.

Затем перейдите к настройкам репозитория и создайте новый секрет с именем CR_PAT, соответствующий действию.

Вернитесь к действию и нажмите «Начать фиксацию», чтобы отправить его в репозиторий.

Как только он будет зафиксирован, он запустит рабочий процесс для запуска и сборки пакета. Вы можете отслеживать состояние всех запущенных рабочих процессов на вкладке «Действия». Здесь это не удалось, потому что действия по умолчанию предполагают выполнение тестов, которых не было в этом образе.

После успешного завершения вы должны увидеть контейнер в реестре, в разделе «Пакеты» на главной странице репозитория или под пакетами в вашем профиле.