教程:使用 Jenkins 部署到 Azure Functions
重要
许多 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
创建的服务主体。 - 密码:指定
password
服务主体的(机密)。 - ID:指定凭据标识符,例如
azuresp
。
选择“确定”。
分叉示例 GitHub 存储库
在 GitHub 的右上角,选择“分叉”。
遵照提示选择 GitHub 帐户并完成分叉。
创建 Jenkins 管道
在本部分中,将创建 Jenkins 管道。
在 Jenkins 仪表板中,创建一个管道。
启用“为运行准备环境”。
在“管道定义>”部分中,从 SCM 中选择管道脚本。
输入 GitHub 分叉的 URL 和要在 JenkinsFile 示例中使用的脚本路径 ("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。 将占位符替换为相应的值,并为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>