在 AWS CodeBuild 上预置自定义 Docker 映像需要很长时间
Posted
技术标签:
【中文标题】在 AWS CodeBuild 上预置自定义 Docker 映像需要很长时间【英文标题】:Provisioning a custom Docker image on AWS CodeBuild takes a very long time 【发布时间】:2020-09-13 11:14:42 【问题描述】:我的 Dockerfile:
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2016
COPY AWSCLIV2.msi .
RUN Start-Process msiexec.exe -Wait -ArgumentList '/I AWSCLIV2.msi /quiet /qn /norestart /log awscli.log'
RUN rm AWSCLIV2.msi
我的 CodeBuild 环境需要能够构建 .NET Framework 项目以及使用 AWS CLI。由于限制,我只能有一个 CodeBuild 阶段。我将使用上述 Dockerfile 创建的 docker 映像推送到 ECR,并将我的 CodeBuild 环境设置为使用该映像。但是,配置大约需要 10 分钟。
CodeBuild 提供仅持续约 15 分钟的缓存,这对于更不频繁的构建没有帮助。我还发现了其他人链接到 https://github.com/aws/aws-codebuild-docker-images/issues/26#issuecomment-370177343 的这个解决方案,但我不确定它如何应用于 Windows 容器。
如果有人对减少配置时间有任何建议,我将不胜感激。
【问题讨论】:
【参考方案1】:Windows 镜像较大,因此包括将自定义镜像下拉到 CodeBuild 实例的时间在内的配置时间会比较长。
有两种方法可以提供帮助:
-
为构建环境使用 CodeBuild 提供的映像,因为这些映像的最新版本已预先缓存在构建服务器上。
自定义镜像使用与 CodeBuild 镜像相同的基础层,这样基础层可以重复使用,不会产生下载时间。例如:
对于 Microsoft Windows,请使用具有 microsoft/windowsservercore:10.0.x 版本的容器操作系统的 Windows 容器(例如,microsoft/windowsservercore:10.0.14393.2125)。 Link【讨论】:
以上是关于在 AWS CodeBuild 上预置自定义 Docker 映像需要很长时间的主要内容,如果未能解决你的问题,请参考以下文章
AWS CodePipeline 能否在不劫持 CodeBuild 的工件设置的情况下触发 AWS CodeBuild?
AWS codeBuild 不运行 .ebextension 配置
使用 AWS CDK 创建用于构建 Docker 映像的 CodeBuild 项目