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 этап.

Другие вопросы по тегам