透過MSBuild將Web專案封裝成package(zip格式),並透過deploy.cmd將package發布到指定站點。
前言
要整合CI流程,最基本的就是要能夠自動編譯專案並產生結果,才能即時反應變更,本篇將分享MSBuild的方式用Commend line來下指令達到自動編譯並封裝成package,之後再透過Command line將package發布到Server上的方式。
將站點封裝成Package
MSBuild的資訊來源是靠專案檔(csproj),專案檔透過Visual Studio可以視覺化的呈現如下圖。
將專案先卸載,然後右鍵編輯,可以發現專案檔其實就是一份XML,在描述說這個專案有包含那些檔案,有參考那些元件、使用哪個版本的.Net framework,以及檔案夾的結構等等。而在Visual Studio要編譯也真的非常容易,相信每位開發人員一定都有編譯過自己專案的經驗,Ctrl+Shift+B熱鍵應該很不陌生。而主要的原理就是Vistual Stduio在背後幫助你產生MSBuild的指令來達到這動作。
但考慮到要自動化,再強大的IDE也顯得無用武之地,因此,還是要稍微了解MSBuild的語法,才能透過Commend line做到自動化的目的。
MSBuild "HelloWeb.csproj" /T:Package /p:VisualStudioVersion=14.0 /P:Configuration=Release;PackageLocation="C:\\WebDeployFileCN\\HelloWeb.zip"
語法指令是MSBuild起手,接著接專案檔名稱;
/T:Packge是設定Target表示要封裝成Package;
/p:Configuratoin=Release表示發布的Config採用Release的版本;
PackageLocation="C:\\WebDeployFileCN\\HelloWeb.zip"表示產生的相關package檔案要放在哪個路徑;
/p:VisualStudioVersoin=14.0表示所使用的MSBuild Tool的版本為14.0版(可參考下圖)。
檔案產生後,會發現不只有一個zip檔,還包含了SetParameters.xml、SourceManifest.xml、deploy.cmd等檔案,如畫面所示。
上述這些檔案,在等會發布的時候會用到,這裡就先略過不表。
將Package發布到站點
要透過指令的方式發布Package到Server端,前提是Server必須有安裝Web Management Service
接著授予權限給指定的使用者,請點選要賦予權限的網站後,點選IIS管理器權限,如下圖所示。
用戶類型選擇IIS 管理器,將使用者加入。
啟用Web Deploy發行,要賦予剛剛那個帳號擁有發布的權限
這裡只需要選取指定的使用者即可,然後按確定。
接下來就可透過Command line的方式執行發布站點的指令,如果要自己透過MSDeploy指令來發布站點,真的蠻麻煩的,下面有段語法可以參考。
msdeploy.exe
-source:package='C:\Packages\HelloWeb.zip'
-dest:auto,
computerName="https://172.16.22.18:8172/MSDeploy.axd",
userName="CN-AP-01/Administrator",password="passw@rd",
authtype="basic",includeAcls="False"
-verb:sync -disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"C:\WorkFolder\Repos\Packages\HelloWeb.SetParameters.xml"
-whatif -allowUntrusted:true
太複雜,根本不容易寫,但透過剛剛封裝產生的deploy.cmd,就會讓指令簡化很多,可以比較一下。
HelloWeb.deploy.cmd
/t
/m:https://172.16.22.18:8172/MSDeploy.axd
/u:CN-AP-01/Administrator /p:passw@rd;
/a:basic
-allowUntrusted:true
/t代表是發佈測試,不會真的上傳到Server,/Y才是要真的傳到Server上;
/m後面的參數,只有IP的部分需要更改為目標主機的IP位址,其餘不變;
/u和/p就不多說了,就是user和password;/a表示走基本授權模式;
如果Server上尚未安裝validated certificate(憑證),就需要將-allowUntrusted設定為true。
執行語法後,deploy.cmd會自動幫你呼叫msdeploy.exe使用上面那段很複雜的語法,然後把package發布到主機的站點上。
小結
本篇的內容主要分享如何將專案檔透過MSBuild打包成package,以及Server端該如何設定以支援Web Management Service處理將package部署在站點上的工作,最後透過deploy.cmd指令的方式將package發布到Server上。
到這裡為止,都是靠指令碼的方式完成所有動作,這也意味著已經有自動化的基本雛形,只須再配合任何一套CI工具就能開啟自動化之路。