1、jenkins介紹html
1.一、持續集成(Continuous integration,簡稱 CI)
開發中,咱們常常遇到一些奇怪問題,好比:java
- 本地能夠編譯成功的代碼可是同事們更新代碼後編譯出錯;
- 在項目有多個Target(目標)的時候,資源文件只添加到了當前的Target,另一個Target這個時候是不能正常編譯的;
- 寫的工具類,被同事改了,或者本身有改動,不少地方用到了,怎麼保證這個類的行爲沒有發生變化而影響到項目中的其它模塊呢?
- 諸如此類。
引發各類奇怪問題的緣由有不少,好比:node
- 開發環境比較複雜不乾淨;
- IDE的bug;
- 提交前有一些必要的檢查須要作,可是開發時由於各類緣由沒作。
那麼這些問題能否避免呢?固然是能夠避免的,若是代碼有新的改動,提交到版本庫中的時候,有一我的幫咱們檢查必要事項,而後作作測試。這個固然是能夠的,前提是老闆贊成專門招一個這樣的人。web
這些機械重複的事情咱們能夠找一個工具來幫咱們完成,這個工具跑在一個專門的服務器上,該服務器環境相對乾淨、能夠運行一些自動化操做(自動編譯,代碼檢查,測試等環節)。那麼這種工具,就是接下來說的「持續集成」。shell
1.二、簡單理解持續集成apache
爲解決程序代碼提交質量低,提交內容致使原有系統的bug,按時或按需自動編譯版本,自動進行自動化測試。瀏覽器
1.三、詳細理解持續集成tomcat
早集成、頻繁的集成可以幫助項目開發者在早期發現項目風險和質量問題,越到後期發現的問題,解決的成本越高,從而有可能致使項目延期或者項目失敗。服務器
持續集成是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,經過每一個成員天天至少集成一次,也就是一個團隊天天將集成屢次,每次的集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證。簡單來講,就是持續的定時的在多個團隊成員的工做中進行集成,而且給予反饋。網絡
1.四、持續集成的核心價值
- 持續集成中重複的編譯發佈等環節都是自動完成的,無需太多的人工干預,有利於減小重複過程以節省時間、費用和工做量;
- 持續集成保障了每一個時間點上團隊成員提交的代碼是能成功集成的。換言之,任什麼時候間點都能第一時間發現軟件的集成問題,使任意時間發佈可部署的軟件成爲了可能;
- 持續集成還能利於軟件自己的發展趨勢,這點在需求不明確或是頻繁性變動的情景中尤爲重要,持續集成的質量能幫助團隊進行有效決策,同時創建團隊對開發產品的信心。
1.五、業界廣泛認同的持續集成的原則
- 須要版本控制軟件保障團隊成員提交的代碼不會致使集成失敗。經常使用的版本控制軟件有IBM Rational ClearCase、CVS、Subversion 等;
- 開發人員必須及時向版本控制庫中提交代碼,也必須常常性地從版本控制庫中更新代碼到本地;
- 須要有專門的集成服務器來執行集成構建。根據項目的具體實際,集成構建能夠被軟件的修改來直接觸發,也能夠定時啓動,如每半個小時構建一次;
- 必須保證構建的成功。若是構建失敗,修復構建過程當中的錯誤是優先級最高的工做。一旦修復,須要手動啓動一次構建;
- 不更新構建失敗的代碼。
1.六、持續集成系統的組成
- 一個自動構建過程,包括自動編譯、分發、部署和測試等。可幫助咱們節省大量時間,完成這個過程的自動化後,在之後的開發過程當中,咱們須要作的,就是隻是提交代碼到版本庫中,構建自動完成,基本再也不須要人工干預。
- 一個代碼存儲庫,即須要版本控制軟件來保障代碼的可維護性,同時做爲構建過程的素材庫。
- 一個持續集成服務器。最好有一臺服務器單獨做爲持續集成服務器,一方面保證了環境的純淨,一方面不影響開發,並且持續集成服務器通常是隨時準備開始構建的,因此通常也不關機。本文中介紹的 Jenkins 就是一個配置簡單和使用方便的持續集成服務器。
1.七、集成操做步驟:首先要有統一的代碼庫,服務器不斷從版本控制服務器上檢查代碼狀態,看代碼是否有更新。若是發現有代碼更新,那麼就從版本控制服務器下載最新的代碼。等代碼徹底更新之後,調用自動化編譯腳本,進行代碼編譯。而後運行全部的自動化測試,而且進行代碼分析。若是其中任何一個步驟失敗,就表示build失敗,持續集成服務器會給予響應的反饋。每次代碼提交以後,都會在持續集成服務器上觸發一個定時構建,而後進行編譯、部署。
1.八、Jenkins
提到 Jenkins 就不得不提另外一個持續集成工具——Hudson , Hudson 由 Sun 公司開發,2010 年 Sun 公司被 Oracle 公司收購, oracle 公司聲稱對 hudson 擁有商標全部權。 Jenkins是從 Hudson 中分離出來的一個可擴展的持續集成引擎,並將繼續走 Open Source 的道路。兩者如今由不一樣的團隊在維護。[2]
Jenkins 在持續集成領域市場份額中居於主導地位,被各類大小規模的團隊用於用各類語言實現的各種項目中,語言包括.NET、Java、Ruby、Groovy、Grails、PHP 等。[5]
Jenkins是一個獨立的基於Java開發的一種開源持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能,使開發者從繁雜的集成中解脫出來,專一於更爲重要的業務邏輯實現上。可用於自動化各類任務,如構建、測試和部署軟件。[4]
Jenkins能夠創建一個軟件項目或工做運行的計劃任務。 [2]
1.九、Jenkins特色[4]
- 開源免費。
- 跨平臺,支持全部的平臺。
- 安裝配置超級簡單。能夠經過本機系統包Docker安裝,甚至能夠經過安裝Java Runtime Environment的任何機器獨立運行。[4]
- 易於使用。web形式的可視化的用戶管理頁面,簡單、直觀、友好,發佈工做人員只須要經過簡單的 UI 操做就能夠替代原來繁瑣的發佈工做。[5]
- master/slave支持分佈式的build。
- tips及時快速的幫助。
- 擁有良好的擴展性。已有的200多個開源插件可供使用,並且幾乎每週會有新的開源插件貢獻進來,這些插件的安裝都十分快捷和簡單。[5]
- 發展良好。Jenkins 開源社區的規模變得愈來愈大、活躍度也變得愈來愈高,發展速度很是快。[5]
1.十、Jenkins 的兩個功能
- 不斷地進行項目的構建/測試軟件。
- 監控外部運行的做業: 如計劃任務做業和 Qrocmail 的工做,即便是那些在遠程機器上運行的計劃任務。 Jenkins 生成這些日誌而且很容易讓你注意到錯誤的出現。實施監控集成中存在的錯誤,提供詳細的日誌文件和提醒功能,還能用圖表的形式形象地展現項目構建的趨勢和穩定性。[1]
1.十一、jenkins的工做步驟
典型的工做流包括如下幾個步驟:[7]
- 開發
- 提交
- 編譯
- 測試
- 發佈
有了Jenkins的幫助,除了第1步,後續的4步都是自動化完成的。具體的,當你完成了提交,Jenkins會自動運行你的編譯腳本,編譯成功後,再運行你的測試腳本,這一步成功後,接着它會幫你把新程序發佈出去,特別的,在最後一步,你能夠選擇手動發佈,或自動發佈,畢竟發佈這件事情,仍是須要人爲的確認一下比較好。
2、安裝[8]
在CentOS系統下用rpm包安裝方式進行啓動。
2.1 安裝準備
軟件 |
版本 |
說明 |
JDK |
1.7.0_76 |
解壓安裝,注意設置好環境變量 |
ant |
1.9.9 |
JDK1.7.x只能安裝1.9.x系列ant |
Jenkins |
2.33 |
JDK1.7.x只能安裝Jenkins2.3.x系列Jenkins |
2.2 安裝ant
ant是基於java的一款構建工具,經過配置build.xml,讓項目能夠進行編譯、部署、打包。由於咱們要實現自動構建,因此首先要安裝ant。
- wget http://www-eu.apache.org/dist/ant/binaries/apache-ant-1.10.3-bin.tar.gz ==>從http://ant.apache.org 上下載tar.gz版ant
- tar -zxvf apache-ant-1.10.3-bin.tar.gz ==>解壓tar包
- su - ==>切換爲root賬號
- cp -r /home/`whoami`/apache-ant-1.10.3 /usr/share ==>移動到/usr/share下
- cd /usr/share ==>切換到/usr/share目錄下,重命名
- mv apache-ant-1.10.3 ant
- ANT_HOME=/usr/share/ant ==>配置環境變量
- PATH="$PATH":"$ANT_HOME"/bin
- ant -version ==》測試ant是否生效
出現以下提示便表示安裝成功。
2.3 卸載及安裝jenkins
2.3.1 卸載原來安裝的rpm包
首先查看是否已經安裝過jenkins
原先如今2.5版本以上,版本過高,啓動報「java.lang.UnsupportedClassVersionError」錯,因此要卸載以前安裝的jenkins-2.54-1.1.noarch,使用以下命令
# 卸載原先高版本的jenkins
rpm -e nodeps jenkins-2.54-1.1.noarch
2.3.2 安裝jenkins
# 下載jenkins-2.33-1.1.noarch.rpm
wget http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm
#安裝jenkins-2.33-1.1.noarch.rpm
sudo rpm -ih jenkins-2.33-1.1.noarch.rpm
出現以下圖
表示安裝成功,安裝成功會自動生成下面文件:
/usr/lib/jenkins/jenkins.war #WAR包
/etc/sysconfig/jenkins #配置文件
/var/lib/jenkins/ #默認的JENKINS_HOME目錄
/var/log/jenkins/jenkins.log #Jenkins日誌文件
2.4 啓動
啓動用以下命令:
sudo service jenkins start
報了以下錯誤:
會報這個錯誤,這是因爲沒有配置java環境,有兩種方法能夠解決:
2.4.1 安裝jdk環境
先檢查一下java虛擬機有沒有安裝,若是沒有就安裝
2.4.2 在jenkins配置文件中配置
須要「vi /etc/init.d/jenkins」,把jdk路徑加上,以下:
# Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.
# see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/home/lutong/soft/jdk1.7.0_76/bin/java "
for candidate in $candidates
do
[ -x "$JENKINS_JAVA_CMD" ] && break
JENKINS_JAVA_CMD="$candidate"
done
JAVA_CMD="$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR"
PARAMS="--logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon"
上述配置文件中紅色加粗字體的內容是我配置本身的jdk路徑。因爲個人系統中的java是本身解壓安裝的,因此我採用了第二種方式再次啓動jenkins:
3、默認配置修改及初始化
3.1 修改配置文件
上面咱們有提到配置文件是/etc/sysconfig/jenkins,修改以下兩項配置(根據實際須要設置)
#修改成18080,默認是8080
JENKINS_PORT="18080"
#內存設置,我這裏設置成以下配置
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=1024m"
3.2 初始化
- 在瀏覽器中輸入http://localhost:8090(默認是使用8080端口)
打開jenkins的後臺控制頁面
初始化成功後會自動生成一個管理員密碼放到指定位置,根據頁面提示覆制密碼粘貼到輸入框就能夠登陸了
3.3 初始化安裝插件
4、創建 Jenkins 自動化持續集成項目
4.1 安裝插件
4.1.1 經常使用插件
- FindBugs Plug-in: 是一個靜態分析工具,它檢查類或者 JAR 文件,將字節碼與一組缺陷模式進行對 比以發現可能的問題。
- Checkstyle Plug-in:是一個靜態分析工具,檢查Java程序代碼。
- Deploy to container Plugin:用於構建項目後,自動發佈war包從新部署的插件
- SSH Plugin:這個插件使用 SSH 協議執行遠程 shell 命令。
- Multijob Plugin:這個插件是一個將多個項目鏈接在一塊兒的插件。
4.1.2 安裝步驟
下面以安裝Checkstyle插件爲例進行說明:在左上角「系統管理」中往下拉,找到「管理插件」點擊進去就能夠查看和管理全部的插件,點擊「可選插件」顯示全部jenkins支持的插件,在右上角的「過濾」輸入框中,輸入須要安裝的插件名就能夠篩選查找到想要的插件
而後切換到「可選插件」,在右上角「過濾」框中輸入checkstyle,查詢結果以下
而後,點擊「直接安裝」按鈕,其餘插件也是這樣的安裝方式!
Jenkins啓動 [6]
首先保證系統中已經安裝了jdk,最好是jdk1.5以上。
第一種啓動方法:
- 切換到jenkins.jar存放的目錄,輸入以下命令:
- $ java -jar jenkins.war
- 若是須要修改端口可使用以下命令:
- $ java -jar jenkins.war--httpPort=8081
- 而後在瀏覽器中(推薦用火狐)輸入localhost:8080,localhost能夠是本機的ip,也能夠是計算機名。就能夠打開jenkins。
第二種方法是用tomcat打開
- 解壓tomcat到某個目錄,如/usr/local,進入tomcat下的/bin目錄,啓動tomcat
- 將jenkins.war文件放入tomcat下的webapps目錄下,啓動tomcat時,會自動在webapps目錄下創建jenkins目錄,在地址欄上須要輸入localhost:8080/jenkins。
Jenkins 的安裝很是簡單,只須要從 Jenkins 的主頁上下載最新的 jenkins.war 文件而後運行java -jar jenkins.war。同時,還能夠點擊 Jenkins 頁面上的 launch 按鈕完成下載和運行 Jenkins。[1]
參考文獻:
[1] 百度文庫 Jenkins簡介 https://wenku.baidu.com/view/c3d9c739f02d2af90242a8956bec0975f465a40e.html
[2] testclass.net網 http://www.testclass.net/jenkins/
[3] 紅黑聯盟 [jenkins工具]之一:持續集成和jenkins入門介紹 https://www.2cto.com/kf/201609/544550.html
[4] W3Cschool Jenkins https://www.w3cschool.cn/jenkins/
[5] 中小型研發團隊架構實踐:高效率、低風險,一鍵發佈並測試的持續集成工具Jenkins http://www.infoq.com/cn/articles/architecture-practice-11-jenkins
[6] 百度百科 https://baike.baidu.com/item/Jenkins/10917210?fr=aladdin
[7] 簡書 Jenkins使用簡易教程 https://www.jianshu.com/p/b524b151d35f
[8] 使用jenkins實現持續集成 https://www.cnblogs.com/zishengY/p/7170656.html