powershell - 如何通过 tf.exe 从 Azure DevOps Agent 上的第二个项目获取文件?

标签 powershell azure-devops tfvc

我的构建管道通过“获取源”获取本地源文件夹中的源。我想从不同的项目获取一些其他文件。

条件

  • 本地 Azure DevOps 服务器
  • 自托管构建代理
  • TFVC(不是 git)
  • ..\w\XXX\s\中存在到 $projectA\subdir\branch 的现有映射
  • 我想从另一个项目 $projectB\subdir\branch 获取文件
  • $projectB 未映射
  • 仅限 Powershell 和 tf.exe - 我知道管道 UI 中的额外映射函数,但我想编写脚本

我尝试过:

$collection = "well my collection..."
$tfsProjectTargetPath = "`$/projectB/subdir/branch"
$localWorkDir = $env:SYSTEM_DEFAULTWORKINGDIRECTORY
$workspaceName = $env:Build_Repository_Tfvc_Workspace
& $tf vc workfold /map /workspace:$workspaceName $localWorkDir /collection:$collection /noprompt

这会导致 "TF14061: The workspace ws_XXX_YYYY;user does not exist." .

我还尝试创建一个新的工作区:

$workspaceName = "some new name"
& $tf vc workspace /new /location:local /permission:Public $workspaceName /collection:$collection /noprompt

这会导致 "The path ..\w\220\s\projectA\subidr\branch is already mapped in workspace ws_XXX_YYYY;Build\<guid>" .

对我来说,$workspaceName + user 的值似乎是问题所在。不知何故,$workspaceName 与“build:”用户耦合。我的 powershell 使用与工作区不同的用户运行。

有什么建议或想法吗?

最佳答案

我找到了解决方案:

  • 您必须先删除现有工作区,然后才能创建第二个工作区
  • 由于工作空间的名称,删除很棘手
  • 名称由 <workspacename>;Build\<collectionId> 组成
  • 工作区名称可在 list of the predefined variables 中找到:$Build_Repository_Tfvc_Workspace
  • 集合 ID 对我来说并不明显。我通过检查哪个变量具有哪个值来弄清楚。

在 Powershell 中,可以通过以下方式从另一个项目获取文件:

$tf = [System.IO.Path]::Combine($env:AGENT_HOMEDIRECTORY, "externals", "tf", "tf.exe")
$workspaceName = $env:Build_Repository_Tfvc_Workspace
$workspaceNameWithUser = $workspaceName + ";Build\" + $env:SYSTEM_COLLECTIONID
& $tf vc workspace /delete $workspaceNameWithUser

现在您可以创建一个新的工作区和新的映射,就像我在问题中提到的那样:

$collection = "well my collection..."
$tfsProjectTargetPath = "`$/projectB/subdir/branch"
$localWorkDir = $env:SYSTEM_DEFAULTWORKINGDIRECTORY
$workspaceName = "choose a new name"
& $tf vc workspace /new /location:local /permission:Public $workspaceName /collection:$collection /noprompt $commandLogin
& $tf vc workfold /unmap /workspace:$workspaceName $/ /collection:$collection /noprompt $commandLogin
& $tf vc workfold /map /workspace:$workspaceName $tfsProjectTargetPath $localWorkDir /collection:$collection /noprompt
& $tf vc get /recursive /overwrite $localWorkDir /noprompt

关于powershell - 如何通过 tf.exe 从 Azure DevOps Agent 上的第二个项目获取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76977984/

相关文章:

powershell - 从 Powershell 中的闭包调用函数

azure-devops - Azure 开发运营管道。无法在任务级别设置超时

uwp - 如何绕过 Azure Devops 构建管道中的 UWP 应用程序认证?

gruntjs - 在 Visual Studio Online 上使用 NPM 部署构建

powershell - 作为 TFS 构建的一部分,仅从 TFS checkin 文件

powershell - 调用命令在同一行指定脚本 block

powershell - 将字符串拆分为两个数组

powershell - 如何在Sitecore 7.2中安装TDS生成的.update软件包?

visual-studio-2013 - move 文件在 TFS 2013 中丢失历史记录

git - 在使用 Visual Studio 2013 时,TFVC(TFS 版本控制)和用于源代码控制的 Git 之间的最大区别是什么?