ビルドインフラストラクチャ用のVMの作成を自動化して、次のことができるようにする予定です。
- 必要に応じてビルドエージェントを追加し、不要な場合は削除するなど、要求に基づいてビルドリソースをスケーリングします。
- マシンが停止した場合に、ビルド環境のすべてまたは一部を再作成します
- テストのセットアップが必要なときにビルド環境を複製する
このプロセスの手順の1つは、VMベースイメージの作成を自動化することです(この場合はHyper-Vを使用しています)。そのために、次のようなスクリプトがあります。
- Convert-WindowsImageスクリプトを使用して、ISOから新しいVHDXを作成します。現在Windows 2012R2を使用していますが、利用可能になり次第、2016年の開始を目指しています。
- 必要なすべての基本構成を使用して、無人スクリプトを新しいVHDXに追加します
- Apply-WindowsUpdateスクリプトを使用して、VHDXを最新のWindowsパッチで更新します。
- VHDXに基づいて新しいHyper-V VMを作成し、起動します
- VMが起動するのを待ち、WinRMサービスがリモート接続を受け入れる準備ができるのを待ちます
- ウィンドウが初期構成と新しいパッチの構成を完了するのを待ちます
- 追加のパッチを適用します
- 最新のパッチの構成を完了するために再起動します
- ウィンドウがパッチの構成を完了するのを待つ
- sysprepスクリプトをマシンにプッシュし、そのスクリプトを呼び出します。これはsysprepを実行してからマシンをオフにします
- VMを削除しますが、VHDXは保持します
- VHDXからsysprepファイルと無人ファイルを削除してから、VHDXを圧縮します
- VHDXをテンプレートの場所に移動し、読み取り専用としてマーク
発生している問題はステップ6と9にあります。理想的には、すべての構成が完了するまで待ってからマシンを再起動/シャットダウンしますが、ウィンドウが構成ステージを完了したことを検出する方法がないようです。
ログインUIはプロセスの準備ができるまで表示されないので、UIを通過するとき、どちらのステップが完了しても非常に明確です。ただし、WinRMを使用してマシンにリモート接続する場合、WinRMは構成作業が完了する前にマシンへのアクセスを提供するため、これはあまり明確ではありません。
したがって、問題は、リモート接続を介してWindowsが更新の設定などを完了したことを検出する最も簡単な方法であり、後で問題を引き起こすことなくマシンを再起動/シャットダウンできるようにすることです。
------編集-----
最終的に我々は我々のスクリプトも待つにキャサリンの回答の修正版を使用しているwindeploy
し、ngen
完全に。ngen
OSが機能する初期化が完了するまでは完了しません。ボーナスとして、最終的なVHDXにはすべての.NET Framework ngen-edが含まれます。つまり、新しいフレームワークを作成するときにそれを処理する必要はありません。テンプレートディスクのVM。VHDXテンプレートを作成するために使用するスクリプトとローカルテスト環境を作成するためのスクリプトはどちらも、誰かが興味を持っている場合に備えてgithubにあります。