添加如下代码到Docker任务中以启用缓存:
- task: Docker@2
displayName: 'Build and push an image to container registry'
inputs:
command: buildAndPush
repository: $(dockerRegistry)/$(imageRepository)
dockerfile: $(dockerfilePath)
buildContext: $(buildContext)
tags: |
$(tag)
arguments: $(dockerBuildArguments)
continueOnError: true
env:
DOCKER_CLI_EXPERIMENTAL: enabled
timeoutInMinutes: 20
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
options: '--mount=type=cache,target=/root/.cache/docker-build --mount=type=cache,target=/root/.cache/go-build'
这段代码中,我们使用了“mount”参数,其中包含了两个挂载路径:一个是/docker-build,用于Docker镜像缓存,另一个是/go-build,用于Go语言编译缓存。语句中的“target”参数指定了缓存保存在Docker主机上的路径,从而有充分利用主机本地的缓存。
此外,还需在yml文件顶部声明以下变量:
variables:
DOCKER_CACHE_MOUNT_PATH: $(Agent.WorkFolder)/docker-cache
GO_CACHE_MOUNT_PATH: $(Agent.WorkFolder)/go-cache
完整的修改后的yml文件应如下所示:
steps:
- task: Docker@2
displayName: 'Build and push an image to container registry'
inputs:
command: buildAndPush
repository: $(dockerRegistry)/$(imageRepository)
dockerfile: $(dockerfilePath)
buildContext: $(buildContext)
tags: |
$(tag)
arguments: $(dockerBuildArguments)
continueOnError: true
env:
DOCKER_CLI_EXPERIMENTAL: enabled
timeoutInMinutes: 20
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
options: '--mount=type=cache,target=/root/.cache/docker-build --mount