获取工件目录路径作为Release流程的相对路径

Obtain the artifact directory path as a relative path for the Release process

我们正在为一些项目进行持续集成的配置过程,我们正在使用 TFS,现在我们遇到了一些发布定义的问题。我们想使用在构建过程中创建的 Web 部署包进行部署。

到目前为止,我们拥有的构建定义如下:

enter image description here

创建包的路径是默认的,所以我们可以在artifact目录下找到。但是问题是当我们需要提取服务器中网站的目标文件夹中的文件时。

我们使用的版本定义是: enter image description here

在下载工件阶段的这一部分中,执行发布的代理可以访问构建过程中发布的文件,所以在这里我们知道 .zip 包在哪里,我们可以使用 $(System.ArtifactsDirectory),但是如果我们使用 Deploy IIS App 任务,如您所见,我们正在连接到我们正在执行发布的服务器,并且 $(System.ArtifactsDirectory) 为我们提供工件的本地地址配置了代理,并且变量给出了类似 C:\agent_work\r1\a 的路径,其中 C 是代理的本地路径,并且该地址中不存在 .zip 文件。而且我们不能建立像 \Myserver\$(System.ArtifactsDirectory)... 这样的新路径,因为 $(System.ArtifactsDirectory) 是绝对路径,因此整个路径是:\Myserver\C:\我的文件夹....

我们需要其他解决方案,我们考虑过在构建过程中在不同的文件夹中创建包,在这种情况下我们总是知道包在哪里,我们不依赖于代理文件夹,并且在此我们可以使用 Web 部署包路径的方式:\Myserver\packagefolder\file.zip,但我们想使用不同的解决方案。

有没有办法让工件文件夹具有相对路径或类似的路径????

您可以使用 Windows Machine File Copy 任务将包文件从代理复制到您正在执行发布的服务器。

Use this task to copy application files and other artifacts such as PowerShell scripts and PowerShell-DSC modules that are required to install the application on Windows Machines. It uses RoboCopy, the command-line utility built for fast copying of data.

您可以使用一个临时文件夹来处理代理上的包文件。比如Build.StagingDirectoryBuild variables

在您的 MSbuild 参数中添加一个包位置,例如 /p:PackageLocation="$(Build.StagingDirectory)\。然后使用 Windows 计算机文件复制任务将文件从 StagingDirectory 复制到远程服务器中的本地文件夹。