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

重要

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

Azure Functions はサーバーレス コンピューティング サービスです。 Azure Functions を使用すると、インフラストラクチャをプロビジョニングまたは管理することなく、オンデマンドでコードを実行できます。 このチュートリアルでは、Azure Functions プラグインを使用して Java 関数を Azure Functions にデプロイする方法を説明します。

前提条件

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
  • Jenkins サーバー: Jenkins サーバーがインストールされていない場合は、Azure での Jenkins サーバーの作成に関する記事を参照してください。

ソース コードを表示する

このチュートリアルに使用されているソース コードは Visual Studio China GitHub リポジトリにあります。

Java 関数の作成

Java ランタイム スタックを備えた Java 関数を作成するには、Azure portal または Azure CLI を使用します。

次の手順では、Azure CLI を使用して Java 関数を作成する方法を説明します。

  1. <resource_group>> プレースホルダーを実際のリソース グループ名に置き換えて、リソース グループを作成します。

    az group create --name <resource_group> --location eastus
    
  2. プレースホルダーを適切な値に置き換えて、Azure ストレージ アカウントを作成します。

    az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. プレースホルダーを適切な値に置き換えて、テスト用の関数アプリを作成します。

    az functionapp create --resource-group <resource_group> --runtime java --consumption-plan-location eastus --name <function_app> --storage-account <storage_account> --functions-version 2
    

Jenkins サーバーの準備

次の手順では、Jenkins サーバーを準備する方法について説明します。

  1. Azure に Jenkins サーバーをデプロイします。 Jenkins サーバーのインスタンスをまだインストールしていない場合は、Azure での Jenkins サーバーの作成に関する記事でそのプロセスが説明されています。

  2. SSH を使用して Jenkins インスタンスにサインインします。

  3. Jenkins インスタンスに Az CLI バージョン 2.0.67 以上をインストールします。

  4. 次のコマンドを使用して Maven をインストールします。

    sudo apt install -y maven
    
  5. Jenkins インスタンスのターミナルのプロンプトで、次のコマンドを実行して Azure Functions Core Tools をインストールします。

    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
    cat /etc/apt/sources.list.d/dotnetdev.list
    sudo apt-get update
    sudo apt-get install azure-functions-core-tools-3
    
  6. Jenkins で Azure リソースに対する認証とアクセスを行うには、Azure サービス プリンシパルが必要です。 詳細な手順については、Azure App Service へのデプロイに関する記事を参照してください。

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

    1. メニューから、[Manage Jenkins]\(Jenkins の管理\) を選択します。

    2. [System Configuration]\(システム構成\) で、[Manage plug-in]\(プラグインの管理\) を選択します。

    3. [インストール] タブを選択します。

    4. フィルター フィールドに credentials と入力します。

    5. 資格情報プラグインがインストールされていることを確認します。 インストールされていない場合は、[Available]\(使用可能\) タブからインストールする必要があります。

    The Credentials Plug-in needs to be installed.

  8. メニューから、[Manage Jenkins]\(Jenkins の管理\) を選択します。

  9. [セキュリティ][資格情報の管理] を選択します。

  10. [Credentials]\(資格情報\) で、[(global)]\(\(グローバル\)\) を選択します。

  11. メニューで、[Add Credentials]\(資格情報の追加\) を選択します。

  12. Microsoft Azure サービス プリンシパルの次の値を入力します。

    • 種類:[Username with password](ユーザー名とパスワード) という値を選択します。
    • ユーザー名: 作成したサービス プリンシパルの appId を指定します。
    • パスワード: サービス プリンシパルの password (シークレット) を指定します。
    • ID: 資格情報識別子 (例 azuresp: ) を指定します。
  13. [OK] を選択します。

サンプル GitHub リポジトリのフォーク

  1. 奇数または偶数のサンプル アプリ用の GitHub リポジトリにサインインします

  2. GitHub の右上隅にある [Fork]\(フォーク\) を選択します。

  3. プロンプトに従ってお客様の GitHub アカウントを選択し、フォークを完了します。

Jenkins パイプラインの作成

このセクションでは、Jenkins パイプラインを作成します。

  1. Jenkins ダッシュボードで、パイプラインを作成します。

  2. [Prepare an environment for the run]\(実行環境を準備する\) を有効にします。

  3. [Pipeline]\(パイプライン\)>[Definition]\(定義\) セクションの順に移動し、[Pipeline script from SCM]\(SCM からのパイプライン スクリプト\) を選択します。

  4. GitHub フォークの URL とスクリプト パス ("doc/resources/jenkins/JenkinsFile") を入力し、JenkinsFile の例で使用します。

     node {
     withEnv(['AZURE_SUBSCRIPTION_ID=99999999-9999-9999-9999-999999999999',
             'AZURE_TENANT_ID=99999999-9999-9999-9999-999999999999']) {
         stage('Init') {
             cleanWs()
             checkout scm
         }
    
         stage('Build') {
             sh 'mvn clean package'
         }
    
         stage('Publish') {
             def RESOURCE_GROUP = '<resource_group>' 
             def FUNC_NAME = '<function_app>'
             // login Azure
             withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
             sh '''
                 az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                 az account set -s $AZURE_SUBSCRIPTION_ID
             '''
             }
             sh 'cd $PWD/target/azure-functions/odd-or-even-function-sample && zip -r ../../../archive.zip ./* && cd -'
             sh "az functionapp deployment source config-zip -g $RESOURCE_GROUP -n $FUNC_NAME --src archive.zip"
             sh 'az logout'
             }
         }
     }
    

構築と展開

ここで、Jenkins ジョブを実行します。

  1. 最初に、記事「Azure Functions のトリガーとバインド」の手順を使用して、承認キーを取得します。

  2. ブラウザーでアプリの URL を入力します。 プレースホルダーを適切な値に置き換え、Java 関数に対する入力として <input_number> の数値を指定します。

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. 次の出力例のような結果が表示されます (この場合、テストとして 365 という奇数が使用されました)。

    The number 365 is Odd.
    

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

このアプリケーションを引き続き使用しない場合は、作成したリソースを次の手順で削除します。

az group delete -y --no-wait -n <resource_group>

次のステップ