我正在尝试为几个 .NET 应用程序自动化我们的 CI 流程,在理想的情况下,我希望为每个应用程序启动一个 Windows EC2 实例,引导实例安装 Chef Solo,然后执行 Chef 配方来安装一些依赖项和打包的软件本身。
然而 - 我是一个新手,不知道这是否可行,更不用说从哪里开始:)
我非常熟悉 AWS 的命令行工具,因此可以顺利启动 AMI,但除此之外,我很难做到。我希望避免构建预装 chef 的自定义 AMI,因为这会失去很多优势。
我认为这基本上是我需要做的 - 但(毫不奇怪)专注于Linux:
http://www.opinionatedprogrammer.com/2011/06/chef-solo-tutorial-managing-a-single-server-with-chef/
有人能提供做过类似事情的人的链接吗?或者有更好的方法来实现我想要做的事情吗?
任何帮助均感激不尽。
答案1
大多数 Windows 引导资源都集中在 Hosted Chef 和使用knife-windows
插件上。
然而,使用 Chef solo 应该可以实现这一点。
如果你没有在chef-client
其上构建 AMI,那么你的第一步是获取完整的 Chef Windows 安装程序在那里。
幸运的是,我记得,winrm
Windows Amazon AMI 默认启用了此功能。请查看此处以了解潜在的引导解决方案:https://stackoverflow.com/a/13284313/2205881
您可以同时引导其他东西;例如 Ruby Windows 安装程序等。在同一过程中获取您的食谱、角色等并启动您的 Chef 配置。
更新
我已经开始以稍微不同的方式执行此操作,--user-data-file
在创建实例时使用。这可以与 AWS API、命令行工具一起使用,也可以在创建实例时直接粘贴到 Web 界面中启动实例。
我在用着巧克力味,一个包管理器,用于安装 chef-client。
<script>
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
cinst chef-client
</script>
基本上:
<script>
告诉 AWS 的用户数据脚本我们有一个要处理的批处理文件。
@powershell...
(等)是安装 Chocolatey 的命令这是文档.
cinst chef-client
安装chef-client
包裹。
所有这些都不需要任何用户输入。用户数据以本地管理员身份执行。
所有 Amazon AMI 都会在首次启动时运行其用户数据(默认情况下),而不会在后续启动时运行。因此,这是一种非常简单的安装方法,chef-client
无需连接到 RDP 甚至获取管理员密码。
答案2
另一种方法是简单地传入用 Powershell 编写的“用户数据脚本”。您只需创建一个类似于以下内容的文本文件(hello.ps1):
< 电源外壳 >
#此处提供下载和安装应用程序的代码
< /powershell >
然后,当您启动实例时,只需传入用户数据文件:
ec2run——区域“us-east-1”“$ami”`
--group "$mygroup" ` --subnet "$mySubnet" --instance-type "m1.medium" ` --key "$myKey" ` --user-data-file "hello.ps1"
您可以从 S3 下载二进制文件并通过单个 PowerShell 脚本完全完成安装。这里是一些来自亚马逊的文档供您参考