持續集成:java
持續集成是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,經過每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘早地發現集成錯誤。服務器
1、引入持續集成測試:分佈式
當前軟件開發過程存在的問題工具
在沒有應用持續集成以前,傳統的開發模式是這樣的:單元測試
項目一開始是先劃分好模塊,分配模塊給相應的開發人員;測試
開發人員開發好一個模塊就進行單元測試;優化
等全部的模塊都開發完成以後,由項目經理對全部代碼進行集成;spa
集成後的項目由項目經理部署到測試服務器上,被交由測試人員進行集成測試;代理
測試過程當中出現 Bug 就提把問題記錄進行 Bug 列表中;ci
項目經理分配 Bug 給相應的責任人進行修改;
修改完成後,項目經理再次對項目進行集成,並部署到測試服務器上;
測試人員在下一次的集成測試中進行迴歸測試;
經過經過以後就部署到生產環境中;
若是測試不經過,則重複上述「分配 Bug -> 修改 Bug -> 集成代碼 -> 部署到測試服務器上 -> 集成測試」工做。
這個過程當中可能會出現以下問題:
1. Bug 老是在最後才發現
隨着軟件技術的發展,軟件規模也在擴大,軟件需求愈來愈複雜,軟件已經不能簡單地經過劃分模塊的方式來開發,每每須要在項目內部互相合做,模塊之間存在必定的依賴關係,那麼早期就存在的 Bug 每每會在最後集成的時候才被發現。
2. 越到項目後期,問題越難解決
不少開發者須要在集成階段花費大量的時間來尋找 Bug 的根源,加上軟件的複雜性,問題的根源很難定位。並且咱們都清楚,間隔的時間越久,Bug 修復的成本越高,由於連開發人員本身都忘了當初寫得是什麼鬼代碼,從而不得不從頭閱讀代碼、理解代碼。
3. 軟件交付時機沒法保障
正是由於咱們沒法及時修復 Bug,或者是沒能在早期就修復 Bug,從而令整個修復 Bug 的週期拉長了。無論怎麼樣,咱們不可能把明知存在 Bug 的軟件交付給客戶。
並且,大量沒有在前期預估到的工做量產生了——開發人員不得不花費大把時間在查找 Bug 上;測試人員不斷的須要進行迴歸測試;項目經理不得不疲命於該死的代碼的集成、部署這些重複性工做——最終致使整個項目的週期拉長,交付時間點日後拖。
4. 程序常常須要變動
某些項目,程序會常常須要變動,特別是敏捷開發的實踐者。因爲產品經理在與客戶交流過程當中,每每實際的軟件就是最好的原型,因此軟件會被看成原型做爲跟客戶交流的工具。固然,客戶最但願的固然是客戶的想法可以立刻反映到原型上,這會致使程序會常常被修改的。那麼也就意味着「分配 Bug -> 修改 Bug -> 集成代碼 -> 部署到測試服務器上 -> 集成測試」工做無形又爆增了。
5. 無效的等待變多
有可能開發在等集成其餘人的模塊;測試人員在等待開發人員修復 Bug;產品經理在等待新版本上線好給客戶作演示;項目經理在等待其餘人提交代碼。無論怎麼樣,等待意味低效。
6. 用戶的知足度低
這裏的用戶是廣義的,能夠指最終的客戶,也能夠是產品經理、公司領導、測試人員,甚至多是開發人員本身。你想一想看,原本三個月作完的項目被拉長到了九個月甚至一年,用戶能滿意嗎!產品經理、公司領導常常須要拿項目做爲演示的原型,結果告訴我在演示前一刻發現還有不少 Bug 沒有解決,項目啓動不了沒法訪問,這叫人情何以堪。
持續集成、持續集成服務器的概念
那麼好了,在上面論述的這些問題中,咱們發現有些工做是沒法避免的,好比測試工做、修改程序、集成工做、部署工做。但其實在整個工做流程上,是存在能夠優化的空間的,好比,集成測試的工做是否能夠提早作?能否有自動化的手段來代替測試、集成、部署工做?圍繞這些,軟件行業的大師們提出「持續集成」口號。
通常就是按照本身項目的實際須要來設置必定的頻率,少則可能幾回,多則可能達幾十次。能夠設置按照代碼的變動來觸發集成,或者設置一個固定時間週期來集成,也能夠手工點擊集成的按鈕來「一鍵集成」。
持續集成的優勢
1.統一的代碼庫
2.自動構建
3.自動測試
4.每一個人天天都要向代碼庫主幹提交代碼
5.每次代碼遞交後都會在持續集成服務器上觸發一次構建
6.保證快速構建
7.模擬生產環境的自動測試
8.每一個人均可以很容易的獲取最新可執行的應用程序
9.每一個人都清楚正在發生的情況
10.自動化的部署
用什麼來實現集成?
Jenkins是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。
什麼是jenkins?
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能
jenkins的功能?
一、軟件的持續構建和測試
二、監視job的執行
三、項目源代碼修改的檢測
四、分佈式構建
節點配置:(代理服務器)
jenkins安裝在一臺機器,全部的jobs都在這臺機器上運行,若是超過太多jobs去運行,
會造成等待,節點存在就是解決這個問題提升效率,安裝jenkins的機器稱爲master機,
而其它機器就屬於master的分支,成爲slave;而要利用其它機器用執行jenkins的jobs,則須要一些配置,造成兩臺機器互通,固然下面的例子你用本機當作slave也是能夠的。
節點能夠理解爲一個代理,一臺服務器。Jenkins是一個ci(持續集成)平臺,每一個代理
服務器要與jenkins進行集成,須要執行java -jar ,後面是代理服務器Ip地址,經過這條
命令,執行成功說明代理已集成在ci平臺
觸發器是用於控制自動化測試執行時間的
日程表裏有5個數字,分別表明
格式:H /* * * * (要空)
第一個*:分鐘:0-59
第二個*:小時:0-23
第三個*:日:1-31
第四個*:月:1-12
第五個*:周:0-7 0和7都表明星期天
* 指定全部有效的值
M-N 指定一個值的範圍
例如:
# 每隔15分鐘。(或許:07, :22, :37, :52)
H/15 * * * *
# 每前半小時中每隔10分鐘。 (3次, 或許:04, :14, :24)
H(0-29)/10 * * * *
# 每一個工做日從早上9點45分開始到下午3點45分結束這段時間內每間隔2小時的45分鐘那一刻。
45 9-16/2 * * 1-5
#每一個工做日從早上9點到下午5點這段時間內每間隔2小時之間的某刻。(或許在上午10:38, 下午12:38, 下午2:38 , 下午4:38)
H H(9-16)/2 * * 1-5