重要
多くの 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 - Linux VM への Jenkins のインストール
- Azure CLI: Jenkins サーバーに Azure CLI (バージョン 2.0.67 以降) をインストールします。
Jenkins の構成
次の手順では、必要な Java JDK と Maven を Jenkins コントローラーにインストールする方法を示します。
SSH を使用して Jenkins コントローラーにサインインします。
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
次のコマンドを実行して Maven をインストールします。
sudo apt-get install -y maven
Jenkins 資格情報に Azure サービス プリンシパルを追加する
次の手順では、Azure 資格情報を指定する方法を示します。
資格情報プラグインがインストールされていることを確認します。
Jenkins ダッシュボードで、[ 資格情報] -> [システム - >] を選択します。
グローバル資格情報 (無制限) を選択します。
[ 資格情報の追加] を選択して 、Microsoft Azure サービス プリンシパルを追加します。 資格情報の種類が パスワードを持つユーザー名 であることを確認し、次の項目を入力します。
-
ユーザー名: サービス プリンシパル
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
重要なポイント:
- appservice プランでは、アプリのホストに使用される物理リソースを定義します。
- appservice プランに割り当てられているすべてのアプリケーションは、これらのリソースを共有します。
- 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 アプリにマップできます。
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 リポジトリを準備する
[フォーク] ボタンを選択して、リポジトリを独自の GitHub アカウントにフォークします。
ファイル名をクリックして Jenkinsfile ファイルを開きます。
鉛筆アイコンを選択してファイルを編集します。
サブスクリプション ID とテナント ID を更新します。
withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>', 'AZURE_TENANT_ID=<tenant_id>'])
22 行目と 23 行目の Web アプリのリソース グループと名前をそれぞれ更新します。
def resourceGroup = '<resource_group>' def webAppName = '<app_name>'
Jenkins インスタンスの資格情報 ID を更新する
withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
Jenkins パイプラインを作成する
Jenkins パイプラインを作成するには、次の操作を行います。
Web ブラウザーで Jenkins を開きます。
[新しい項目] を選択します。
ジョブの名前を入力します。
[パイプライン] を選択します。
[OK] を選択.
[パイプライン] を選択します。
[定義] で、SCM から [パイプライン スクリプト] を選択します。
SCM の場合は、Git を選択します。
フォークされたリポジトリの GitHub URL を入力します。
https:\<forked_repo\>.git
[保存] を選びます。
パイプラインをテストする
作成したパイプラインに移動します
[ 今すぐビルド] を選択する
ビルドが完了したら、[ コンソール出力 ] を選択してビルドの詳細を表示します。
Web アプリを確認する
WAR ファイルが Web アプリに正常にデプロイされていることを確認するには、次の手順を実行します。
次の URL を参照します。
http://<app_name>.azurewebsites.net/api/calculator/ping
次のようなテキストが表示されます。
Welcome to Java Web App!!! This is updated! Today's date
次の URL を開いて、
x と y を加算する2つの値に置き換えてください: http:// app_name .azurewebsites.net/api/calculator/add?x= x &y= y .
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 アプリにイメージがデプロイされます。
カスタム コンテナーを使用した Azure App Service へのカスタム ソフトウェアの移行に関するページを参照して、Azure App Service on Linux と Azure Container Registry を作成します。
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
Docker Pipeline プラグインがインストールされていることを確認します。
フォークしたのと同じ Simple Java Web App for Azure リポジトリで、 Jenkinsfile2 ファイルを次のように編集します。
サブスクリプション ID とテナント ID を更新します。
withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>', 'AZURE_TENANT_ID=<myTenantId>']) {
リソース グループ、Web アプリ、ACR の名前に更新します (プレースホルダーを実際の値に置き換えます)。
def webAppResourceGroup = '<resource_group>' def webAppName = '<app_name>' def acrName = '<registry>'
<azsrvprincipal\>
を資格情報 ID に更新するwithCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
Jenkinsfile2
を使用して Windows の Azure Web アプリにデプロイする場合と同様に、新しい Jenkins パイプラインを作成します。新しいジョブを実行します。
確認するには、Azure CLI で次のコマンドを実行します。
az acr repository list -n <myRegistry> -o json
次のような結果が表示されます。
[ "calculator" ]
http://<app_name>.azurewebsites.net/api/calculator/ping
を参照します (プレースホルダーを置き換えます)。 次のような結果が表示されます。Welcome to Java Web App!!! This is updated! Today's date
ブラウザで
http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y>
にアクセスしてください(プレースホルダーを置き換えてください)。x
とy
に指定した値が合計され、表示されます。