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
阶段缓存。
一直在尝试设置可以构建 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
阶段缓存。