部署 Web 套件
演講者:Jason Lee
本主題描述如何使用 網際網路資訊服務 (IIS) Web 部署工具 (Web Deploy) 2.0,將 Web 部署套件發佈至遠端伺服器。
有兩種主要方式可將 Web 套件部署到遠端伺服器:
- 您可以直接使用命令行公用程式MSDeploy.exe。
- 您可以執行 [項目名稱].deploy.cmd 建置程式產生的檔案。
不論您使用哪種方法,最終結果都相同。 基本上,所有.deploy.cmd檔案都是使用一些預先決定的值來執行MSDeploy.exe,因此您不需要提供盡可能多的資訊才能部署套件。 這可簡化部署程式。 另一方面,使用 MSDeploy.exe 直接提供您部署套件方式的更多彈性。
您使用的方法將取決於各種因素,包括部署程式所需的控制權,以及您是以 Web Deploy 遠端代理程式服務或 Web Deploy 處理程式為目標。 本主題說明如何使用每個方法,並識別每個方法是否適當。
本主題中的任務和演練假設:
執行 [專案名稱].deploy.cmd 檔案是部署 Web 套件的最簡單方式。 特別是,使用 .deploy.cmd 檔案可提供這些優點,而直接使用 MSDeploy.exe:
- 您不需要指定 Web 部署套件的位置, .deploy.cmd 檔案已經知道它的位置。
- 您不需要指定SetParameters.xml檔案的位置,.deploy.cmd檔案已經知道檔案的位置。
- 您不需要指定來源和目的地 MSDeploy 提供者, .deploy.cmd 檔案已經知道要使用的值。
- 您不需要指定 MSDeploy 作業設定, .deploy.cmd 檔案會自動將常用的值新增至 MSDeploy.exe 命令。
使用 .deploy.cmd 檔案來部署 Web 套件之前,您應該確定:
- .deploy.cmd檔案[項目名稱]。SetParameters.xml檔案和 Web 套件 ([項目名稱]。zip) 位於相同的資料夾中。
- Web Deploy (MSDeploy.exe) 安裝在執行 .deploy.cmd 檔案的電腦上。
.deploy.cmd檔案支援各種命令行選項。 當您從命令提示字元執行檔案時,這是基本語法:
[project name].deploy.cmd [/T | /Y]
[/M:<computer name>]
[/A:<Basic | NTLM>]
[/U:<user name>]
[/P:<password>]
[/L]
[/G:<true | false>]
[Additional MSDeploy.exe flags]
您必須指定 /T 旗標或 /Y 旗標,以指出您要分別執行試用版執行或即時部署(請勿在相同的命令中使用這兩個旗標)。 下表說明每個旗標的用途。
旗標 | 描述 |
---|---|
/T | 使用 –whatif 旗標呼叫MSDeploy.exe,表示試用版執行。 它不會部署套件,而是會建立一份報告,說明如果您確實部署封裝,會發生什麼情況。 |
/Y | 呼叫沒有 –whatif 旗標MSDeploy.exe。 這會將封裝部署到本機計算機或指定的目的地伺服器。 |
/M | 指定目的地伺服器名稱或服務 URL。 如需您可以在這裡提供之值的詳細資訊,請參閱 本主題中的端點考慮 一節。 如果您省略 /M 旗標,封裝將會部署到本機計算機。 |
/一個 | 指定MSDeploy.exe應該用來執行部署的驗證類型。 可能的值為 Bearer、NTLM 和 Basic。 如果您省略 /A 旗標,驗證類型會預設為 NTLM 以部署至Web Deploy遠端代理程式服務,並預設為 Basic 以部署至 Web Deploy 處理程式。 |
/U | 指定使用者名稱。 只有在您使用基本身份驗證時,才適用這項功能。 |
/P | 指定密碼。 只有在您使用基本身份驗證時,才適用這項功能。 |
/L | 指出封裝應該部署到本機 IIS Express 實例。 |
/G | 指定使用tempAgent提供者設定部署封裝。 如果您省略 /G 旗標,則值會預設為 false。 |
注意
每次建置程式建立 Web 套件時,也會建立名為 [項目名稱]的檔案,.deploy-readme.txt 說明這些部署選項。
除了這些旗標之外,您還可以將 Web Deploy 作業設定指定為其他 .deploy.cmd 參數。 您指定的任何其他設定只會傳遞至基礎MSDeploy.exe命令。 如需這些設定的詳細資訊,請參閱 Web 部署作業設定。
假設您想要執行 .deploy.cmd 檔案,將 ContactManager.Mvc Web 應用程式專案部署到測試環境。 您的測試環境已設定為使用 Web Deploy 遠端代理程式服務,如設定 Web Deploy Publishing 的 Web 伺服器 (遠端代理程式) 中所述。 若要部署 Web 應用程式,您需要完成後續步驟。
使用 .deploy.cmd 檔案部署 Web 應用程式
建置和封裝 Web 應用程式專案,如建置和封裝 Web 應用程式專案中所述。
修改ContactManager.Mvc.SetParameters.xml檔案,以包含測試環境的正確參數值,如設定Web套件部署的參數中所述。
開啟 [命令提示字元] 視窗,並流覽至ContactManager.Mvc.deploy.cmd檔案的位置。
鍵入此命令,然後按 Enter:
ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
在此範例中:
- /Y 旗標表示您想要實際部署套件,而不是執行試用版執行。
- /M 旗標表示您想要將套件部署到名為 TESTWEB1 的伺服器。 從此值中,MSDeploy.exe會嘗試將套件部署到位於的Web Deploy遠端代理程式服務 http://TESTWEB1/MSDeployAgentService.
- /A 旗標表示您想要使用 NTLM 驗證。 因此,您不需要指定使用者名稱和密碼。
若要說明如何使用 .deploy.cmd 檔案簡化部署程式,請參閱使用上述選項執行ContactManager.Mvc.deploy.cmd時所產生的MSDeploy.exe命令。
msdeploy.exe
-source:package='C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\ContactManager.Mvc.zip' -dest:auto,computerName='TESTWEB1.fabrikam.net', authtype='NTLM',
includeAcls='False'
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\
ContactManager.Mvc.SetParameters.xml"
如需使用 .deploy.cmd 檔案部署 Web 套件的詳細資訊,請參閱 如何:使用 deploy.cmd 檔案安裝部署套件。
使用MSDeploy.exe
雖然使用 .deploy.cmd 檔案通常會簡化部署程式,但在某些情況下,最好直接使用 MSDeploy.exe。 例如:
- 如果您想要以非系統管理員使用者身分部署到 Web Deploy Handler,則無法使用 .deploy.cmd 檔案。 這是因為 Web Deploy 2.0 中有錯誤,如端點考慮中所述。
- 如果您想要在不同位置的不同 SetParameters.xml 檔案之間手動切換,建議您直接使用 MSDeploy.exe。
- 如果您想要覆寫數個命令行自變數MSDeploy.exe,建議您直接使用 MSDeploy.exe。
當您使用MSDeploy.exe時,必須提供三個主要資訊:
- –source 參數,指出數據的來源。
- -dest 參數,指出您的數據要去哪裡。
- 表示您要執行的作業的 –verb 參數。
MSDeploy.exe依賴 Web Deploy 提供者 來處理來源和目的地數據。 Web Deploy 包含許多提供者,這些提供者代表它可以使用的應用程式和數據源範圍,例如,有 SQL Server 資料庫的提供者、IIS Web 伺服器、憑證、全域程式集緩存 (GAC) 元件、各種不同的組態檔,以及許多其他類型的數據。 –source 參數和 –dest 参數都必須以 –source:[providerName]=[location] 格式指定提供者。 當您將 Web 套件部署到 IIS 網站時,您應該使用這些值:
–source 提供者一律會封裝。 例如:
-source:package='[path to web package]'
–dest 提供者一律為 auto。例如:
-dest:auto='[server name or service URL]'
–verb 一律會同步處理。
-verb:sync
此外,您必須指定各種其他 提供者特定的設定 和一般 作業設定。 例如,假設您想要將 ContactManager.Mvc Web 應用程式部署到預備環境。 部署會以 Web 部署處理程式為目標,且必須使用基本身份驗證。 若要部署 Web 應用程式,您需要完成後續步驟。
使用存取令牌使用 MSDeploy.exe 部署 Web 應用程式
MSDeploy V3 支援使用存取令牌進行驗證,也稱為持有人令牌。 建議使用存取令牌,因為它們是最安全的。
建置和封裝 Web 應用程式專案,如建置和封裝 Web 應用程式專案中所述。
修改ContactManager.Mvc.SetParameters.xml檔案,以包含您預備環境的正確參數值,如設定 Web 套件部署的參數中所述。
開啟 [命令提示字元] 視窗,並流覽至MSDeploy.exe的位置。 這通常位於
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
。如果您沒有存取權杖,請使用 命令建立存取權杖:
az account get-access-token --query accessToken
輸入此指令,然後按 Enter 鍵(忽略換行符):
MSDeploy.exe -source:package="[path]\ContactManager.Mvc.zip" -dest:auto, computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite", username="FABRIKAM\stagingdeployer", $CREDENTIAL_PLACEHOLDER$, authtype="Bearer", includeAcls="False", Password="{token}" -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml" -allowUntrusted
在此範例中:
- –source 參數會指定封裝提供者,並指出Web套件的位置。
- –dest 參數會指定自動提供者。 computerName 設定會在目的地伺服器上提供 Web Deploy Handler 的服務 URL。 驗證 類型 設定
Bearer
表示您想要使用存取令牌進行驗證,因此您必須提供令牌值做為 密碼。 includeAcls=“False” 設定表示您不想將來源 Web 應用程式中檔案的訪問控制清單 (ACL) 複製到目的地伺服器。 - –verb:sync 自變數表示您想要復寫目的地伺服器上的來源內容。
- –disableLink 自變數表示您不想在目的地伺服器上複寫應用程式集區、虛擬目錄組態或安全套接字層 (SSL) 憑證。 如需詳細資訊,請參閱 Web Deploy Link Extensions。
- –setParamFile 參數會提供SetParameters.xml檔案的位置。
- –allowUntrusted 參數表示 Web Deploy 應該接受信任證書頒發機構單位未核發的 SSL 憑證。 如果您要部署至 Web 部署處理程式,而且您已使用自我簽署憑證來保護服務 URL,則必須包含此參數。
使用 MSDeploy.exe和基本身份驗證部署 Web 應用程式
警告
如果有更安全的方法(持有人令牌)可用,則不建議使用基本身份驗證。
建置和封裝 Web 應用程式專案,如建置和封裝 Web 應用程式專案中所述。
修改ContactManager.Mvc.SetParameters.xml檔案,以包含您預備環境的正確參數值,如設定 Web 套件部署的參數中所述。
開啟 [命令提示字元] 視窗,並流覽至MSDeploy.exe的位置。 這通常位於
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
。輸入此指令,然後按 Enter 鍵(忽略換行符):
MSDeploy.exe -source:package="[path]\ContactManager.Mvc.zip" -dest:auto, computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite", username="FABRIKAM\stagingdeployer", $CREDENTIAL_PLACEHOLDER$, authtype="Basic", includeAcls="False" -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml" -allowUntrusted
在此範例中:
- –source 參數會指定封裝提供者,並指出Web套件的位置。
- –dest 參數會指定自動提供者。 computerName 設定會在目的地伺服器上提供 Web Deploy Handler 的服務 URL。 authtype 設定表示您想要使用基本身份驗證,因此您需要提供使用者名稱和密碼。 最後, includeAcls=“False” 設定表示您不想將來源 Web 應用程式中檔案的訪問控制清單 (ACL) 複製到目的地伺服器。
- –verb:sync 自變數表示您想要復寫目的地伺服器上的來源內容。
- –disableLink 自變數表示您不想在目的地伺服器上複寫應用程式集區、虛擬目錄組態或安全套接字層 (SSL) 憑證。 如需詳細資訊,請參閱 Web Deploy Link Extensions。
- –setParamFile 參數會提供SetParameters.xml檔案的位置。
- –allowUntrusted 參數表示 Web Deploy 應該接受信任證書頒發機構單位未核發的 SSL 憑證。 如果您要部署至 Web 部署處理程式,而且您已使用自我簽署憑證來保護服務 URL,則必須包含此參數。
自動化 Web 套件部署
在很多企業案例中,您會想要將 Web 套件部署為較大的單一步驟或自動化部署的一部分。 無論您選擇執行 .deploy.cmd 檔案或使用直接MSDeploy.exe來部署 Web 套件,都可以參數化命令,並從Microsoft建置引擎 (MSBuild) 專案檔中的目標呼叫它們。
在 Contact Manager 範例解決方案中,查看 Publish.proj 檔案中的 PublishWebPackages 目標。 此目標會針對名為 PublishPackages 的專案清單所識別的每個.deploy.cmd檔案執行一次。 目標會使用屬性和專案元數據,為每個 .deploy.cmd 檔案建置一組完整的自變數值,然後使用 Exec 工作來執行命令。
<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
...
<PropertyGroup>
<_WhatIfSwitch>/Y</_WhatIfSwitch>
<_WhatIfSwitch Condition=" '$(_WhatIf)'=='true' ">/T</_WhatIfSwitch>
<_Cmd>
%(PublishPackages.FullPath) $(_WhatifSwitch) /M:$(MSDeployComputerName)
/U:$(MSDeployUsername) /P:$(Password) /A:$(MSDeployAuth)
%(PublishPackages.AdditionalMSDeployParameters)
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
端點考慮
無論您執行 .deploy.cmd 檔案還是直接使用 MSDeploy.exe 部署 Web 套件,都必須指定電腦名稱或服務端點以進行部署。
如果目的地 Web 伺服器已設定為使用 Web Deploy 遠端代理程式服務進行部署,您可以將目標服務 URL 指定為目的地。
http://[server name]/MSDeployAgentService
或者,您可以單獨指定伺服器名稱作為目的地,而Web Deploy會推斷遠端代理程式服務URL。
[server name]
如果目的地 Web 伺服器已設定為使用 Web Deploy Handler 進行部署,您必須將 IIS Web Management Service(WMSvc) 的端點位址指定為目的地。 根據預設,這會採用下列格式:
https://[server name]:8172/MSDeploy.axd
您可以使用 .deploy.cmd 檔案或直接MSDeploy.exe,以這些端點中的任何一個為目標。 不過,如果您想要以非系統管理員使用者身分部署至 Web Deploy Handler,如設定 Web Deploy Publishing (Web Deploy Handler) 中所述,您需要將查詢字符串新增至服務端點位址。
https://[server name]:8172/MSDeploy.axd?site=[IIS website name]
這是因為非系統管理員用戶沒有 IIS 的伺服器層級存取權;他或她只能存取特定的 IIS 網站。 在寫入時,由於 Web 發佈管線 (WPP) 中的 Bug,您無法使用包含查詢字串的端點位址來執行 .deploy.cmd 檔案。 在此案例中,您必須直接使用 MSDeploy.exe 來部署 Web 套件。
注意
如需 Web Deploy 遠端代理程式服務和 Web 部署處理程式的詳細資訊,請參閱 選擇正確的 Web 部署方法。 如需如何設定環境特定項目檔以部署至這些端點的指引,請參閱 設定目標環境的部署屬性。
驗證考量
無論您執行 .deploy.cmd 檔案還是直接使用 MSDeploy.exe 部署 Web 套件,都必須指定驗證類型。 Web Deploy 接受可能的值:Bearer、NTLM 或 Basic。 如果您指定 Bearer,則必須提供令牌做為密碼,以及用戶名稱的任何值。 如果您指定基本身份驗證,則也需要提供使用者名稱和密碼。 當您選取驗證類型時,需要注意各種因素:
- 如果您要部署至 Web Deploy 遠端代理程式服務,則必須使用 NTLM 驗證。 遠端代理程式服務不接受基本身份驗證認證。
- 如果您要部署至 Web 部署處理程式,您可以使用存取令牌(持有人令牌)、NTLM 或基本身份驗證。 預設設定為基本身份驗證。 基本身份驗證仰賴以純文本傳輸的使用者名稱和密碼,您的認證會受到保護,因為 Web 部署處理程式一律使用 SSL 加密。 最安全的方法是使用存取令牌,以避免傳送實際的密碼。
- 如果您的 Web 套件包含資料庫,而 Web 伺服器和資料庫伺服器是個別的機器,您將因為 NTLM「雙躍點」限制而無法使用 NTLM 驗證來部署資料庫。 您必須在部署 連接字串 中使用 SQL Server 認證,或將基本身份驗證認證提供給 Web Deploy。 此問題在將成員資格資料庫部署至企業環境中更詳細地說明。
結論
本主題描述如何藉由執行 .deploy.cmd 檔案或使用直接MSDeploy.exe來部署 Web 套件。 它說明每個方法何時可能適當,並說明如何在較大的單一步驟或自動化建置程式中參數化及執行部署命令。
深入閱讀
如需如何建立和參數化 Web 部署套件的指引,請參閱 建置和封裝 Web 應用程式專案 和 設定 Web 套件部署的參數。 如需如何從 Team Foundation Server (TFS) 實例建置及部署 Web 套件的指引,請參閱 設定 Team Foundation Server for Automated Web Deployment。 如需如何自定義和疑難解答部署程序的資訊,請參閱 從部署排除檔案和資料夾。