一:什么是Jeckins?
Jenkins是一個可擴展的持續集成引擎。
持續集成,就是通常所說的CI(Continues Integration),可以說是現代軟件技術開發的基礎。
持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員至少集成一次,也意味著每天可能會發生多次集成。
每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡快地發現集成錯誤。許多團隊發現這個過程可以大大減少集成的問題,讓團隊能夠更快的開發內聚的軟件。
Jenkins作用:
1、持續、自動地構建、測試軟件項目。
2、監控一些定時執行的任務。
Jenkins的目的:
Jenkins 主要是監控軟件開發流程,快速顯示問題。所以能保證開發人員以及相關人員省時省力提高開發效率。
CI系統在整個開發過程中的主要作用是控制:當系統在代碼存儲庫中探測到修改時,它將運行構建的任務委托給構建過程本身。如果構建失敗了,那么CI系統將通知相關人員,然后繼續監視存儲庫。它的角色看起來是被動的;但它確能快速反映問題
二:Jenkins架構
在上面這個分布式的構建環境中,Jenkins master主要負責如下:
接收構建觸發(比如,一個提交到GitHub后)
發送通知(比如,在構建失敗后,發送email或者HipChat消息)
處理HTTP請求(和客戶端進行交互)
管理構建環境(在slave編排工作執行)
由于master和slave負責不相同的,所以他們請求不同的環境。
Master: 往往是專用的主機,項目從小到大需要內存200 MB--- 70 GB.
Slave: 沒有特別的要求,它應該能夠執行單一的構建。比如:這個項目比較大的話,請求100GB的內存,那么該slave主機應該滿足項目的要求。
三:Jenkins的安裝和部署
jenkins官網下載地址:https://jenkins.io/download/ 目前版本:2.277.4
jenkins項目有兩條發布線,分別是LTS長期支持版(或穩定版)和每周更新版(最新版)。建議選擇LTS長期支持版,下載通用java項目war包。
下載jdk1.8以上版本并安裝,安裝后配置jdk的環境變量。
在dos命令行運行命令解壓war包:java -jar jenkins.war (默認情況下端口是8080.如果要使用其他端口啟動,可以通過命令行”java –jar Jenkins.war --httpPort=80”的方式修改)
運行命令后jenkins.war會自動在C盤目錄下生成一個jenkins的文件夾。C盤下的這個文件夾可獨立運行。
在瀏覽器中訪問jenkins項目:http://localhost:8080/jenkins 出現解鎖 Jenkins界面,說明jenkins項目搭建完成,這里需要輸入管理員密碼。
管理員密碼在:C:\jenkins\secrets\initialAdminPassword 打開此文件獲得密碼并輸入密碼,點擊”繼續”
點擊:【選擇插件來安裝】按鈕,出現如下默認插件安裝界面。
這個頁面會默認選中安裝一些插件,直接點擊”安裝”按鈕,安裝所有推薦的插件。
等待所有插件安裝完成(耐心等待1-2個小時)。安裝插件的時候,會有一些插件安裝失敗(如上圖的X),這些插件的安裝是有前置條件的,等安裝結束后,按右下角“重試”,繼續安裝,之前失敗的插件就都能安裝了。安裝完成后,點擊“繼續”按鈕,
輸入用戶名:admin,密碼:123456.確認密碼:123456.全名:admin,電子郵件地址后點“保存并完成”按鈕
點擊“保存并完成”出現下圖表示jenkins已經配置完成。點擊[開始使用jenkins]登錄。
四:jenkins持續集成
1:全局配置
成功初始化后接下來需要做一些相應的全局的工具配置,點擊首頁左邊菜單的Manage Jenkins,然后再點擊Global Tool Configuration選項。
在以下的頁面中設置好Maven、JDK、Git的相關配置信息。需要注意的是,在JDK配置中取消勾選Install automatically,也就是不自動下載jdk,而是手動指定JAVA_HOME的路徑。
在下面Maven安裝的選項中指定Maven的安裝路徑
2. 創建任務
點擊首頁的新建Item或者創建一個新任務。
在跳轉的頁面中輸入任務名稱(這里創建一個helloworld任務用于演示)。然后選擇自由風格的的任務,最后點解確定按鈕。
3. 配置任務
在創建好任務之后,會來到任務的配置頁面,下面將演示如何對任務進行一些常規的配置。
General配置
描述:填寫構建的描述信息。
Discard old builds:勾選,表示丟棄就的構建,并填寫丟棄策略的保持構建天數和保持構建的最大個數。
GitHub項目:勾選,填寫github的項目地址。
源碼管理
源碼管理可選擇git或svn。由于案例是托管在github上,因此這里選擇Git,需要注意的是,如果使用ssh加密通信,需要在本地使用ssh-keygen生成秘鑰對,然后將私鑰配置到jenkins,把公鑰配置到github上。
點擊添加按鈕
在彈出的子窗口中,類型選擇SSH Username with private key,然后填寫Username(隨意),勾選Enter directly,在Key的文本域中加入私有key的秘鑰串,然后點擊最下面的添加。
構建環境
構建環境中勾選Delete workspace before build starts(開始構建之前刪除工作空間)
構建
在構建這一項中選擇構建步驟,由于案例是一個Maven項目,因此這里選擇使用Maven來進行構建。點擊添加構建步驟,在下拉菜單中選擇Invoke top-level Maven targets。
然后選擇maven版本,目標出填寫Maven聲明周期命令,這里設置為執行清理后進行打包,并忽略單元測試。
自動部署
前面的配置已經基本完成了項目的自動構建,通常在構建完之后需要將項目進行部署,那么同樣可以讓Jenkins來完成項目的自動部署。在自動部署的時候,應先停止原有的應用進程然后重新啟動,這些操作可以使用shell腳本來完成。
在構建的選項中再次點擊增加構建步驟,選擇Execute shell
在命令中添加sheel腳本
# #!/bin/bash表示使用系統的bash
#!/bin/bash
echo"Restart SpringBootApplication..."
# 獲取demo.jar的后臺進程id,并賦值給變量pid
# ps用于顯示進程信息的命令,-ef參數表示顯示所有進程和全部格式
# “|”是一個管道符號,表示ps和grep命令同時執行
# grep是linux的一個文本搜索工具
# grep demo.jar表示查找內容包含demo.jar的進程信息
# grep -v grep表示反向查找,查找不包含grep的內容的進程信息(也就是進行一次過濾)
# awk是一個強大的文本分析工具,分析并生成報告。'{print $2}'表示打印出第二個字段
pid=`ps -ef | grep demo.jar | grep -v grep | awk '{print $2}'`
# 如果pid不為“”,則kill掉該進程
if[-n"$pid"]
then
kill-9$pid
fi
# Jenkins默認會在Build結束后Kill掉所有的衍生進程,
# BUILD_ID=DONTKILLME就是防止jenkins殺掉衍生的子進程
BUILD_ID=DONTKILLME
# 后臺啟動demo.jar,2>&1表示將標準出錯也輸出到springboot.log文件中,最后一個&表示該命令在后臺執行
nohup java-jar/root/.jenkins/workspace/helloworld/target/demo.jar > /root/springboot.log2>&1 &
最后點擊應用并保存,此時任務的配置就基本完成。
4. 執行任務
回到首頁,在任務列表中可以看到剛配置好的任務,點擊任務名稱旁邊的下拉箭頭,選擇Build Now開始執行任務。
此時在左下角的構建執行狀態中會有一個helloworld任務執行的進度條。
旁邊的#1表示第幾次構建,如果執行完后再次點擊Build Now,那么又會產生一條新的構建記錄為#2.可以點擊#1進去查控制臺輸出任務執行日志。
最后,當任務正確執行完后,我們就可以正常訪問項目。以后每當我們有新的版本提交到github,那么只需要在任務列表中點擊Build Now來執行構建任務。那么jenkins會自動從github上拉取最新的版本,接著使用Maven將項目進行編譯打包等操作,然后通過shell腳本自動部署項目。
更多關于軟件測試培訓的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。