Docker-in-Docker с Gitlab Shared Runner для создания и отправки образов Docker в реестр
Я пытался настроить Gitlab CI, который может создавать образ докера, и натолкнулся на то, что DinD был изначально включен только для отдельных участников, и в блоге предполагается, что он скоро будет включен для общих участников.
Для запуска DinD требуется включение привилегированного режима в бегунах, который устанавливается как флаг при регистрации бегуна, но не может найти эквивалентный механизм для общих бегунов
1 ответ
Общие бегуны теперь могут создавать образы Docker. Вот работа, которую вы можете использовать:
stages:
- build
- test
- deploy
# ...
# other jobs here
# ...
docker:image:
stage: deploy
image: docker:1.11
services:
- docker:dind
script:
- docker version
- docker build -t $CI_REGISTRY_IMAGE:latest .
# push only for tags
- "[[ -z $CI_BUILD_TAG ]] && exit 0"
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$CI_BUILD_TAG
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker push $CI_REGISTRY_IMAGE:$CI_BUILD_TAG
Это задание предполагает, что вы используете реестр контейнеров, предоставленный Gitlab. Он выдвигает изображения только тогда, когда коммит сборки помечен номером версии.
Документация для предопределенных переменных.
Обратите внимание, что вам нужно будет кэшировать или генерировать как временные артефакты любые зависимости для вашей службы, которые не зафиксированы в репозитории. Это должно быть сделано на других работах. например
node_modules
обычно не содержатся в хранилище и должны быть кэшированы изbuild
/test
этап.