チュートリアル: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 サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

サービス インスタンスをプロビジョニングし、Java Spring アプリケーションを起動する

ここでは、サンプルの Microsoft サービス アプリケーションとして Piggy Metrics を使用し、「クイック スタート: Azure CLI を使用して Java Spring アプリケーションを起動する」と同じ手順に従って、サービス インスタンスのプロビジョニングとアプリケーションのセットアップを行います。 同じプロセスを既に完了している場合は、次のセクションにスキップできます。 それ以外の場合、Azure CLI コマンドは次のとおりです。 詳細については、「クイックスタート: Azure CLI を使用して Java Spring アプリケーションを起動する」を参照してください。

お使いのローカル コンピューターは、Jenkins ビルド サーバーと同じ前提条件を満たしている必要があります。 マイクロサービス アプリケーションをビルドしてデプロイするために、次のものがインストールされていることを確認します。

  1. Azure Spring Apps 拡張機能をインストールします。

    az extension add --name spring
    
  2. Azure Spring Apps サービスを格納するリソース グループを作成します。

    az group create --location eastus --name <resource group name>
    
  3. Azure Spring Apps のインスタンスをプロビジョニングします。

    az spring create -n <service name> -g <resource group name>
    
  4. Piggy Metrics リポジトリを自分の GitHub アカウントにフォークします。 お使いのローカル コンピューターで、対象のリポジトリを source-code というディレクトリにクローンします。

    mkdir source-code
    git clone https://github.com/<your GitHub id>/piggymetrics
    
  5. 対象の構成サーバーを設定します。 <your GitHub id> を適切な値に置き換えてください。

    az spring config-server git set -n <your-service-name> --uri https://github.com/<your GitHub id>/piggymetrics --label config
    
  6. プロジェクトをビルドします。

    cd piggymetrics
    mvn clean package -D skipTests
    
  7. 3 つのマイクロサービス (gatewayauth-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>
    
  8. アプリケーションをデプロイします。

    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
    
  9. ゲートウェイにパブリック エンドポイントを割り当てます。

    az spring app update -n gateway -s <service name> -g <resource group name> --is-public true
    
  10. アプリケーションが実行されていることを確認できるように、gateway アプリケーションに照会して URL を取得します。

    az spring app show --name gateway | grep url
    
  11. 前のコマンドによって提供された URL に移動し、PiggyMetrics アプリケーションを実行します。

Jenkins サーバーの準備

このセクションでは、ビルドを実行するために、テストに最適な Jenkins サーバーを準備します。 ただし、セキュリティへの影響があるため、Azure でエージェントを活用してお使いのビルドを実行するのに Azure VM エージェントまたは Azure Container エージェントを使用する必要があります。

プラグインをインストールする

  1. 自分の Jenkins サーバーにログインします。

  2. [Manage Jenkins]\(Jenkins の管理\) を選択します。

  3. [Manage Plugins]\(プラグインの管理\) を選択します。

  4. [Available]\(利用可能\) タブで、次のプラグインを選択します。

    これらのプラグインが一覧に表示されない場合、[Installed]\(インストール済み\) タブで、これらが既にインストール済みであるかどうかを確認してください。

  5. プラグインをインストールするには、[Download now and install after restart]\(今すぐダウンロードし、再起動後にインストール\) を選択します。

  6. 自分の Jenkins サーバーを再起動して、インストールを完了します。

Azure サービス プリンシパルの資格情報を Jenkins 資格情報ストアに追加する

  1. 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"
    }
    
  2. Jenkins ダッシュボードで、[Credentials]\(資格情報\)>[System]\(システム\) を選択します。 次に、[Global credentials(unrestricted)]\(グローバル資格情報 (制限なし)\) を選択します。

  3. [Add Credentials](資格情報の追加) を選択します。

  4. 種類として [Microsoft Azure Service Principal]\(Microsoft Azure サービス プリンシパル\) を選択します。

  5. 次の各フィールドに値を指定します。

    • サブスクリプション 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 拡張機能を実行するアクセス許可があることを確認します。

  1. SSH 経由で Jenkins コントローラーに接続します。

  2. Maven をインストールします。

    sudo apt-get install maven
    
  3. az version」と入力して、Azure CLI がインストールされていることを確認します。 Azure CLI がインストールされていない場合は、「Azure CLI のインストール」を参照してください。

  4. jenkins ユーザーに切り替えます。

    sudo su jenkins
    
  5. spring 拡張機能をインストールします。

    az extension add --name spring
    

Jenkinsfile を作成する

  1. 自分専用のリポジトリ (https://github.com/your_github_id/piggymetrics) のルートで Jenkinsfile を作成します。

  2. ファイルを次のように更新します。 <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'
            }
          }
        }
    
  3. 変更を保存してコミットします。

ジョブを作成する

  1. Jenkins ダッシュボードで [New Item]\(新しい項目\) を選択します。

  2. ジョブの名前として Deploy-PiggyMetrics を指定し、[Pipeline]\(パイプライン\) を選択します。 [OK] をクリックします。

  3. [パイプライン] タブを選択します。

  4. [定義] で、[Pipeline script from SCM]\(SCM からのパイプライン スクリプト\) を選択します。

  5. [SCM] で、[Git] を選択します。

  6. フォークしたリポジトリの GitHub URL を入力します: https://github.com/&lt;your GitHub id&gt;/piggymetrics.git

  7. ブランチ指定子 ('any' の場合は黒) の場合は、/Azure を選択します。

  8. [スクリプト パス]Jenkinsfile を選択します。

  9. [保存] を選びます。

ジョブを検証して実行する

ジョブを実行する前に、ログイン入力ボックスのテキストを編集して、ログイン ID を入力します。

  1. リポジトリで、/gateway/src/main/resources/static/ 内の index.html を開きます。

  2. enter your login を検索して、そのテキストを enter login ID に更新します。

    <input class="frontforms" id="frontloginform" name="username" placeholder="enter login ID" type="text" autocomplete="off"/>
    
  3. 変更を保存してコミットします。

  4. Jenkins でジョブを手動で実行します。 Jenkins ダッシュボードでジョブ Deploy-PiggyMetrics を選択し、[Build Now]\(今すぐビルド\) を選択します。

ジョブが完了したら、gateway アプリケーションのパブリック IP に移動し、アプリケーションが更新されたことを確認します。

Updated Piggy Metrics

リソースをクリーンアップする

この記事で作成したリソースが不要になったら、削除してください。

az group delete -y --no-wait -n <resource group name>

次のステップ