You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Azure DevOps Pipelines部署Maven Java8 Azure Function至Linux

构建并部署Maven(Java 8)Azure Function到Linux的Azure Pipelines配置建议

一、直接用YAML自定义流水线(绕开模板限制)

既然没有现成的Java模板,直接写YAML是最靠谱的方式,步骤如下:

  • 新建流水线时选你的代码仓库源(比如Azure Repos Git),接着选「Starter pipeline」进入YAML编辑页,替换默认内容为下面的配置即可,核心分构建、发工件、部署三个阶段。

1. 构建阶段配置(Linux代理+Java 8+Maven打包)

stages:
- stage: Build
  displayName: 构建阶段
  jobs:
  - job: Build
    pool:
      vmImage: 'ubuntu-latest' # 用Linux代理,和目标环境匹配
    steps:
    - task: JavaToolInstaller@0
      inputs:
        versionSpec: '8'
        jdkArchitectureOption: 'x64'
        jdkSourceOption: 'PreInstalled'
      displayName: 安装Java 8环境

    - task: Maven@3
      inputs:
        mavenPomFile: 'pom.xml'
        goals: 'clean package'
        publishJUnitResults: true
        testResultsFiles: '**/surefire-reports/TEST-*.xml'
        javaHomeOption: 'JDKVersion'
        mavenVersionOption: 'Default'
      displayName: Maven打包函数

    - task: CopyFiles@2
      inputs:
        SourceFolder: '$(System.DefaultWorkingDirectory)/target/azure-functions'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
      displayName: 复制构建产物到工件目录

    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
      displayName: 发布构建工件

2. 部署阶段配置(推送到Linux版Function App)

在上面的YAML后面追加部署阶段:

- stage: Deploy
  displayName: 部署阶段
  dependsOn: Build
  condition: succeeded()
  jobs:
  - job: Deploy
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - task: DownloadBuildArtifacts@0
      inputs:
        buildType: 'current'
        downloadType: 'single'
        artifactName: 'drop'
        downloadPath: '$(System.ArtifactsDirectory)'
      displayName: 下载构建工件

    - task: AzureFunctionApp@1
      inputs:
        azureSubscription: '<你的Azure服务连接名称>'
        appType: 'functionAppLinux' # 必须指定Linux类型
        appName: '<你的Function App名称>'
        package: '$(System.ArtifactsDirectory)/drop/<你的函数打包目录名>'
        runtimeStack: 'JAVA|8' # 锁定Java 8运行时
      displayName: 部署到Azure Function App

注意:把<你的Azure服务连接名称>、<你的Function App名称>、<你的函数打包目录名>换成实际值——打包目录名就是target/azure-functions下面的文件夹,一般是项目名-版本号,本地执行mvn clean package就能看到。

二、几个关键注意点

  • 代理选择:必须用ubuntu-latest,和目标Linux环境一致,避免跨平台构建的奇怪问题。
  • Java版本锁定:通过JavaToolInstaller强制用Java 8,确保和Function App的运行时匹配,别用系统默认的高版本。
  • Maven插件:只要你的pom.xml里配置了Azure Functions Maven插件,clean package就会自动生成部署所需的目录结构,不用额外手动整理。
  • 部署参数:appType一定要设为functionAppLinux,runtimeStack填JAVA|8,否则会部署到Windows环境或者用错Java版本。

三、验证调试小技巧

  • 先在本地跑mvn clean package,确认target/azure-functions下面的目录结构没问题,避免流水线构建失败。
  • 部署完去Azure门户看Function App的「配置」→「常规设置」,确认操作系统是Linux、Java版本是8。
  • 如果部署失败,直接看流水线日志,重点查:Azure服务连接有没有权限、Function App的运行时配置对不对、构建产物路径写没写错。

内容的提问来源于stack exchange,提问作者Fagner Antunes Dornelles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:42:50