【问题标题】:TFS Lab management Deployment ScriptsTFS 实验室管理部署脚本
【发布时间】:2013-12-18 21:02:44
【问题描述】:

我正在尝试使用 Build-Deploy-Test 工作流程使用 TFS 2012 设置标准实验室环境。我设置了测试控制器和测试代理,但是当 LabManagement 工作流开始执行时,我在 RunDeploymentTask 活动中遇到异常

Initial Property Values
BuildLocation = \\S0503TFS2T\TFSPlayground\ConsoleApplicationBuild\ConsoleApplicationBuild_20121210.23
DeploymentScriptDetails = agent1 | "$(BuildLocation)\Deploy.bat" $(BuildLocation) | c:\Env
LabEnvironmentUri = vstfs:///LabManagement/LabEnvironment/4
MaxWaitTime = 00:30:00
ThrowOnError = True
UseRoleForDeployment = True
Deployment Task Logs for Machine: win7testagent1
 Access is denied
 Exception Message: Team Foundation Server could not complete the deployment task for machine 'win7testagent1', script '"\\S0503TFS2T\TFSPlayground\ConsoleApplicationBuild\ConsoleApplicationBuild_20121210.23\Deploy.bat"', arguments '\\S0503TFS2T\TFSPlayground\ConsoleApplicationBuild\ConsoleApplicationBuild_20121210.23' and working directory 'c:\Env'. (type LabDeploymentProcessException)
Exception Stack Trace: 
Server stack trace: 
   at Microsoft.TeamFoundation.Lab.Workflow.Activities.RunDeploymentTask.ExecuteDeploymentTask.RunCommand(AsyncState state)
   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase)
   at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData)
   at System.Action`1.EndInvoke(IAsyncResult result)
   at Microsoft.TeamFoundation.Lab.Workflow.Activities.RunDeploymentTask.ExecuteDeploymentTask.EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
   at System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)

显然,这是安全问题,我无法克服 以下是 MSDN 对这个过程的解释:

构建-部署-测试工作流启动构建,然后获取部署脚本。 构建定义将构建文件复制到放置位置。 工作流在脚本分配到的特定机器或机器角色的工作目录中运行每个部署脚本。 每个部署脚本都从放置位置检索构建文件。 每个部署脚本都将指定的构建文件复制或安装到实验室环境中的机器上。

此时问题出现了 - 工作流在特定机器的工作目录中运行每个部署脚本。

两台机器都在同一个域中,运行构建服务的用户也在远程机器的管理员组中。我什至与网络中的每个人共享了工作流应该复制文件/脚本的远程文件夹,但又没有运气了。

我正在做一些让我发疯的愚蠢行为 - 非常感谢任何帮助或想法!

最好, 雷达

【问题讨论】:

  • 测试代理在win7testagent1上运行的账号是什么?该帐户是否有权访问构建文件夹或您在部署脚本中使用的任何其他内容?
  • 测试和构建代理使用与测试控制器相同的域帐户运行。
  • 如果您将部署脚本替换为“dir /s”之类的内容,这是否有效。试图缩小导致失败的原因。
  • 好吧,我走了另一条路。在我的构建-部署-测试场景中,我使用了带有分布式测试基础设施的 testsettings 文件来进行部署和测试。我所做的是:使用 Team Build 和 DefaultTemplate 构建代码。在模板的 Process 选项卡中,我指定了 testsettings 文件 - 它描述了测试机器(测试控制器/代理)。
  • 当工作流构建到达读取测试设置文件的点时,控制权就交给了测试控制器。在 testsettings 文件中,您可以指定设置和清理脚本。我正在使用设置脚本将必要的资产部署到各种测试代理。然后我使用干净的脚本从测试代理中清除所有内容。

标签: tfs


【解决方案1】:

以下解决方案可能会解决您的问题。

步骤:在以下服务器上创建本地帐号:本地实验室服务帐号-tfslab

  1. tfs 测试控制器服务器:创建本地 tfslab 帐户。还要在测试控制器配置控制台中将 tfslab 配置为实验室服务帐户

  2. tfs 测试代理服务器:创建本地 tfslab 帐户并将 tfslab 添加到本地管理员组。同时更新 Visual Studio Test Agent 服务和 Visual Studio Lab Agent Service 以作为 tfslab 运行。

  3. tfs 放置文件夹服务器:创建本地 tfslab 帐户。并为 tfs drop 文件夹添加共享读取权限。

详细讨论见here

【讨论】:

    【解决方案2】:

    您可以尝试在 bat 脚本的最后检查 %ErrorLevel%。我遇到了同样的错误,结果发现该错误是由 robocopy 的退出代码引起的,复制成功时返回 1。我将错误代码设置为0,问题已解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多