關於如何為單一的ASP.NET web應用程序設置持續集成,你可以找到很多文章。這些文章都寫到如何通過Web Deploy來構建完美的環境來部署簡單、只需稍作修改VS.NET模板的web應用程序。任何東西在這一完美環境下都能順利進行。
但是,真正部署應用程序的話卻並非易事。總是有問題不斷出現在以下情況中:當需要在注冊表(Registry)或自定義文件夾中配置設置,或者你需要部署到Web集群時。
本文中,我們通過使用PowerShell遠程處理(PowerShell remoting)和AppVeyor CI為帶有ASP.NET web應用程序和Windows Service的解決方案在其暫存(staging)和產品環境中配置持續集成。
我們的示例中包含4個項目:
DemoApp.Web -ASP.NET應用程序,前端
DemoApp.Web.Tests -使用VisualStudio測試框架的web應用程序單元測試
DemoApp.Service -承載WCF服務的Windows service,後端
DemoApp.Service.Tests -使用NUnit框架的Windows service單元測試
該示例應用程序的代碼庫托管於BitBucket:
我們遇到的第一個問題就是如何部署Windows service?我們沒有針對Windows service的“發布”菜單,也沒有相應的配置轉換。根本沒法用Web Deploy。為了自動化項目的部署,我們將使用PowerShell部署框架 - AppRolla。
AppRolla利用PowerShell遠程處理在目標機器上執行部署任務。部署任務將下載應用程序包,解包,更新配置設置,然後創建或更新應用程序網站及pool。該應用程序包僅僅是帶有應用程序文件夾的壓縮包,通過HTTP上傳到外部存儲。其內部並沒有任何特別之處 - 模塊寫在PowerShell內,很容易查看和修改。
為了讓你對PowerShell部署一睹為快,我們現在就建立一個簡單web應用程序,並將其部署到服務器上。
整個流程中最具挑戰性的部分可能就是設置帶有SSL認證的PowerShell遠程處理了。我們強烈建議使用HTTPS與遠程服務器進行通信,因為所有的數據流量都是加密的。
當你在Windows Azure 上創建新的虛擬機時,PowerShell遠程會自動被激活和配置。防火牆將允許PowerShell遠程HTTPS端點端口5986,另外我們也將HTTP端點添加到示例服務器上:
如果你需設置其它服務,可以參照該鏈接裡的具體細節:guide on how to configure PowerShell remoting。
為了在實例機器上快速安裝IIS7.5,我們使用以下PowerShell命令:
Add-WindowsFeature -Name Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-Static-Content,Web-Http-Logging,Web-Stat-Compression,Web-Filtering,Web-Net-Ext,Web-Net-Ext45,Web-Asp-Net,Web-Asp-Net45,Web-ISAPI-Ext,Web-Mgmt-Console
我們創建帶有“Hello world”的簡單Web應用程序,然後將其部署到示例服務器。