Windows環境でいくつかのタスクを自動化する必要があります。使用されているテクノロジは、MS SQL Server 2008、IIS、MSMQなどです。アプリケーションを実行するためのすべての依存関係は、単一のマシンにインストールされます。ただし、実稼働環境では、依存関係はさまざまなインスタンスに設定されます。現在のところ、任意のインスタンスへの依存関係(SQLサーバー、IISなど)のインストールはすべて手動です。
私が最初に計画していることは、すべての依存コンポーネント(ソフトウェア)を含むベースイメージを作成することです。 PuppetとPowershell、そしてJenkinsがこれに役立つと思います。私はPuppetとPowershellの両方に不慣れです。
私の目標は:
1)ベースマシンへのソフトウェアのインストールを自動化する。
2)このイメージをすべての(またはほとんどの)環境(開発、統合、ステージング、UAT、本番)で使用します
上記の両方の手順を自動化する必要があります。
今私が持っている混乱は、たとえばSQLサーバー(および他のソフトウェアも)をインストールするためにPowershellを使用する場合、Puppetはどこに現れるのでしょうか? JenkinsからこのPowershellスクリプトを呼び出して、環境のカスタム構成ファイルを使用してさまざまな環境に展開できます。ここでPuppetの実際のユースケースを理解していませんか? Dockerなどの他のツールを実際に使用する必要がありますか?案内してください。
これは実際には問題ではありません。 PuppetはPowerShellスクリプトを実行できます 。しかし、2つが実際に比較できないもう1つの大きな理由があります。
PowerShellは手続き型であり、Puppetは宣言型です。スクリプトへのこれらの呼び出しにべき等チェックを行うためのメソッドを使用する場合は、 PowerShell with 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が構成されていることを確認し、それ以外の場合は終了する必要があります。
Puppetでこれを行うのは簡単です。これがWindowsServer2012ボックスに展開されているとします。
windowsfeature { 'Web-WebServer':
installmanagementtools => true,
} ->
windowsfeature { 'Web-Asp-Net45':
}
これは文字通りIISおよびASP .NETがインストールされています。同じことを行うために作成する必要のあるPowerShellの行数を想像してみてください。
puppet-chocolatey_server に権限を備えたWebサイトをセットアップするためのより完全な例があります。
SQL Serverモジュール を使用できます。次に例を示します(より複雑な例があります)。
sqlserver_instance{ 'MSSQLSERVER':
features => ['SQL'],
source => 'E:/',
sql_sysadmin_accounts => ['myuser'],
}
Chocolatey を使用すると、これは簡単になります。
Chocolateyは、 Puppetに直接統合される の完全なソフトウェア管理ツールです。
Chocolateyを通常使用する組織は、そこで提供されるパッケージのため、 コミュニティパッケージリポジトリ ( https://chocolatey.org/packages )を使用しません。 )areは配布権の対象であり、実行時に公式の場所からダウンロードする必要があります。組織は通常、破損に対する許容度が非常に低いため、独自のパッケージを作成してホストします(内部的には配布の合法性はありません)。このようにして、プロセスは完全に安全で、再現性があり、信頼性があります。
package { 'notepadplusplus':
ensure => latest,
provider => 'chocolatey',
source => 'https://internal/odata/repo/',
}