Azure Pipelines の配置グループを使用して Azure VM にデプロイする
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
以前のバージョンの Azure Pipelines では、アプリケーションを複数のサーバーに配置する必要がある場合、大量の計画とメンテナンスが必要でした。 Windows PowerShell のリモート処理を手動で有効にし、必要なポートを開き、各サーバーに配置エージェントをインストールする必要がありました。 その後、ロールアウト配置が必要な場合は、パイプラインを手動で管理する必要がありました。
上記のすべての課題は、配置グループの導入によってシームレスに拡大しています。
配置グループは、構成されたグループ内の各ターゲット サーバーに配置エージェントをインストールし、それらのサーバーにアプリケーションを段階的に配置するようリリース パイプラインに指示します。 新しく導入された機能を検証するため、複数のユーザー グループにアプリケーションの最新バージョンを段階的にデリバリーできるよう、ロールアウト配置用に複数のパイプラインを作成できます。
注意
配置グループは、クラシック パイプラインで使われる概念です。 YAML パイプラインを使っている場合は、「環境」をご覧ください。
このチュートリアルで学習する内容は次のとおりです。
- テンプレートを使用した Azure への VM インフラストラクチャのプロビジョニング
- Azure Pipelines 配置グループの作成
- 配置グループを使ってソリューションを配置するための CI/CD パイプラインの作成と実行
前提条件
- Microsoft Azure アカウント。
- Azure DevOps 組織。
Azure DevOps デモ ジェネレーターを使って、Azure DevOps 組織にチュートリアルのプロジェクトをプロビジョニングします。
Azure の配置環境の設定
ARM テンプレートを使って、次のリソースを Azure でプロビジョニングします。
- IIS が構成された 6 台の Virtual Machines (VM) Web サーバー
- SQL Server VM (DB サーバー)
- Azure ネットワーク ロード バランサー
下の [Azure へのデプロイ] リンクをクリックして、リソースのプロビジョニングを始めます。 必要な情報をすべて入力して、[購入] を選びます。 このチュートリアルで再び使うことはないため、許可される管理ユーザー名とパスワードの任意の組み合わせを使用できます。 リソースがグローバルに一意の名前で確実に生成されるように、[Env Prefix Name] (環境プレフィックス名) がすべてのリソース名の前に付加されます。 個人的な値またはランダムな値を使ってみてください。ただし、検証または作成のときに名前の競合エラーが表示される場合は、このパラメーターを変更してもう一度実行してみてください。
Note
配置が完了するまでに約 10 から 15 分かかります。 名前付けの競合エラーが発生する場合は、[Env Prefix Name] (環境プレフィックス名) で指定するパラメーターを変更してみてください。
配置が完了したら、Azure portal を使って、指定したリソース グループに生成されたすべてのリソースを確認できます。 名前に sqlSrv が含まれる DB サーバー VM を選んで、詳細を表示します。
[DNS 名] を記録しておきます。 この値は、後のステップで必要になります。 コピー ボタンを使って、それをクリップボードにコピーできます。
配置グループの作成と構成
Azure Pipelines を使うと、アプリケーションの配置に必要なサーバーを簡単に編成できます。 配置グループは、配置エージェントを含むマシンのコレクションです。 各マシンは Azure Pipelines とやりとりして、アプリの配置を調整します。
ビルド パイプラインのために構成を変更する必要はないため、プロジェクトがプロビジョニングされるとビルドが自動的にトリガーされます。 後でリリースをキューに入れると、このビルドが使われます。
デモ ジェネレーターによって作成された Azure DevOps プロジェクトに移動します。
[パイプライン] の [配置グループ] に移動します。
[配置グループの追加] を選択します。
[リリース] の [配置グループ名] を入力して、[作成] を選びます。 登録スクリプトが生成されます。 自分で作業する場合は、提供されたスクリプトを使ってターゲット サーバーを登録できます。 ただし、このチュートリアルのターゲット サーバーは、リリース パイプラインの一部として自動的に登録されます。 リリース定義では、ステージを使ってターゲット サーバーにアプリケーションを配置します。 ステージは、タスクが実行される実行時ターゲットを定義するタスクの論理的なグループです。 各配置グループ ステージでは、配置グループで定義されているマシンでタスクが実行されます。
[パイプライン] の [リリース] に移動します。 [配置グループ] という名前のリリース パイプラインを選んで、[編集] を選びます。
[タスク] タブを選んで、パイプラインの配置タスクを表示します。 タスクは、[エージェント フェーズ]、[配置グループ フェーズ]、[IIS Deployment phase] (IIS 配置フェーズ) と呼ばれる 3 つのステージとして編成されています。
[エージェント フェーズ] を選びます。 このステージでは、Azure リソース グループ配置タスクを使って、ターゲット サーバーが配置グループに関連付けられます。 実行するには、エージェント プールと仕様を定義する必要があります。 Azure Pipelines プールと windows-latest 仕様を選びます。
[Azure リソース グループのデプロイ] タスクを選びます。 前にインフラストラクチャを作成するために使った Azure サブスクリプションへのサービス接続を構成します。 接続を承認した後、このチュートリアル用に作成したリソース グループを選びます。
このタスクは、Azure でホストされている仮想マシンで実行され、配置グループの要件をすべて満たすために、このパイプラインに接続できる必要があります。 接続をセキュリティ保護するには、個人用アクセス トークン (PAT) が必要です。 [ユーザー設定] ドロップダウンから、[個人用アクセス トークン] を新しいタブで開きます。ほとんどのブラウザーでは、右クリックしてコンテキスト メニューを使うか Ctrl キーを押しながらクリックして、新しいタブでリンクを開くことができます。
新しいタブで、[新しいトークン] を選びます。
名前を入力して、[フル アクセス] スコープを選びます。 [作成] を選んでトークンを作成します。 作成したら、トークンをコピーしてブラウザー タブを閉じます。Azure Pipelines エディターに戻ります。
[Azure Pipelines サービス接続] で、[新規] を選びます。
Azure DevOps の現在のインスタンスへの [接続 URL] を入力します。 この URL は
https://dev.azure.com/[Your account]
のようなものです。 前に作成した [個人用アクセス トークン] を貼り付けて、[サービス接続名] を指定します。 [Verify and save] を選択します。注意
エージェントを登録するには、エージェント プールでの管理者の役割のメンバーである必要があります。 エージェント プール管理者の ID は、登録の時点でのみ必要です。 管理者 ID はエージェントに保持されず、エージェントと Azure Pipelines の間での後続の通信では使われません。 個人用アクセス トークンは、登録時にのみ必要なので、エージェントを登録した後で、更新する必要はありません。
現在の [チーム プロジェクト] と、前に作成した [配置グループ] を選びます。
[配置グループ フェーズ] ステージを選びます。 このステージでは、配置グループで定義されているマシンでタスクが実行されます。 このステージは、SQL-Svr-DB タグにリンクされています。 ドロップダウンから [配置グループ] を選びます。
[IIS Deployment phase] (IIS 配置フェーズ) ステージを選びます。 このステージでは、指定したタスクを使ってアプリケーションが Web サーバーに配置されます。 このステージは WebSrv タグにリンクされています。 ドロップダウンから [配置グループ] を選びます。
[Disconnect Azure Network Load Balancer] (Azure ネットワーク ロード バランサーの切断) タスクを選びます。 ターゲット マシンは NLB に接続されているので、このタスクによってマシンは配置前に NLB から切断されて、配置後に NLB に再度接続されます。 Azure 接続、リソース グループ、ロード バランサーを使うようにタスクを構成します (存在する必要があるのは 1 つだけです)。
[IIS Web アプリの管理] タスクを選びます。 このタスクは、タスクとステージ用に構成された配置グループに登録されている配置ターゲット マシンで実行されます。 それによって、ポート 80 で実行される PartsUnlimited という名前の Web アプリとアプリケーション プールがローカル環境に作成されます
[IIS Web アプリの配置] タスクを選びます。 このタスクは、タスクとステージ用に構成された配置グループに登録されている配置ターゲット マシンで実行されます。 それによって、Web 配置を使ってアプリケーションが IIS サーバーに配置されます。
[Connect Azure Network Load Balancer] (Azure ネットワーク ロード バランサーの接続) タスクを選びます。 Azure 接続、リソース グループ、ロード バランサーを使うようにタスクを構成します (存在する必要があるのは 1 つだけです)。
[変数] タブを選び、次のように変数の値を入力します。
変数名 変数値 DatabaseName PartsUnlimited-Dev DBPassword P2ssw0rd@123 DBUserName sqladmin DefaultConnectionString Data Source=<実際の DNS 名>;Initial Catalog=PartsUnlimited-Dev;User ID=sqladmin;Password=P2ssw0rd@123;MultipleActiveResultSets=False;Connection Timeout=30; ServerName localhost 重要
DefaultConnectionString 変数では、SQL サーバーの DNS 名を実際の値に置き換えてください (前に Azure portal で記録したもの)。
SQL DNS を置き換えた後の DEFAULTConnectionString は、次の文字列のようになります。
Data Source=cust1sqljo5zndv53idtw.westus2.cloudapp.azure.com;Initial Catalog=PartsUnlimited-Dev;User ID=sqladmin;Password=P2ssw0rd@123;MultipleActiveResultSets=False;Connection Timeout=30;
最終的な変数リストは次のようになります。
注意
DefaultConnectionString
変数をシークレットとして保存する必要があるというエラーが表示される場合があります。 その場合は、変数を選び、その値の横に表示される南京錠アイコンをクリックして保護します。
リリースをキューに入れて配置を確認する
[保存] を選んで確認します。
[リリースの作成] を選んで確認します。 リリースの手順に従って完了します。 これで、配置をレビューできる状態になります。
Azure portal で、リソース グループのいずれかの Web VM を開きます。 名前に
websrv
が含まれるものであればどれを選んでもかまいません。VM の [DNS] をコピーします。 Azure Load Balancer は、負荷分散セットで定義されているサーバーの正常なインスタンス間に、着信したトラフィックを分散させます。 その結果、すべての Web サーバー インスタンスの DNS は同じです。
新しいブラウザー タブで VM の DNS を開きます。 配置されたアプリが実行されていることを確認します。
まとめ
このチュートリアルでは、Azure Pipelines と配置グループを使って、一連の Azure VM に Web アプリケーションを配置しました。 このシナリオは少数のマシンを対象としたものでしたが、事実上任意の構成を使って、数百台または数千台のマシンをサポートするようにプロセスを簡単に拡大できます。
リソースの後処理
このチュートリアルでは、Azure で Azure DevOps プロジェクトといくつかのリソースを作成しました。 これらのリソースを引き続き使用する予定がなければ、次の手順で削除します。
Azure DevOps デモ ジェネレーターによって作成された Azure DevOps プロジェクトを削除します。
このチュートリアルで作成されたすべての Azure リソースは、作成時に指定したリソース グループに割り当てられています。 そのグループを削除すると、それに含まれるリソースが削除されます。 この削除は、CLI またはポータルを使って実行できます。