我必须在Windows环境中自动执行一些任务。 正在使用的技术是MS SQL Server 2008,IIS,MSMQ等。运行应用程序的所有依赖项都安装在一台机器上。 但是,在生产环境中,依赖关系是在不同的实例上设置的。 截至目前,在任何实例上安装依赖关系(SQL Server,IIS等)都是手动的。
我打算做的第一件事就是创build一个包含所有相关组件(软件)的基本映像。 我认为Puppet和Powershell和Jenkins一起会帮助我。 我对Puppet和Powershell都是新手。
我的目标是:
1)在主机上自动安装软件。
2)在所有(或大部分)环境(开发,集成,分期,UAT,生产)上使用此映像
上述步骤应该是自动化的。
现在我的困惑是,如果我使用Powershell说,安装SQL服务器(和其他软件),那么木偶进入图片? 我可以从Jenkins调用这个Powershell脚本,通过在环境中使用自定义configuration文件来部署在不同的环境中。 我在这里不是很了解木偶的真实用例吗? 我应该实际上使用任何其他工具,如docker等? 请指导我
这甚至不是一件事情。 Puppet可以运行PowerShell脚本 。 但是还有另外一个很大的原因,那就是两者之间没有可比性
PowerShell是程序性的,Puppet是声明性的。 你也可以在Puppet中使用PowerShell ,只要你使用方法来使脚本的调用具有幂等性检查。
exec { 'rename-guest': command => file('guest/rename-guest.ps1'), onlyif => file('guest/guest-exists.ps1'), provider => powershell, logoutput => true, }
Puppet还可以报告,区分,自动修正Puppet以外的变化(称为configuration漂移),还有更多function使其成为configurationpipe理工具而不是脚本语言。
Puppet + PowerShell是一个更完整的解决scheme。 现在让我们来看看如何使用本地资源来减less代码。
假设你想运行一个脚本来确保安装IIS和ASP.NET。 您需要确保提供所有适当的检查,以便如果该脚本运行多次,则不会出错。 你基本上要确保安装IIS,并configurationASP.NET,否则退出。
在木偶这样做是微不足道的。 假设这是部署到Windows Server 2012框中:
windowsfeature { 'Web-WebServer': installmanagementtools => true, } -> windowsfeature { 'Web-Asp-Net45': }
这实际上是确保安装IIS和ASP.NET所需的全部function。 想象一下你需要编写的PowerShell的行数。
有一个更完整的例子来设置一个完整的权限在puppet-chocolatey_server的网站。
您可以使用SQL Server模块 。 这里是一个例子(有更多涉及的例子可用):
sqlserver_instance{ 'MSSQLSERVER': features => ['SQL'], source => 'E:/', sql_sysadmin_accounts => ['myuser'], }
当你使用巧克力时这变得微不足道。
Chocolatey是一个完整的软件pipe理工具, 集成到Puppet中 。
通常使用Chocolatey的组织不使用社区软件包仓库 ( https://chocolatey.org/packages ),因为那里提供的软件包受分发权限的限制,需要在运行时从官方位置下载。 组织通常对破损的容忍度很低,所以他们创build和托pipe自己的软件包(在内部他们没有分配合法性)。 这样的过程是完全安全的,可重复的,可靠的。
package { 'notepadplusplus': ensure => latest, provider => 'chocolatey', source => 'https://internal/odata/repo/', }