了解 Puppet 在 Windows 部署自动化中的用例

了解 Puppet 在 Windows 部署自动化中的用例

我必须在 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/',
}

相关内容