最簡單的window下使用Jenkins來作自動化部署的教程

今天咱們來講一下,如何使用Jenkins+powershell腳本,將咱們的.NET CORE的腳本部署到對應的服務器上.java

這裏咱們使用的源碼管理工具是TFS.雖然源碼管理器比較老舊,可是原理都差很少.web

1.安裝Jre,由於咱們的Jenkins是基於java開發的,因此須要先在服務器上安裝java的運行時環境shell

這個安裝過程比較簡單,百度下載JRE,而後安裝,暫且不表.json

下載地址:https://www.java.com/en/download/manual.jspapi

 

2.下載並安裝Jenkins,這裏服務器是Windows的,因此最好下載Windows版本的,安裝好之後直接就以Windows服務的形式運行了.服務器

這個安裝過程也是很是的簡單,網上教程不少.app

https://jenkins.io/download/jsp

3.安裝好Jenkins之後,根據須要咱們安裝權限插件,給不用的帳號配置不經過的權限,(此步驟可選)ide

具體可參看此文章,說的很詳細:工具

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-Date
View 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將程序發佈到其餘服務器上,以及發佈完成之後,郵件告知結果

"D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe" workspaces /collection:http://tfs.xx.net:8080/tfs/xxerp  /login:leishen,pwd

"D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe" get  /recursive $/MTools /login:leishen,pwd
TFS獲取代碼

 

待續...

相關文章
相關標籤/搜索