使用Web Deploy自動打包發布
- 2022 年 3 月 29 日
- 筆記
在內部測試階段,經常改一點小東西需要更新給測試繼續測試。然後就需要頻繁的找到對應更改的視圖/JS文件,或者是編譯的dll文件,再打開測試伺服器找到對應站點替換進去,整套流程下來就非常的繁瑣費時。
使用WebDeploy就可以很輕鬆的解決這些問題啦,我們可以直接在vs上點擊發布就可以一鍵部署到iis對應的站點上了。
安轉Web Deploy
打開//www.iis.net/downloads/microsoft/web-deploy下載安裝包,然後在伺服器上進行安裝,選擇完整安裝可以少踩坑。
安裝IIS的管理服務
打開伺服器管理器,選擇添加角色和功能
一直點下一步,到伺服器角色選項,勾選web伺服器(IIS)下的管理服務。然後繼續下一步到安裝為止。
確認安裝成功
查看管理服務
選擇Windows憑證或IIS管理器憑證
添加IIS管理器用戶
雙擊IIS管理器用戶
添加用戶
對應站點設置管理用戶
選擇IIS管理器許可權
從IIS管理器中選擇
使用VS一鍵發布
添加WebDploy發布
右鍵web站點,選擇發布,創建一個Web部署
用戶名和密碼為剛剛IIS創建的內容。
點擊驗證連接,如果連接失敗建議檢查下Web Management Service服務是否已啟動。
再檢查下用戶名和密碼。(PS:如果確認無誤還是不行的話,可以嘗試重裝Web Deploy)
發布
點擊發布,發布文件夾下的內容就會自動更新到IIS站點上啦。
自定義發布內容
由於我們是多個web站點的項目,所以需要將次發布的內容移動到發布目錄的特定文件夾中。
打開pubxml文件夾,添加
<Target Name="MoveFilesToDesignatedDirectory" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy"> <Message Text="Moving files to designated directory" importance="high" /> <ItemGroup> <_CustomMoveFiles Include="$(_PackageTempDir)\**" Exclude="$(_PackageTempDir)\bin\**;" /> </ItemGroup> <Move SourceFiles="%(_CustomMoveFiles.Identity)" DestinationFolder="$(_PackageTempDir)\Apps\Scm\%(RecursiveDir)" /> <Message Text="Delete other folder" importance="high" /> <RemoveDir Directories="$(_PackageTempDir)\Scripts;$(_PackageTempDir)\Template;$(_PackageTempDir)\Views;$(_PackageTempDir)\grf;" /> </Target>
綁定一個事件到CopyAllFilesToSingleFolderForMsdeploy後,點擊發布生成成功後,發布的內容會先在_PackageTempDir生成,目錄為web站點對應的\obj\Release\Package\PackageTmp\bin目錄下。
我們可以在發布到iis之前,修正這個文件夾的內容,然後發布的時候就會按我們修正的內容去發布了。
使用ItemGroup可以定義我們要一定的內容,即我們需要將非bin文件夾外的文件都移動到發布文件夾的\Apps\Scm\目錄下,使用Move命令可以實現這個,然後再使用RemoveDir將移動前的文件夾刪除掉。
最後我們可以將Bin目錄下的文件,選擇性的發布
<Target Name="CutBin" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy"> <Message Text="Cutting Bin directory" importance="high" /> <ItemGroup> <_CustomBinFiles Include="$(_PackageTempDir)\bin\**" Exclude="$(_PackageTempDir)\bin\iERP.*" /> </ItemGroup> <Delete Files="@(_CustomBinFiles)" /> </Target>
使用ItemGroup,定義要刪除的文件,即非IERP.前綴的文件,然後使用Delete刪除
原始發布生成的內容為
經過我們上述操作後,除Bin文件夾外的內容都被移動到Apps裡面了,然後Bin文件夾里只有IERP.為前綴的文件
命令的詳細介紹可以查看文檔://docs.microsoft.com/zh-cn/visualstudio/msbuild/removedir-task?view=vs-2022