我的构建管道通过“获取源”获取本地源文件夹中的源。我想从不同的项目获取一些其他文件。
条件
我尝试过:
$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 使用与工作区不同的用户运行。
有什么建议或想法吗?
您可以使用 TFVC Get 扩展来为您完成此操作。
如果您想自己完成,可以使用Items - Get Items Batch Rest API,例如:
POST https://dev.azure.com/fabrikam/_apis/tfvc/itembatch?api-version=5.1
{
"itemDescriptors": [
{
"path": "$/Fabrikam-Fiber-TFVC/AuthSample/AuthSample/Program.cs",
"version": 5,
"versionType": "changeset"
},
{
"path": "$/Fabrikam-Fiber-TFVC/AuthSample",
"recursionLevel": "Full"
}
]
}
我找到了解决方案:
<workspacename>;Build\<collectionId>
在 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