问题描述
为了实现持续部署,我们使用 Azure DevOps 上的(经典)发布管道将 Web 服务部署到我们内部网中的 VM。为了利用 yaml 部署管道,我用环境代理替换了我们之前在该虚拟机上的部署池代理。
对于实际部署,我们使用 IIS Web App Deploy task。此任务的源目录默认为 $(System.DefaultWorkingDirectory)\**\*.zip
。 $(System.DefaultWorkingDirectory)
转换为具体版本的 a
子目录。
对我来说不幸的是,环境代理将工件next下载到 a
文件夹,而不是像环境池代理那样进入。因此部署任务的默认设置无法找到它。我知道我可以通过使用 $(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)/{pipeline resource identifier}/。
-
当前管道和关联管道资源中的所有可用工件都会自动下载到部署作业中,并可供您的部署使用。要防止下载,请指定下载: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