チュートリアル: Jenkins と Azure CLI を使用して Azure App Service にデプロイする

重要

多くの Azure サービスには Jenkins プラグインがあります。これらのプラグインの一部は、2024 年 2 月 29 日時点ではサポート対象外となります。 Azure CLI は、Jenkins と Azure サービスを統合するために現在推奨されている方法です。 詳細については、「Azure 用の Jenkins プラグイン」を参照してください。

Java Web アプリを Azure にデプロイするには、Jenkins パイプラインで Azure CLI を使用します。 このチュートリアルでは、次のタスクを行います。

  • Jenkins VM を作成する
  • Jenkins を構成する
  • Azure で Web アプリを作成する
  • GitHub レポジトリを準備する
  • Jenkins パイプラインを作成する
  • パイプラインを実行し、Web アプリを確認する

前提条件

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Jenkins を構成する

次の手順は、必要な Java JDK と Maven を Jenkins コントローラーにインストールする方法を示しています。

  1. SSH を使用して Jenkins コントローラーにサインインします。

  2. apt-get リポジトリから Azure 用の OpenJDK の Azul Zulu ビルドをダウンロードしてインストールします。

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
    sudo apt-add-repository "deb http://repos.azul.com/azure-only/zulu/apt stable main"
    sudo apt-get -q update
    sudo apt-get -y install zulu-8-azure-jdk
    
  3. 次のコマンドを実行して Maven をインストールします。

    sudo apt-get install -y maven
    

Jenkins 資格情報への Azure サービス プリンシパルの追加

次の手順は、Azure 資格情報を指定する方法を示しています。

  1. 資格情報プラグインがインストールされていることを確認します。

  2. Jenkins ダッシュボードで、[Credentials]\(資格情報\) -> [System]\(システム\) -> を選択します。

  3. [Global credentials(unrestricted)]\(グローバル資格情報 (制限なし)\) を選択します。

  4. Microsoft Azure サービス プリンシパルを追加するには、[Add Credentials]\(資格情報の追加\) を選択します。 資格情報の種類が [Username with password]\(ユーザー名とパスワード\) であることを確認し、次の項目を入力します。

    • [Username]\(ユーザー名\) :サービス プリンシパル appId
    • パスワード: サービス プリンシパル password
    • [ID] - 資格情報の識別子 (AzureServicePrincipal など)

Java Web アプリをデプロイするための Azure App Service の作成

az appservice plan create を使用して、Free 価格レベルで Azure App Service プランを作成します。

az appservice plan create \
    --name <app_service_plan> \ 
    --resource-group <resource_group> \
    --sku FREE

重要なポイント:

  • App Service プランは、アプリをホストするために使用される物理リソースを定義します。
  • App Service プランに割り当てられたすべてのアプリケーションがこれらのリソースを共有します。
  • Appservice プランを使用すると、複数のアプリをホストするときのコストを削減できます。

Azure Web アプリを作成する

az webapp create を使用して、myAppServicePlan App Service プランで Web アプリ定義を作成します。

az webapp create \
    --name <app_name> \ 
    --resource-group <resource_group> \
    --plan <app_service_plan>

重要なポイント:

  • Web アプリ定義によって、アプリケーションにアクセスするための URL が提供され、Azure にコードをデプロイするためのいくつかのオプションが構成されます。
  • <app_name> プレースホルダーを一意のアプリ名で置き換えます。
  • アプリ名は、Web アプリの既定のドメイン名の一部です。 そのため、この名前は、Azure のすべてのアプリで一意である必要があります。
  • Web アプリをユーザーに公開する前に、カスタム ドメイン名エントリを Web アプリにマップできます。

Java を構成する

az appservice web config update を使用して、アプリの Java ランタイム構成を設定します。

az webapp config set \ 
    --name <app_name> \
    --resource-group <resource_group> \ 
    --java-version 1.8 \ 
    --java-container Tomcat \
    --java-container-version 8.0

GitHub レポジトリを準備する

  1. Azure 用のシンプルな Java Web アプリ レポジトリを開きます。

  2. 自身の GitHub アカウントにリポジトリをフォークするには、[Fork] ボタンを選択します。

  3. ファイル名をクリックして、Jenkinsfile ファイルを開きます。

  4. 鉛筆アイコンを選択してファイルを編集します。

  5. サブスクリプション ID とテナント ID を更新します。

      withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>',
            'AZURE_TENANT_ID=<tenant_id>']) 
    
  6. 行 22 と 23 にある、リソース グループと Web アプリの名前をそれぞれ更新します。

    def resourceGroup = '<resource_group>'
    def webAppName = '<app_name>'
    
  7. Jenkins インスタンスの資格情報 ID を更新します。

    withCredentials([usernamePassword(credentialsId: '<service_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
    

Jenkins パイプラインを作成する

Jenkins パイプラインを作成するには、以下のことを行います。

  1. Web ブラウザーで Jenkins を開きます。

  2. [新しい項目] を選択します。

  3. 職務の名前を入力します。

  4. [パイプライン] を選択します。

  5. [OK] を選択します。

  6. [パイプライン] を選択します。

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

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

  9. フォークしたリポジトリの GitHub URL を入力します: https:\<forked_repo\>.git

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

パイプラインをテストする

  1. 作成したパイプラインに移動します

  2. [Build Now]\(今すぐビルド\) を選択します

  3. ビルドが完了したら、[コンソール出力] を選択して、ビルドの詳細を表示します。

Web アプリを検証する

Web アプリに WAR ファイルが正常にデプロイされたことを確認するには、以下のことを行います。

  1. 次の URL に移動します: http://&lt;app_name>.azurewebsites.net/api/calculator/ping

  2. 次のようなテキストが表示されます。

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  3. 次の URL を参照します (x と <y> は、合計する 2 つの値に置き換えます<):http://< app_name.azurewebsites.net/api/calculator/add?x>=<x>&y=<y>。>

    Example of running the demo add

Azure App Service on Linux にデプロイする

App Service では、サポートされているアプリケーション スタック向けに Web アプリを Linux 上でネイティブにホストすることもできます。 また、カスタム Linux コンテナー (Web App for Containers とも呼ばれます) を実行することもできます。

スクリプトを変更して、Azure App Service on Linux にデプロイできます。 App Service on Linux では、Docker がサポートされています。 そのため、Web アプリとサービス ランタイムを Docker イメージにパッケージ化する Dockerfile を用意します。 プラグインによりイメージがビルドされて Docker レジストリにプッシュされ、Web アプリにイメージがデプロイされます。

  1. Azure App Service on Linux と Azure Container Registry を作成するには、「カスタム コンテナーを使用してカスタム ソフトウェアを Azure App Service に移行する」をご覧ください。

        az group create --name myResourceGroup2 --location westus2
        az acr create --name myACRName --resource-group myResourceGroup2 --sku Basic --admin-enabled true
        az appservice plan create --name myAppServicePlan --resource-group  myResourceGroup2 --is-linux
        az webapp create --resource-group myResourceGroup2 --plan myAppServicePlan --name myApp --deployment-container-image-name myACRName.azurecr.io/calculator:latest
    
  2. Jenkins に Docker をインストールする.

  3. Docker Pipeline プラグインがインストールされていることを確認してください。

  4. フォークした同じ Simple Java Web App for Azure リポジトリで、Jenkinsfile2 ファイルを次のように編集します。

    1. サブスクリプション ID とテナント ID を更新します。

       withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>',
              'AZURE_TENANT_ID=<myTenantId>']) {
      
    2. リソース グループ、Web アプリ、および ACR の名前に更新します (プレースホルダーを実際の値に置き換えます)。

      def webAppResourceGroup = '<resource_group>'
      def webAppName = '<app_name>'
      def acrName = '<registry>'
      
    3. <azsrvprincipal\> を資格情報 ID に更新します

      withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
      
  5. Azure Web アプリを Windows にデプロイしたときと同様に、Jenkinsfile2 を使用して新しい Jenkins パイプラインを作成します。

  6. 新しいジョブを実行します。

  7. 確認するために、Azure CLI で次のコマンドを実行します。

    az acr repository list -n <myRegistry> -o json
    

    次のような結果が表示されます。

    [
    "calculator"
    ]
    
  8. http://<app_name>.azurewebsites.net/api/calculator/ping を参照します (プレースホルダーを置き換えます)。 次のような結果が表示されます。

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  9. http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> を参照します (プレースホルダーを置き換えます)。 xy に指定する値が合計されて表示されます。

次のステップ