如何通过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功能可正常运行,需修正自动化部署逻辑以部署到正确路径。
问题根源
- 重复的publish任务干扰目录结构:第二个
DotNetCoreCLI@2的publish操作直接将输出写入publish_output根目录,覆盖了第一个publish任务构建的App_Data/jobs/continuous/$(webJobName)标准WebJob目录结构,导致部署包内的层级不符合Azure WebJob的要求。 - ArchiveFiles打包范围错误:当前打包根目录为
$(Build.ArtifactStagingDirectory),会将无关文件也纳入包中,破坏WebJob所需的目录层级。
修复步骤
- 移除重复的第二个
DotNetCoreCLI@2publish任务,保留第一个按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
相关产品推荐
相关产品推荐

