Bitbucket Pipelines提供了一个Docker缓存功能,可以帮助提高构建时间。然而,限制是只有小于1GB的压缩缓存被保存并可以使用。在这篇博客中,我们概述了一个过程,说明你如何使用大于1GB的压缩缓存。
对于Docker版本>=19.03,你可以使用BuildKit功能。使用BuildKit,你不需要在构建Docker镜像之前在本地保留缓存,因为它将每个构建层缓存在你的镜像注册中心。然后,当你构建Docker镜像时,每个层会在构建过程中根据需要下载。
然而,你不能为Bitbucket管道中的默认Docker服务启用BuildKit。要启用BuildKit,你需要使用一个自我托管的运行器来执行你的构建。有了自我托管的运行器,你可以指定你的步骤使用一个自定义的 "dind",这样你就可以使用 "buildkit "功能。使用'buildkit'功能,使用BUILDKIT_INLINE_CACHE build参数打开内联层缓存,在使用远程缓存构建图像时使用--cache-from 。
下面是它的工作原理。
定义一个自定义的'dind
首先,在docker镜像中用docker定义一个docker服务(dind)。由于当前的docker:dind已经在buildkit中默认启用,你可以直接使用它(如下图所示)
definitions: services: docker: image: docker:dind
然后在你的Pipeline步骤中,启用BuildKit并使用BUILDKIT_INLINE_CACHE build参数打开内联层缓存,在使用远程缓存构建镜像时使用--cache-from 。
使用DOCKER_BUILDKIT env var 启用 buildkit 并使用远程缓存构建图像
pipelines: default: - step: name: Step 1 runs-on: self.hosted script: - export DOCKER_BUILDKIT=1 - docker build \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --cache-from $IMAGE_NAME:$IMAGE_TAG \ -t $IMAGE_NAME:$IMAGE_TAG . - docker push $IMAGE_NAME:$IMAGE_TAG services: - docker definitions: services: docker: image: docker:dind
一旦你使用Docker服务配置了自我托管的运行器,并启用了默认的BuildKit选项,使用Docker远程缓存,你的构建时间将更快,因为Docker镜像构建过程将使用缓存的层,而不是每次都从头构建。
The postFaster CI Builds with Docker Remote Cachingappeared first onBitbucket.