VSTS 联机门户:发布时取消嵌套生成文件夹



我正在尝试为一个相当大的解决方案设置自动构建+部署。单个解决方案在"$(Build.ArtifactStagingDirectory("位置生成 2 个 zip 文件夹,这些文件夹包含所有正确的文件。出于测试/故障排除的目的,我只查看其中一个zip文件,但最终两个站点都必须以这种方式部署。

但是,要访问实际文件,您必须通过14个不必要的子文件夹。更复杂的是,其中大约 8 个是可变的,基于构建配置的某些元素(有些是由于 git 存储库中的文件夹结构(。

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

我试过:

  • 获取生成的 zip 文件,将其解压缩到临时目录,然后重新打包,所有这些都在构建计算机上完成。

    • 为了使其正常工作,我必须手动指定 14 个子目录。此外,我无法使用"发布工件"将生成的 zip 上传到 VSTS,因此我不确定如何将其放入服务器盒。
  • 从 VSTS 下载已发布的 zip 文件,在发布计算机上本地解压缩该文件,然后将内容复制到正确的目录。

    • 仅当我手动指定目录中包含的 14 个文件夹时,这才有效。我尝试用通配符隐藏 14 个文件夹,但只成功复制了过多的嵌套结构 - 我猜"源文件夹"参数不支持通配符(我必须在"内容"部分中实际执行此操作或任务失败(。
  • 使用复制对话框中的"拼合文件夹"高级选项。

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

如果不可能只部分展平构建步骤生成的 zip,我将不胜感激,以帮助弄清楚我可以使用变量提取多少这个非常复杂的路径。

有一种非常简单的方法可以将PackageTmp文件夹的内容和子目录的内容移动到构建工件文件夹中,同时去除其上方不必要的文件夹结构,并且不使用"平展文件夹"选项(因为您可能希望保持文件夹结构完好无损PackageTmp(:

首先,在生成解决方案任务中,设置类似于以下内容的 MS 生成参数:

/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)"

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

现在添加"复制文件"任务,以仅将 PackageTmp 及其子文件夹的内容移动到项目暂存目录。 将"源文件夹"设置为"$(PathToPackageTmpFolder)",将"内容"设置为"**",将"目标文件夹"设置为"$(build.artifactstagingdirectory)"。 一切就绪!

这是 MSBuild 部署/发布到包操作,部署到服务器后不会保留文件夹结构。

可以指定/p:PackageTempRootDir=""msbuild 参数以忽略项目路径的文件夹结构。

另一种方法是,您可以通过文件系统方法发布项目,然后通过存档文件任务存档文件。

最新更新