【问题标题】:Get only checked in files from TFS as part of TFS build作为 TFS 构建的一部分,仅从 TFS 签入文件
【发布时间】:2019-02-06 19:47:47
【问题描述】:

我在 TFS 中检查了我的文件夹的持续集成,这会触发 TFS2015 中的构建。现在,作为构建定义的一部分,我想添加一个步骤,该步骤将识别并仅提取那些作为触发当前构建的变更集的一部分签入的文件,并将它们复制到目标位置。

一个powershell脚本可能是?请帮忙

【问题讨论】:

    标签: powershell tfs msbuild tfs-2015 tfvc


    【解决方案1】:

    您可以在构建定义中添加一个 Powershell 脚本任务来执行此操作。一个简单的脚本供您参考:

    $changesetid = $Env:Build_SourceVersion
    $TFSURI = $Env:System_TeamFoundationCollectionUri
    $tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($TFSURI)
    $vcs = $tfs.GetService("Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer")
    $cs = $vcs.GetChangeset($changesetid)
    foreach ($change in $cs.Changes)
    {
        $change.Item.DownloadFile('D:\a\test\' + $change.Item.ServerItem.Substring(1))
    }
    

    此代码只是获取更改的项目,如果变更集包含其他更改,例如删除,您可能需要添加代码来检查这一点。

    并且您还需要导入 TFS 客户端库才能使用此脚本,详情请参阅此链接:PowerShell and TFS: The Basics and Beyond

    【讨论】:

      【解决方案2】:

      这在 TFS 2015 中是不可能的。TFS 2017 引入了“不同步源”的功能,之后您可以执行自己的 get 操作。您可以尝试在存储库选项卡上隐藏整个存储库,然后在触发器选项卡上创建 CI TFVC Include 触发器定义以重新创建此行为。

      然后您可以使用tfpt getcs 选项来获取变更集的更改。您应该能够从构建 Build.SourceVersion 变量中获取版本。您可以通过在构建服务器上安装 Team Foundation Server Power Tools 2015 和 Team Explorer 2015 来获得 tfpt

      【讨论】:

      • 谢谢。您说在 TFS2015 中不可能,但要求安装 TFS 电动工具 2015 和团队资源管理器 2015?另外,当您说执行自己的 get 操作时,您是在建议一个 powershell 任务吗?
      • 要执行您自己的获取操作,您必须能够禁用获取源。这是 TFS 2017+ 的一项功能。
      • 要使用 Team Foundation Power Tools,您需要最新版本,不幸的是 2015。要使用 2015 年的电动工具,您需要 Team explorer 2015。
      • 要运行 tfpt,您可以使用批处理脚本、powershell 脚本、bash 脚本或其他任何可以执行可执行文件的工具。
      • PS 只是获取更改的文件可能是一项危险的业务。删减怎么办?重命名?恢复的文件?移动文件?空目录?
      猜你喜欢
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2014-08-06
      • 2014-07-08
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 2013-06-06
      相关资源
      最近更新 更多