如何更改 Azure DevOps 环境代理文件夹结构

How to change Azure DevOps environment agent folder structure

为了实现持续部署,我们在 Azure DevOps 上使用(经典)发布管道将 Web 服务部署到我们内联网中的 VM。为了利用 yaml 部署管道,我用环境代理替换了该 VM 上以前的部署池代理。

对于实际部署,我们使用IIS Web App Deploy task。此任务的源目录默认为 $(System.DefaultWorkingDirectory)\**\*.zip$(System.DefaultWorkingDirectory) 转换为具体版本的 a 子目录。

对我来说不幸的是,环境代理将工件 next 下载到 a-文件夹而不是 into环境池代理。因此部署任务的默认设置找不到它。我知道我可以使用 $(System.DefaultWorkingDirectory)\..\**\*.zip 轻松解决此问题。我只是想知道为什么微软会在环境代理中引入这样的开发速度。

有什么方法可以让环境代理将工件下载到 $(System.DefaultWorkingDirectory) 中。 a而不是旁边?

将部署从经典管道更改为 YAML 管道时,您可能需要将 $(System.DefaultWorkingDirectory) 更改为 $(Pipeline.Workspace)。您可以通过以下步骤验证这一点:

- pwsh: Get-ChildItem $(System.DefaultWorkingDirectory) -Recurse
  displayName: Check System.DefaultWorkingDirectory
- pwsh: Get-ChildItem $(Pipeline.Workspace) -Recurse
  displayName: Check Pipeline.Workspace

(是的,这是一种非常冗长的方式。不过,它会让您更全面地了解支持您的工作的文件结构。)

如果您在 yaml 管道中使用部署作业。工件将自动下载到部署作业中的 $(Pipeline.Workspace)/$(System.DefaultWorkingDirectory) 旁边的文件夹)。请参阅下面摘自 here:

  • 当前管道中的工件已下载到 $(Pipeline.Workspace)/.

  • 来自相关管道资源的工件被下载到 $(Pipeline.Workspace)/{管道资源标识符}/。

  • 当前管道和关联管道资源中的所有可用工件都会自动下载到部署作业中,并可用于您的部署。要阻止下载,请指定下载:none.

让环境代理将工件下载到 $(System.DefaultWorkingDirectory).

您可以指定download: none。并使用 Download Pipeline Artifacts task 并指定 path 参数将您的工件下载到 $(System.DefaultWorkingDirectory)。见下文:

 - deployment: 
   environment: Dev
   strategy:
     runOnce:    
       deploy:
         steps:
         - download: none #prevent automatically download

         - task: DownloadPipelineArtifact@2
           inputs:
             buildType: 'current'
             targetPath: '$(System.DefaultWorkingDirectory)'  # download to default folder.

另一个解决方法是将 IIS Web App Deploy task 的源目录默认更改为 $(Pipeline.Workspace)\**\*.zip