使用 AWS CodeBuild 构建 Windows 个容器
Building Windows Containers with AWS CodeBuild
我开始使用 AWS 的 CI/CD 功能。到目前为止,我一直在 Windows Server 2016 上本地创建我的 docker 图像,基于 microsoft/windowsservercore 图像,并手动将其推送到 ECR(亚马逊容器注册表)。
此时,我没有尝试在 CodeBuild 中编译应用程序。我只是想构建容器。在本地,二进制文件位于子目录中并复制到容器中。
CodeBuild 项目失败并出现错误:
图像操作系统 "windows" 无法在此平台上使用
我很确定这是因为构建环境是基于 linux 的。
有谁知道是否可以为 AWS 创建支持构建 Windows 容器映像的自定义构建环境?
AWS CodeBuild 不支持 Windows 构建环境,但正在开发中。您可以 sign up here 获取有关 Windows.
的 CodeBuild 支持的通知
但是,CodeBuild 在 Docker 上运行所有构建。 Microsoft 尚不支持在 Windows Docker 容器中构建 Docker 图像(请参阅 this GitHub issue for details)。
正如 Clare 的回答所指出的,Docker-in-Docker (DIND) 目前在 Windows 服务器平台上不受支持,AWS CodeBuild 仅运行构建在 Docker 中;不是直接在 OS 之上。在旁注中,AWS CodeBuild support for Windows Server is Generally Available now.
--
它不是 AWS CodeBuild,但您可以在 AWS 上构建自己的自动化容器构建系统,同时使用一些服务。这是它在高层次上的样子:
- 使用 Amazon 机器映像 (AMI)“Windows Server 2016 with Containers”部署新的 EC2 实例
- 提交新代码更改 Git
- 将更改推送到 AWS CodeCommit 存储库
- CodeCommit triggers a Lambda function
- Lambda 函数调用 AWS Systems Manager - Run Command
- Run Command calls the
AWS-RunPowerShellScript
document, targeting the Window Server instance(即按标签或实例 ID)
- PowerShell 脚本克隆 CodeCommit 存储库、构建容器映像并推送到 Elastic Container Registry (ECR)
您需要确保 EC2 实例有 access to AWS Systems Manager through their IAM Instance Profile。我还没有把它付诸实践,但它已经积压了一段时间。随意试一试。
由于这个答案出现在我的 google 搜索的顶部并且已经过时,应该注意的是,截至 2018 年 5 月 25 日,AWS 确实为代码构建提供了 windows 图像。
此功能在 CodeBuild 中尚不可用。
试一试。它使用由 Lambda 触发的 AWS Step Function 来编排临时 EC2 实例,以使用 AWS Code Pipeline 自定义操作构建 Windows 容器。
这来自 AWS 代码示例,但我贡献了一些管道 运行 上下文相关变量作为环境变量可用于 EC2 实例,以防您的构建脚本需要管道执行 ID 之类的东西。
https://github.com/aws-samples/aws-codepipeline-custom-action
这篇文章的博客 post 在这里 https://aws.amazon.com/blogs/devops/building-windows-containers-with-aws-codepipeline-and-custom-actions/
我开始使用 AWS 的 CI/CD 功能。到目前为止,我一直在 Windows Server 2016 上本地创建我的 docker 图像,基于 microsoft/windowsservercore 图像,并手动将其推送到 ECR(亚马逊容器注册表)。
此时,我没有尝试在 CodeBuild 中编译应用程序。我只是想构建容器。在本地,二进制文件位于子目录中并复制到容器中。
CodeBuild 项目失败并出现错误: 图像操作系统 "windows" 无法在此平台上使用
我很确定这是因为构建环境是基于 linux 的。
有谁知道是否可以为 AWS 创建支持构建 Windows 容器映像的自定义构建环境?
AWS CodeBuild 不支持 Windows 构建环境,但正在开发中。您可以 sign up here 获取有关 Windows.
的 CodeBuild 支持的通知但是,CodeBuild 在 Docker 上运行所有构建。 Microsoft 尚不支持在 Windows Docker 容器中构建 Docker 图像(请参阅 this GitHub issue for details)。
正如 Clare 的回答所指出的,Docker-in-Docker (DIND) 目前在 Windows 服务器平台上不受支持,AWS CodeBuild 仅运行构建在 Docker 中;不是直接在 OS 之上。在旁注中,AWS CodeBuild support for Windows Server is Generally Available now.
--
它不是 AWS CodeBuild,但您可以在 AWS 上构建自己的自动化容器构建系统,同时使用一些服务。这是它在高层次上的样子:
- 使用 Amazon 机器映像 (AMI)“Windows Server 2016 with Containers”部署新的 EC2 实例
- 提交新代码更改 Git
- 将更改推送到 AWS CodeCommit 存储库
- CodeCommit triggers a Lambda function
- Lambda 函数调用 AWS Systems Manager - Run Command
- Run Command calls the
AWS-RunPowerShellScript
document, targeting the Window Server instance(即按标签或实例 ID) - PowerShell 脚本克隆 CodeCommit 存储库、构建容器映像并推送到 Elastic Container Registry (ECR)
您需要确保 EC2 实例有 access to AWS Systems Manager through their IAM Instance Profile。我还没有把它付诸实践,但它已经积压了一段时间。随意试一试。
由于这个答案出现在我的 google 搜索的顶部并且已经过时,应该注意的是,截至 2018 年 5 月 25 日,AWS 确实为代码构建提供了 windows 图像。
此功能在 CodeBuild 中尚不可用。
试一试。它使用由 Lambda 触发的 AWS Step Function 来编排临时 EC2 实例,以使用 AWS Code Pipeline 自定义操作构建 Windows 容器。
这来自 AWS 代码示例,但我贡献了一些管道 运行 上下文相关变量作为环境变量可用于 EC2 实例,以防您的构建脚本需要管道执行 ID 之类的东西。
https://github.com/aws-samples/aws-codepipeline-custom-action
这篇文章的博客 post 在这里 https://aws.amazon.com/blogs/devops/building-windows-containers-with-aws-codepipeline-and-custom-actions/