Azure Pipeline中DotNetCoreCLI与AzureWebApp分作业部署失败求助
问题原因
Azure Pipeline中每个作业都运行在独立的执行环境(虚拟机或容器),作业执行完毕后该环境会被销毁,本地生成的文件不会自动共享到同阶段的其他作业。当你把publish和部署任务拆分到不同作业时,第二个作业的文件系统完全独立于第一个作业,自然找不到前者生成的ZIP包。
可行解决方案
方案1:使用管道工件传递发布包(官方推荐)
在第一个作业中完成DotNetCoreCLI publish后,将生成的ZIP包发布为管道工件;第二个作业先下载该工件,再执行部署。
第一个作业示例:
- task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)' zipAfterPublish: true - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)' artifact: 'webapp-package' publishLocation: 'Container'
第二个作业示例:
- task: DownloadPipelineArtifact@2 inputs: artifact: 'webapp-package' path: '$(Pipeline.Workspace)' - task: AzureWebApp@1 inputs: azureSubscription: '<你的Azure订阅>' appName: '<你的WebApp名称>' package: '$(Pipeline.Workspace)/**/*.zip'
方案2:使用构建工件传递(兼容旧版流程)
如果需要兼容旧版配置,可以用CopyPublishBuildArtifacts@1发布构建工件,再通过下载任务获取。
第一个作业示例:
- task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)' zipAfterPublish: true - task: CopyPublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'webapp-package' publishLocation: 'Container'
第二个作业示例:
- task: DownloadBuildArtifacts@0 inputs: artifactName: 'webapp-package' downloadPath: '$(Pipeline.Workspace)' - task: AzureWebApp@1 inputs: azureSubscription: '<你的Azure订阅>' appName: '<你的WebApp名称>' package: '$(Pipeline.Workspace)/webapp-package/**/*.zip'
关键注意事项
- 确保
DotNetCoreCLI@2的output参数指向$(Build.ArtifactStagingDirectory)这类统一的工件暂存目录,方便后续发布操作定位ZIP包。 - 部署任务的
package路径要和下载工件的路径匹配,使用**/*.zip通配符可以自动匹配目录下所有ZIP文件。
内容的提问来源于stack exchange,提问作者Konrad Viltersten
相关产品推荐
相关产品推荐

