一、背景
以前在發布系統的時候,總是需要經過本地合並代碼 >編譯 >發布到本地 >拷貝代碼到遠程服務器 >停止掉服務器上的應用池 >將要發布的文件替換原文件 >重啟應用程序池 >打開系統觀察系統是否正常啟動,一套下來差不多一個小時的時間就過去了,如果這時候某個同事說他的代碼沒有提交完,那么又需要重復一遍上面的操作過程,時間又得一個小時。那么有沒有什么工具可以代替認為的去執行上面這一些工作呢? 有, 那就是今天需要介紹 Jenkins。
Jenkins是一個開源軟件項目,源碼地址:https://gitee.com/mirrors/jenkins?utm_source=alading&utm_campaign=repo,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。
說在前面
- 本文中所有描述的操作均是基於 Windows 環境。
- Jenkins需要安裝在項目最終發布的服務器(計算機)上;
- 服務器允許訪問外網及允許被外網訪問;
- 建議部署在需要高頻發布版本的開發環境,不建議部署在生產環境;
二、Jenkins的安裝與配置
2.1 安裝前准備
2.1.1 安裝 jdk
由於Jenkins是java語言開發的,因需要jdk環境。
- 打開jdk下載頁面https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,下載jdk安裝包。
- 雙擊打開下載好的安裝包文件,進行安裝(一路點擊“下一步”),等待安裝完成后.
- 為驗證是否安裝成功,Win+R 打開運行窗口,輸入 cmd(或在開始菜單中搜索“命令提示符”),在打開的的命令行窗口中輸入 java -version 之后出現 java 版本號信息時,則表是jdk已安裝好了。
2.1.2 下載Jenkins
打開Jenkins安裝包下載頁面:https://www.jenkins.io/download/,
選擇要運行的操作系統環境,由於本文介紹的是Windows環境下的使用,故選擇 Windows,點擊 Windows 將下載安裝包。
2.2 Jenkins 安裝
2.2.1 開始安裝
雙擊文件 jenkins.msi
打開安裝引導程序。
點擊 Next
設置好安裝路徑后,點擊 Next
選擇Jenkins登陸類型
點擊 Next
設置端口號,默認端口號為8080
,也可以修改為其他端口號,點擊Test Pirt
測試端口號是否可用,點擊 Next
指定jdk安裝路徑,設置完成就點擊 Next
點擊 Next
點擊Install
開始安裝
等待安裝完成,點擊Finish
完成Jenkins安裝。
2.2.2 配置
使用瀏覽器打開地址:http://localhost:8080
,8080
為安裝時初始化的端口號。待頁面顯示下面結果。
默認情況下,您的Jenkins運行在 https://localhost:8080/
。 可以通過編輯來更改 jenkins.xml 它,該文件位於您的安裝目錄中。該文件也是更改其他引導配置參數(例如JVM選項,HTTPS設置等)的地方。
按照給定的路徑找到文件initialAdminPassword
,用記事本打開,並將文件中的密碼復制粘貼到上圖中的輸入框中,點擊繼續
按鈕
稍等片刻,直至頁面顯示如下內容:
點擊安裝推薦的插件
開始安裝插件
等待插件安裝完成,安裝過程可能需要持續數分鍾,具體視網速情況而定。安裝完成后將提示創建管理員賬號,如下圖,
填寫賬號密碼等信息后,點擊保存並完成
繼續點擊保存並完成
點擊開始使用Jenkins
,進入管理界面
2.2.3 安裝必要插件
點擊左側 Manage Jenkins
菜單,找到 Manage Plugins
,點擊進入插件管理界面。
選擇可選插件
,並在上方的搜索框中輸入 PowerShell
點擊“直接安裝”,再點擊安裝完成后重啟Jendens(空閑時)
,待安裝后會自動重啟Jenkins,
還可以安裝其他需要的插件如,釘釘消息推送時會用到的 DingTask 等插件
三、自動部署示例
示例針對的項目是基於.Net Core 創建的Web項目,故添加項目的配置內容可能讀者實際情況存在一些差異。
添加項目
進入Jenkins管理首頁,點擊“新建Item”,如下圖所示
輸入項目名稱,並選擇 Freestyle project,點擊確定
按鈕,進入項目配置界面。
General(常規)
在“描述”中添加必要的描述信息
源碼管理
選擇Git,並在“Repositories”(倉儲)中指定“Repository URL”(倉儲地址)如:https://github.com/earen/TestPro.git
和“Credentials”(憑證);
在“Branches to build”(要進行構建的分支)項中的“指定分支(為空時代表any)”中輸入分支名稱,如 dev
;
在“源碼庫瀏覽器” 選擇(自動)
;
構建
選擇增加構建步驟
下的 PowerShell
在“PowerShell > Command”中輸入如下命令
#invoke-webrequest -Uri 'https://oapi.dingtalk.com/robot/send?access_token=口令' -Body '{"msgtype": "text","text": {"content": "CeoDP is buiding..." }}' -ContentType 'application/json' -Method Post
C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"TestPro"
cd src\TestProWebApi\TestPro.Web.Host
dotnet restore
dotnet build
#SET ASPNETCORE_ENVIRONMENT=development
Remove-Item C:\wwwroot\TestProPublish -Recurse -Force -Confirm:$false
New-Item C:\wwwroot\TestProPublish -type directory
dotnet publish TestPro.Web.Host.csproj -o C:\wwwroot\TestProPublish
cd C:\wwwroot\TestProPublish
copy TestPro.* F:/wwwroot/1800/dev
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"TestPro"
#invoke-webrequest -Uri 'https://oapi.dingtalk.com/robot/send?access_token=口令' -Body '{"msgtype": "text","text": {"content": "TestPro is updated! check: http://localhost:8101/" }}' -ContentType 'application/json' -Method Post
勾選下方的“Use PowerShell profile”
命令說明:
- “#invoke-webrequest” 開頭的消息是為了推送釘釘群消息
- “C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"TestPro"” 停止應用程序池 TestPro
- “cd TestProWebApi\TestPro.Web.Host” 進入目錄 TestWebApi\TestPro.Web.Host
- “dotnet restore ” 還原項目包文件
- “dotnet build” 編譯項目
- “#SET ASPNETCORE_ENVIRONMENT=development” 設置運行環境為開發環境
- “Remove-Item C:\wwwroot\TestProPublish -Recurse -Force -Confirm:$false” 去掉項
C:\wwwroot\TestProPublish
- “New-Item C:\wwwroot\TestProPublish -type directory” 添加項
C:\wwwroot\GeoDpPublish
- “dotnet publish TestPro.Web.Host.csproj -o C:\wwwroot\TestProPublish” 發布項目到目錄
C:\wwwroot\TestProPublish
- “cd C:\wwwroot\TestProPublish” 進入目錄
C:\wwwroot\TestProPublish
- “copy TestPro.* F:/wwwroot/1800/dev” 復制文件名以
TestPro.
開頭的文件到目錄F:/wwwroot/1800/dev
中; - “C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"TestPro"” 啟動應用程序池
TestPro
發布項目
進入 Jenkins 管理界面, 找到要發布更新項目,點擊項目名稱,進入下面界面,按照標記所示,點擊Build Now
按鈕,開始構建項目
左下角為構建歷史(歷史發布),點擊可以查看歷史明細,如下圖
Changes 中列舉的內容為 Git 代碼提交日志內容