チュートリアル:Jenkins と Azure CLI を使用して Azure Spring Apps にアプリをデプロイする
Note
Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。
Azure Spring Apps は、組み込みのサービス検出および構成管理を備えたフル マネージド マイクロサービス開発環境です。 このサービスを使用すると、Spring Boot ベースのマイクロサービス アプリケーションを簡単に Azure にデプロイできます。 このチュートリアルでは、Jenkins で Azure CLI を使用して Azure Spring Apps の継続的インテグレーションと継続的デリバリー (CI/CD) を自動化する方法を示します。
このチュートリアルでは、以下のタスクを完了します。
- サービス インスタンスをプロビジョニングし、Java Spring アプリケーションを起動する
- Jenkins サーバーを準備する
- Jenkins のパイプラインで Azure CLI を使用して、マイクロサービス アプリケーションをビルドおよびデプロイする
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Jenkins: Linux VM に Jenkins をインストールします
- GitHub アカウント: GitHub アカウントがない場合は、開始する前に無料アカウントを作成してください。
サービス インスタンスをプロビジョニングし、Java Spring アプリケーションを起動する
ここでは、サンプルの Microsoft サービス アプリケーションとして Piggy Metrics を使用し、「クイック スタート: Azure CLI を使用して Java Spring アプリケーションを起動する」と同じ手順に従って、サービス インスタンスのプロビジョニングとアプリケーションのセットアップを行います。 同じプロセスを既に完了している場合は、次のセクションにスキップできます。 それ以外の場合、Azure CLI コマンドは次のとおりです。 詳細については、「クイックスタート: Azure CLI を使用して Java Spring アプリケーションを起動する」を参照してください。
お使いのローカル コンピューターは、Jenkins ビルド サーバーと同じ前提条件を満たしている必要があります。 マイクロサービス アプリケーションをビルドしてデプロイするために、次のものがインストールされていることを確認します。
- Git
- JDK 8
- Maven 3.0 以降
- Azure CLI のインストール (バージョン 2.0.67 以上)
Azure Spring Apps 拡張機能をインストールします。
az extension add --name spring
Azure Spring Apps サービスを格納するリソース グループを作成します。
az group create --location eastus --name <resource group name>
Azure Spring Apps のインスタンスをプロビジョニングします。
az spring create -n <service name> -g <resource group name>
Piggy Metrics リポジトリを自分の GitHub アカウントにフォークします。 お使いのローカル コンピューターで、対象のリポジトリを
source-code
というディレクトリにクローンします。mkdir source-code git clone https://github.com/<your GitHub id>/piggymetrics
対象の構成サーバーを設定します。 <your GitHub id> を適切な値に置き換えてください。
az spring config-server git set -n <your-service-name> --uri https://github.com/<your GitHub id>/piggymetrics --label config
プロジェクトをビルドします。
cd piggymetrics mvn clean package -D skipTests
3 つのマイクロサービス (gateway、auth-service、および account-service) を作成します。
az spring app create --n gateway -s <service name> -g <resource group name> az spring app create --n auth-service -s <service name> -g <resource group name> az spring app create --n account-service -s <service name> -g <resource group name>
アプリケーションをデプロイします。
az spring app deploy -n gateway -s <service name> -g <resource group name> --jar-path ./gateway/target/gateway.jar az spring app deploy -n account-service -s <service name> -g <resource group name> --jar-path ./account-service/target/account-service.jar az spring app deploy -n auth-service -s <service name> -g <resource group name> --jar-path ./auth-service/target/auth-service.jar
ゲートウェイにパブリック エンドポイントを割り当てます。
az spring app update -n gateway -s <service name> -g <resource group name> --is-public true
アプリケーションが実行されていることを確認できるように、gateway アプリケーションに照会して URL を取得します。
az spring app show --name gateway | grep url
前のコマンドによって提供された URL に移動し、PiggyMetrics アプリケーションを実行します。
Jenkins サーバーの準備
このセクションでは、ビルドを実行するために、テストに最適な Jenkins サーバーを準備します。 ただし、セキュリティへの影響があるため、Azure でエージェントを活用してお使いのビルドを実行するのに Azure VM エージェントまたは Azure Container エージェントを使用する必要があります。
プラグインをインストールする
自分の Jenkins サーバーにログインします。
[Manage Jenkins]\(Jenkins の管理\) を選択します。
[Manage Plugins]\(プラグインの管理\) を選択します。
[Available]\(利用可能\) タブで、次のプラグインを選択します。
これらのプラグインが一覧に表示されない場合、[Installed]\(インストール済み\) タブで、これらが既にインストール済みであるかどうかを確認してください。
プラグインをインストールするには、[Download now and install after restart]\(今すぐダウンロードし、再起動後にインストール\) を選択します。
自分の Jenkins サーバーを再起動して、インストールを完了します。
Azure サービス プリンシパルの資格情報を Jenkins 資格情報ストアに追加する
Azure にデプロイするには、Azure サービス プリンシパルが必要です。 詳細については、Azure App Service へのデプロイに関するチュートリアルの「サービス プリンシパルの作成」セクションを参照してください。
az ad sp create-for-rbac
からの出力は次のようになります。{ "appId": "xxxxxx-xxx-xxxx-xxx-xxxxxxxxxxxx", "displayName": "xxxxxxxjenkinssp", "name": "http://xxxxxxxjenkinssp", "password": "xxxxxx-xxx-xxxx-xxx-xxxxxxxxxxxx", "tenant": "xxxxxx--xxx-xxxx-xxx-xxxxxxxxxxxx" }
Jenkins ダッシュボードで、[Credentials]\(資格情報\)>[System]\(システム\) を選択します。 次に、[Global credentials(unrestricted)]\(グローバル資格情報 (制限なし)\) を選択します。
[Add Credentials](資格情報の追加) を選択します。
種類として [Microsoft Azure Service Principal]\(Microsoft Azure サービス プリンシパル\) を選択します。
次の各フィールドに値を指定します。
- サブスクリプション ID:Azure サブスクリプション ID
- [クライアント ID]: サービス プリンシパルの appid
- [クライアント シークレット]: サービス プリンシパルのパスワード
- [テナント ID]: Microsoft アカウント テナント ID
- [Azure 環境]: 環境に応じて適切な値を選択します。 たとえば、Azure グローバルには Azure を使用します
- ID:
azure_service_principal
と設定します。 この ID は、この記事の後の手順で使用します - 説明: この値は省略可能ですが、ドキュメント/メンテナンスの観点から推奨されます。
Maven と Azure CLI spring 拡張機能をインストールする
サンプル パイプラインでは、Maven を使用してビルドし、Azure CLI を使用してサービス インスタンスにデプロイします。 Jenkins のインストール時に、jenkins という名前の管理者アカウントが作成されます。 ユーザー jenkins に spring 拡張機能を実行するアクセス許可があることを確認します。
SSH 経由で Jenkins コントローラーに接続します。
Maven をインストールします。
sudo apt-get install maven
「
az version
」と入力して、Azure CLI がインストールされていることを確認します。 Azure CLI がインストールされていない場合は、「Azure CLI のインストール」を参照してください。jenkins
ユーザーに切り替えます。sudo su jenkins
spring 拡張機能をインストールします。
az extension add --name spring
Jenkinsfile を作成する
自分専用のリポジトリ (
https://github.com/your_github_id/piggymetrics
) のルートで Jenkinsfile を作成します。ファイルを次のように更新します。 <resource group name> および <service name> の値を必ず置き換えてください。 Jenkins で資格情報を追加したときに別の値を使用する場合は、azure_service_principal を適切な ID に置き換えます。
node { stage('init') { checkout scm } stage('build') { sh 'mvn clean package' } stage('deploy') { withCredentials([azureServicePrincipal('azure_service_principal')]) { // Log in to Azure sh ''' az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID az account set -s $AZURE_SUBSCRIPTION_ID ''' // Set default resource group name and service name. Replace <resource group name> and <service name> with the right values sh 'az config set defaults.group=<resource group name>' sh 'az config set defaults.spring=<service name>' // Deploy applications sh 'az spring app deploy -n gateway --jar-path ./gateway/target/gateway.jar' sh 'az spring app deploy -n account-service --jar-path ./account-service/target/account-service.jar' sh 'az spring app deploy -n auth-service --jar-path ./auth-service/target/auth-service.jar' sh 'az logout' } } }
変更を保存してコミットします。
ジョブを作成する
Jenkins ダッシュボードで [New Item]\(新しい項目\) を選択します。
ジョブの名前として Deploy-PiggyMetrics を指定し、[Pipeline]\(パイプライン\) を選択します。 [OK] をクリックします。
[パイプライン] タブを選択します。
[定義] で、[Pipeline script from SCM]\(SCM からのパイプライン スクリプト\) を選択します。
[SCM] で、[Git] を選択します。
フォークしたリポジトリの GitHub URL を入力します:
https://github.com/<your GitHub id>/piggymetrics.git
。ブランチ指定子 ('any' の場合は黒) の場合は、/Azure を選択します。
[スクリプト パス] で Jenkinsfile を選択します。
[保存] を選びます。
ジョブを検証して実行する
ジョブを実行する前に、ログイン入力ボックスのテキストを編集して、ログイン ID を入力します。
リポジトリで、
/gateway/src/main/resources/static/
内のindex.html
を開きます。enter your login
を検索して、そのテキストをenter login ID
に更新します。<input class="frontforms" id="frontloginform" name="username" placeholder="enter login ID" type="text" autocomplete="off"/>
変更を保存してコミットします。
Jenkins でジョブを手動で実行します。 Jenkins ダッシュボードでジョブ
Deploy-PiggyMetrics
を選択し、[Build Now]\(今すぐビルド\) を選択します。
ジョブが完了したら、gateway
アプリケーションのパブリック IP に移動し、アプリケーションが更新されたことを確認します。
リソースをクリーンアップする
この記事で作成したリソースが不要になったら、削除してください。
az group delete -y --no-wait -n <resource group name>