重要
多くの 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 関数を作成する方法を示します。
リソース グループを作成し、 <resource_group> プレースホルダーをリソース グループ名に置き換えます。
az group create --name <resource_group> --location eastus
プレースホルダーを適切な値に置き換えて、Azure ストレージ アカウントを作成します。
az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS
プレースホルダーを適切な値に置き換えて、テスト関数アプリを作成します。
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 サーバーを準備する方法について説明します。
Azure に Jenkins サーバー をデプロイします。 Jenkins サーバーのインスタンスがまだインストールされていない場合は、「 Azure で Jenkins サーバーを作成 する」に関する記事を参照してください。
SSH を使用して Jenkins インスタンスにサインインします。
Jenkins インスタンスで、Az CLI バージョン 2.0.67 以降をインストールします。
次のコマンドを使用して maven をインストールします。
sudo apt install -y maven
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
Jenkins には、Azure リソースの認証とアクセスに Azure サービス プリンシパルが必要です。 詳細な手順については、 Azure App Service へのデプロイ に関するページを参照してください。
資格情報プラグインがインストールされていることを確認します。
メニューから [ Jenkins の管理] を選択します。
[ システム構成] で、[ プラグインの管理] を選択します。
[ インストール済み ] タブを選択します。
フィルター フィールドに「
credentials
」と入力します。資格情報プラグインがインストールされていることを確認します。 そうでない場合は、[ 使用可能] タブからインストールする必要があります。
メニューから [ Jenkins の管理] を選択します。
[ セキュリティ] で、[ 資格情報の管理] を選択します。
[ 資格情報] で [ (グローバル)] を選択します。
メニューから [資格情報の 追加] を選択します。
Microsoft Azure サービス プリンシパルに次の値を入力します。
- 種類: [ Username with password]\(パスワード付きユーザー名\) の値を選択します。
-
ユーザー名: 作成されたサービス プリンシパルの
appId
を指定します。 -
パスワード: サービス プリンシパルの
password
(シークレット) を指定します。 -
ID:
azuresp
などの資格情報識別子を指定します。
[OK] を選択.
サンプル GitHub リポジトリをフォークする
GitHub の右上隅にある [ フォーク] を選択します。
プロンプトに従って GitHub アカウントを選択し、フォークを完了します。
Jenkins パイプラインを作成する
このセクションでは、 Jenkins パイプラインを作成します。
Jenkins ダッシュボードで、パイプラインを作成します。
[ 実行用に環境を準備する] を有効にします。
[ Pipeline->Definition ] セクションで、 SCM から [Pipeline script]\(パイプライン スクリプト\) を選択します。
JenkinsFile の例で使用する GitHub フォークの URL とスクリプト パス ("doc/resources/jenkins/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 ジョブを実行します。
まず、 Azure Functions の HTTP トリガーとバインド に関する記事の手順を使用して、承認キーを取得します。
ブラウザーで、アプリの URL を入力します。 プレースホルダーを適切な値に置き換え、Java 関数の入力として <input_number> の数値を指定します。
https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
次の出力例のような結果が表示されます (奇数 - 365 - がテストとして使用されました)。
The number 365 is Odd.
リソースをクリーンアップする
このアプリケーションを引き続き使用しない場合は、次の手順で作成したリソースを削除します。
az group delete -y --no-wait -n <resource_group>