設定目標環境的部署屬性
演講者:Jason Lee
本主題介紹如何設定環境專屬的屬性,以便將範例連絡人管理員解決方案部署到特定目標環境。
本主題構成一系列教學課程的一部分,該系列教學課程圍繞著一家名為 Fabrikam, Inc. 的虛構公司的企業部署要求。本教學課程系列使用範例解決方案 (連絡人管理員解決方案) 來表示具有實際複雜程度的 Web 應用程式,包括 ASP.NET MVC 3 應用程式、Windows Communication Foundation (WCF) 服務和資料庫專案。
這些教學課程的核心部署方法是根據「了解建置程序」中所述的分割專案檔案方法,其中建置程序由兩個專案檔案控制,一個包含適用於所有目標環境的建置指令,另一個則包含特定環境的建置和部署設定。 在建置時,環境專屬的專案檔案被合併到與環境無關的專案檔案中,以形成完整的建置指令集。
處理序概觀
您將用於建置和部署連絡人管理員解決方案的專案檔案分為兩個實體檔案:
- 包含通用建置設定和說明的檔案 (Publish.proj 檔案)。
- 包含環境專屬的建置設定的檔案 (Env-Dev.proj、Env-Stage.proj 等)。
在建置時,適當的環境專屬的專案檔案將合併到通用 Publish.proj 檔案中,以形成完整的建置指令集。 您可以透過建立或自訂特定於環境的專案檔來設定部署到特定的目標環境,這些檔案包含描述您自身部署情境的設定。
其中許多值取決於目標環境的設定方式,特別是目標 Web 伺服器是否已設定為使用 Web 部署代理服務 (遠端代理) 或 Web 部署處理常式。 有關這些方法的更多資訊,以及為您自己的環境選擇正確方法的指導,請參閱「選擇正確的 Web 部署方法」。
連絡人管理員情境需要兩個環境專屬的專案檔案:
- 部署到開發人員測試環境 (Env-Dev.proj)。 開發人員測試環境設定為使用遠端代理程式接受遠端部署,如「情境:設定測試環境以進行 Web 部署」所述。 該檔案需要提供遠端代理端點位址以及特定於位置的設定,例如連接字串和服務端點。
- 部署到預備環境 (Env-Stage.proj)。 預備環境設定為使用 Web 部署處理常式接受遠端部署,如「情境:設定預備環境以進行 Web 部署」中所述。 此文件需要提供 Web 部署處理常式端點位址以及特定於位置的設定,例如連接字串和服務端點。
需要注意的是,您在特定於環境的專案檔案中設定的設定不會影響 Web 包本身的內容,相反,它們控制包的部署方式以及提取包時提供的參數值。 您將手動將 Web 套件匯入生產環境,如「情境:設定生產環境以進行 Web 部署」和「手動安裝 Web 套件」中所述,因此在生成套件時您在環境專屬的專案檔案中使用的設定並不重要。 當您匯入套件時,網際網路資訊服務 (IIS) 管理員會提示您輸入任何參數化值,例如連接字串和服務端點。
若要將連絡人管理員解決方案部署到您自己的目標環境,您可以自訂此檔案或將其用作範本並建立自己的檔案。
要為連絡人管理員解決方案設定環境專屬的部署設定
在 Visual Studio 2010 中開啟 ContactManager-WCF 解決方案。
在「方案總管」視窗中,展開「發佈」資料夾,展開「EnvConfig」資料夾,然後按兩下「Env-Dev.proj」。
將 Env-Dev.proj 檔案中的屬性值替換為您自己測試環境的正確值。
注意
此程序後面的表提供了有關每個屬性的更多資訊。
儲存您的工作,然後關閉 Env-Dev.proj 檔案。
選擇正確的部署屬性
此表描述了環境專屬的範例專案檔案 Env-Dev.proj 中每個屬性的用途,並提供了有關應提供的值的一些指導。
屬性名稱 | 詳細資料 |
---|---|
MSDeployComputerName 目標 Web 伺服器或服務端點的名稱。 | 如果要部署到目標 Web 伺服器上的遠端代理服務,則可以指定目標電腦名稱 (例如 TESTWEB1 或 TESTWEB1.fabrikam.net),也可以指定遠端代理端點 (例如 http://TESTWEB1/MSDEPLOYAGENTSERVICE )。 不管是哪種情況,部署的運作方式都相同。 如果要部署到目標 Web 伺服器上的 Web 部署處理常式,則應指定服務端點並包含 IIS 網站的名稱作為查詢字串參數 (例如,https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite )。 |
MSDeployAuth Web 部署應該用來對遠端電腦進行驗證的方法。 | 應將其設定為 NTLM 或 Basic。 通常,如果要部署到遠端代理服務,則將使用 NTLM;如果要部署到 Web 部署處理常式,則將使用 Basic。 如果使用基本驗證,還需要指定 IIS Web 部署工具 (Web Deploy) 應該模擬的使用者名稱和密碼以便執行部署。 在此範例中,這些值是透過 MSDeployUsername 和 MSDeployPassword 屬性提供的。 如果您使用 NTLM 驗證,則可以省略這些屬性或將其留空。 |
MSDeployUsername 如果您使用基本驗證,Web Deploy 將在遠端電腦上使用此帳戶。 | 其格式應為 DOMAIN*username* (例如,FABRIKAM\matt)。 只有當您指定基本驗證時才使用此值。 如果您使用 NTLM 驗證,則可以省略該屬性。 如果提供了一個值,它將被忽略。 |
MSDeployPassword 如果您使用基本驗證,Web Deploy 將在遠端電腦上使用此密碼。 | 這是您在 MSDeployUsername 屬性中指定的使用者帳戶的密碼。 只有當您指定基本驗證時才使用此值。 如果您使用 NTLM 驗證,則可以省略該屬性。 如果提供了一個值,它將被忽略。 |
ContactManagerIisPath 要在其上部署連絡人管理員MVC 應用程式的 IIS 路徑。 | 這應該是 IIS 管理員中顯示的路徑,格式為 [IIS 網站名稱]/[Web應用程式名稱]。 請記住,在部署應用程式之前,IIS 網站需要存在。 例如,如果您建立了一個名為 DemoSite 的 IIS 網站,則可以將 MVC 應用程式的 IIS 路徑指定為 DemoSite/ContactManager。 |
ContactManagerServiceIisPath 要在其上部署連絡人管理員WCF 服務的 IIS 路徑。 | 例如,如果您建立了一個名為 DemoSite 的 IIS 網站,則可以將 WCF 服務的 IIS 路徑指定為 DemoSite/ContactManagerService。 |
ContactManagerTargetUrl 可存取 WCF 服務的 URL。 | 這將採用 [IIS 網站根 URL]/[服務應用程式名稱]/[服務端點] 的形式。 例如,如果您在連接埠 85 上建立了一個 IIS 網站,則 URL 將採用 http://localhost:85/ContactManagerService/ContactService.svc 形式。 請記住,MVC 應用程式和 WCF 服務部署到同一台伺服器。 因此,只能從安裝該 URL 的電腦存取該 URL。 因此,最好在 URL 中使用 localhost 或 IP 位址,而不是電腦名稱或主機標頭。 如果使用電腦名稱或主機標頭,IIS 中的 Loopback 檢查安全性功能可能會封鎖 URL,並傳回 HTTP 401.1 - Unauthorized錯誤。 |
CmDatabaseConnectionString 資料庫伺服器的連線字串。 | 連接字串確定 VSDBCMD 將用於聯繫資料庫伺服器並建立資料庫的認證,以及 Web 伺服器應用程式集將用於聯繫資料庫伺服器並與資料庫互動的認證。 本質上您在這裡有兩個選擇。 您可以指定 Integrated Security=True,在這種情況下,使用整合 Windows 驗證:Data Source=TESTDB1;Integrated Security=True。在這種情況下,將使用執行 VSDBCMD 可執行檔案的使用者和應用程式的認證建立資料庫將使用 Web 伺服器電腦帳戶的身分存取資料庫。 或者,您可以指定 SQL Server 帳戶的使用者名稱和密碼。 在本例中,VSDBCMD 使用 SQL Server 憑證建立資料庫,應用程式集區也會使用 SQL Server 憑證與資料庫互動:Data Source=TESTDB1;User Id=ASqlUser;密碼=Pa$$w0rd 本主題中的演練假定您將使用整合 Windows 驗證。 |
CmTargetDatabase 您要為將在資料庫伺服器上建立的資料庫指定的名稱。 | 您在此處提供的值將作為參數新增至 VSDBCMD 命令中。 它也用於建立完整的連接字串,Web 伺服器上的應用程式集區可以使用該連接字串與資料庫進行互動。 |
這些範例展示如何為特定部署方案設定這些屬性。
範例 1 — 部署到遠端代理服務
在此範例中:
- 您正在部署到 TESTWEB1 上的遠端代理服務。
- 您正在指示 Web Deploy 使用 NTLM 驗證。 Web 部署將使用您用於呼叫 Microsoft Build 引擎 (MSBuild) 的認證執行。
- 您正在使用整合式驗證將 ContactManager 資料庫部署到 TESTDB1。 將使用您用於呼叫 MSBuild 的認證來部署資料庫。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
TESTWEB1.fabrikam.net
</MSDeployComputerName>
<MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">NTLM</MSDeployAuth>
<ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
http://localhost:85/ContactManagerService/ContactService.svc
</ContactManagerTargetUrl>
<ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
DemoSite/ContactManager
</ContactManagerIisPath>
<ContactManagerServiceIisPath
Condition=" '$(ContactManagerServiceIisPath)'=='' ">
DemoSite/ContactManagerService
</ContactManagerServiceIisPath>
<CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
Data Source=TESTDB1;Integrated Security=true</CmDatabaseConnectionString>
<CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
ContactManager
</CmTargetDatabase>
</PropertyGroup>
</Project>
範例 2 — 部署到 Web 部署處理常式端點
在此範例中:
- 您正在部署到 STAGEWEB1 上的 Web 部署處理常式服務端點。
- 您正在指示 Web Deploy 使用基本驗證。
- 您指定 Web 部署應模擬遠端電腦上的 FABRIKAM\stagingdeployer 帳戶。
- 您正在使用 SQL Server 驗證將 ContactManager 資料庫部署到 STAGEDB1。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite
</MSDeployComputerName>
<MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">Basic</MSDeployAuth>
<MSDeployUsername Condition=" '$(MSDeployUsername)'=='' ">
FABRIKAM\stagingdeployer
</MSDeployUsername>
<MSDeployPassword Condition=" '$(MSDeployPassword)'=='' ">
Pa$$w0rd
</MSDeployPassword>
<ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
http://localhost:85/ContactManagerService/ContactService.svc
</ContactManagerTargetUrl>
<ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
DemoSite/ContactManager
</ContactManagerIisPath>
<ContactManagerServiceIisPath
Condition=" '$(ContactManagerServiceIisPath)'=='' ">
DemoSite/ContactManagerService
</ContactManagerServiceIisPath>
<CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
Data Source=STAGEDB1;User ID=sa;'$($CREDENTIAL_PLACEHOLDER$)'
</CmDatabaseConnectionString>
<CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
ContactManager
</CmTargetDatabase>
</PropertyGroup>
</Project>
結論
此時,您的專案檔案已完全設定為建置連絡人管理員解決方案並將其部署到一個或多個目標環境。
若要將這些專案檔案用作單步驟、可重複部署流程的一部分,您需要使用 MSBuild 執行 Publish.proj 檔案,並將環境專屬的專案檔案的位置傳遞為參數。 您可以透過多種方式執行此操作:
- 有關 MSBuild 的概述和自訂專案檔案的介紹,請參閱「了解專案檔案」。
- 有關如何制定執行自訂專案檔案的 MSBuild 命令的資訊,請參閱「部署 Web 套件」。
- 有關如何將 MSBuild 命令合併到命令檔中以進行單步、可重複部署的資訊,請參閱「建立和執行部署命令檔」。
- 有關如何從 Team Build 執行自訂專案檔案的資訊,請參閱「建立支援部署的建置定義」。