教程:使用 Jenkins 部署到 Azure Functions

重要

虽然许多 Azure 服务都有 Jenkins 插件,但截至 2024 年 2 月 29 日,这些插件中的大多数都终止了支持。 Azure CLI 是目前建议将 Jenkins 与 Azure 服务集成的方法。 有关详细信息,请参阅 适用于 Azure 的 Jenkins 插件文章。

Azure Functions 是一项无服务器计算服务。 使用 Azure Functions,无需预配或管理基础结构即可按需运行代码。 本教程演示如何使用 Azure Functions 插件将 Java 函数部署到 Azure Functions。

先决条件

查看源代码

本教程使用的源代码位于 Visual Studio China GitHub 存储库中。

创建 Java 函数

若要使用 Java 运行时堆栈创建 Java 函数,请使用 Azure 门户Azure CLI

以下步骤演示如何使用 Azure CLI 创建 Java 函数:

  1. 创建资源组,将 <resource_group> 占位符替换为资源组名称。

    az group create --name <resource_group> --___location eastus
    
  2. 创建 Azure 存储帐户,将占位符替换为相应的值。

    az storage account create --name <storage_account> --___location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. 创建测试函数应用,将占位符替换为相应的值。

    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 服务器:

  1. 在 Azure 上部署 Jenkins 服务器 。 如果尚未安装 Jenkins 服务器的实例,本文中的 “在 Azure 上创建 Jenkins 服务器”将 指导你完成该过程。

  2. 使用 SSH 登录到 Jenkins 实例。

  3. 在 Jenkins 实例上,安装 Az CLI 2.0.67 或更高版本。

  4. 使用以下命令安装 maven:

    sudo apt install -y maven
    
  5. 在 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
    
  6. Jenkins 需要一个 Azure 服务主体来对 Azure 资源进行身份验证和访问。 有关分步说明,请参阅 “部署到 Azure 应用服务 ”。

  7. 确保已安装 凭据插件

    1. 从菜单中选择“ 管理 Jenkins”。

    2. “系统配置”下,选择“ 管理插件”。

    3. 选择“ 已安装 ”选项卡。

    4. 筛选器 字段中,输入 credentials

    5. 验证是否已安装 凭据插件 。 如果没有,则需要从 “可用 ”选项卡安装它。

    需要安装凭据插件。

  8. 从菜单中选择“ 管理 Jenkins”。

  9. “安全性”下,选择“ 管理凭据”。

  10. 凭据下,选择(全局)

  11. 从菜单中选择“ 添加凭据”。

  12. 输入 Microsoft Azure 服务主体的以下值:

    • 类型:选择值: 使用密码的用户名
    • 用户名:指定 appId 创建的服务主体。
    • 密码:指定服务主体的机密。
    • ID:指定凭据标识符,例如 azuresp
  13. 选择“确定”

派生 GitHub 示例存储库

  1. 登录 GitHub 存储库,用于奇数或偶数示例应用

  2. 在 GitHub 的右上角,选择 Fork

  3. 按照提示选择 GitHub 帐户并完成分叉。

创建 Jenkins 管道

在本部分中,将创建 Jenkins 管道

  1. 在 Jenkins 仪表板中,创建管道。

  2. 启用 为运行准备环境

  3. “管道定义>”部分中,从 SCM 中选择管道脚本

  4. 输入 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 作业了。

  1. 首先,通过 Azure Functions HTTP 触发器和绑定 文章中的说明获取授权密钥。

  2. 在浏览器中,输入应用的 URL。 将占位符替换为相应的值,并为 input_number> 指定数值<作为 Java 函数的输入。

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. 你将看到类似于以下示例输出的结果(其中奇数 - 365 - 用作测试):

    The number 365 is Odd.
    

清理资源

如果不打算继续使用此应用程序,请删除通过以下步骤创建的资源:

az group delete -y --no-wait -n <resource_group>

后续步骤