Docker-in-Docker 与 Gitlab Shared runner 用于构建和推送 docker 图像到注册表

Docker-in-Docker with Gitlab Shared runner for building and pushing docker images to registry

一直在尝试设置可以构建 docker 图像的 Gitlab CI,发现 DinD 最初仅针对单独的跑步者启用,Blog Post 建议它会是即将为共享跑步者启用,

运行 DinD 要求在 runners 中启用特权模式,在注册 runners 时将其设置为标志,但找不到 Shared Runners 的等效机制

共享的跑步者现在能够构建 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 阶段缓存。