最簡單的window下使用Jenkins來做自動化部署的教程
今天我們來說一下,如何使用Jenkins+powershell指令碼,將我們的.NET CORE的指令碼部署到對應的伺服器上.
這裡我們使用的原始碼管理工具是TFS.雖然原始碼管理器比較老舊,但是原理都差不多.
1.安裝Jre,因為我們的Jenkins是基於java開發的,所以需要先在伺服器上安裝java的執行時環境
這個安裝過程比較簡單,百度下載JRE,然後安裝,暫且不表.
下載地址:https://www.java.com/en/download/manual.jsp
2.下載並安裝Jenkins,這裡伺服器是Windows的,所以最好下載Windows版本的,安裝好以後直接就以Windows服務的形式運行了.
這個安裝過程也是非常的簡單,網上教程很多.
https://jenkins.io/download/
3.安裝好Jenkins以後,根據需要我們安裝許可權外掛,給不用的賬號配置不通過的許可權,(此步驟可選)
具體可參看此文章,說的很詳細:
https://blog.csdn.net/qq_16320025/article/details/82897577
4.最關鍵的一步來了,就是如何使用Jenkins來自動部署我們的程式碼.
這裡主要分以下幾個小點,下面我會貼出詳細的程式碼.
1)獲取TFS中的最新原始碼,這裡我並沒有通過Jenkins去獲取程式碼,而是通過tf命令去拉取程式碼的.
這樣的好處就是,所有的Jenkins任務的原始碼,我都可以使用同一份,而不用每個任務單獨去拉取一份程式碼.
2)拉取到程式碼以後,自然就是通過命令來編譯我們的程式碼,熟悉.net的朋友們應該都知道,無非就那幾個命令了
3)程式碼釋出出來以後,自然就是要將程式碼copy到我們的站點或者Windows服務下面去.
這一步也很簡單,無非就是通過命令停止iis站點和應用程式池;copy程式碼;重啟啟動對應的站點即可
一套下來,打完收工.
下面貼出幾個關鍵步驟的截圖:
1.Jenkins建立自由風格的任務
2.其他什麼都可以不選,只要我們使用powershell指令碼,需要Jenkins支援powershell也需要安裝外掛
可參看如下連結:https://blog.csdn.net/ff55fff/article/details/76804966
3.點選儲存,一套搞定.點選build now即可
ps:下面給出詳細的powershell指令碼,非常簡單這裡就不詳述了,大家一看程式碼就明白了
1 net stop Test1Job 2 3 C:\Windows\System32\inetsrv\appcmd.exe stop site Test1.test.com 4 C:\Windows\System32\inetsrv\appcmd.exe stop site Test1.api.test.com 5 6 7 C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"test1.test.com" 8 C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"Test1.api.test.com" 9 10 dir "$PSScriptRoot\lib" -Filter "*.ps1" | foreach { 11 . $_.fullName 12 Write-Host "Import $($_.fullName)" 13 } 14 15 16 17 18 #1.獲取原始碼 19 D:\test\tools\get_tfs.bat 20 21 #2.編譯原始碼 22 dotnet build D:\test\Source\MTools\Source-Promotion\Test.API.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore 23 echo API OK 24 25 dotnet build D:\test\Source\MTools\Source-Promotion\Test.Web.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore 26 echo WEB OK 27 28 dotnet build D:\test\Source\MTools\Source-Promotion\Test.Job.WindowsService.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore -v q 29 echo job OK 30 31 32 Sleep 20 33 34 35 #3.釋出 36 37 CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.API\bin\Debug\netcoreapp2.1 D:\Test\Test1\api 38 CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Web\bin\Debug\netcoreapp2.1 D:\Test\Test1\web 39 CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Web\wwwroot D:\Test\Test1\web\wwwroot 40 CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Job.WindowsService\bin\Debug\netcoreapp2.1\win-x64 D:\Test\Test1\job 41 42 43 44 net start Test1Job 45 C:\Windows\System32\inetsrv\appcmd.exe start site Test1.test.com 46 C:\Windows\System32\inetsrv\appcmd.exe start site Test1.api.test.com 47 48 49 C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"test1.test.com" 50 C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"Test1.api.test.com" 51 52 53 Write-Host "success" 54 Get-DateView Code
1 function CCopy($folder_a_path,$folder_b_path) 2 { 3 if(!(test-path $folder_b_path)) 4 { 5 md $folder_b_path 6 } 7 8 #遍歷原始檔夾下所有檔案 9 $folders_a = gci $folder_a_path -Recurse 10 foreach ($folder_a in $folders_a) 11 { 12 13 if($folder_a.fullname -like "*appsettings.json*") 14 { 15 continue 16 } 17 18 #通過替換的方式,取目標檔案的全路徑名稱 19 $b = $folder_a.fullname.replace($folder_a_path,$folder_b_path) 20 #判斷目標檔案是否存在,如果存在則先判斷新舊 21 If (test-path $b) 22 { 23 #判斷目標是否為目錄,如果是目錄則跳過,如果不跳過,則會建立一級空目錄 24 If (!((gi $b).PSIsContainer)) 25 { 26 #判斷目標檔案、原始檔的新舊情況,如果目標已存在檔案的修改時間早於原始檔,則重新拷貝覆蓋 27 If ((gci $b).lastwritetime -lt $folder_a.lastwritetime) 28 { 29 copy-item $folder_a.fullname $b -force 30 } 31 } 32 33 } 34 #如果目標檔案不存在,則直接拷貝 35 Else 36 { 37 copy-item $folder_a.fullname $b 38 } 39 40 } 41 }複製檔案
一套打完手工,大家有什麼意見和建議,請提出~
後續將進一步寫通過powershell將程式釋出到其他伺服器上,以及釋出完成以後,郵件告知結果
待