我正在尝试为一个相当大的解决方案设置自动构建+部署。单个解决方案在“$(Build.ArtifactStagingDirectory)”位置生成2个zip文件夹,其中包含所有正确的文件。出于测试/故障排除的目的,我仅查看这些zip文件之一,但是最终两个站点都必须采用这种方式进行部署。
但是,要获取实际文件,您必须通过 14 不必要的子文件夹。更复杂的是,其中的8个是可变的,具体取决于构建配置的某些元素(某些归因于git repo中的文件夹结构)。
我不需要这些子文件夹。另一个问题是我实际上并不需要100%的平面文件。我需要2个带有子文件夹的文件夹才能包含在最终提取的目录中。 (最终目录是IIS站点的物理路径。)有什么办法可以做到这一点?
我试过了:
如果不可能仅将构建步骤生成的zip文件部分压扁,我将不胜感激,可以帮助您弄清楚我可以使用变量拉出多少条令人费解的路径。
最佳答案
有一种非常简单的方法,可以将的内容和子目录的文件夹中的内容移动到构建工件文件夹中,同时舍弃其上方的不必要的文件夹结构,而无需使用“扁平文件夹”选项(因为您可能想要保持PackageTmp
下的文件夹结构完整):
首先,在“构建解决方案”任务中,设置类似于以下内容的“MS构建参数”:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.binariesdirectory)"
注意
PackageTmp
设置为false;您现在还不想将其压缩。还要注意设置/p:PackageAsSingleFile=false
。您不希望将输出直接转到默认情况下配置的工件过渡目录。接下来,添加一个Powershell任务,并添加以下内联脚本:
$folder = Get-ChildItem -Directory -Path '.\*' -Include 'PackageTmp' -Recurse
Write-Host "##vso[task.setvariable variable=PathToPackageTmpFolder]$($folder.FullName)"
这会将指向
/p:PackageLocation="$(build.binariesdirectory)
文件夹的标准路径存储在名为PackageTmp
的变量中。在“高级”选项下,将“工作目录”设置为PathToPackageTmpFolder
现在添加一个“复制文件”任务,以仅将PackageTmp及其子文件夹的内容移动到工件暂存目录中。将“源文件夹”设置为
$(build.binariesdirectory)
,将“内容”设置为$(PathToPackageTmpFolder)
,并将“目标文件夹”设置为**
。你们都准备好了!