VS2010 一键发布






3.55/5 (3投票s)
展示了 VS2010 新的一键部署功能。
引言
Web 应用程序部署一直以来都是开发人员的棘手任务。开发人员过去有很多方法可以执行部署,从 X-Copy、FTP 到使用安装程序。然而,所有部署选项都存在共同的问题;这些问题是:
- 解决方案必须单独打包。数据库只是另一个包。
- 生成包后,这些包必须“以某种方式”传输到目标服务器,然后在该服务器上进行部署。
- 在目标服务器上,Web 应用程序的 IIS 部署和数据库部署是两个不同的任务。
- 在目标服务器上,必须编辑配置文件以反映新环境,例如数据库连接字符串。
这些问题刚刚凸显了部署大型 APS.NET 应用程序通常会遇到的困难。
好吧,在 VS 2010(目前处于 beta2 版本)中,有一个非常强大的功能:一键部署(或发布)。它基本上允许开发人员通过一次点击,将应用程序连同数据库和配置更改一起从开发计算机直接部署到目标服务器!
一键部署背后的技术是 MSDeploy。VS2010 隐式使用 MSDeploy 来实现部署。
在源服务器(开发计算机)上,VS2010 使用 MSDeploy 创建项目的 zip 包(包含 Web 应用程序、带有数据的数据库和部署配置)。然后将此包发送到配置了 MSDeploy 以侦听部署请求的目标服务器,该服务器将执行 Web 应用程序和数据库的实际部署!请注意,MSDeploy 默认随 VS2010 一起安装。
在本文中,我将通过两个演练向您展示其实现方式,在此过程中,我将尝试强调各个环节是如何进行的……
在托管公司部署
部署 Web 应用程序时,通常有两种选择;您可以选择在 Web 托管公司部署,或者在您拥有的服务器上部署。首先,让我们讨论选项 1。
ORCSWeb (https://www.orcsweb.com/signup/?planid=58) 允许您创建免费测试帐户来部署 VS2010 Beta 2 Web 项目。我已经创建了一个帐户,并在注册过程中,我选择了 SQL Server 2008 作为我的数据库;因为这样他们才会允许您将应用程序连同数据库一起部署……
完成注册后,我收到一封包含部署所需信息的电子邮件。让我们回顾一下这些信息
The information that you will need to enter
into the Visual Studio "Publish Web" wizard is:
Publish Method: MSDeploy
Publish Service URL: https://SHARED18.orcsweb.com:8172/msdeploy.axd
Site/Application: ITD1.orcsweb (you can optionally append a subfolder name)
Allow Untrusted Certificate needs to be checked.
User Name: itd1
Password: xxxxxx
You can view your site here: http://206.72.116.231/
Additionally, you can deploy a database by going to the properties
of the project and then the Deploy-SQL tab.
Your database connection string is: Password=xxxxx;User ID=ITD1.orcsweb;
Initial Catalog=ITD1.orcsweb;Data Source=sql08-2.orcsweb.com
对您来说可能比较新的是“服务 URL”。这是 IIS 处理程序,它将在托管服务器上执行应用程序的实际部署。请看 ORCSWeb 分配给我的目标服务器上,MSDeploy 正在运行并配置为在指定处理程序上侦听请求以执行实际部署。在这种情况下,此细节对您是隐藏的,并且由目标服务器管理员(在此情况下是 ORCSWeb)完成。在下一个演练中,我将向您展示如何设置您自己的目标服务器以侦听来自 VS2010 的请求。
MSDeploy 还带有一个 SQL 处理程序来执行数据库部署。这将在目标服务器上隐式调用。
回到信息,我已获得一个用户名/密码组合,用于在部署时提交,以及一个用于数据库部署的 SQL 连接字符串。
现在,让我们看看我要部署的 Web 应用程序。在 VS2010 中,我创建了一个最简单的应用程序:我使用了默认的 Web 应用程序模板,并添加了第二个页面,该页面从 SQL Server 2008 表中读取“部门”列表。下面的屏幕截图显示了我的简单应用程序
现在是时候部署了!让我们回顾一下我想通过部署解决的三个问题
- 我实际上想在不进行手动打包的情况下,并且在不离开我的开发计算机的情况下部署应用程序。
- 我想在一次点击中连同我的应用程序一起部署数据库!
- 我不想去目标服务器更改任何配置(例如数据库连接字符串)。
为了解决配置问题,VS2010 引入了 XML 文档转换 (XDT) 来实现自动配置更改。您可以从各种在线资源学习 XDT 的完整语法;但是,为了我们的讨论,您需要知道的是,VS2010 允许您创建 `web.config` 的多个版本,并将每个版本与一个配置构建关联(例如,您的应用程序将有一个常规的 `web.config` 文件,但它还将为每个调试和发布配置构建提供 `web.config.debug` 和 `web.config.release`……您可以根据需要拥有更多构建;例如,`web.config.staging`……)。
现在,假设您正在部署您的发布版本;XDT 允许您在这些配置文件中设置特定语法,例如,当 VS2010 对您的项目进行打包时;您在 `web.config.release` 中指定的条目将替换 `web.config` 中的条目,并创建一个包含更新配置的新最终 `web.config` 文件。因此,例如,您的 `web.config` 将保存本地数据库的连接字符串。在 `web.config.release` 中,您指定生产数据库的连接字符串,并通过 XDT,您指示 VS2010 在生成最终包中的生产版本 `web.config` 时,动态地将 `web.config` 文件中的连接字符串替换为 `web.config.release` 中的连接字符串……
好的,XDT 需要一些解释,那么现在让我们开始实际的打包和部署。
如果您展开 `web.config` 节点,您会发现,默认情况下,会有 `web.config.debug` 和 `web.config.release`。如前所述,这些对应于默认的构建配置(调试和发布)。在我们的案例中,我们将部署发布版本,因此请继续编辑 `web.config.release` 文件,使其如下所示
在这里,我们使用 XDT(`xdt:Transform="Replace"`)来指示 VS2010 替换 `web.config` 中存在的开发时连接字符串,替换为 `web.config.release` 中存在的发布(或生产)时连接字符串。这是托管公司提供的连接字符串。最终包中的 `web.config` 文件将包含更新的连接字符串。
现在,让我们设置 VS 来部署我们的 SQL 数据库……这解决了在一次点击中连同应用程序一起部署数据库的顾虑。打开项目的属性窗口。您会发现一个名为“Deploy SQL”的新选项卡。在此选项卡中,设置您要部署的开发数据库的连接字符串(您可以通过单击“Import from Web.config”从 `web.config` 文件导入),然后提供数据库将被部署的目标 URL。这将是托管公司提供的连接字符串。指示 VS2010 在部署时包含数据,并使其获取架构和数据……下面的屏幕截图显示了我用于部署应用程序的配置
好的,现在您已准备好进行实际部署。首先,请确保已为您的项目选择了“Release”构建配置,如下所示。
现在,右键单击项目节点并选择新的“Publish…”选项。将打开一个新窗口,您将在其中输入发布设置
- 发布配置文件:您可以为您的设置创建一个配置文件,这样您就不必每次部署都重新输入它们。例如,我创建了两个配置文件:一个用于部署到托管公司——我现在正在使用,另一个用于部署到另一台服务器,我将在下一步向您展示。
- 发布方法:选择 MSDeploy Publish 以基于 MSDeploy 执行发布。
- 服务 URL:回想一下,这是托管公司提供的包含 IIS 处理程序的 URL。
- 站点/应用程序:部署到的 IIS 网站的名称 - 也由托管公司提供。以及用于部署的应用程序(虚拟目录)的名称。
- 允许不受信任的证书:选择此项,因为我们正在演示服务器上进行部署,并且证书可能不是来自受信任的 CA(如 VeriSign)。
- 用户名/密码:由托管公司提供的帐户,该帐户将有权调用 MSDeploy 并执行部署。
好的,现在我们已准备就绪。单击 Publish,您的 Web 应用程序和数据库(以及数据)将被部署到托管公司。
在后台,VS2010(和 MSDeploy)创建了一个包含您的应用程序的打包 zip 文件以及一个清单 XML 文件,并使用这两个文件将您的应用程序发布到目标服务器。默认情况下,包文件可以在“obj\Release\Package\”找到;尽管您可以在项目属性窗口的“Package/Publish”选项卡中更改它。
实际上,如果到您阅读本文时测试帐户仍然有效且应用程序仍已部署,那么您可以在以下 URL 上检查该应用程序:http://206.72.116.231/oneclickwebapp/Default.aspx。
在另一台服务器上部署
现在让我们讨论您拥有生产服务器并想在其上部署的情况。在这种情况下,开发计算机上的设置几乎相同。但是,现在您有责任配置生产服务器上的 MSDeploy 以侦听部署请求。
在我的例子中,我将在 WinServer 2008 上的 IIS 7 上,在同一台机器上部署我向您展示的同一个应用程序。因此,我的第一个也是最重要的任务是配置我机器(充当服务器)上的 MSDeploy 以侦听部署请求。
首先,请确保服务器上已安装 IIS 7。
现在,下载 MSDeploy 包。您可以在此处获取:Microsoft。
在该服务器上运行此包并安装以下组件
上述组件安装了 MSDeploy 及其管理 UI 和用于管理部署请求的 IIS 7 处理程序。管理服务将是实际侦听请求的服务。远程代理服务是另一个 MSDeploy 选项,主要用于命令行部署,但对于 VS2010 一键发布不是必需的。
确保“Web Deployment Agent Service”和“Web Management Service”服务已启动,并且启动类型为“Automatic”。最后一步是为 IIS 启用远程连接(intermgr.exe --> Management Service --> Enable Remote Connections)。
现在,您的服务器已准备好处理 VS2010 发布请求。
回到 VS2010 中的项目。编辑 `web.config.release` 以包含服务器的连接字符串而不是托管公司(在我的例子中,因为它与同一台服务器相同,我将拥有与 `web.config` 文件中的连接字符串相同的连接字符串)。现在,在 Deploy SQL 选项卡中,编辑连接字符串以指向生产服务器(对我来说同样是同一台服务器……)并选择移动数据和架构。现在您已准备好发布,选择“Publish…”选项卡,然后输入以下设置
请注意,我为发布创建了第二个配置文件。设置与用于托管公司的配置文件相似;只需注意,在服务 URL 中,我只提供了要部署到的服务器名称。这是我已配置 MSDeploy 服务的服务器;在这种情况下,我的开发机器……
摘要
通过 VS2010 和 .NET 4.0 中提供的所有强大功能,一键发布是我认为最重要的功能之一。易用性和简洁性真正脱颖而出。事实上,您现在可以在一个 zip 文件中部署您的数据库和配置更改以及您的应用程序,这太棒了!再加上您可以做到这一点而不离开您的开发机器,这真的很酷……