4

我想自动化一个过程,该过程在 TFS 上成功构建后调用。该过程将 RDP 到测试服务器,然后调用该服务器上的 C# 应用程序,并在该服务器上重置 IIS。每一步都会返回结果,所以是否调用下一步取决于上一步。

实施它有一些障碍。下面是我想知道的是否可能,以及如何编码。

1)通过 TFS 上的构建调用该过程

构建定义中有一个选项可以调用自动化测试。我假设可以通过将其实现为测试来调用该过程。

2) RDP 到远程服务器

我找到了下面的链接,这可能是一个解决方案

Process rdcProcess = new Process();
rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe");
rdcProcess.StartInfo.Arguments = "/generic:TERMSRV/192.168.0.217 /user:" + "username" +  " /pass:" + "password";
rdcProcess.Start();

rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\mstsc.exe");
rdcProcess.StartInfo.Arguments = "/v " + "192.168.0.217"; // ip or name of computer to connect
rdcProcess.Start();

使用指定的用户名和密码运行 mstsc.exe

自动化远程桌面连接

3) IIS重置

我认为应该IISRESET在 RDP 之后简单地调用“”,但问题是,如何捕获运行 IISRESET 的结果。

可能适用的工具有:

1) Powershell - 我对 Powershell 了解不多,但如果需要我愿意学习

2) C#

我的问题是如何实现它,任何代码示例和想法将不胜感激。

4

5 回答 5

0

过去,我使用 Psexec 对远程服务器运行命令,无论何时我们需要控制该命令结果的流程,我们只需将控制台输出到一个共享文件夹并检查我们的成功标志。

我不确定 TFS 是否可以以这种方式运行命令,但我们在 hudson/jenkins 上实现了它。

这不会直接回答您的问题,但它可能会提供更好的前进方式

示例:psexec.exe \remoteserver "iisreset > h:\iisreset.log"

然后对 iisreset.log 运行 grep 或类似命令,并将成功标志作为运行下一步的条件。

于 2013-10-07T23:21:12.930 回答
0

在大多数情况下,您不需要运行 iisreset

如果你想升级一个 asp.net 应用程序,试着把 app_offline.htm 放在应用程序文件夹中,它会停止一个应用程序并且应用程序文件将被解锁

升级应用后会自动重启,也可以“触摸”web.config强制重启

于 2013-10-05T14:49:30.117 回答
0

您最好使用 Lab Build 将脚本作为目标计算机环境的一部分来运行。它可以针对该机器运行任何 powershell 以及部署和执行应用程序......

于 2013-10-07T16:39:19.533 回答
0

在这里检查我的答案,这有点相关:答案

如果在构建服务器上运行 TFSBuild 服务的用户在测试服务器上有足够的权限,那么您可以使用 psexec 或 powershell 远程运行您的命令。阅读以下链接:

执行委员会

PowerShell 远程命令

在 TFS 构建工作流程中,没有内置的活动/过程可以帮助您在远程机器上运行脚本。

第 1 步是确定您将如何在远程计算机上运行脚本,如上所述,您可以使用 PSEXEC 或 Powershell(尽管在远程计算机上运行 PowerShell 的设置可能有点复杂)。

第二步,编写实际脚本来完成工作,停止服务,安装 MSI 等。

第 3 步,编辑您当前的构建定义 - 创建一个新的自定义活动或利用构建定义中的 InvokeProcess 活动来调用您在第 2 步中创建的脚本。 InvokeProcess 活动

于 2013-10-08T21:03:07.450 回答
0

问题:如何捕获运行IISRESET的结果

我相信老式的方式,希望这是你正在寻找的

c:> IISRESET >> C:\temp.log

您可以从 CMD 或 powershell 使用上述内容

于 2013-10-07T18:18:16.493 回答