チュートリアル:Azure Pipelines を使用した ARM テンプレートの継続的インテグレーション
前のチュートリアルでは、リンク済みテンプレートをデプロイしました。 このチュートリアルでは、Azure Pipelines を使用して Azure Resource Manager テンプレート (ARM テンプレート) プロジェクトを継続的にビルドおよびデプロイする方法について説明します。
Azure DevOps は、チームによる作業の計画、コード開発での共同作業、アプリケーションのビルドおよびデプロイをサポートするために、開発者サービスを提供します。 開発者は、Azure DevOps Services を使用してクラウドで作業できます。 Azure DevOps は、Web ブラウザーまたは IDE クライアントを介してアクセス可能な機能の統合セットを提供します。 Azure Pipelines は、この機能の 1 つです。 Azure Pipelines は、完全な機能を備えた継続的インテグレーション (CI) および継続的デリバリー (CD) サービスです。 任意の Git プロバイダーと連携し、ほとんどの主要クラウド サービスにデプロイできます。 その後、Microsoft Azure、Google Cloud Platform、アマゾン ウェブ サービスのコードのビルド、テスト、およびデプロイを自動化できます。
Note
プロジェクト名を選択します。 チュートリアルを実行する場合は、ARMPipelineProj を実際のプロジェクト名で置き換えます。 このプロジェクト名は、リソース名を生成するために使用されます。 リソースの 1 つはストレージ アカウントです。 ストレージ アカウント名の長さは 3 ~ 24 文字で、数字と小文字のみを使用する必要があります。 名前は一意である必要があります。 このテンプレートでは、プロジェクト名に store を追加したものがストレージ アカウント名になります。プロジェクト名は 3 文字を超え、11 文字未満であることが必要です。 そのためプロジェクト名は、ストレージ アカウント名の要件を満たしていること、また 11 文字未満であることが必要となります。
このチュートリアルに含まれるタスクは次のとおりです。
- GitHub レポジトリを準備する
- Azure DevOps プロジェクトを作成する
- Azure パイプラインを作成する
- パイプラインのデプロイを確認する
- テンプレートを更新して再デプロイする
- リソースをクリーンアップする
Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
前提条件
この記事を完了するには、以下が必要です。
- テンプレートのリポジトリの作成に使用する GitHub アカウント。 持っていない場合は、無料で作成できます。 GitHub リポジトリの使用に関する詳細については、GitHub リポジトリの構築に関するページを参照してください。
- Git をインストールします。 このチュートリアルの手順では、Git Bash または Git Shell を使用します。 手順については、Git のインストールに関するページを参照してください。
- Azure DevOps 組織。 ない場合は、無料で作成できます。 組織またはプロジェクト コレクションの作成に関するページを参照してください。
- (省略可能) Visual Studio Code と Resource Manager ツール拡張機能。 「クイック スタート:Visual Studio Code を使用して ARM テンプレートを作成する」を参照してください。
GitHub レポジトリを準備する
GitHub を使用して、Resource Manager テンプレートを含むプロジェクトのソース コードを保存します。 その他のサポートされているリポジトリを使用する場合は、Azure DevOps でサポートされているリポジトリに関するページを参照してください。
GitHub リポジトリを作成する
GitHub アカウントをお持ちでない場合は、前提条件を参照してください。
GitHub にサインインします。
右上隅に表示されるご自身のアカウント イメージを選択し、自分のリポジトリを選択します。
緑色の [New] ボタンを選択します。
[Repository name] にリポジトリ名を入力します。 たとえば、ARMPipeline-repo とします。 忘れずにそれぞれの ARMPipeline を実際のプロジェクト名で置き換えてください。 このチュートリアルを [Public] または [Private] のどちらにするかを選択できます。 続いて、 [Create repository] を選択します。
URL を書き留めます。 リポジトリの URL は、
https://github.com/[YourAccountName]/[YourRepositoryName]
形式です。
このリポジトリは、リモート リポジトリと呼ばれます。 同じプロジェクトの開発者は、各自の "ローカル リポジトリ" を複製し、変更をリモート リポジトリにマージできます。
リモート リポジトリを複製する
Git Shell または Git Bash を開きます。 「前提条件」を参照してください。
現在のフォルダーが GitHub であることを確認します。
次のコマンドを実行します。
git clone https://github.com/[YourAccountName]/[YourGitHubRepositoryName] cd [YourGitHubRepositoryName] mkdir create_web_app cd create_web_app pwd
[YourAccountName]
は GitHub のアカウント名で、[YourGitHubRepositoryName]
は前の手順で作成したリポジトリ名で置換します。
create_web_app フォルダーは、テンプレートが保存されているフォルダーです。 pwd
コマンドを実行すると、フォルダー パスが表示されます。 次の手順に従い、このパスにテンプレートを保存します。
クイックスタート テンプレートをダウンロードする
テンプレートを作成する代わりに、テンプレートをダウンロードして create_web_app フォルダーに保存することもできます。
- メイン テンプレート: https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/get-started-deployment/linked-template/azuredeploy.json
- リンク済みテンプレート: https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/get-started-deployment/linked-template/linkedStorageAccount.json
パイプラインでは、フォルダー名とファイル名の両方をそのまま使用します。 これらの名前を変更する場合は、パイプラインで使用する名前を更新する必要があります。
テンプレートをリモート リポジトリにプッシュする
ローカル リポジトリに azuredeploy.json が追加されました。 次に、テンプレートをリモート リポジトリにアップロードします。
Git Shell または Git Bash を開いていない場合は開きます。
ローカル リポジトリでディレクトリを create_web_app フォルダーに変更します。
フォルダー内に azuredeploy.json ファイルがあることを確認します。
次のコマンドを実行します。
git add . git commit -m "Add web app templates." git push origin main
LF に関する警告が表示されることがあります。 この警告は無視できます。 main はメイン ブランチです。 通常は、更新ごとにブランチを作成します。 チュートリアルを簡単にするために、メイン ブランチを直接使用します。
ブラウザーから GitHub リポジトリに移動します。 URL は
https://github.com/[YourAccountName]/[YourGitHubRepository]
です。 create_web_app フォルダーと、そのフォルダーの中の 2 つのファイルが表示されます。azuredeploy.json を選択してテンプレートを開きます。
[Raw](未加工) ボタンを選択します。 URL は
https://raw.githubusercontent.com
で始まります。URL のコピーを作成します。 後でこのチュートリアルの中でパイプラインを構成する際に、この値を指定する必要があります。
ここまでで、GitHub リポジトリを作成して、リポジトリにテンプレートをアップロードできました。
DevOps プロジェクトを作成する
次の手順に進むには、DevOps 組織が必要です。 ない場合は、前提条件を参照してください。
Azure DevOps にサインインします。
左側から DevOps 組織を選択し、[新しいプロジェクト] を選択します。 プロジェクトがない場合は、プロジェクトの作成ページが自動的に開かれます。
次の値を入力します。
- [プロジェクト名]: プロジェクト名を入力します。 チュートリアルの最初に選択したプロジェクト名を使用することができます。
- [可視性]: [プライベート] を選択します。
他のプロパティには既定値をそのまま使用します。
[作成] を選択します
プロジェクトを Azure にデプロイするために使用するサービス接続を作成します。
左側のメニューの下部にある [Project settings] (プロジェクトの設定) を選択します。
[パイプライン] の下にある [サービス接続] を選択します。
[サービス接続の作成] を選択し、 [Azure Resource Manager] を選択して、 [次へ] を選択します。
[サービス プリンシパル (自動)] を選択し、[次へ] を選択します。
次の値を入力します。
- [スコープのレベル] : [サブスクリプション] を選択します。
- [サブスクリプション] : ご使用のサブスクリプションを選択します。
- リソース グループ:空白のままにします。
- [接続名] : 接続名を入力します。 たとえば、ARMPipeline-conn とします。 パイプラインを作成するときに必要になるので、この名前を書き留めておきます。
- [すべてのパイプラインへのアクセス許可を与える] : (オン)
[保存] を選択します。
パイプラインを作成する
ここまでで、以下のタスクが完了しました。 GitHub と DevOps を使い慣れており、前のセクションをスキップした場合は、続行する前に以下のタスクを完了する必要があります。
- GitHub リポジトリを作成し、リポジトリの create_web_app フォルダーにこのテンプレートを保存する。
- DevOps プロジェクトを作成し、Azure Resource Manager サービス接続を作成する。
テンプレートをデプロイする手順を含むパイプラインを作成するには、以下の手順を実行します。
左側のメニューから [パイプライン] を選択します。
[パイプラインを作成] を選択します。
[接続] タブで [GitHub] を選択します。 尋ねられた場合は GitHub の資格情報を入力し、指示に従います。 次の画面が表示されたら、[Only select repositories] (リポジトリのみ選択) を選択し、一覧にリポジトリがあることを確認してから [Approve & Install] (承認してインストール) を選択します。
[選択] タブで、リポジトリを選択します。 既定の名前は
[YourAccountName]/[YourGitHubRepositoryName]
です。[構成] タブで [Starter pipeline] (スターター パイプライン) を選択します。 2 つのスクリプト手順が記述された azure-pipelines.yml パイプライン ファイルが表示されます。
yml ファイルから 2 つのスクリプト ステップを削除します。
steps: の後の行にカーソルを移動します。
画面の右側にある [アシスタントを表示する] を選択して [タスク] ペインを開きます。
[ARM template deployment](ARM テンプレートのデプロイ) を選択します。
次の値を入力します。
- deploymentScope: [リソース グループ] を選択します。 スコープの詳細については、「デプロイのスコープ」を参照してください。
- Azure Resource Manager 接続: 前に作成したサービス接続名を選択します。
- サブスクリプション: ターゲット サブスクリプション ID を指定します。
- アクション:Create Or Update Resource Group アクションは、2 つのアクションを行います。1. 新しいリソース グループ名が提供されている場合は、リソース グループを作成します。2. 指定されたテンプレートをデプロイします。
- [リソース グループ] :新しいリソース グループの名前を入力します。 たとえば、ARMPipeline-rg とします。
- [場所] :リソース グループの場所を選択します (米国中部など)。
- テンプレートの場所: ファイルの URLを選択します。この URL を使用してテンプレート ファイルが検索されます。 メイン テンプレートで relativePath が使用され、relativePathは URI ベースのデプロイでのみサポートされるため、ここでは URL を使用する必要があります。
- テンプレート リンク: 「GitHub リポジトリを準備する」セクションの最後にある URL を入力します。 これは
https://raw.githubusercontent.com
で始まります。 - テンプレート パラメーターのリンク: このフィールドは空のままにします。 [テンプレート パラメーターのオーバーライド] にパラメーターの値を指定します。
- [テンプレート パラメーターのオーバーライド] : 「
-projectName [EnterAProjectName]
」と入力します。 - デプロイ モード: [増分] を選択します。
- デプロイ名: 「DeployPipelineTemplate」と入力します。 [デプロイ名] は、 [Advanced](詳細) を選択すると表示されます。
[追加] を選択します。
このタスクの詳細については、「Azure リソース グループの配置タスク」と Azure Resource Manager テンプレートのデプロイ タスクに関するページを参照してください。
yml ファイルは次のようになります。
[保存および実行] を選択します。
[保存および実行] ペインから、もう一度 [保存および実行] を選択します。 YAML ファイルのコピーが接続されているリポジトリに保存されます。 リポジトリを参照すると、YAML ファイルを確認できます。
パイプラインが正常に実行されることを確認します。
デプロイを検証する
- Azure portal にサインインします。
- リソース グループを開きます。 この名前は、パイプラインの YAML ファイルで指定したものです。 作成した 1 つのストレージ アカウントが表示されます。 ストレージ アカウント名は、store で始まります。
- ストレージ アカウント名を選択して開きます。
- [プロパティ] を選択します。 [レプリケーション] が [ローカル冗長ストレージ (LRS)] になっていることに注意してください。
更新して再デプロイする
テンプレートを更新してリモート リポジトリに変更をプッシュすると、パイプラインは自動的にリソースを更新します。今回の場合は、ストレージ アカウントが更新されます。
Visual Studio Code または任意のテキスト エディターで、ローカル リポジトリの linkedStorageAccount.json を開きます。
storageAccountType の defaultValue を Standard_GRS に更新します。 次のスクリーンショットをご覧ください。
変更を保存します。
Git Bash/Shell から次のコマンドを実行して、リモート リポジトリに変更をプッシュします。
git pull origin main git add . git commit -m "Update the storage account type." git push origin main
最初のコマンド (
pull
) は、ローカル リポジトリをリモート リポジトリと同期します。 リモート リポジトリに追加されたのは、パイプラインの YAML ファイルのみです。pull
コマンドを実行すると、YAML ファイルのコピーがローカル ブランチにダウンロードされます。4 つ目のコマンド (
push
) によって、修正後の linkedStorageAccount.json ファイルがリモート リポジトリにアップロードされます。 リモート リポジトリのメイン ブランチが更新されたので、パイプラインが再度実行されます。
変更内容を確認するには、ストレージ アカウントのレプリケーション プロパティを確認できます。 「デプロイを検証する」を参照してください。
リソースをクリーンアップする
Azure リソースが不要になったら、リソース グループを削除して、デプロイしたリソースをクリーンアップします。
- Azure portal で、左側のメニューから [リソース グループ] を選択します。
- [名前でフィルター] フィールドに、リソース グループ名を入力します。
- リソース グループ名を選択します。
- トップ メニューから [リソース グループの削除] を選択します。
GitHub リポジトリと Azure DevOps プロジェクトを削除しても構いません。
次のステップ
お疲れさまでした。Resource Manager テンプレートをデプロイするチュートリアルは以上です。 ご意見やご提案がありましたら、フィードバック セクションからお寄せください。 よろしくお願いいたします。 テンプレートに関するより高度な概念を学ぶ準備ができました。 次のチュートリアルでは、デプロイするリソースを効率よく定義できるテンプレート リファレンス ドキュメントの利用について詳しく取り上げます。