Docker action

Тема дорожной карты · GitHub Actions

Docker action — тип action в GitHub Actions, упаковывающий всю среду выполнения — runtime, зависимости и логику — внутри образа Docker-контейнера, что делает его наиболее портируемым и герметичным вариантом для кастомных шагов CI/CD-пайплайна. Docker actions объявляются в action.yml с runs.using: docker и image:, указывающим либо на Dockerfile в репозитории action, либо на готовый образ в реестре контейнеров, гарантируя одинаковое поведение на любом runner независимо от базовой ОС хоста. Входные данные, передаваемые через with: в вызывающем workflow, передаются как переменные окружения внутрь контейнера Docker action, а выходные данные задаются записью в $GITHUB_OUTPUT внутри entrypoint-скрипта контейнера. Docker actions идеально подходят для инкапсуляции инструментов со сложными нативными зависимостями — компиляторов, системных библиотек или проприетарных CLI, — которые было бы непрактично устанавливать через shell-команды в composite action. Запуск Docker actions в GitHub Actions добавляет задержку на загрузку контейнера и его старт, поэтому команды должны взвешивать преимущества изоляции против требований к задержке при проектировании высокочастотных пайплайнов непрерывной интеграции.

Как это работает

Docker action: три варианта. JavaScript actions (runs: using: node20) — быстрый старт, гоняются на runner напрямую, должны быть cross-platform. Docker actions (runs: using: docker) — только Linux, медленнее старт (pull/build образа), полный контроль env. Composite actions (рассматриваются отдельно). JS actions требуют dist/ в репо (или компиляция через @vercel/ncc). Дистрибуция через GitHub Marketplace или приватный internal-репо.

Когда применять

JavaScript actions — когда логика маленькая (< 200 строк) + нужен cross-platform. Docker actions — нужно конкретное OS-окружение или сложные зависимости. Composite — просто цепочка существующих actions. Всегда релизьте tagged-версии (v1, v1.2.3); никогда не говорите юзерам использовать main.

Типичные ошибки

Ловушки Docker action: JS action без коммита dist/ (action валится, потому что node_modules недоступен); Docker action с огромным образом (медленный старт на каждом job); breaking input/output изменения в major-версии, которые юзеры на @v1 получают тихо (всегда major-version-пин или SHA).

Связанные понятия

Полезные ресурсы