チュートリアル: 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 - Linux VM に Jenkins をインストールします
- Azure CLI: Azure CLI (バージョン 2.0.67 以降) を Jenkins サーバーにインストールします。
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 ダッシュボードで、[Credentials]\(資格情報\) -> [System]\(システム\) -> を選択します。
[Global credentials(unrestricted)]\(グローバル資格情報 (制限なし)\) を選択します。
Microsoft Azure サービス プリンシパルを追加するには、[Add Credentials]\(資格情報の追加\) を選択します。 資格情報の種類が [Username with password]\(ユーザー名とパスワード\) であることを確認し、次の項目を入力します。
- [Username]\(ユーザー名\) :サービス プリンシパル
appId
- パスワード: サービス プリンシパル
password
- [ID] - 資格情報の識別子 (
AzureServicePrincipal
など)
- [Username]\(ユーザー名\) :サービス プリンシパル
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 レポジトリを準備する
Azure 用のシンプルな Java Web アプリ レポジトリを開きます。
自身の GitHub アカウントにリポジトリをフォークするには、[Fork] ボタンを選択します。
ファイル名をクリックして、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_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
Jenkins パイプラインを作成する
Jenkins パイプラインを作成するには、以下のことを行います。
Web ブラウザーで Jenkins を開きます。
[新しい項目] を選択します。
職務の名前を入力します。
[パイプライン] を選択します。
[OK] を選択します。
[パイプライン] を選択します。
[定義] で、[Pipeline script from SCM]\(SCM からのパイプライン スクリプト\) を選択します。
[SCM] で、[Git] を選択します。
フォークしたリポジトリの GitHub URL を入力します:
https:\<forked_repo\>.git
[保存] を選びます。
パイプラインをテストする
作成したパイプラインに移動します
[Build Now]\(今すぐビルド\) を選択します
ビルドが完了したら、[コンソール出力] を選択して、ビルドの詳細を表示します。
Web アプリを検証する
Web アプリに WAR ファイルが正常にデプロイされたことを確認するには、以下のことを行います。
次の 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 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
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')]) {
Azure Web アプリを Windows にデプロイしたときと同様に、
Jenkinsfile2
を使用して新しい 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
に指定する値が合計されて表示されます。