Azure DevOps からイメージ ファクトリを実行する
この記事では、Azure DevOps (旧称 Visual Studio Team Services) からイメージ ファクトリを実行するために必要な、すべての準備について説明します。
Note
どのようなオーケストレーション エンジンでも機能します。 Azure DevOps は必須ではありません。 イメージ ファクトリは、Azure PowerShell スクリプトを使用して実行されるので、Windows タスク スケジューラや他の CI/CD システムを使用して、手動で実行できます。
イメージ ファクトリ用のラボの作成
イメージ ファクトリを設定する最初の手順は、Azure DevTest Labs でラボを作成することです。 このラボは、仮想マシンを作成してカスタム イメージを保存する、イメージ ファクトリのラボです。 このラボは、イメージ ファクトリ プロセス全体の一部と見なされます。 ラボを作成した後は、後で必要になるため、必ず名前を保存してください。
スクリプトとテンプレート
チームのためにイメージ ファクトリを採用する際の次の手順は、使用可能なものを理解することです。 イメージ ファクトリ スクリプトとテンプレートは、DevTest Labs GitHub リポジトリから公的に入手できます。 構成要素の概要を次に示します。
- イメージ ファクトリ。 これはルート フォルダーです。
- 構成。 イメージ ファクトリへの入力
- GoldenImages。 このフォルダーには、カスタム イメージの定義を表す JSON ファイルが含まれています。
- Labs.json。 特定のカスタム イメージを受け取るためにチームがサインアップするファイルです。
- 構成。 イメージ ファクトリへの入力
- スクリプト。 イメージ ファクトリのエンジンです。
このセクションの記事では、これらのスクリプトとテンプレートについて詳しく説明します。
Azure DevOps チーム プロジェクトを作成する
Azure DevOps では、ソース コードを格納し、1 つの場所で Azure PowerShell を実行できます。 繰り返しの実行をスケジュールして、イメージを最新状態に維持することができます。 これには、問題の診断用に結果を記録するための優れた機能があります。 Azure DevOps の使用は要件ではありません。ただし、Azure に接続したり Azure PowerShell を実行したりできる任意のハーネス/エンジンを使用できます。
代わりに使用する既存の DevOps アカウントまたはプロジェクトがある場合、この手順をスキップします。
開始するには、Azure DevOps で無料アカウントを作成します。 [https://www.visualstudio.com/](https://www.visualstudio.com/ ) にアクセスし、Azure DevOps (以前の VSTS) の真下にある [無償版の入手] を選択します。 一意のアカウント名を選択し、Git を使用してコードを管理することを確実に選択する必要があります。 アカウントを作成したら、チーム プロジェクトの URL を保存します。 サンプル URL を次に示します: https://<accountname>.visualstudio.com/MyFirstProject
。
イメージ ファクトリの Git へのチェックイン
イメージ ファクトリのすべての PowerShell、テンプレート、構成は、パブリックの DevTest Labs GitHub レポジトリ内にあります。 新しいチーム プロジェクトにコードを取り込む最も速い方法は、リポジトリをインポートすることです。 インポートすることにより、DevTest Labs リポジトリ全体をプルします (これにより、追加のドキュメントやサンプルを取得できます)。
前の手順で作成した Azure DevOps プロジェクトを参照してください (URL は https://<accountname>.visualstudio.com/MyFirstProject のようになります)。
[Import a Repository]\(リポジトリのインポート\) を選択します。
DevTest Labs リポジトリのクローン URL を入力します:
https://github.com/Azure/azure-devtestlab
。インポートを選択します。
必要なもの (イメージ ファクトリ ファイル) のみを厳密にチェックインする場合は、ここに記載されてる手順に従って Git リポジトリを複製し、scripts/ImageFactory ディレクトリ内にあるファイルのみをプッシュします。
ビルドの作成と Azure への接続
この時点で、Azure DevOps の Git リポジトリ内にソース ファイルは格納されています。 ここで、Azure PowerShell を実行するためのパイプラインを設定する必要があります。 これらの手順を実行するためのたくさんのオプションがあります。 この記事では簡潔さのためにビルド定義を使用していますが、DevOps ビルド、DevOps リリース (1 つまたは複数の環境)、Windows タスク スケジューラのような他の実行エンジン、または Azure PowerShell を実行できるその他のすべてのハーネスでも機能します。
Note
留意しておくべき 1 つの重要な点は、一部の PowerShell のファイルは、多くのカスタム イメージ (10 以上) を作成するときには、実行に長い時間がかかるということです。 無料でホストされる DevOps ビルド/リリース エージェントは、タイムアウトは 30 分であるので、多くのイメージのビルドを開始したら、無料でホストされるエージェントは使用できません。 このタイムアウトの課題はどのハーネスを使用する場合でも適用されるので、長時間実行の Azure PowerShell スクリプトの場合は、標準的なタイムアウトを延長できるということを前もって確認しておくのは良いことです。 Azure DevOps の場合は、有料でホストされるエージェントを使用するか、独自のビルド エージェントを使用することができます。
開始するには、DevOps プロジェクトのホームページで [ビルドのセットアップ] を選択します。
ビルドの名前を指定します (たとえば、"イメージのビルドと DevTest Labs への配信")。
空のビルド定義を選択し、 [適用] を選択してビルドを作成します。
この段階で、ビルド エージェントに [Hosted]\(ホステッド\) を選択できます。
ビルド定義の [保存] を実行します。
ビルド変数の構成
コマンド ライン パラメーターを簡素化するには、イメージ ファクトリを一連のビルド変数にするキー値をカプセル化します。 [変数] タブを選択すると、いくつかの既定の変数の一覧が表示されます。 Azure DevOps に入力する変数の一覧を次に示します。
変数名 | 値 | Notes |
---|---|---|
ConfigurationLocation | /Scripts/ImageFactory/Configuration | この場所は、リポジトリ内の Configuration フォルダーへのフル パスです。 上記のリポジトリ全体をインポートした場合、左側の値が正しいです。 そうでない場合、構成の場所を指すように更新します。 |
DevTestLabName | MyImageFactory | イメージを生成するためのファクトリとして使用される Azure DevTest Labs のラボの名前です。 それがない場合は、作成します。 ラボが、サービス エンドポイントがアクセスするのと同じサブスクリプション内にあることを確認します。 |
ImageRetention | 1 | 各タイプの保存に必要なイメージの数。 既定値は 1 に設定します。 |
MachinePassword | ******* | 仮想マシンの組み込み管理者アカウントのパスワード。 このアカウントは一時的なものであるため、安全であることを確認します。 安全な文字列であることを確認するには、右側の小さなロック アイコンを選択します。 |
MachineUserName | ImageFactoryUser | 仮想マシンの組み込み管理者アカウント ユーザー名。 このアカウントは一時的なものです。 |
StandardTimeoutMinutes | 30 | 通常の Azure 操作を待つ必要があるタイムアウト。 |
SubscriptionId | 0000000000-0000-0000-0000-0000000000000 | ラボが存在し、サービス エンドポイントがアクセスできるサブスクリプションの ID。 |
VMSize | Standard_A3 | 作成手順に使用する仮想マシンのサイズ。 作成された VM は一時的なものです。 サイズは、ラボに有効なものでなければなりません。 十分なサブスクリプション コア クォータがあることを確認します。 |
Azure に接続する
次の手順では、サービス プリンシパルを設定します。 サービス プリンシパルは、Microsoft Entra ID 内の ID であり、これによりユーザーの代わりに Azure で DevOps ビルド エージェントが動作します。 設定するには、まず Azure PowerShell のビルド ステップを追加することから始めます。
- [タスクの追加] を選択します。
- Azure PowerShell を検索します。
- 見つかった場合は、 [追加] を選択してタスクをビルドに追加します。 [追加] を選択すると、追加されたタスクが左側に表示されます。
サービス プリンシパルを設定する最も速い方法は、Azure DevOps にその実行を任せることです。
- 先ほど追加したタスクを選択します。
- [Azure 接続の種類] で、 [Azure Resource Manager] を選択します。
- [管理] リンクを選択して、サービス プリンシパルを設定します。
詳細については、このブログの投稿を参照してください。 [管理] リンクを選択すると、Azure への接続を設定するための、DevOps の適切な場所が表示されます (ブログ投稿の 2 番目のスクリーン ショット)。 接続を設定するときは、Azure Resource Manager サービス エンドポイントを必ず選択します。
ビルド タスクを実行する
ビルド タスクを選択した場合、入力する必要があるすべての詳細が右側のウィンドウに表示されます。
最初に、ビルド タスクの名前を付けます。仮想マシンを作成します。
Azure Resource Manager を選択して作成したサービス プリンシパルを選択します。
サービス エンドポイントを選択します。
[スクリプト パス] に、右側で ...(省略記号) を選択します。
MakeGoldenImageVMs.ps1 スクリプトに移動します。
スクリプトのパラメーターは、次のように表示されます。
-ConfigurationLocation $(System.DefaultWorkingDirectory)$(ConfigurationLocation) -DevTestLabName $(DevTestLabName) -vmSize $(VMSize) -machineUserName $(MachineUserName) -machinePassword (ConvertTo-SecureString -string '$(MachinePassword)' -AsPlainText -Force) -StandardTimeoutMinutes $(StandardTimeoutMinutes)
ビルドをキューに配置する
新しいビルドをキューに配置することで、すべてが正しく設定されていることを確認します。 ビルドの実行中に、Azure portal に切り替え、 [All Virtual Machines]\(すべての仮想マシン\) をイメージ ファクトリのラボで選択して、すべてが正しく動作することを確認します。 ラボに 3 つの仮想マシンが作成されていることが表示されます。
次のステップ
Azure DevTest Labs に基づいてイメージ ファクトリを設定する最初の手順が完了しました。 シリーズの次の記事では、一般化されてカスタム イメージに保存される VM について説明します。 次に、それらを他のすべてのラボに配布します。 シリーズの次の記事をご覧ください。「カスタム イメージを保存して複数のラボに配布する」。