TFS vNext Build: GetSources 任务不会从具有受限访问权限的文件夹中获取文件



我们目前正在从 XAML build 迁移到 vNext (TFS2017)。 "正常"构建工作正常,但许可证管理器的构建不起作用。 包含许可证管理器源代码的文件夹只能从某些用户访问。 因此,我配置了一个 vNext 生成代理,其中生成服务在有权访问源代码的帐户上运行(就像我们对 xaml 生成所做的那样)。 我使用功能和需求来强制在该代理上构建许可证管理器。

但是 GetSources 任务不会下载许可证管理器的源代码。 以下是 GetSources 任务使用的命令:

tf vc workspace /new /location:local /permission:Public ws_1_12 /collection:http://tfs:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc workfold /unmap /workspace:ws_1_12 $/ /collection:http://tfs:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc workfold /map /workspace:ws_1_12 $/TPA/BuildVNext/1.7 D:ba1_w1sTPABuildVNext1.7 /collection:http://tfs:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc workfold /map /workspace:ws_1_12 $/TPA/LicenseMgr/dev/main D:ba1_w1sTPALicenseMgrdevmain /collection:http://tfs:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/internal/BuildHelper/1.6 D:ba1_w1sTPADevToolsinternalBuildHelper1.6 /collection:http://tfs:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/internal/ReferenceManager/1.9 D:ba1_w1sTPADevToolsinternalReferenceManager1.9 /collection:http://tfs:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/external/MsBuild/ExtensionPack/4.0.9 D:ba1_w1sTPADevToolsexternalMsBuildExtensionPack4.0.9 /collection:http://tfs.:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc get /version:178702 /recursive /overwrite D:ba1_w1s /loginType:OAuth /login:.,******** /noprompt

除了"LicenseMgr\dev\main"(这是访问受限的文件夹)之外的所有文件夹都会被下载。 但是当我打开 VisualStudio 时,选择在构建期间创建的工作区,然后选择"获取最新",它确实可以毫无问题地下载代码。

任何帮助表示赞赏!

此致敬意 伯恩德

编辑: 我已将一个简单的批处理脚本添加到生成计算机的 d: 驱动器,并在 GetSources 任务完成后运行该脚本。这确实下载了所有来源!!

这是脚本:

tf vc workspace /new /location:local /permission:Public %BUILD_REPOSITORY_TFVC_WORKSPACE% /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc workfold /unmap /workspace:%BUILD_REPOSITORY_TFVC_WORKSPACE% $/ /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc workfold /map /workspace:%BUILD_REPOSITORY_TFVC_WORKSPACE% $/TPA/BuildVNext/1.7 D:ba1_w1sTPABuildVNext1.7 /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc workfold /map /workspace:%BUILD_REPOSITORY_TFVC_WORKSPACE% $/TPA/DevTools/internal/BuildHelper/1.6 %BUILD_SOURCESDIRECTORY%TPADevToolsinternalBuildHelper1.6 /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc workfold /map /workspace:%BUILD_REPOSITORY_TFVC_WORKSPACE% $/TPA/DevTools/internal/ReferenceManager/1.9 %BUILD_SOURCESDIRECTORY%TPADevToolsinternalReferenceManager1.9 /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc workfold /map /workspace:%BUILD_REPOSITORY_TFVC_WORKSPACE% $/TPA/DevTools/external/MsBuild/ExtensionPack/4.0.9 %BUILD_SOURCESDIRECTORY%TPADevToolsexternalMsBuildExtensionPack4.0.9 /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc workfold /map /workspace:%BUILD_REPOSITORY_TFVC_WORKSPACE% $/TPA/LicenseMgr/dev/main %BUILD_SOURCESDIRECTORY%TPALicenseMgrdevmain /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc get /version:%BUILD_SOURCEVERSION% /recursive /overwrite %BUILD_SOURCESDIRECTORY% /noprompt

正如我所说,这确实下载了所有源代码,但请查看错误消息,尤其是工作区的帐户信息:

D:ba1_w1s>tf vc workspace /new /location:local /permission:Public ws_1_12 /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
The path D:ba1_w1sTPABuildVNext1.7 is already mapped in workspace ws_1_12;Buildbeb2741f-e779-4a6f-a20e-033796fec5b7.
D:ba1_w1s>tf vc workfold /unmap /workspace:ws_1_12 $/ /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection//noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.
D:ba1_w1s>tf vc workfold /map /workspace:ws_1_12 $/TPA/BuildVNext/1.7 D:ba1_w1sTPABuildVNext1.7 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.
D:ba1_w1s>tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/internal/BuildHelper/1.6 D:ba1_w1sTPADevToolsinternalBuildHelper1.6 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.
D:ba1_w1s>tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/internal/ReferenceManager/1.9 D:ba1_w1sTPADevToolsinternalReferenceManager1.9 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.
D:ba1_w1s>tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/external/MsBuild/ExtensionPack/4.0.9 D:ba1_w1sTPADevToolsexternalMsBuildExtensionPack4.0.9 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.
D:ba1_w1s>tf vc workfold /map /workspace:ws_1_12 $/TPA/LicenseMgr/dev/main D:ba1_w1sTPALicenseMgrdevmain /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.
D:ba1_w1s>tf vc get /version:178749 /recursive /overwrite D:ba1_w1s /noprompt 
D:ba1_w1sTPALicenseMgrdev:
Getting main

编辑2: 为了使我的构建工作,我只需要在批处理脚本中的一行上:

tf vc get /version:%BUILD_SOURCEVERSION% /recursive /overwrite %BUILD_SOURCESDIRECTORY% /noprompt

因此,原始 GetSources 任务中的/loginType:OAuth 为我带来了问题。没有/loginType 的相同命令确实有效!

似乎问题仍然与权限有关。建议仔细检查相关帐户权限,并授予其对生成代理的本地管理员权限。

还可以在生成定义中禁用默认的获取源步骤。并使用您自己的脚本来获取源/拉取文件,以查看是否遇到相同的情况。 如何,请关注:它是否能够忽略/禁用第一步在vNext Build中获取源代码?

编写一个 powershell 脚本来执行整个获取源选项,并使用具有足够权限的帐户来下拉有限的LicenseManager文件夹。

终于找到了问题的根本原因: 在 XAML 生成中,配置为运行生成服务的帐户还用于创建工作区和获取源。 在 vNext 生成中,"项目集合生成服务"用于创建工作区并获取源代码。 "项目集合生成服务"帐户无权访问许可证管理器源代码。

在授予"项目集合生成服务"帐户对 LicenseManager 源代码的访问权限后,一切正常:)

最新更新