使用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