Azure Artifacts 仅下载在构建服务器上部署所需的特定文件

Azure Artifacts to download only specific files required for deployment on build server

我有一个从 Artifacts 中选择文件手动准备的包 然后下载该包并将其传输到服务器,然后从那里执行 powershell 脚本 部署。我们想通过 CI 管道实现部署,下面是我们正在执行的任务,创建了一个包含以下 2 个步骤的设置:工件和阶段 已设置的管道运行良好,可以很好地下载构建代理服务器上的所有文件,然后根据需要成功执行脚本,但是问题来自 Artifacts 部分,它正在下载所有其他文件以及我们只需要 5 个的 drop不需要 -6 zip 文件和其他文件。我希望管道仅从成功构建中下载特定文件夹,然后从构建服务器执行脚本。 例如下面它下载所有但实际上我们只需要图像中突出显示的文件夹中的文件:

管道有时会执行并成功完成,有时会花费更长的时间或失败 以下错误消息:

2020-09-08T03:36:33.6433775Z 剩余 1 次下载。
2020-09-08T03:36:38.6591164Z 剩余 1 次下载。
2020-09-08T03:36:43.6665857Z 剩余 1 次下载。
2020-09-08T03:36:43.6666024Z ##[警告]3 分钟内没有完成任何下载任务。 剩余任务状态:
2020-09-08T03:36:43.6666545Z ##[警告] WaitingForActivation:1 个任务。
2020-09-08T03:36:48.6822324Z 剩余 1 次下载。
2020-09-08T03:36:53.6868753Z 剩余 1 次下载。
...

我已经尝试重新启动 VSTS 代理服务,重新启动管道,但结果有所不同。 任何人都可以帮助了解如何使管道仅选择以黑色突出显示的特定文件夹。 Artifacts screen.

对于给定的环境,我的管道任务有 3 个步骤:
1.Agent工作
2.Prepare 套餐
3.Deploy

  1. 代理职位: 执行计划:
    并行度:None; 超时:0 作业取消超时:1

  2. 准备包:
    脚本路径:$(System.DefaultWorkingDirectory)/TestRelease2020-1.1/drop/Tools/A/_1.ps1
    参数: ".\Tools\Test.Deploy\Test.Deploy.exe"
    ".\Tools\Test.Deploy\Xml\A_PreparePackage.xml" “Source\Project_ABCProject\XYZPackages”

    工作目录:$(System.DefaultWorkingDirectory)/TestRelease2020-1.1/drop

  3. 部署: 脚本路径:$(System.DefaultWorkingDirectory)/TestRelease2020-1.1/drop/Tools/A/_deploy_1.ps1
    参数: ".\Tools\Test.Deploy\Test.Deploy.exe"
    ".\Tools\Test.Deploy\Xml\A_config.xml" 工作目录:$(System.DefaultWorkingDirectory)/TestRelease2020-1.1/drop

设计 将下载整个构建工件进行部署,我们无法在发布管道中控制此行为。此外,没有必要在您的方案中更改此行为。

解法:

为了达到你想要的效果,建议管理要在构建管道中发布的文件夹。我们需要做的就是确保 Drop 工件只有所需的文件夹。

我们可以使用 CMD task 和 xcopy 命令将特定文件夹复制到我们发布构建工件的路径中,这样 Drop 工件只包含我们需要的特定文件夹。

我们也可以选择 ti 运行 CMD taskrmdir(for directories)/del(for files) 命令来 delete/remove 最后 Publish Artifact task 之前不需要的 files/folders。

简单测试:

然后在 Publish Build Artifact 任务之前执行一个 CMD 任务来选择特定文件夹:

xcopy "Source\Project\ABC Project\XYZ Packages" "$(build.artifactstagingdirectory)\XYZ Packages\" /s /e /h /y
xcopy "Tools\A" "$(build.artifactstagingdirectory)\A\" /s /e /h /y
xcopy "Tools\B" "$(build.artifactstagingdirectory)\B\" /s /e /h /y
xcopy "Tools\C" "$(build.artifactstagingdirectory)\C\" /s /e /h /y

Drop 神器的最终内容: