在 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 CodePipeline:同时运行多个管道

AWS codeBuild 不运行 .ebextension 配置

使用 AWS CDK 创建用于构建 Docker 映像的 CodeBuild 项目

Puppeteer 无法在 AWS CodeBuild 上运行 Chrome

有没有办法在AWS codebuild上更改目录