重要
虽然许多 Azure 服务都有 Jenkins 插件,但截至 2024 年 2 月 29 日,这些插件中的大多数都终止了支持。 Azure CLI 是目前建议将 Jenkins 与 Azure 服务集成的方法。 有关详细信息,请参阅 适用于 Azure 的 Jenkins 插件文章。
若要将 Java Web 应用部署到 Azure,可以在 Jenkins Pipeline 中使用 Azure CLI。 在本教程中,你将执行以下任务:
- 创建 Jenkins VM
- 配置 Jenkins
- 在 Azure 中创建 Web 应用
- 准备 GitHub 存储库
- 创建 Jenkins 管道
- 运行管道并验证 Web 应用
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建 一个免费帐户 。
- 詹金斯 - 在 Linux VM 上安装 Jenkins
- Azure CLI:在 Jenkins 服务器上安装 Azure CLI(版本 2.0.67 或更高版本)。
配置 Jenkins
以下步骤演示如何在 Jenkins 控制器上安装所需的 Java JDK 和 Maven:
使用 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
将 Azure 服务主体添加到 Jenkins 凭证中
以下步骤演示如何指定 Azure 凭据:
确保已安装 凭据插件 。
在 Jenkins 仪表板中,选择 凭据 -> 系统 -> 。
选择“全局凭据”(不受限制)。
选择“添加凭据”以添加Microsoft Azure 服务主体。 确保凭据类型为 具有密码的用户名 ,并输入以下项:
-
用户名:服务主体
appId
-
密码:服务主体
password
-
ID:凭据标识符(例如
AzureServicePrincipal
)
-
用户名:服务主体
创建用于部署 Java Web 应用的 Azure 应用服务
使用 az appservice plan create 创建具有 免费 定价层的 Azure 应用服务计划。
az appservice plan create \
--name <app_service_plan> \
--resource-group <resource_group> \
--sku FREE
要点:
- appservice 计划定义用于托管应用的物理资源。
- 分配给 appservice 计划的所有应用程序共享这些资源。
- Appservice 计划允许在托管多个应用时节省成本。
创建 Azure Web 应用
使用 az webapp create 在应用服务计划中创建 Web 应用定义 myAppServicePlan
。
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 配置更新 为应用设置 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。
选择“新建项”。
输入职位的名称。
选择“管道”。
选择“确定”。
选择“管道”。
对于定义,选择SCM 中的管道脚本。
对于 SCM,请选择 “Git”。
输入分叉存储库的 GitHub URL:
https:\<forked_repo\>.git
选择“保存”
测试管道
转到您创建的管道
选择“立即生成”
生成完成后,选择 控制台输出 以查看生成详细信息。
验证 Web 应用
执行以下作来验证 WAR 文件是否已成功部署到 Web 应用:
浏览到以下网址:
http://<app_name>.azurewebsites.net/api/calculator/ping
应会看到类似于以下内容的文本:
Welcome to Java Web App!!! This is updated! Today's date
浏览到以下 URL(将 <x> 和 <y> 替换为要求和的两个值):http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y>。
部署 Azure 应用服务到 Linux
应用服务也可以在 Linux 上为支持的应用堆栈本地托管 Web 应用。 它还可以运行自定义 Linux 容器(也称为用于容器的 Web 应用)。
可以修改脚本以部署到 Linux 上的 Azure 应用服务。 Linux 上的应用服务支持 Docker。 因此,你提供一个 Dockerfile,将 Web 应用及服务运行时打包到 Docker 映像中。 该插件生成映像,将其推送到 Docker 注册表,并将映像部署到 Web 应用。
请参阅 使用自定义容器将自定义软件迁移到 Azure 应用服务 ,以在 Linux 和 Azure 容器注册表上创建 Azure 应用服务。
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 管道插件 。
在您分叉的 同一个 Simple Java Web App for Azure 代码库中 ,编辑 Jenkinsfile2 文件,如下所示:
更新订阅 ID 和租户 ID。
withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>', 'AZURE_TENANT_ID=<myTenantId>']) {
请更新资源组、网站应用程序和 ACR 的名称(将占位符替换为你的值)。
def webAppResourceGroup = '<resource_group>' def webAppName = '<app_name>' def acrName = '<registry>'
将
<azsrvprincipal\>
更新为您的凭据 IDwithCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
如同您在 Windows 上部署到 Azure Web 应用时所做的那样,创建一个新的 Jenkins 管道,使用
Jenkinsfile2
。运行你的新作业。
若要验证,请在 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
指定的值会被相加并显示。