重要
虽然许多 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 门户 或 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 应用服务 ”。
确保已安装 凭据插件 。
从菜单中选择“ 管理 Jenkins”。
在 “系统配置”下,选择“ 管理插件”。
选择“ 已安装 ”选项卡。
在 筛选器 字段中,输入
credentials
。验证是否已安装 凭据插件 。 如果没有,则需要从 “可用 ”选项卡安装它。
从菜单中选择“ 管理 Jenkins”。
在 “安全性”下,选择“ 管理凭据”。
在凭据下,选择(全局)。
从菜单中选择“ 添加凭据”。
输入 Microsoft Azure 服务主体的以下值:
- 类型:选择值: 使用密码的用户名。
-
用户名:指定
appId
创建的服务主体。 - 密码:指定服务主体的机密。
-
ID:指定凭据标识符,例如
azuresp
。
选择“确定”。
派生 GitHub 示例存储库
在 GitHub 的右上角,选择 Fork。
按照提示选择 GitHub 帐户并完成分叉。
创建 Jenkins 管道
在本部分中,将创建 Jenkins 管道。
在 Jenkins 仪表板中,创建管道。
启用 为运行准备环境。
在“管道定义>”部分中,从 SCM 中选择管道脚本。
输入 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 作业了。
首先,通过 Azure Functions HTTP 触发器和绑定 文章中的说明获取授权密钥。
在浏览器中,输入应用的 URL。 将占位符替换为相应的值,并为 input_number> 指定数值<作为 Java 函数的输入。
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>