部署 Web 套件

作者 :Jason Lee

本主題描述如何使用 Internet Information Services (IIS) Web Deployment Tool (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) 位於相同的資料夾中。
  • 執行 .deploy.cmd 檔案的電腦上安裝 Web Deploy (MSDeploy.exe) 。

.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。 For more information on the values you can provide here, see the Endpoint Considerations section in this topic. 如果您省略 /M 旗標,封裝將會部署到本機電腦。
/A 指定MSDeploy.exe應該用來執行部署的驗證類型。 可能的值為 NTLMBasic。 如果您省略 /A 旗標,驗證類型預設為 NTLM ,以部署至 Web Deploy 遠端代理程式服務,以及部署至 [Web Deploy 處理常式 ] 的 [基本 ] 。
/U 指定使用者名稱。 這僅適用于您使用基本驗證時。
/P 指定密碼。 這僅適用于您使用基本驗證時。
/L 表示封裝應該部署到本機IIS Express實例。
/G 指定使用 tempAgent 提供者設定來部署套件。 如果您省略 /G 旗標,此值會預設為 false

注意

每次建置程式建立 Web 套件時,也會建立名為 [專案名稱].deploy-readme.txt 的檔案,說明這些部署選項。

除了這些旗標之外,您還可以將 Web Deploy 作業設定指定為額外的 .deploy.cmd 參數。 您指定的任何其他設定只會傳遞至基礎MSDeploy.exe命令。 如需這些設定的詳細資訊,請參閱 Web Deploy 作業設定

假設您想要執行 .deploy.cmd 檔案,將 ContactManager.Mvc Web 應用程式專案部署至測試環境。 您的測試環境已設定為使用 Web Deploy 遠端代理程式服務,如 設定 Web Deploy 發佈 (遠端代理程式) 中所述。 若要部署 Web 應用程式,您需要完成後續步驟。

使用 .deploy.cmd 檔案部署 Web 應用程式

  1. 建置和封裝 Web 應用程式專案,如 建置和封裝 Web 應用程式專案中所述。

  2. 修改 ContactManager.Mvc.SetParameters.xml 檔案,以包含測試環境的正確參數值,如 設定 Web 套件部署的參數中所述。

  3. 開啟命令提示字元視窗,並流覽至 ContactManager.Mvc.deploy.cmd 檔案的位置。

  4. 輸入此命令,然後按 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 處理常式,則無法使用 .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 網頁伺服器、憑證、全域組件快取 (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 應用程式

  1. 建置和封裝 Web 應用程式專案,如 建置和封裝 Web 應用程式專案中所述。

  2. 修改 ContactManager.Mvc.SetParameters.xml 檔案,以包含預備環境的正確參數值,如 設定 Web 套件部署的參數中所述。

  3. 開啟命令提示字元視窗,並流覽至MSDeploy.exe的位置。 這通常位於 %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe。

  4. 輸入此命令,然後按 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 部署處理常式的服務 URL。 authtype設定表示您想要使用基本驗證,因此您必須提供使用者名稱和密碼。 最後, includeAcls=「False」 設定表示您不想將來源 Web 應用程式中檔案的存取控制清單 (ACL) 複製到目的地伺服器。
  • –verb:sync引數表示您想要複寫目的地伺服器上的來源內容。
  • –disableLink引數表示您不想在目的地伺服器上複寫應用程式集區、虛擬目錄設定或安全通訊端層 (SSL) 憑證。 如需詳細資訊,請參閱 Web Deploy 連結延伸模組
  • –setParamFile參數提供SetParameters.xml檔案的位置。
  • –allowUntrusted參數表示 Web Deploy 應該接受未由受信任憑證授權單位單位簽發的 SSL 憑證。 如果您要部署至 Web 部署處理常式,而且您已使用自我簽署憑證來保護服務 URL,則必須包含此參數。

自動化 Web 套件部署

在許多企業案例中,您會想要將 Web 套件部署為較大的單一步驟或自動化部署的一部分。 無論您選擇執行.deploy.cmd檔案還是直接使用 MSDeploy.exe 來部署 Web 套件,都可以參數化命令,並從Microsoft Build Engine (MSBuild) 專案檔中的目標呼叫它們。

在連絡人管理員範例解決方案中,查看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 部署遠端代理程式服務進行部署,您可以將目標服務 URL 指定為目的地。

http://[server name]/MSDeployAgentService

或者,您可以單獨將伺服器名稱指定為目的地,而 Web Deploy 會推斷遠端代理程式服務 URL。

[server name]

如果目的地 Web 服務器已設定為使用 Web 部署處理常式進行部署,您必須指定 IIS Web 管理服務的端點位址, (WMSvc) 作為目的地。 根據預設,這會採用下列格式:

https://[server name]:8172/MSDeploy.axd

您可以使用 .deploy.cmd 檔案或直接MSDeploy.exe,以這些端點的任何端點為目標。 不過,如果您想要以非系統管理員使用者身分部署至 Web 部署處理常式,如設定 Web Deploy 發行 (Web Deploy 處理常式) 中所述,您必須將查詢字串新增至服務端點位址。

https://[server name]:8172/MSDeploy.axd?site=[IIS website name]

這是因為非系統管理員使用者沒有 IIS 的伺服器層級存取權;他或她只能存取特定 IIS 網站。 在撰寫時,由於 Web 發佈管線 (WPP) 發生錯誤,您無法使用包含查詢字串的端點位址來執行 .deploy.cmd 檔案。 在此案例中,您必須直接使用 MSDeploy.exe 來部署 Web 套件。

注意

如需 Web Deploy 遠端代理程式服務和 Web 部署處理常式的詳細資訊,請參閱 選擇正確的 Web 部署方法。 如需如何設定環境特定專案檔以部署至這些端點的指引,請參閱 設定目標環境的部署屬性

驗證考量

不論您是否執行 .deploy.cmd 檔案或使用直接MSDeploy.exe來部署 Web 套件,都需要指定驗證類型。 Web Deploy 接受兩個可能的值: NTLMBasic。 如果您指定基本驗證,您也需要提供使用者名稱和密碼。 當您選取驗證類型時,需要注意的各種因素:

  • 如果您要部署至 Web 部署遠端代理程式服務,則必須使用 NTLM 驗證。 遠端代理程式服務不接受基本驗證認證。
  • 如果您要部署至 Web 部署處理常式,您可以使用 NTLM 或基本驗證。 預設設定為基本驗證。 雖然基本驗證依賴純文字傳輸的使用者名稱和密碼,但您的認證會受到保護,因為 Web Deploy 處理常式一律使用 SSL 加密。
  • 如果您的 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。 如需如何自訂和疑難排解部署程式的資訊,請參閱 從部署中排除檔案和資料夾