了解 Windows 部署自動化中 Puppet 的案例
我必須在 Windows 環境中自動化一些任務。使用的技術是 MS SQL Server 2008、IIS、MSMQ 等。執行應用程序的所有依賴項都安裝在一台機器上。但是,在生產環境中,依賴項是在不同的實例上設置的。到目前為止,在任何實例上安裝依賴項(SQL 伺服器、IIS 等)都是手動的。
我計劃做的第一件事是創建一個包含所有依賴組件(軟體)的基礎映像。我認為 Puppet 和 Powershell 以及 Jenkins 將在這方面幫助我。我是 Puppet 和 Powershell 的新手。
我的目標是:
1)在基礎機器上自動安裝軟體。
- 在所有(或大多數)環境(Dev、Integration、Staging、UAT、Production)上使用此映像
上述兩個步驟都應該是自動化的。
現在我的困惑是,如果我使用 Powershell 安裝 SQL 伺服器(以及其他軟體),那麼 Puppet 會出現在哪裡?我可以通過使用環境的自定義配置文件從 Jenkins 呼叫這個 Powershell 腳本來部署在不同的環境中。我在這裡不了解 Puppet 的真實案例嗎?我是否應該實際使用任何其他工具,例如 Docker 等?請指導我。
PowerShell vs 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 之外的更改(稱為配置漂移)以及許多使其成為配置管理工具而不是腳本語言的功能。
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_server設置一個完整的具有權限的網站。
管理 SQL Server 安裝
您可以使用SQL Server 模組。這是一個範例(有更多相關範例可用):
sqlserver_instance{ 'MSSQLSERVER': features => ['SQL'], source => 'E:/', sql_sysadmin_accounts => ['myuser'], }
安裝軟體
當您使用Chocolatey時,這變得微不足道。
- 是的,Chocolatey 建立在無人值守安裝和 PowerShell 之上。
- 是的,Chocolatey 與 zip 和執行時二進製文件一起工作。
- 不,它不需要網際網路。
- 它也不需要您在執行時從 Internet 下載東西。
Chocolatey 是一個完整的軟體管理工具,可以直接集成到 Puppet中。
通常使用 Chocolatey 的組織不使用社區包儲存庫( https://chocolatey.org/packages ),因為那裡提供的包受分發權的約束,需要在執行時從官方位置下載。組織通常對損壞的容忍度非常低,因此他們創建和託管自己的包(在內部他們沒有分發合法性)。這樣,該過程是完全安全的、可重複的和可靠的。
package { 'notepadplusplus': ensure => latest, provider => 'chocolatey', source => 'https://internal/odata/repo/', }