演習 - Spring Boot サンプル アプリケーションをデプロイする
この演習では、自動ワークフローを使用して、Spring Boot サンプル アプリケーションをビルドしてデプロイします。
サンプル アプリケーションをデプロイするための GitHub アクションを設定する
Azure リソースのプロビジョニングが完了したので、サンプルの Spring Boot アプリケーションをデプロイできます。
Maven GitHub ワークフローを作成するために、Azure App Service ポータルの [デプロイ センター] で利用できる、組み込みの継続的インテグレーションと継続的デリバリー (CI/CD) ウィザード ツールを使用します。
Azure App Service [デプロイ センター] によって、自分のアプリケーション スタックに基づく GitHub Actions ワークフロー ファイルが自動的に生成されます。 次に [デプロイ センター] により、そのファイルが GitHub リポジトリの正しいディレクトリにコミットされます。 また、[デプロイ センター] によって、GitHub アクションが Azure App Service の発行プロファイルにリンクされます。
Azure portal で、Azure App Service Web アプリに移動します。
左側のペインで [デプロイ] を展開し、[デプロイ センター] を選択します。
[ソース] ドロップダウンの [継続的デプロイ (CI/CD)] で、[GitHub] を選択します。
[GitHub Actions] を選択します。 (これが既定のはずですが、そうでない場合は、[プロバイダーの変更] を選択してプロバイダー オプションを読み込みます。)
[設定] の下にあるドロップダウン リストで、次の操作を行います。
a. 使用する GitHub リポジトリを選択します。
b. ブランチでは [メイン] を選択します。
c. アプリケーション スタックでは [JAVA 8] を選択します。最後のページで選択内容を確認し、リポジトリにコミットされるワークフロー ファイルをプレビューします。
[保存] を選択してワークフロー ファイルをリポジトリにコミットし、アプリのビルドとデプロイをすぐに開始します。
Note
リポジトリで GitHub Actions ワークフローをトリガーすることもできます。それには、[Actions](アクション) タブを選択し、[build-and-deploy] ワークフローを選択してから、[Re-run jobs](ジョブの再実行) を選択します。
GitHub Actions のビルドを確認する
GitHub リポジトリで、[アクション] タブを選択し、左側にある [すべてのワークフロー] で [Build and deploy JAR app to Azure Web App](JAR アプリをビルドし、Azure Web アプリにデプロイする) を選択します。
次に、右側のテーブルにある [ワークフロー実行] で、ワークフロー実行の [App Service デプロイ ワークフロー構成の追加または更新] を選択します。
ワークフロー実行が完了するまで待ち、その後、ワークフロー実行の [デプロイ] ジョブの下で、Azure Web アプリ URL を表示する [デプロイ] ジョブの URL をコピーします。
最後に、ブラウザーで URL を開き、Java アプリケーションがデプロイされ、MySQL データベースに接続され、データを返していることを確認します。
次のステップ
お疲れさまでした。 これで、2 つの GitHub Actions ワークフロー (プロビジョニング アクションとビルドおよびデプロイ アクション) が作成されました。
git push
コマンドを入力してコードをコミットするたびに、ビルドおよびデプロイ アクションがトリガーされて、アプリケーションがデプロイされます。
重要
GitHub アクションのプロビジョニングを再実行しても、リソースが既に存在する場合は再作成されません。 リソース グループまたはリソースを手動で削除してから、GitHub アクションを再実行する必要があります。
ビルドおよびデプロイ GitHub アクションを再実行すると、アプリケーションが置き換えられます。
App Service インスタンスを再作成する場合は、新しい発行プロファイルにも変更を加える必要があります。 次の行のみを変更する必要があります。
publish-profile: ${{ secrets.AzureAppService_PublishProfile_c1ee8d191003493b9c9e13a9b78ad2c3 }}
サンプル アプリケーションをデプロイするための Azure パイプラインを設定する
前と同様に、アプリケーションをビルドしてデプロイするための Azure パイプラインを作成する必要があります。
Azure DevOps で、プロジェクトにアクセスし、[パイプライン] を選択して、[新しいパイプライン] (右上隅) を選択します。
パイプラインを設定するための 4 つのタブが表示されます。
- [接続] タブで、[GitHub] (YAML ファイル) を選択します。
- [選択] タブで、テンプレートが含まれる GitHub リポジトリを選択します。
- [構成] タブで、[既存の Azure Pipelines YAML ファイル] を使用することを選択します。
- 今回は、パスで "/azuredevops/build_deploy.ym" を選択します
- [続行] を選択して [*レビュー] タブに移動し、ご自分のパイプラインを実行する前に確認します。
[パイプライン YAML をレビューする] 画面で、パイプラインの作成に使用する Yaml ファイルを調べます。
name: Build and Deploy
trigger:
- main
stages:
# Build your Spring Boot App using Maven
- stage: Build
displayName: Build stage
jobs:
- job: MavenPackageAndPublishArtifacts
displayName: Maven Package and Publish Artifacts
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Maven@3
displayName: 'Maven Package'
inputs:
mavenPomFile: 'pom.xml'
- task: CopyFiles@2
displayName: 'Copy Files to artifact staging directory'
inputs:
SourceFolder: '$(System.DefaultWorkingDirectory)'
Contents: '**/target/*.?(war|jar)'
TargetFolder: $(Build.ArtifactStagingDirectory)
- upload: $(Build.ArtifactStagingDirectory)
artifact: drop
# Deploy to Azure using the AzureWebApp task using your Service Connection
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeployLinuxWebApp
displayName: Deploy Linux Web App
environment: 'production'
pool:
vmImage: 'ubuntu-latest'
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
displayName: 'Azure Web App Deploy'
inputs:
azureSubscription: $(serviceConnection)
appType: webAppLinux
appName: '$(webAppName)'
package: '$(Pipeline.Workspace)/drop/**/target/*.?(war|jar)'
"Build" 構成で使用するフィールドをいくつか確認しましょう。
- azureSubscription: ご自分の Azure サブスクリプション
- appType: ご自分の Web アプリの種類
- appName: 既存のアプリ サービスの名前
- package: パッケージへのファイル パスまたはアプリ サービスの内容が含まれるフォルダー
ビルド変数の追加
プロビジョニング パイプラインと同様に、ビルドおよびデプロイ パイプラインを保存して実行する前に、パイプラインの変数を追加する必要があります。
- 右上にある [Variables] を選択します。
- サービス接続の名前として値を持つ serviceConnection という名前の変数を追加します。
- 右下隅の [OK] を選択して、変数を保存します。
- webAppName という名前の 2 つ目の変数を App Service 名 (Terraform 変数 "application_name" で定義されている値と同じ値) で追加します。
- [OK] を選択して変数を保存します。
- 右下隅の [保存] を選択して、両方の変数を保存します。
パイプラインの実行を監視する
- && を選択し、パイプラインを保存して実行する
- "プロビジョニング" パイプラインで行ったように、各ステージと手順に従ってビルド プロセスをトレースします。
- Java アプリケーションがデプロイされていること、MySQL データベースに接続されていること、データが返されることを確認します。
次のステップ
お疲れさまでした。 これで、プロビジョニング パイプラインとビルドおよびデプロイ パイプラインの 2 つの Azure パイプライン ワークフローを作成しました。
git push
コマンドを入力して、コードを main ブランチにコミットするたびに、ビルドおよびデプロイ パイプラインがトリガーされて、アプリケーションがデプロイされます。
重要
プロビジョニング パイプラインを再実行しても、リソースが既に存在する場合は再作成されません。 リソース グループまたはリソースを手動で削除してから、パイプラインを再実行する必要があります。 これを運用環境でより適切に実現する方法の詳細については、「まとめ」セクションを参照してください。
ビルドおよびデプロイ パイプラインを再実行すると、アプリケーションが置き換えられます。
次のユニットは、このモジュールで学習した内容を確認するための知識チェックです。