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

问题描述

我有一个软件包,该软件包是通过从工件中选择文件手动准备的 然后下载该软件包并将其传输到服务器,然后从那里执行powershell脚本 部署。我们希望通过CI管道实施部署,以下是我们正在执行的任务,该任务通过以下两个步骤创建了一个设置:工件和阶段

LINK

已设置好的管道可以正常运行,可以在构建代理服务器上正常下载所有文件,然后根据需要成功执行脚本,但是问题出在“工件”部分,该部分正在下载所有其他文件,而从下拉菜单中我们只需要5不需要-6个zip文件和其他文件。我希望管道仅从成功的构建中下载特定的文件夹,然后从构建服务器中执行脚本。 例如,在下面的示例中,下载所有文件,但实际上我们只需要图像中突出显示文件夹中的文件

Artifacts screen

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

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 ## [warning] 3分钟内尚未完成下载任务。 其余任务状态:
2020-09-08T03:36:43.6666545Z ## [warning] WaitingForActivation:1个任务。
2020-09-08T03:36:48.6822324Z剩余1个下载。
2020-09-08T03:36:53.6868753Z剩余1个下载。
....

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

对于给定的环境,我的管道任务包含3个步骤:
1.代理商工作
2.准备包装
3.部署

  1. 代理人职位: 执行计划:
    并行性:无; 超时: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工件仅包含我们所需的特定文件夹。

我们还可以选择使用CMD task命令运行rmdir(for directories)/del(for files)来删除/删除最后一个Publish Artifact task之前不需要的文件/文件夹。

简单测试:

enter image description here

然后在“发布构建工件”任务之前执行一项CMD任务以选择特定的文件夹:

enter image description here

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工件的最终内容:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...