【问题标题】:Deploying Remotely to .NET Box远程部署到 .NET Box
【发布时间】:2011-06-17 20:56:57
【问题描述】:

多年来,我一直能够使用像 Jenkins 这样的持续构建系统进行构建,然后将我的应用远程部署到各种 Unix 服务器。我可以使用sshscp 命令进行竞标。

现在,我正在构建一个 .NET。我已经使用 Jenkins 完成了构建,现在想部署到远程 .NET 服务器。我需要关闭应用程序,复制文件,然后重新启动应用程序。我需要能够通过命令行工具(无 GUI 工具)远程执行此操作。我在一系列被锁定的机器上,无法随意部署东西——尤其是到生产机器上。

是否有一种机制可以让我远程关闭服务器、部署一组新文件并重新启动应用程序?

奖金问题

我知道*.cab 文件有点类似于Java *.jar 文件。也就是说,您可以将单个*.cab 文件部署到服务器,服务器会将其视为目录中的一堆文件。

  • 这是正确的吗?如果是这样,我想使用 cab 文件进行部署。
  • 有一个webapp.config 文件是我构建的一部分,对于每台服务器都不同。我更喜欢创建一个不包含webapp.config 文件的 cab 文件,这样,我拥有的 cab 文件可以部署到每台机器而无需更改(只需更改 webapp.config 文件)。

谢谢


附录

我就是赢不了……

我在 machine02 上有一个构建,我需要部署到 machine06。 Machine06 位于 DMZ 中,因此我无法在其上添加域用户。我只能创建本地帐户。

使用sc,我可以访问远程系统,但我运行sc 的帐户也需要存在于远程系统上。由于我无法在 machine06 上创建域帐户,并且我无法将计算机本地帐户添加到另一个 Windows 系统(即,将 machine06\user 也设为 machine02 上的管理员)。我无法使用sc

我尝试了 Sysinternals 的 lp 命令。这些允许我指定用户名和密码(我假设这是用于其他系统的。但是,我收到以下错误:

C:\Windows\system32>pslist \\machine02 -user remuser02 -password Swordfish

pslist v1.29 - Sysinternals PsList
Copyright (C) 2000-2009 Mark Russinovich
Sysinternals

Cannot connect to remote registry on MACHINE02:
Access is denied.
Failed to take process snapshot on MACHINE02.
Make sure that the Remote Registry service is running on the remote system, 
that you havefirewall ports allow RPC access, and your account has read
access the following key on the remote system:
    HKLM\Software\Microsoft\Windows NT\CurrentVersion\Perflib


C:\Windows\system32>

由于该用户是 machine02 上的管理员,我确信该用户具有对 Windows 注册表项的读取权限,并且我确认远程注册表访问已打开。我怀疑路由器正在阻止 RPC 调用。

所以,sc 已退出,因为我无法指定要使用的帐户。 Sysinternals PS 工具已经发布。我无法在服务器上添加sshd

【问题讨论】:

  • 只是想知道您为什么不使用 powershell?
  • @Matt:我真的不知道 powershell。 Powershell 是否允许我在远程系统上运行命令?如果远程系统上没有 Powershell 怎么办?或者,Powershell 现在是否在 Windows 系统上?
  • @David-W 是的,PowerShell 是 Windows 的脚本工具。 v1 有一些可以使用远程调用的命令(下面 get-service 上的计算机名参数),v2 有远程处理(类似于 ssh)。你在盒子上运行什么操作系统?
  • 您应该可以通过在运行框或命令提示符中键入“powershell”(不带引号)从构建服务器试用 powershell。
  • 刚刚检查过,Powershell 在服务器上。帮助中没有关于远程命令的内容,而是在网上找到的资料。我想说你已经回答了我的问题,但你没有提供官方答案。很难将其标记为“接受”。无论如何,我需要先对其进行测试,然后才能做任何事情。谢谢。

标签: .net iis deployment web-deployment-project


【解决方案1】:

在我使用 vbscript 和 powershell 以及老式的 xcopy 之前部署 Web 应用程序时(尽管我同意 robocopy 可能是更好的副本替代品)。

所以通过要求 - 我认为这是你想要做的事情(这应该在 PowerShell 命令提示符下完成):

get-service iisadmin -ComputerName TARGETMACHINE | Stop-Service -force

xcopy source dest

get-service iisadmin -ComputerName TARGETMACHINE | Start-Service

我不会使用 *.cab 除非您想要压缩来传输文件,然后我会使用 *.zip 文件。我不相信它们在两者之间有任何真正的区别,但通常 *.cab 文件用于 msi 部署。

就个人而言,除非您有非常了解 MSI 版本控制的人,否则我认为不应使用 MSI 将文件部署到 Web 服务器。即使有人确实理解它,我仍然喜欢它只对跟踪安装的内容有用,这可以通过多种方式实现,同时避免自动更新等......

由于它是 IIS,您可以在网站关闭时删除临时 asp.net 文件。

我(从标签中)假设这是一个 Web 应用程序,因此代码中有 iisadmin。这同样适用于任何服务。

HTH, 马特

【讨论】:

    【解决方案2】:

    您可以使用netsvc.exe 来停止和启动远程机器上的 IIS 服务

    SYNTAX: NETSVC servicename \\computername /start  (or /stop)
    

    【讨论】:

    • 谢谢。这正是我所需要的。至于传输文件,我可以挂载一个共享驱动器,然后删除/复制我需要的东西。
    • 糟糕!看起来 netsvc 不适用于 Windows Server 2008 或 Windows Server 2003。但是,您也可以使用 sc 命令执行相同的操作。我在 Microsoft 遇到的问题之一是更改您身上的工具。 cabarc 已不复存在。您必须使用 makecab,它的语法完全不同,并且不适用于 Ant 的 <cab> 任务。
    • 无法使用sc 命令。我在两台机器上都有两个不同的登录,sc 只是假设类似的登录。我必须使用 psTools。
    • 是否可以使用 runas (technet.microsoft.com/en-us/library/bb490994.aspx) 以其他用户身份运行 sc?
    • 你也可以看看 psexec,同样来自 sysinternals (technet.microsoft.com/en-us/sysinternals/bb897553)
    【解决方案3】:

    我看到你已经接受了一个答案,但我想我会添加这个,因为它可能对其他人有用:

    您也可以使用PsTools。它允许您远程执行命令、停止和启动服务、复制文件等(无需在目标主机上安装)。

    【讨论】:

    • 看起来不错,安装了 sysinternals,但功能太多,很难跟上 :)
    • 原来netsvc 不再适用于 Windows 2008 和 2003 服务器。我最终使用了sc,它现在似乎结合了旧的sc(只能在本地服务器上运行)和netsvc 命令。
    • 啊! PsTools 允许我远程连接,并且我可以将用户名和密码传递给其他系统,但现在我被告知远程注册表服务器必须在其他系统上运行。 Drats 和 Darn。
    • Windows:你就是不能“赢” :-D 这非常令人沮丧。作为生产服务器,我想您将很难说服管理员允许启用 Registry Server,对吧?
    【解决方案4】:

    也许您想尝试 Windows 版本的 SSH 服务器?例如http://mobassh.mobatek.net/。像往常一样,免费版的功能较少,但如果您能够远程执行命令,您也许可以执行您的部署任务。

    【讨论】:

    • SSH 已退出。我必须在所有服务器上运行 SSHD 才能让它工作,而且我无法触及我必须部署到的那些生产服务器。我希望有某种方式可以远程与 ISS 服务器通信以停止和启动它。我想我可以使用net use 挂载Windows 共享并以这种方式复制文件。问题是从远程系统控制 ISS 服务器。
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 2017-12-15
    • 1970-01-01
    • 2011-03-04
    • 2011-01-22
    • 2012-02-20
    • 2013-06-19
    相关资源
    最近更新 更多