为什么在 gitlab-ci 中构建图像之前先拉取 docker 图像?

Why pull docker image before building it in gitlab-ci?

我正在学习 GitLab-ci 有几件事让我很困惑。 所以这是我在谷歌搜索时发现的构建工作:

.build:
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login --username $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
  script:
    - docker pull $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest || true
    - docker build --ssh default --cache-from $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest --build-arg BUILDKIT_INLINE_CACHE=1 --tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest --tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA .
    - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA
    - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest
  stage: build
  image: docker:stable
  services:
    - docker:dind
  needs: []

为什么在拉取建筑图像并通过管道设置为 true 之前?我想它与缓存有关,但我不确定为什么要使用 pipe to true。

此外,--ssh default 和 BUILDKIT 的目的是什么?

您应该拉取图像以利用缓存层,这样您就不会不必要地再次构建层。这会导致构建速度更快,拉取新映像的人员更新速度更快,并且可以更有效地使用容器注册表中的存储。

您可以在 GitLab 文档中阅读更多相关信息:Make Docker-in-Docker builds faster with Docker layer caching


对于您的其他问题:

关于 --ssh default:请参阅 docker documentation on this

关于 BUILDKIT,简而言之,可以实现更快、更高效的构建。