Docker-in-Docker与Gitlab共享运行器,用于构建和将docker镜像推送到注册表

时间:2016-09-21 06:14:23

标签: docker gitlab-ci gitlab-ci-runner

尝试设置Gitlab CI,可以构建一个docker镜像,并且发现DinD最初仅针对不同的跑步者启用,Blog Post建议不久将为共享的跑步者启用,

运行DinD需要在跑步者中启用特权模式,在注册跑步者时将其设置为标志,但无法找到共享跑步者的等效机制

1 个答案:

答案 0 :(得分:22)

共享的跑步者现在能够构建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提供的Container Registry。仅当构建提交标记有版本号时,它才会推送映像。

  • Predefined variables的文档。

  • 请注意,您需要缓存或生成服务的任何依赖项的临时工件,这些工件尚未在存储库中提交。这应该在其他工作中完成。例如node_modules通常不包含在存储库中,必须从build / test阶段进行缓存。