基于 CODING 的 Spring Boot 持續集成項目

本文作者:CODING 用戶 - 廖石榮

持續集成的概念

持續集成(Continuous integration,簡稱 CI)是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員每天至少集成一次,也就意味著每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。

持續集成的模式

如圖所示:

圖片

  1. CI 過程:代碼編寫 -> 源代碼庫(GitHub or gitlab)-> CI 服務器(代碼構建、自動化測試、結果反饋【構建結果】)
  2. 涉及 CI 工具:Jenkins、Travis CI、TeamCity、Gitlab CI、CircleCI、Codeship 等,相關資料可以查詢對應的官網,其中應用廣泛的 Jenkins 和 Travis CI,市場上也推出了智能化的持續集成服務商,比如「CODING 持續集成」,它是基于 Jenkins 配置集成服務,真正實現了一鍵提交代碼,持續集成,部署服務。

持續集成的優點

1.解放了重復性勞動。
自動化部署工作可以解放集成、測試、部署等重復性勞動,而機器集成的頻率明顯比手工高很多。
2.更快地修復問題。
持續集成更早的獲取變更,更早的進入測試,更早的發現問題,解決問題的成本顯著下降。
3.更快的交付成果。
更早發現錯誤減少解決錯誤所需的工作量。集成服務器在構建環節發現錯誤可以及時通知開發人員修復。集成服務器在部署環節發現錯誤可以回退到上一版本,服務器始終有一個可用的版本。
4.減少手工的錯誤。
在重復性動作上,人容易犯錯,而機器犯錯的幾率幾乎為零。
5.減少了等待時間。
縮短了從開發、集成、測試、部署各個環節的時間,從而也就縮短了中間可以出現的等待時機。持續集成,意味著開發、集成、測試、部署也得以持續。
6.更高的產品質量。
集成服務器往往提供代碼質量檢測等功能,對不規范或有錯誤的地方會進行標致,也可以設置郵件和短信等進行警告。

持續集成服務的選擇

關于網上集成服務的工具很多,其中尤其以 Jenkins 服務最受歡迎,但是 Jenkins 服務需要在自己服務器上進行配置安裝,以及安裝各種插件,對于剛上手的小白來說,可能存在一定的門檻,操作步驟繁多,操作不夠智能,不是真正的自動化運維,缺少一鍵發布構建服務。所以我們選擇了「CODING 持續集成」。

CODING 提供的集成服務是什么

「CODING 持續集成」是基于 Jenkins 的,兼容 Jenkinsfile 配置文件,如果您之前有使用過或者寫過 Jenkinsfile 相信您會很快上手。

如何使用CODING持續集成服務

「CODING 持續集成」是基于 Jenkins 的,通過 Jenkinsfile 配置文件完成 CI 的步驟,接下來將引導您一步步創建一個持續集成示例。

  • 登錄 CODING,進入項目中心,點擊左邊菜單集成服務,開通集成服務,配置完成之后會手動觸發第一次構建過程。

2.png

  • 找到或者創建 Jenkinsfile,如果你對于 Jenkins 比較熟悉的話,可以自己編寫?Jenkinsfile 配置文件,也可以采用 CODING 提供的模板文件,如下我就采用了 Jenkinsfile?模板文件來實行自動化持續集成服務,您可以在修改 Jenkinsfile 的時候修改觸發方式,您可以自行選擇是推送到某個標簽或者某個分支時間觸發構建。Jenkins 以及能夠為 agent 默認配置好 timezone 和 localtime (默認中國上海)。

3.png

  • 配置好?Jenkinsfile 文件以及配置好環境變量,點擊保存,便可以進行持續集成項目了。

如圖所示,集成步驟分為拉取代碼-》構建-》測試-》部署等步驟,點擊每個步驟可以看到相應的命令執行情況,下面來一個一個步驟配合 Jenkinsfile 文件解釋命令的一些執行情況:

代碼工程結構如圖所示:
image.png

1.檢出項目,如下所示?Jenkinsfile 配置文件第一步通過 Git 檢出在遠程倉庫分支的代碼,至于哪個分支可以通過環境變量配置讀取 REF 這個環境變量

stage("檢出") {steps {sh 'ci-init'checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]])}}

4.png
如上圖所示,第一步主要是執行從 Git 倉庫遠程拉取代碼,所以命令都是 Git 里面的,包括讀取?Git?配置的環境變量包括更新 Jenkinsfile 文件

2.構建項目,如下命令所示構建這一步主要是初始化代碼和打包代碼,因為我們這個工程是以 Java 為主要開發語言,所以重點關注 Java 版本和安裝 Maven 命令即可打包,目前 CODING 提供的語言環境包括了 java-1.8.0_181, go-1.7.4, node-10.11.0, php-7.0.30, ruby-2.3, python-2.7.13 等。如有需要可以聯系客服開通其它語言環境。

stage("構建") {steps {echo "構建中..."sh 'go version'sh 'node -v'sh 'java -version'// sh 'php -v'// sh 'python -V'// sh 'gcc -v'// sh 'make -v'// 請在這里放置您項目代碼的單元測試調用過程,例如:sh 'mvn clean' // mvn 清除緩存sh 'mvn install' // 構建 Maven 工程// sh 'make' // make 示例echo "構建完成."// archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物}}

因為這個 SpringBoot 項目是以 Java 為主的項目,所以在 Jenkinsfile 文件命令里面其實可以把其它語言的檢查版本命令去掉,只需要執行 java -version 命令即可。

第一次構建失敗:
image.png
如上圖所示,第一次執行執行構建 jar 包失敗,因為在本地可以正常 mvn install,所以起初我百思不得其解,上網找了很多資料,經過多番查找,最后在 Stack Overflow 找到了答案,這是由于?OpenJDK 1.8.0_181 這個版本中存在的一個 bug 所致,原文如下:鏈接最終解決方案采用更改 pom.xml 文件:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><useSystemClassLoader>false</useSystemClassLoader><skipTests>true</skipTests></configuration>
</plugin>

成功構建結果如下
image.png

3.測試項目,如下所示,我們 SpringBoot 工程通過 mvn test 測試命令即可,比如下面我們測試其中一個用戶信息相關的單元測試:

stage("測試") {steps {echo "單元測試中..."// 請在這里放置您項目代碼的單元測試調用過程,例如:sh 'mvn test -Dtest=com.my.cnblog.website.Pwdtest'  //測試其中一個單元測試echo "單元測試完成."}}

第一次失敗測試結果如下:
image.png
image.png

后來經檢查,是單元測試代碼其中存在 bug,修正之后,正確的第二次測試結果如下:
圖片

4.部署項目,如下所示,部署項目命令可以執行自己寫的部署腳本文件。各位可以結合自己項目的真實環境,編寫簡單的部署腳本,比如上傳 jar 包到服務器,然后通過 java - jar XXXX.jar 包執行方式,以及上傳 war 包到 tomcat 服務器,然后啟動 tomcat 服務器等,也可以結合自己公司項目需要編寫復雜的執行腳本文件,然后調用執行腳本命令,比如下面舉一個簡單的執行腳本例子。

部署命令:

stage("部署") {steps {echo "部署中..."sh './deploy.sh start' // 啟動 tomcat 服務// sh './deploy.sh stop' // 停止 tomcat 服務echo "部署完成"}}

deploy.sh 腳本:(其中一些 tomcat 服務路徑配置根據自己需要進行修改)

#!/bin/bash 
tomcat_home=/usr/tomcat/apache-tomcat-8.0.48  //修改為自己服務器的 tomcat 路徑
SHUTDOWN=$tomcat_home/bin/shutdown.sh 
STARTTOMCAT=$tomcat_home/bin/startup.sh 
case $1 in
start) 
echo "啟動$tomcat_home"
$STARTTOMCAT 
;; 
stop) 
echo "關閉$tomcat_home"
$SHUTDOWN 
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk '{print $2}'` 
kill -9 $pidlist 
#!/bin/bash 
tomcat_home=/usr/tomcat/apache-tomcat-8.0.48 
SHUTDOWN=$tomcat_home/bin/shutdown.sh 
STARTTOMCAT=$tomcat_home/bin/startup.sh 
case $1 in
start) 
echo "啟動$tomcat_home"
$STARTTOMCAT 
;; 
stop) 
echo "關閉$tomcat_home"
$SHUTDOWN 
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk '{print $2}'` 
kill -9 $pidlist 
stop) 
echo "關閉$tomcat_home"
$SHUTDOWN 
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk '{print $2}'` 
kill -9 $pidlist 
#刪除日志文件,如果你不先刪除可以不要下面一行 
rm $tomcat_home/logs/* -rf 
#刪除tomcat的臨時目錄 
rm $tomcat_home/work/* -rf 
;; 
restart) 
echo "關閉$tomcat_home"
$SHUTDOWN 
pidlist=`ps -ef |grep tomcat |grep -v "grep"|awk '{print $2}'` 
kill -9 $pidlist 
#刪除日志文件,如果你不先刪除可以不要下面一行 
rm $tomcat_home/logs/* -rf 
#刪除tomcat的臨時目錄 
rm $tomcat_home/work/* -rf 
sleep 5 
echo "啟動$tomcat_home"
$STARTTOMCAT 
#看啟動日志 
#tail -f $tomcat_home/logs/catalina.out 
;; 
logs) 
cd /mnt/alidata/apache-tomcat-7.0.68/logs
tail -f catalina.out 
;; 
esac 

服務啟動展示

系統主頁如下圖所示:
圖片

文章詳情如下圖所示:
圖片

歸檔頁面如下圖所示:
圖片

系統后臺管理如圖所示:
圖片

總結

CODING?是一個面向開發者的云端開發平臺,提供 Git/SVN 代碼托管、任務管理、在線 WebIDE、Cloud Studio、開發協作、文件管理、Wiki 管理、提供個人服務及企業服務,其中實現了 DevOps 流程全自動化,為企業提供軟件研發全流程管理工具,打通了從團隊構建、產品策劃、開發測試到部署上線的全過程。「CODING 持續集成」集成了 Jenkins 等主流企業開發流程工具,如上所示,這個以 SpringBoot 打造的 CMS 社區系統便可以在 CODING 上面實現團隊協作開發,一鍵部署作為團隊以及公司文檔共享社區論壇等作用。

本文適量引用:“持續集成”詞條的百度百科

轉載于:https://www.cnblogs.com/codingdevops/p/10399421.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536936.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

lvs mysql 端口_LVS配置及多端口服務配置

一、5、各主機IP地址&#xff1a;主機IP網關Client192.168.86.116RouterF0/0:192.168.x.xFo/1:192.168.xx.xxF0/1DirectorEth0:192.168.86.111/24(DIP)Eth0:1:192.168.86.254/32(VIP)F0/1Real 1Eth0:192.168.86.112/24(DIP)lo:1:192.168.86.254/32(VIP)F0/1Real 2Eth0:192.168.…

Mybatis組成部分

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

Stream流與Lambda表達式(一) 雜談

一、流 轉換為數組、集合 package com.java.design.java8.Stream;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;import java.util.A…

一年java工作經驗-面試總結

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

linux mysql python包_03_mysql-python模塊, linux環境下python2,python3的

---恢復內容開始---1、Python2 正常[rootIP ~]#pip install mysql-pythonDEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 wont be maintained after that date. A future version of pip will drop …

我的這套VuePress主題你熟悉吧

最近熬了很多個夜晚, 踩坑無數, 終于寫出了用VuePress驅動的主題. 只需體驗三分鐘&#xff0c;你就會跟我一樣&#xff0c;愛上這款主題. vuepress-theme-indigo-material, 已經發布到npm, 請客官享用~~ 介紹 vuepress-theme-indigo-material 的原主題是hexo-theme-indigo, git…

兩年Java工作經驗應該會些什么技術

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

centos 6 mysql 5.7.13 編譯安裝_Centos 6.5 下面 源碼編譯 安裝 Mysql 5.7.13

安裝軟件依賴包yum -y install gcc gcc-c ncurses ncurses-devel cmake下載軟件包cd /usr/local/srcwget https://downloads.mysql.com/archives/get/file/mysql-5.7.13.tar.gz --no-check-certificate下載 boost 庫&#xff0c;MySQL 5.7.5 開始Boost庫是必需的cd /usr/loca…

LeetCode 237. 刪除鏈表中的節點(Python3)

題目&#xff1a; 請編寫一個函數&#xff0c;使其可以刪除某個鏈表中給定的&#xff08;非末尾&#xff09;節點&#xff0c;你將只被給定要求被刪除的節點。 現有一個鏈表 -- head [4,5,1,9]&#xff0c;它可以表示為: 示例 1: 輸入: head [4,5,1,9], node 5 輸出: [4,1,9…

使用Uniapp隨手記錄知識點

使用uniapp隨手記錄知識點 1 組件內置組件擴展組件 2 vuex狀態管理使用流程mapState 輔助函數gettersMutation 1 組件 內置組件 內置組件內主要包含一些基礎的view button video scroll-view等內置基礎組件&#xff0c;滿足基礎場景 擴展組件 擴展組件是uniapp封裝了一些成…

一年Java經驗應該會些什么

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

mysql查詢各類課程的總學分_基于jsp+mysql的JSP學生選課信息管理系統

運行環境: 最好是java jdk 1.8&#xff0c;我們在這個平臺上運行的。其他版本理論上也可以。IDE環境&#xff1a; Eclipse,Myeclipse,IDEA都可以硬件環境&#xff1a; windows 7/8/10 2G內存以上(推薦4G&#xff0c;4G以上更好)可以實現&#xff1a; 學生&#xff0c;教師角色的…

80端口占用分析

SQL Server 2008 里面的組件——SQL Server Reporting Services (MSSQLSERVER)。是 SQL Server 的日志系統&#xff0c;就是他好端端的突然占用了80端口&#xff0c;而且對于普通人來講&#xff0c;這個組件的作用沒啥用&#xff0c;關掉也是節約資源。 關閉服務 ReportServer …

三年java經驗應該會什么?

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

python call agilent com_PyVISA通過RS232(USB)與安捷倫34970A通信時出現超時錯誤

這是我第一次嘗試使用Pyvisa&#xff0c;以便使用RS232連接(使用USB端口)與Agilent 34970A進行通信。在這就是發生在我身上的事情&#xff0c;插入基本的第一行&#xff1a;IN: import visaIN: rmvisa.ResourceManager()IN: print rm.list_resources()(uASRL4::INSTR,)IN: inst…

python加法運算符可以用來連接字符串并生成新字符串_中國大學MOOCPython語言入門網課答案...

中國大學MOOCPython語言入門網課答案表達式int(40.5)的值為____________。表達式160.5的值為____________________。python程序只能使用源代碼進行運行&#xff0c;不能打包成可執行文件。python語句list(range(1,10,3))執行結果為___________________。pip命令也支持擴展名為.…

全是滿滿的技術文檔

*************************************話不多說-先上教程 ********************************** 完整躺賺教程(不需任何技術,照做就能賺錢):點擊此處獲取 提取碼&#xff1a;6666 被動收入教程(需要一定的技術,會搭建服務器,會發布項目<教程里面會教你>):點擊此處獲取 提…

JavaScript面試的完美指南(開發者視角)

2019獨角獸企業重金招聘Python工程師標準>>> 摘要&#xff1a; 面試季手冊。 原文&#xff1a;javascript 面試的完美指南(開發者視角)作者&#xff1a;前端小智Fundebug經授權轉載&#xff0c;版權歸原作者所有。 為了說明 JS 面試的復雜性&#xff0c;首先&#x…

電腦上mysql數據庫無法登錄_無法遠程登入MySQL數據庫的幾種解決辦法MySQL綜合 -電腦資料...

方法一&#xff1a;嘗試用MySQL Adminstrator GUI Tool登入MySQL Server&#xff0c;Server卻回復錯誤訊息&#xff1a;Host 60-248-32-13.HINET-IP.hinet.net is not allowed to connect to thisMySQL server這個是因為權限的問題&#xff0c;處理方式如下&#xff1a;shell&g…

如何優化 App 的啟動耗時?

原文&#xff1a;iOS面試題大全 iOS 的 App 啟動主要分為以下步驟&#xff1a; 打開 App&#xff0c;系統內核進行初始化跳轉到 dyld 執行。這個過程包括這些步驟&#xff1a;1&#xff09;分配虛擬內存空間&#xff1b;2&#xff09;fork 進程&#xff1b;3&#xff09;加載 M…