1. 程式人生 > >使用Jenkins自動發布Windows服務項目

使用Jenkins自動發布Windows服務項目

strong dep workspace from pac 自動發布 排除 iou 同步

不同於發布Web項目,自動發布Windows服務項目需要解決以下幾個問題:

  1. 如何遠程停止和開啟服務?需要在發布前停止服務,在發布完成後開啟服務。
  2. 如何上傳編譯文件到目標服務器?

問題1:如何遠程停止和開啟服務

在msbuild之前添加一個execute windows batch command,執行cmd命令,cmd命令如下:

echo **********stop remote server windows service**********
"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:runCommand="
net stop UbtripWs_Business" -dest:auto,computername=192.168.1.21,username=administrator,password=P@ssw0rd.123

這裏使用的是msdeploy的sync操作,通過runCommand在目標服務器上執行cmd命令。

問題:

如果服務當前是已停止狀態,運行runCommand (net stop UbtripWs_Business)就會報錯。

技術分享圖片

問題2:如何上傳編譯文件到目標服務器

在msbuild之後添加一個execute windows batch command,執行cmd命令,cmd命令如下:

echo **********以下內容有三段,1.preSync:先Kill進程,2.同步本地與遠程,3.postSync:最後啟動服務**********
"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -preSync:runCommand="TASKKILL /F /IM SSharing.Ubtrip.WinService.exe /T",waitAttempts=30,waitInterval=1000  -source:contentpath=%WORKSPACE%\DEV\Ubtrip\SSharing.Ubtrip.WinService\bin\Debug\ -dest:contentpath=C:\WindowsServices\UbtripJob\,computername=192.168
.1.21,username=administrator,password=P@ssw0rd.123 -enableRule:DoNotDeleteRule -postSync:runCommand="net start UbtripWs_Business",waitAttempts=20

使用msdeploy的sync操作,通過runCommand在目標服務器上執行cmd命令。preSync指在復制文件之前運行的命令,postSync是復制文件之後運行的命令。

註意:

msdeploy的contentpath默認是先刪除目標服務器的文件再添加的,但是我們並不希望刪除原來的文件,所以需要添加參數 -enableRule:DoNotDeleteRule。

自動排除Web.config和App.config

1,windows服務項目

通過給msdeploy添加參數-skip,命令如下:

-skip:objectName=filePath,absolutePath=Web\.config,skipAction=Update

2,web項目

由於web項目的構建是通過msbuild+msdeploy service的方式進行的,所以沒有辦法像windows服務項目那樣給msdeploy添加-skip參數,對於web項目的解決方案是,修改站點的csproj項目文件,添加一個Target來告訴msbuild,構建的時候就自動排除Web.config文件,命令如下:

<!--發布的時候告訴msbuild排除Web.config文件-->
  <Target Name="CustomExcludeFiles" BeforeTargets="ExcludeFilesFromPackage">
    <ItemGroup>
      <ExcludeFromPackageFiles Include="Web.config">
      </ExcludeFromPackageFiles>
    </ItemGroup>
  </Target>

附完整構建配置

1,Windows服務項目

技術分享圖片

msbuild之前cmd命令:

技術分享圖片
1 echo **********begin restore nuget package**********
2 C:\mcgrady\tools\nuget.exe restore "%WORKSPACE%\DEV\Ubtrip\SSharing.Ubtrip.sln" -source https://www.nuget.org/api/v2/
3 echo **********stop remote server windows service**********
4 "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:runCommand="net stop UbtripWs_Business" -dest:auto,computername=192.168.1.21,username=administrator,password=P@ssw0rd.123
View Code

msbuild參數:

msbuild之後cmd命令:

2,Web項目

技術分享圖片

msbuild之前命令:

msbuild參數:

參考資料

1,官方文檔:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd569106(v=ws.10)

2,msdeploy skip rules:https://blog.richardszalay.com/2012/12/17/demystifying-msdeploy-skip-rules/

3,使用 MSDeploy 手動部署網站時如何避免 Web.config 被更新:https://blog.miniasp.com/post/2010/09/01/MSDeploy-Skip-Command-for-Webconfig-file.aspx

使用Jenkins自動發布Windows服務項目