我必须在 Windows 环境中自动执行一些任务。使用的技术是 MS SQL Server 2008、IIS、MSMQ 等。运行应用程序的所有依赖项都安装在一台机器上。但是,在生产环境中,依赖项设置在不同的实例上。到目前为止,任何实例上的依赖项(SQL 服务器、IIS 等)的安装都是手动的。
我计划做的第一件事是创建一个包含所有依赖组件(软件)的基础映像。我认为 Puppet 和 Powershell 以及 Jenkins 可以帮助我完成这项工作。我对 Puppet 和 Powershell 都很陌生。
我的目标是:
1)自动在基础机器上安装软件。2
)在所有(或大多数)环境(开发、集成、登台、UAT、生产)上使用此映像
上述两个步骤都应该自动化。
现在我感到困惑的是,如果我使用 Powershell 安装 SQL 服务器(以及其他软件),那么 Puppet 会如何发挥作用?我可以从 Jenkins 调用此 Powershell 脚本,通过使用环境的自定义配置文件在不同环境中部署。我是否不理解 Puppet 的真正用例?我是否应该使用任何其他工具,例如 Docker 等?请指导我。
答案1
PowerShell 与 Puppet 的比较是错误的问题
这根本就不是事儿。Puppet 可以运行 PowerShell 脚本但还有一个重要原因使得两者实际上无法进行比较。
PowerShell 是程序性的,而 Puppet 是声明性的。您还可以使用PowerShell 与 Puppet,只要您使用方法使对脚本的调用具有幂等性检查。
exec { 'rename-guest':
command => file('guest/rename-guest.ps1'),
onlyif => file('guest/guest-exists.ps1'),
provider => powershell,
logoutput => true,
}
Puppet 还具有报告、差异、自动更正 Puppet 之外的更改(称为配置漂移)等许多功能,这些功能使其成为配置管理工具而不是脚本语言。
金宝博官方网站木偶+PowerShell是一个更完整的解决方案。现在让我们看看如何使用本机资源来真正减少代码。
示例 - 确保 IIS 和 ASP.NET 安装
假设您要运行一个脚本来确保 IIS 和 ASP.NET 的安装。您需要确保提供所有正确的检查,以便如果该脚本运行多次,它不会出错。您基本上要确保 IIS 已安装且 ASP.NET 已配置,否则退出。
在 Puppet 中执行此操作很简单。假设这是部署到 Windows Server 2012 机器:
windowsfeature { 'Web-WebServer':
installmanagementtools => true,
} ->
windowsfeature { 'Web-Asp-Net45':
}
这是字面上地您需要确保已安装 IIS 和 ASP.NET。想象一下,要完成同样的操作,您需要编写多少行 PowerShell 代码。
有一个更完整的示例,用于设置具有完整权限的网站puppet-chocolatey_服务器。
管理 SQL Server 安装
您可以使用SQL Server 模块。下面是一个例子(还有更多相关的例子):
sqlserver_instance{ 'MSSQLSERVER':
features => ['SQL'],
source => 'E:/',
sql_sysadmin_accounts => ['myuser'],
}
安装软件
当你使用时,这变得微不足道巧克力味。
- 是的,Chocolatey 建立在无人值守安装和 PowerShell 的基础上。
- 是的,Chocolatey 可以与 zip 文件和运行时二进制文件一起使用。
- 不,它不需要互联网。
- 它也不需要您在运行时从互联网下载东西。
Chocolatey 是一款完整的软件管理工具,直接集成到 Puppet 中。
通常使用 Chocolatey 的组织不使用社区软件包存储库(https://chocolatey.org/packages)因为那里提供的套餐是受分发权约束,运行时需要从官方位置下载。组织通常对破坏的容忍度很低,因此他们创建并托管自己的软件包(在内部他们没有分发合法性)。这样,该过程就完全安全、可重复且可靠。
package { 'notepadplusplus':
ensure => latest,
provider => 'chocolatey',
source => 'https://internal/odata/repo/',
}