Jenkins在龍芯JVM測試中的實踐
http://www.loongson.cn/news/company/691.html
1Jenkins簡介
Jenkins是一個開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。
主要用於:
- 持續、自動地構建/測試軟體專案。
- 監控一些定時執行的任務。[1]
2背景
Jenkins是龍芯在進行JVM測試時用到的重要工具,在龍芯OpenJDK的研發過程中,會使用Jenkins對相關原始碼進行週期性的自動編譯構建和規模化測試,以驗證研發效果和發現產品中的問題。除此之外,還會對社群的程式碼以及相關第三方庫進行週期性的自動構建和自動測試,以監測這些軟體的最新程式碼在龍芯平臺上的正確性。
在早期,龍芯JVM的Jenkins測試服務是部署在x86伺服器上的,隨著龍芯OpenJDK以及相關軟硬體產品的多次迭代和不斷完善,龍芯平臺已逐漸成熟,龍芯JVM組作為龍芯OpenJDK的第一使用者,有必要將自己的產品運用到實踐中,及時發現問題。因此,今年下半年龍芯JVM組將整個Jenkins自動測試系統從x86平臺遷移至龍芯平臺,以檢驗龍芯平臺在Jenkins這個實際應用中能否經受得起考驗。
3向龍芯平臺遷移Jenkins
表1 遷移前後的伺服器對比
CPU | OS | JDK | |
x86平臺 | Intel(R) Xeon(R) CPU E5506 | CentOS 6.10 | OpenJDK 8u181 |
龍芯平臺 | 3B3000四路 | Loongnix 1.0 | 龍芯OpenJDK 8 |
由於Jenkins是一個Java程式,具有跨平臺的優點,因此向龍芯平臺遷移Jenkins簡單易行,不存在任何障礙,具體需要下面幾個步驟:
- 在龍芯平臺上準備環境。Jenkins的執行需要依賴JDK,在Loongnix系統上執行以下命令即可完成龍芯OpenJDK的安裝:
$ sudo yum install java-1.8.0-openjdk-devel
- 遷移Jenkins工作目錄。Jenkins的工作目錄一般位於$HOME/.jenkins,將遷移前x86上的$HOME/.jenkins目錄完整拷貝至龍芯伺服器上就完成了工作目錄的遷移。由於該Jenkins系統已在x86平臺上使用了一年以上,工作目錄包含了大量內容,總體積已達到幾百G,因此該步驟可能會需要一定的拷貝時間。
- 在龍芯平臺上啟動Jenkins。訪問Jenkins官網並下載最新版本Jenkins(jenkins.war檔案),或將x86平臺上的jenkins.war拷貝至龍芯平臺,輸入如下命令:
$ java -jar jenkins.war
就完成了Jenkins的啟動,啟動後Jenkins會自動去工作目錄尋找相關配置。
- 遷移完畢,訪問Jenkins服務。開啟瀏覽器在位址列上輸入localhost:8080即可。
4一個例項
接下來以一個龍芯OpenJDK 8的測試例項,介紹一下Jenkins在龍芯平臺上的應用。龍芯OpenJDK 8在Jenkins上的測試流程框架如圖1所示。
圖1 龍芯OpenJDK 8的Jenkins測試流程
圖2 部分龍芯OpenJDK 8測試專案
圖2中的任務列表包含了龍芯OpenJDK 8的主要測試,這些專案包含大量測試用例和測試引數,在測試時,這些測試用例會被部署至幾十臺龍芯節點上進行多引數、長時間的測試,實現大規模的功能、效能和穩定性測試。未來隨著機器規模的增加,測試規模也將進一步擴大。
接下來以測試流程中SPEC JVM98測試集為例說明一個具體測試專案在龍芯上的應用:
1 配置測試引數
- 配置SPEC JVM98的引數JVM98OPTIONS,例如:-s1 -M5 -m5 -t -a和-s100 -M200 -m50 -g -a
- 配置測試JVM的引數JVMOPTIONS,例如:-Xmixed、-Xcomp和-XX:+UseNUMA
- 配置測試JVM的版本BUILD_TYPE,例如:release和fastdebug
- 配置執行測試的機器節點,例如:mips64el、numa和3a3000
配置介面如圖3所示。
圖3 SPEC JVM98測試集的引數配置
2 執行測試。
該測試專案可以在上文介紹的週期性測試中被自動觸發,也可有針對性地進行手動觸發。不管通過哪種觸發方式,Jenkins會根據相應的引數配置將測試部署至各機器節點上,進行相應的測試並反饋測試結果。
3 檢視測試結果
為了能夠直觀、快速、方便地檢視所有測試結果,需進行相應的測試結果判定,使每項測試均能正確展示四種結果:測試PASSED、測試FAILED、未知錯誤和測試被終止ABORTED。
圖4 SPEC JVM98一次測試結果
4 產生測試報告
最終,“publish-and-report”專案會對所有測試專案的結果進行收集和彙總,生成測試報告,反饋給相關人員並做存檔。
5 Jenkins執行現狀
Jenkins遷移至龍芯平臺已穩定執行數月,從未出現宕機、JDK崩潰和異常等現象。
截至撰稿之日,該Jenkins系統共包含173個專案,136個外掛。用於Jenkins測試的機器節點包括數十臺龍芯伺服器和數十臺龍芯主機,還包含Docker等環境。測試機器節點的作業系統則包含Loongnix、中標、Debian、CentOS等。整套Jenkins系統可無縫遷移至龍芯平臺,遷移過程中未出現任何問題。
在過去三個半月,該Jenkins系統共進行了2158次任務的構建,共進行配置1377次。近一年的Jenkins伺服器節點和所有節點的日均構建資料圖如下所示。
圖5 過去90天Jenkins伺服器節點日均任務數量
圖6 過去90天所有節點日均任務數量
圖7 過去一年所有節點日均任務數量
由上圖可見,測試任務的數量成逐漸上漲的趨勢,尤其是較一年前相比,測試任務數量有了顯著的提高。這是由於龍芯JVM測試的不斷改進以及不斷增加測試強度所致。另一方面,在測試壓力相比遷移之前有明顯增長的情況下,執行在龍芯平臺上的Jenkins仍能提供穩定高效的服務,保障產品研發和測試的有效進行。
6結語
隨著整個龍芯平臺軟硬體環境的不斷完善,在龍芯平臺上部署生產環境已經成為可能,龍芯公司已經開展將相關服務向龍芯平臺遷移的程序[2]。Jenkins作為其中一個例子,遷移至龍芯平臺後,在測試任務量相比遷移之前有明顯增長的情況下,仍能保持穩定高效執行,可以滿足龍芯JVM產品可持續、自動化的構建和規模化的測試,也為龍芯不斷完善自己的產品提供了保障。
- https://baike.baidu.com/item/Jenkins/10917210?fr=aladdin
- http://www.loongnix.org/index.php/%E8%87%AA%E4%B8%BB%E5%8F%AF%E9%9D%A0%EF%BC%8C%E9%BE%99%E8%8A%AF%E5%BC%80%E6%BA%90%E7%A4%BE%E5%8C%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%81%E7%A7%BB%E4%B8%80%E8%A7%88