问题描述
我有一个软件包,该软件包是通过从工件中选择文件手动准备的 然后下载该软件包并将其传输到服务器,然后从那里执行powershell脚本 部署。我们希望通过CI管道实施部署,以下是我们正在执行的任务,该任务通过以下两个步骤创建了一个设置:工件和阶段
已设置好的管道可以正常运行,可以在构建代理服务器上正常下载所有文件,然后根据需要成功执行脚本,但是问题出在“工件”部分,该部分正在下载所有其他文件,而从下拉菜单中我们只需要5不需要-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 ## [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.部署
-
代理人职位: 执行计划:
并行性:无; 超时:0 取消作业超时:1 -
准备包裹:
脚本路径:$(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
-
部署: 脚本路径:$(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
之前不需要的文件/文件夹。
简单测试:
然后在“发布构建工件”任务之前执行一项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工件的最终内容: