当前位置 : 主页 > 手机开发 > 其它 >

azure-devops – VSTS在线门户:在发布时取消嵌套构建文件夹

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在尝试为一个相当大的解决方案设置自动构建部署.单个解决方案在“$(Build.ArtifactStagingDirectory)”位置生成2个zip文件夹,这些文件夹包含所有正确的文件.出于测试/故障排除的目的,我
我正在尝试为一个相当大的解决方案设置自动构建部署.单个解决方案在“$(Build.ArtifactStagingDirectory)”位置生成2个zip文件夹,这些文件夹包含所有正确的文件.出于测试/故障排除的目的,我只查看其中一个zip文件,但最终这两个站点都必须以这种方式部署.

但是,要获取实际文件,您必须通过14个不必要的子文件夹.更复杂的是,基于构建配置的某些元素(其中一些是由于git repo中的文件夹结构),其中大约8个是可变的.

我不想要任何这些子文件夹.另一个问题是我实际上并不想要100%的平面文件;我需要2个子文件夹的文件夹包含在最终解压缩的目录中. (最终目录是IIS站点的物理路径.)有什么办法可以做到这一点吗?

我试过了:

>将生成的zip文件,将其解压缩到临时目录,然后在构建计算机上重新打包.

>为了使其工作,我不得不手动指定14个子目录.此外,我无法使用“发布工件”将生成的zip上传到VSTS,所以我不知道如何将它放到服务器盒上.

>从VSTS下载已发布的zip文件,在发布计算机上本地解压缩,然后将内容复制到正确的目录.

>仅当我手动指定目录中包含的14个文件夹时,此方法才有效.我试图用通配符隐藏14个文件夹,但只是成功复制过多的嵌套结构 – 我猜测“源文件夹”参数不支持通配符(我必须在“内容”部分实际执行此操作或任务失败了).

>使用复制对话框中的“拼合文件夹”高级选项.

>这将删除所有文件夹结构,这不是我想要的.我需要最终在最终目录中包含2个包含子文件夹的文件夹.

如果不可能仅仅部分地压缩构建步骤生成的zip,我会感谢一些帮助,以确定我可以使用变量提取多少这种非常复杂的路径.

有一种非常简单的方法可以将PackageTmp文件夹中的内容和子目录的内容移动到构建工件文件夹,同时在其上方删除不必要的文件夹结构,而不使用“展平文件夹”选项(因为您可能希望保留PackageTmp下的文件夹结构完整):

首先,在Build Solution任务中,将MS Build Arguments设置为类似于以下内容:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.binariesdirectory)"

请注意/ p:PackageAsSingleFile = false设置为false;你还不想拉包.另请注意设置/p:PackageLocation=\”$(build.binariesdirectory).您不希望输出直接转到工件临时目录,默认配置.

接下来,添加Powershell任务,并添加此内联脚本:

$folder = Get-ChildItem -Directory -Path '.\*' -Include 'PackageTmp' -Recurse
Write-Host "##vso[task.setvariable variable=PathToPackageTmpFolder]$($folder.FullName)"

这将在名为PathToPackageTmpFolder的变量中存储PackageTmp文件夹的完全限定路径.在“高级选项”下,将“工作目录”设置为$(build.binariesdirectory)

现在添加“复制文件”任务以仅将PackageTmp及其子文件夹的内容移动到工件临时目录.将源文件夹设置为$(PathToPackageTmpFolder),将内容设置为**,将目标文件夹设置为$(build.artifactstagingdirectory).你们都准备好了!

网友评论