【发布时间】:2019-02-06 19:47:47
【问题描述】:
我在 TFS 中检查了我的文件夹的持续集成,这会触发 TFS2015 中的构建。现在,作为构建定义的一部分,我想添加一个步骤,该步骤将识别并仅提取那些作为触发当前构建的变更集的一部分签入的文件,并将它们复制到目标位置。
一个powershell脚本可能是?请帮忙
【问题讨论】:
标签: powershell tfs msbuild tfs-2015 tfvc
我在 TFS 中检查了我的文件夹的持续集成,这会触发 TFS2015 中的构建。现在,作为构建定义的一部分,我想添加一个步骤,该步骤将识别并仅提取那些作为触发当前构建的变更集的一部分签入的文件,并将它们复制到目标位置。
一个powershell脚本可能是?请帮忙
【问题讨论】:
标签: powershell tfs msbuild tfs-2015 tfvc
您可以在构建定义中添加一个 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。
【讨论】:
这在 TFS 2015 中是不可能的。TFS 2017 引入了“不同步源”的功能,之后您可以执行自己的 get 操作。您可以尝试在存储库选项卡上隐藏整个存储库,然后在触发器选项卡上创建 CI TFVC Include 触发器定义以重新创建此行为。
然后您可以使用tfpt getcs 选项来获取变更集的更改。您应该能够从构建 Build.SourceVersion 变量中获取版本。您可以通过在构建服务器上安装 Team Foundation Server Power Tools 2015 和 Team Explorer 2015 来获得 tfpt。
【讨论】: