【问题标题】:Automating IISRESET via remote desktop connection after a TFS build在 TFS 构建后通过远程桌面连接自动化 IISRESET
【发布时间】:2013-10-12 09:17:55
【问题描述】:

我想自动化一个在 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();

Run mstsc.exe with specified username and password

Automating remote desktop connection

3) IISReset

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

可能适用的工具有:

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

2) C#

我的问题是如何实现它,任何代码示例和想法都会非常感激。

【问题讨论】:

  • 为什么需要通过 RDP 连接到远程机器? iisreset 支持用于执行远程重置的计算机名参数。
  • 如前所述,我需要调用一个 C# 应用程序,然后重置 iis。你能详细说明你所说的吗?是否返回重置状态?
  • 我不确定需要详细说明什么。它会产生控制台输出,就好像你在目标机器上运行了 iisreset 一样,如果那是你所要求的。
  • C# 应用程序是做什么的?它是否连接到任何远程系统、网络共享等? RDP 在这里不是正确的工具。您想从命令行远程进入系统。 Powershell 远程处理是一个可能的选项,但是如果您希望在远程会话中连接到另一个远程系统,则存在一些证书委托问题。
  • C# 应用在测试服务器上,我需要远程连接。 C# 应用在测试服务器上进行数据设置,然后,我将在测试服务器上重置 iis。

标签: c# powershell tfs iisreset


【解决方案1】:

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

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

PSEXEC

PowerShell Remote commands

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 不,IISRsset 是我自己的应用程序特有的,与本案无关。
    • 好的。如果你在 TFS 下运行,我建议使用 msbuild 之类的东西,例如msbuildextensionpack.com。有一些东西可以远程执行任务。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      我相信老式的方式,希望这就是你要找的

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        一个例子: psexec.exe \remoteserver "iisreset > h:\iisreset.log"

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

        【讨论】:

          猜你喜欢
          • 2013-05-04
          • 1970-01-01
          • 2011-11-30
          • 2018-10-10
          • 1970-01-01
          • 1970-01-01
          • 2017-11-23
          • 1970-01-01
          • 2020-12-17
          相关资源
          最近更新 更多