【问题标题】:How to change Azure DevOps environment agent folder structure如何更改 Azure DevOps 环境代理文件夹结构
【发布时间】:2021-03-11 17:51:24
【问题描述】:
为了实现持续部署,我们使用 Azure DevOps 上的(经典)发布管道将 Web 服务部署到我们内部网中的 VM。为了受益于 yaml 部署管道,我用环境代理替换了该 VM 上以前的部署池代理。
对于实际部署,我们使用IIS Web App Deploy task。此任务的源目录默认为$(System.DefaultWorkingDirectory)\**\*.zip。 $(System.DefaultWorkingDirectory) 转换为具体版本的 a 子目录。
对我来说不幸的是,环境代理将工件 next 下载到 a-文件夹,而不是像环境池代理一样进入。因此部署任务的默认设置找不到它。我知道我可以使用$(System.DefaultWorkingDirectory)\..\**\*.zip 轻松解决此问题。我只是想知道为什么微软在环境代理中引入了这样的开发速度。
有什么方法可以让环境代理将工件下载到 $(System.DefaultWorkingDirectory) aka。 a 而不是在它旁边?
【问题讨论】:
标签:
azure-devops
azure-devops-self-hosted-agent
azure-devops-pipelines
azure-devops-services
【解决方案1】:
如果您在 yaml 管道中使用部署作业。工件将在部署作业中自动下载到$(Pipeline.Workspace)/($(System.DefaultWorkingDirectory) 旁边的文件夹)。请参阅下面来自here 的摘录:
-
来自当前管道的工件被下载到 $(Pipeline.Workspace)/。
-
来自关联管道资源的工件被下载到 $(Pipeline.Workspace)/{pipeline resource identifier}/。
-
当前管道和相关管道资源中的所有可用工件都会自动下载到部署作业中,并可供您的部署使用。要阻止下载,请指定下载:无。
让环境代理将工件下载到 $(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
【解决方案2】:
从 Classic 管道更改为 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
(是的,这是一种非常冗长的方法。不过,它会让您更全面地了解支持您的工作的文件结构。)