Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security TFS vNext生成:GetSources任务无法从访问受限的文件夹中获取文件_Security_Tfs_Build_Vnext - Fatal编程技术网

Security TFS vNext生成:GetSources任务无法从访问受限的文件夹中获取文件

Security TFS vNext生成:GetSources任务无法从访问受限的文件夹中获取文件,security,tfs,build,vnext,Security,Tfs,Build,Vnext,我们目前正在从XAML构建迁移到vNext(TFS2017)。 “正常”构建工作正常,但我们的LicenseManager构建不工作。 只能从某些用户访问包含LicenseManager源代码的文件夹。 因此,我配置了一个vNext构建代理,其中构建服务在一个可以访问源代码的帐户上运行(就像我们对xaml构建所做的那样)。 我使用功能和需求强制LicenseManager在该代理上构建 但是GetSources任务不下载LicenseManager的源代码。 以下是GetSources任务使用的

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

但是GetSources任务不下载LicenseManager的源代码。 以下是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:\b\a1\_w\1\s\TPA\BuildVNext\1.7 /collection:http://tfs:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc workfold /map /workspace:ws_1_12 $/TPA/LicenseMgr/dev/main D:\b\a1\_w\1\s\TPA\LicenseMgr\dev\main /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:\b\a1\_w\1\s\TPA\DevTools\internal\BuildHelper\1.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:\b\a1\_w\1\s\TPA\DevTools\internal\ReferenceManager\1.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:\b\a1\_w\1\s\TPA\DevTools\external\MsBuild\ExtensionPack\4.0.9 /collection:http://tfs.:8080/tfs/DefaultCollection/ /loginType:OAuth /login:.,******** /noprompt
tf vc get /version:178702 /recursive /overwrite D:\b\a1\_w\1\s /loginType:OAuth /login:.,******** /noprompt
已下载除“LicenseMgr\dev\main”(具有受限访问权限的文件夹)之外的所有文件夹。 但是,当我打开VisualStudio,选择在构建过程中创建的工作区,然后选择“获取最新版本”时,它会毫无问题地下载代码

感谢您的帮助

致意 伯纳德

编辑: 我在构建计算机的d:drive中添加了一个简单的批处理脚本,并在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:\b\a1\_w\1\s\TPA\BuildVNext\1.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%\TPA\DevTools\internal\BuildHelper\1.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%\TPA\DevTools\internal\ReferenceManager\1.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%\TPA\DevTools\external\MsBuild\ExtensionPack\4.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%\TPA\LicenseMgr\dev\main /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt
tf vc get /version:%BUILD_SOURCEVERSION% /recursive /overwrite %BUILD_SOURCESDIRECTORY% /noprompt
正如我所说的,这确实下载了所有源代码,但请查看错误消息,特别是工作区的帐户信息:

D:\b\a1\_w\1\s>tf vc workspace /new /location:local /permission:Public ws_1_12 /collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
The path D:\b\a1\_w\1\s\TPA\BuildVNext\1.7 is already mapped in workspace ws_1_12;Build\beb2741f-e779-4a6f-a20e-033796fec5b7.

D:\b\a1\_w\1\s>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:\b\a1\_w\1\s>tf vc workfold /map /workspace:ws_1_12 $/TPA/BuildVNext/1.7 D:\b\a1\_w\1\s\TPA\BuildVNext\1.7 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.

D:\b\a1\_w\1\s>tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/internal/BuildHelper/1.6 D:\b\a1\_w\1\s\TPA\DevTools\internal\BuildHelper\1.6 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.

D:\b\a1\_w\1\s>tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/internal/ReferenceManager/1.9 D:\b\a1\_w\1\s\TPA\DevTools\internal\ReferenceManager\1.9 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.

D:\b\a1\_w\1\s>tf vc workfold /map /workspace:ws_1_12 $/TPA/DevTools/external/MsBuild/ExtensionPack/4.0.9 D:\b\a1\_w\1\s\TPA\DevTools\external\MsBuild\ExtensionPack\4.0.9 /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.

D:\b\a1\_w\1\s>tf vc workfold /map /workspace:ws_1_12 $/TPA/LicenseMgr/dev/main D:\b\a1\_w\1\s\TPA\LicenseMgr\dev\main /collection:/collection:http://tfs.net:8080/tfs/DefaultCollection/ /noprompt 
TF14061: The workspace ws_1_12;Build_LicenseMgr does not exist.

D:\b\a1\_w\1\s>tf vc get /version:178749 /recursive /overwrite D:\b\a1\_w\1\s /noprompt 
D:\b\a1\_w\1\s\TPA\LicenseMgr\dev:
Getting main
编辑2: 要使构建工作正常,我只需要在批处理脚本中的一行上执行以下操作:

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

因此,原始GetSources任务中的/loginType:OAuth给我带来了问题。不带/loginType的同一命令也可以

问题似乎仍然与权限有关。建议您再次检查相关帐户权限,并在生成代理上授予其本地管理员权限

您还可以在生成定义中禁用默认的获取源步骤。并使用您自己的脚本来获取源代码/拉取文件,以查看是否得到相同的情况。如何操作,请遵循:


编写powershell脚本以执行整个get source选项,并使用具有足够权限的帐户来下拉有限的LicenseManager文件夹

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


授予“Project Collection Build Service”帐户对LicenseManager源代码的访问权限后,一切都正常工作:)

当您使用Visual Studio并选择要获取最新版本的工作区时,您实际使用的是哪个帐户?是否与生成代理上的生成服务帐户相同?是的,该帐户与运行生成服务的帐户相同。虽然这可能有效,但不需要更多的手动工作吗?“构建解决方案”步骤和“发布人工制品”步骤也必须进行调整。注意:该帐户确实具有本地管理员权限。@如果您可以先忽略构建和发布步骤,只需检查文件是否可以通过这种方式下拉即可。如果问题与您的生成服务帐户有关,则这将缩小范围。另一种方法是使用build服务帐户运行tf命令行直接获取文件,看看它是否有效。还将clean workspace设置为true,强制它在每次触发构建时获取所有文件。所有这些都只是试图缩小问题的范围。好的,所以我发现将SyncSources设置为false不是一个选项,因为没有设置所有变量“BUILD\u SOURCESDIRECTORY”、“BUILD\u SOURCEVERSION”等。我在构建计算机的d:\驱动器中添加了一个简单的批处理脚本,该脚本与GetSources任务相同,但不指定登录类型。这确实管用!当我在构建中的GetSources任务之后运行此脚本时,它确实下载了所有源代码!我不能发表长篇大论。请看我在原始问题中的编辑。