【问题标题】:TFS 2017 Build Copy Files without folder structure?TFS 2017 构建没有文件夹结构的复制文件?
【发布时间】:2017-10-09 20:51:56
【问题描述】:

在我的 TFS 2017 构建定义中,我试图将具有特定名称(包)的文件夹复制到我的 Artifacts 目录中。我只对特定文件夹本身感兴趣,而不对它的父文件夹感兴趣。

有人可以告诉我应该如何进行这项工作吗?

复制文件任务的当前配置: 来源:$(agent.builddirectory) 内容:**\包装*** 目标文件夹:$(build.artifactstagingdirectory)\MyArtifact

这会产生以下文件夹结构,而我唯一感兴趣的是 Package 文件夹: \MyArtifact\folderX\s\folderY\folderZ\folderA\Package

【问题讨论】:

    标签: tfs tfsbuild


    【解决方案1】:

    使用 TFS2017update1 及更高版本,VSTS,您只需在 Copy Files Task 的高级选项下检查 Flatten Folders。目前最简单的解决方案。

    这将展平文件夹结构并将所有文件复制到 指定的目标文件夹。

    不确定您是否正在使用 2017 发行版,并且没有 Flatten Folders 选项。如果您只想复制没有文件夹结构的文件,则需要指定复制根目录。您可以使用$(Build.StagingDirectory) 作为目标。然后使用 Publish 任务$(Build.StagingDirectory) 作为复制根并从这个根发布所有内容到 drop。

    详细步骤和截图请看Eddie在这个问题中的回答:Copy one file in target directory on deploy from visual studio team services

    【讨论】:

    • 感谢帕特里克的建议。我确实有更新 1,但我不想展平文件夹,因为我的“Package”文件夹包含 WCF 项目的输出:顶层有一些 .svc,还有一个带有 dll 的 bin 文件夹。我想保留以保持这种结构...
    • @BenThaens 如果是这样,您可以使用选项 2,只需将一些有结构的文件和一些没有结构的文件复制到诸如Build.StagingDirectory 之类的中等路径,而不是直接使用builddirectory
    【解决方案2】:

    如果“package”的相对路径没有变化,可以在“Source”中指定详细路径来实现你想要的功能。

    例如,配置复制文件任务:

    源文件夹至:$(agent.builddirectory)\folderY\folderZ\folderA\Package

    内容至:**

    目标文件夹:$(build.artifactstagingdirectory)\MyArtifact\Package

    你会得到你想要的文件夹结构。

    【讨论】:

      【解决方案3】:

      虽然所有答案在某种程度上都是正确的,但这并不是我想要达到的。 我最终创建了自己的 PowerShell 脚本以将包文件夹及其内容复制到暂存目录:

      $BasePath = [System.IO.Path]::GetDirectoryName("$(SolutionPath)")
      $Search = "PackageTmp"
      $Destination = "$(Build.StagingDirectory)"
      
      Get-ChildItem -Path $BasePath -Filter $Search -Directory -Recurse | Copy-Item -Destination {Join-Path $Destination $(ArtifactName)} -Recurse -Force
      

      【讨论】:

        猜你喜欢
        • 2011-08-24
        • 1970-01-01
        • 2017-08-22
        • 2015-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-02
        • 1970-01-01
        相关资源
        最近更新 更多