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

如何通过YAML将Azure WebJob部署至App Service正确路径?

Azure WebJob部署路径错误修复方案

问题描述

需将Worker Service控制台应用构建并部署为Azure App Service中的持续型WebJob,目标路径为site->jobs->continuous->$(webJobName)。当前YAML流水线构建、部署流程均执行成功,但WebJob被错误部署到site->wwwroot->$(webJobName)路径,不符合预期。手动上传工件至Azure App Service的WebJobs功能可正常运行,需修正自动化部署逻辑以部署到正确路径。

问题根源

  1. 重复的publish任务干扰目录结构:第二个DotNetCoreCLI@2的publish操作直接将输出写入publish_output根目录,覆盖了第一个publish任务构建的App_Data/jobs/continuous/$(webJobName)标准WebJob目录结构,导致部署包内的层级不符合Azure WebJob的要求。
  2. ArchiveFiles打包范围错误:当前打包根目录为$(Build.ArtifactStagingDirectory),会将无关文件也纳入包中,破坏WebJob所需的目录层级。

修复步骤

  • 移除重复的第二个DotNetCoreCLI@2 publish任务,保留第一个按WebJob标准目录结构输出的publish操作。
  • 调整ArchiveFiles@2任务的rootFolderOrFile参数为$(Build.ArtifactStagingDirectory)/publish_output,确保仅打包符合WebJob目录要求的内容。
  • 保持AzureWebApp@1任务参数不变,确认webJobType为Continuous、webJobName配置正确。

修正后的完整YAML代码

trigger:    
  branches:    
    include:    
      - main    
  paths:
    include:
      - MyTestJobJob/MyTestJobService.cs

pool:    
  vmImage: 'windows-latest'
variables:   
  buildConfiguration: 'Release'
  devWebAppName: 'MyTestJobJobDev'
  resourceGroupName: 'MyRG' 
  webJobName: 'MyTestJobJob'    

stages:
- stage: Build
  jobs:
  - job: Build
    steps:
    - task: UseDotNet@2
      inputs:
        packageType: 'sdk'
        version: '8.x'
        installationPath: $(Agent.ToolsDirectory)/dotnet

    - task: DotNetCoreCLI@2
      inputs:
        command: 'restore'
        projects: '**/*.csproj'

    - task: DotNetCoreCLI@2
      inputs:
        command: 'build'
        projects: '**/*.csproj'
        arguments: '--configuration $(buildConfiguration)'

    - task: DotNetCoreCLI@2
      inputs:
        command: 'publish'
        projects: 'MyTestJobJob/MyTestJobJob.csproj'
        arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish_output/App_Data/jobs/continuous/$(webJobName)'
        publishWebProjects: false
        modifyOutputPath: false
        zipAfterPublish: false

    - task: ArchiveFiles@2
      inputs:
        rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/publish_output'
        includeRootFolder: false
        archiveType: 'zip'
        archiveFile: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'
        replaceExistingArchive: true

    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)/MyTestJobJob.zip'
        ArtifactName: 'drop'
        publishLocation: 'Container'

- stage: DeployToDev
  dependsOn: Build
  jobs:
  - deployment: DeployToDev
    environment: 'Dev'
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: drop

          - task: AzureWebApp@1
            inputs:
              azureSubscription: 'MyAZSubscription' # Pushes changes to the webjob
              appName: '$(devWebAppName)'
              package: '$(Pipeline.Workspace)/drop/MyTestJobJob.zip'
              resourceGroupName: '$(resourceGroupName)'
              webJobName: '$(webJobName)'
              webJobType: 'Continuous'
              publishWebProjects: false

内容的提问来源于stack exchange,提问作者Sharpeye500

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:37:37