在YAML流水线中将多个Azure WebJobs部署到单个Azure AppService的问题
核心问题原因
你遇到的覆盖问题由两个原因导致:
- 默认
zipDeploy部署逻辑会清空App Service wwwroot目录下所有不在当前部署包内的文件 - 原有流水线仅支持单个WebJob的构建打包,多流水线独立部署自然会互相覆盖
修改后可直接使用的流水线配置
trigger: none pool: vmImage: ubuntu-latest # 修改变量即可匹配你的业务配置 variables: webJobNames: # 替换成你的3个WebJob的项目名称 - 'My.WebJob.App1' - 'My.WebJob.App2' - 'My.WebJob.App3' azureAppServiceName: 'my-webjobs' azureSPNName: 'MyRGConnection' buildConfiguration: 'Release' dotNetFramework: 'net6.0' dotNetVersion: '6.0.x' targetRuntime: 'win-x86' steps: - task: UseDotNet@2 inputs: version: $(dotNetVersion) includePreviewVersions: true displayName: '安装指定版本.NET SDK' # 循环处理所有WebJob的构建发布 - ${{ each webJobName in variables.webJobNames }}: - task: DotNetCoreCLI@2 inputs: command: publish publishWebProjects: false arguments: '--configuration $(BuildConfiguration) --framework $(dotNetFramework) --runtime $(targetRuntime) --self-contained --output $(Build.ArtifactStagingDirectory)/WebJob/App_Data/jobs/continuous/${{ webJobName }}' zipAfterPublish: false modifyOutputPath: false projects: '${{ webJobName }}/${{ webJobName }}.csproj' displayName: '构建发布WebJob: ${{ webJobName }}' - task: PowerShell@2 displayName: 生成${{ webJobName }}的run.cmd启动文件 inputs: targetType: 'inline' script: '"dotnet ${{ webJobName }}.dll" | Out-File run.cmd -Encoding ASCII; $LASTEXITCODE' pwsh: true workingDirectory: '$(Build.ArtifactStagingDirectory)/WebJob/App_Data/jobs/continuous/${{ webJobName }}' # 统一打包所有WebJob到同一个部署包 - task: ArchiveFiles@2 displayName: 打包所有WebJob部署文件 inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/WebJob/' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/AllWebJobs.zip' replaceExistingArchive: true - task: PublishPipelineArtifact@1 displayName: 发布构建产物 inputs: targetPath: '$(Build.ArtifactStagingDirectory)' publishLocation: 'pipeline' - task: DownloadPipelineArtifact@2 displayName: 下载构建产物 inputs: path: '$(System.ArtifactsDirectory)' # 部署时关闭文件删除逻辑 - task: AzureWebApp@1 inputs: azureSubscription: $(azureSPNName) appType: 'webApp' appName: $(azureAppServiceName) package: '$(System.ArtifactsDirectory)/AllWebJobs.zip' deploymentMethod: 'zipDeploy' enableCustomDeployment: true RemoveAdditionalFiles: false # 对应Visual Studio部署时不清除现有文件的选项
关键改动说明
- 用YAML循环逻辑批量处理3个WebJob的构建、启动文件生成逻辑,无需重复复制代码
- 所有WebJob的发布文件都放到同一个待打包目录,最终生成包含全部3个WebJob的统一部署包
- 部署时新增
RemoveAdditionalFiles: false配置,关闭zipDeploy默认的多余文件清理逻辑,避免覆盖已有的WebJob文件
内容的提问来源于stack exchange,提问作者aherrick
相关产品推荐
相关产品推荐

