2

我遇到了实验室管理和标准环境的安全问题。

我在我的域“DevDomain”中安装了 TFS2012 更新 2。我在“DevDomain”中也有一个单独的构建/实验室机器,其中安装了同一集合“CollectionA”的构建控制器、构建代理和测试控制器。

自动化构建工作完美。

我在“DevDomain”和“TestDomain”中有部署目标 PC(稍后会详细介绍)。

为了更上一层楼,我现在想自动部署 TFS 构建代理构建的软件来测试钻机;具体来说,我想让一个部署脚本卸载现有产品,将更新的安装程序复制到目标 PC 上,然后安装它。

我的第一次尝试是在我的“DevDomain”中定义一个标准环境,并让实验室构建的部署部分在同一个域中工作。

这行得通。这就是我所做的;

自动构建(使用 DefaultTemplate.xaml 进程)创建一个我想用于部署的 MSI 文件,以及一个我想运行以协调部署的 PowerShell 脚本。(脚本只是尝试通过 msiexec 运行 MSI 来卸载,在本地复制新版本,然后通过 msiexec 运行它来安装新副本)。自动构建很高兴地制作了这两个工件并将它们放入定义的 TFS 丢弃共享中。

为了解决这个问题,我有:

  • 使用单台机器创建了一个新的标准实验室环境(桌面客户端角色)
    • 实验室经理已成功将代理部署到此 PC
    • 代理正在交互式运行并在线显示。
  • 使用 LabDefaultTemplate.11.xaml 工作流创建了一个新的构建定义。
    • 在配置中引用了上述实验室
    • 在配置中引用了自动构建的最新输出
    • 指定构建输出 PowerShell 脚本(通过 $(BuildLocation) 宏。

构建的此部署选项卡指定要在具有“桌面客户端”角色的实验室机器上运行以下脚本:

cmd /c powershell.exe "$(BuildLocation)\DeployGuiToLabWorkstation.ps1" "$(BuildLocation)"

这行得通。

请注意,我将测试代理配置为作为交互式进程运行,因为在部署工作之后我的最终目标是在这些实验室上驱动编码的 UI 测试。

当尝试部署到不同域中的机器时,问题就开始了 现在为了使这更现实,我现在需要为我的 QA 机器定义一个标准实验室环境,它们位于不同的域中;“测试域”。

域“TestDomain”与域“DevDomain”具有信任关系。“DevDomain”和“TestDomain”之间没有相互信任

测试管理器实验室中心再次定义了这个 OK 并部署了代理,代理在线向我的测试控制器报告了自己。

现在,当我更改实验室构建以引用新的标准环境(在“TestDomain”上)时,部署失败并出现此错误;

Exception Message: Team Foundation Server could not complete the deployment task for
machine '10.7.70.71', script 'cmd' and arguments '/c copy \\*buildmachine*
\TFS_Drop\...\DeployGuiToWorkstation.ps1 C:\GuiDeploy'. (type LabDeploymentProcessException)

为了诊断这一点,我将实验室部署脚本修改为:

"cmd /c powershell whoami"

根据日志,该进程正在以“nt authority\system”的身份运行,而不是为测试代理指定的实验室环境帐户。

这解释了脚本错误;目标 PC 上的 PowerShell 无法访问 TFS 放置共享,但由于此帐户是本地计算机帐户,我无法将“TestDomain”中 PC 的计算机帐户授予“DevDomain”中计算机上的共享和 NTFS 文件夹的权限

那么如何从“TestDomain”中的机器将“devDomain”共享/文件系统的权限授予“System”服务帐户?

或者

如何让测试代理(以本地计算机管理员身份运行)在其自己的帐户上下文而不是本机系统上下文中执行部署脚本?

我难住了!


编辑:似乎测试代理 UI 在您指定的帐户中运行,但是当您以这种方式配置它时,它会使服务“Visual Studio Lab Agent Service”作为本地系统运行,您可以在服务中手动将其更改为更多适当的域帐户,然后该帐户会反映在 PS“whoami”结果中。

我现在正在调查使用 TestDomain 帐户来镜像“DevDomain”帐户的服务,以便我可以适当地设置共享权限。


这是与TFS 实验室管理部署脚本类似的场景,但由于使用测试和测试设置绕过了这一点,我特别想要部署部分的解决方案,我认为值得提出这个问题。

4

5 回答 5

2

上述 Pete Stensønes 的解决方案适用于我的条件。

但我的方案是在工作组上设置标准环境,但 tfs 在另一个域中。只需列出我的步骤供您参考:在以下服务器上创建本地帐户: 本地实验室服务帐户 - tfslab

  1. tfs 测试控制器服务器:创建本地 tfslab 帐户。还在测试控制器配置控制台中将 tfslab 配置为实验室服务帐户
  2. tfs 测试代理服务器:创建本地 tfslab 帐户并将 tfslab 添加到本地管理员组。还要更新 Visual Studio 测试代理服务和 Visual Studio 实验室代理服务以作为 tfslab 运行。
  3. tfs 放置文件夹服务器:创建本地 tfslab 帐户。并将共享读取权限添加到 tfs drop 文件夹。
于 2013-07-22T02:48:31.813 回答
1

好的,在我们的网络支持人员的帮助下,我最终解决了这个问题。

当您执行此操作时,我需要将“TestDomain”上的代理配置为交互式(因为我的下一步是运行编码的 UI 测试),指定用于通信的测试实验室帐户,但指定机器或域帐户(在“TestDomain ") 作为代理帐户(或者是本地机器管理员组的成员),则“DevDomain”中的 MTM 实验室进程可以成功部署和配置到“TestDomain”中的测试机器。

但是,这会使“testDomain”中目​​标计算机上的“Visual Studio Lab Agent Service”作为本地系统运行,这是实际执行部署脚本的进程。

我无法在测试机器“测试代理配置”工具中找到一个排列,让我在仍然以交互方式运行代理的同时更改它,但您可以使用服务控制面板小程序更改服务的登录信息。

我所做的是:

  • 在“TestDomain”目标机器上创建一个“test agent” 本地帐户,并将其添加到“TestDomain”目标机器的本地管理员组中。

  • 然后我通过在托管我们的TFS 放置共享的机器上创建一个具有相同名称和密码的机器本地帐户来反映这一点。

  • 然后,我向该本地帐户授予对共享和文件系统的读取访问权限。

现在,当“devDomain”TFS 服务器启动构建时,脚本执行由本地“Visual Studio 实验室代理服务”在新的本地“测试代理”帐户的上下文中运行,因为机器上有一个匹配的本地帐户托管它获得权限的共享,共享是可读的,嘿,它可以运行我的脚本。

于 2013-05-17T10:05:12.683 回答
1

您是否已将测试控制器配置为使用实验室服务帐户

如果不试试这个:

在此处输入图像描述

使用具有适当权限的帐户。

此帐户将用于访问构建放置位置,请参阅

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\QTController.exe.config

并搜索“UseLabServiceAccountToAccessBuildDirectory”。

于 2013-05-15T13:22:14.533 回答
1

我有一个没有域的工作组环境,事实证明我已经创建了本地帐户 (.\tfslab) 并设置了 TFS 测试控制器并使用此帐户进行实验室管理 (.\tfslab) 但我忘记了将每个测试代理服务设置为在本地计算机帐户下运行。

要解决此问题,我强烈建议将“部署脚本和参数”更改为以下命令:

cmd /c whoami

在此处查看其他故障排除步骤:http ://social.msdn.microsoft.com/Forums/vstudio/en-US/f46dc491-87c2-4234-8566-99b25302020e/deployment-tasks-run-under-nt-authoritysystem?forum= tfsbuild

对于将来遇到工作组配置(非域)问题的人,不要忘记更新以下服务:

Visual Studio 实验室代理服务登录帐户”从“本地系统帐户”更改为“此帐户”并指定本地计算机帐户“ .\tfslab

Visual Studio 实验室网络代理服务登录帐户”从“本地系统帐户”更改为“此帐户”并指定本地计算机帐户“ .\tfslab

于 2014-09-30T15:38:08.083 回答
0

在单向信任或隔离/工作组网络配置上使用 Visual Studio 2012 Update 4 和 Team Foundation Server,我们发现需要一个额外的步骤。通过 Build-Deploy-Test 工作流程运行自动化单元测试时,我们发现设置实验室服务帐户只是解决方案的一部分。为了避免在构建中访问被拒绝错误,我们还必须为 Visual Studio Lab 代理服务设置用户。

这是设置实验室服务帐户后服务小程序中的服务的样子(在本例中为“.\LabAdmin”):

Visual Studio 实验室代理服务 | 配置、监控... | 跑步 | 自动 | 本地系统  
Visual Studio Lab 网络代理服务 | 设置网络属性... | 跑步 | 自动 | 本地系统  
Visual Studio 测试代理 | 提供分布式... | 跑步 | 自动 | .\实验室管理员  

为了修复访问被拒绝错误,我们还必须在实验室服务帐户下运行 Visual Studio 实验室代理服务:

Visual Studio 实验室代理服务 | 配置、监控... | 跑步 | 自动 | .\实验室管理员  
Visual Studio Lab 网络代理服务 | 设置网络属性... | 跑步 | 自动 | 本地系统  
Visual Studio 测试代理 | 提供分布式... | 跑步 | 自动 | .\实验室管理员  

进行此更改并重新启动服务后,拒绝访问错误消失了。这在两台不同的目标计算机上重复,至少对于我们的配置,这似乎是一个必要的步骤。

于 2017-02-28T17:41:27.870 回答