摘要:關(guān)注的目標(biāo)就是在代碼提交之后,順利且迅速的把新的功能部署到產(chǎn)品環(huán)境上。由于是,那么單元測(cè)試,回歸測(cè)試,集成測(cè)試,都是實(shí)現(xiàn)的手段。高質(zhì)量的產(chǎn)品需求書和高質(zhì)量的自動(dòng)化集成測(cè)試用例毫無(wú)疑問(wèn),是高質(zhì)量軟件的保證之一。
什么是Test-Driven Development
Test-Driven Development 測(cè)試驅(qū)動(dòng)開發(fā),這個(gè)詞兒各位技術(shù)大大必定耳熟能詳,我作為一個(gè)曾經(jīng)的Develop, ops,現(xiàn)在的DevOps從業(yè)者,這次想來(lái)跟大家聊聊Test-Driven Development。測(cè)試驅(qū)動(dòng)開發(fā)傳統(tǒng)意義上就是先寫測(cè)試用例,再做代碼實(shí)現(xiàn),這樣就能明確代碼功能,減少開發(fā)無(wú)用功能的時(shí)間,很多好處,就不贅述了。
什么是Test-Driven Debug下面聊聊我想要說(shuō)的TDD。
DevOps這一位置是互聯(lián)網(wǎng)產(chǎn)品逐漸成熟之后,為了滿足互聯(lián)網(wǎng)開發(fā)&發(fā)布周期的特點(diǎn)所提出的一個(gè)新的崗位要求。關(guān)注的目標(biāo)就是在代碼提交之后,順利且迅速的把新的功能部署到產(chǎn)品環(huán)境上。
其實(shí)這是一個(gè)很寬泛,涵蓋內(nèi)容比較多的話題,但是重中之重,顯然是在于代碼質(zhì)量。所以我們內(nèi)部提出的測(cè)試驅(qū)動(dòng)開發(fā),意義不僅僅在于單元測(cè)試用例先于開發(fā)代碼之前的編寫,而在與通過(guò)真正的測(cè)試報(bào)告來(lái)推動(dòng)代碼的Bug修復(fù)。所以應(yīng)該是Test-Driven Debug。由于是Test-Driven Debug,那么單元測(cè)試,回歸測(cè)試,集成測(cè)試,都是實(shí)現(xiàn)TDD的手段。
TDD和DevOps的關(guān)系在整個(gè)DevOps的流程的上游,就是探究如何把這一系列的測(cè)試及時(shí)的反饋給Develop以幫助其改進(jìn)代碼質(zhì)量。
測(cè)試用例的編寫是非常重要的,我們的最終目標(biāo)是PM寫出產(chǎn)品需求之后,測(cè)試人員能夠和開發(fā)人員一同進(jìn)入編碼流程,開發(fā)人員進(jìn)行代碼編寫的同時(shí)測(cè)試人員進(jìn)行自動(dòng)化集成測(cè)試用例的編寫。這對(duì)測(cè)試開發(fā)人員和PM都提出比較高的要求,一是PM提出的需求能夠足夠詳細(xì)到最終功能的描述,其次要求測(cè)試人員能夠僅根據(jù)功能描述完成測(cè)試用例的編寫。這樣同時(shí)進(jìn)行的功能編寫和功能測(cè)試還能促進(jìn)PM的需求文檔進(jìn)一步的完善。
高質(zhì)量的產(chǎn)品需求書和高質(zhì)量的自動(dòng)化集成測(cè)試用例毫無(wú)疑問(wèn),是高質(zhì)量軟件的保證之一。
其次,作為DevOps的職責(zé)之一,就是怎么把這個(gè)過(guò)程流轉(zhuǎn)起來(lái),規(guī)范化,形成固定的軟件發(fā)布過(guò)程。
Jenkins & Docker 快速部署 TDD我們?cè)趦?nèi)部搭建了一套即插即用的軟件測(cè)試流轉(zhuǎn)平臺(tái),整套流程使用的是Jenkins+Docker 的實(shí)現(xiàn)方式,Jenkins是標(biāo)準(zhǔn)的配置管理工具,有非常豐富的插件。Docker的優(yōu)勢(shì)在于隨用隨部署,并且能夠把不支持rest接口的工具做成支持rest 接口的工作方式,再加上Jenkins本身就支持rest接口,這樣我們?cè)诓渴鹫紫到y(tǒng)的過(guò)程中,就不需要依賴目錄/文件共享的方式,全部使用rest協(xié)議,為Jenkins之間的job實(shí)現(xiàn)了解耦。
我們先看下構(gòu)成圖:
圖畫的不好,請(qǐng)諒解...
整個(gè)環(huán)節(jié)大致如下:
Develop push 代碼到代碼庫(kù)。
代碼庫(kù)用hook 觸發(fā)Jenkins 啟動(dòng)。
Jenkins調(diào)用Checkstyle,Pmd等測(cè)試job,測(cè)試參數(shù)從report pool獲取,最終產(chǎn)生的report存入report pool。
產(chǎn)生報(bào)告,需要的報(bào)告內(nèi)容全部從report pool中獲取。
發(fā)送郵件報(bào)告。
report pool暫時(shí)使用Elastic search充任,不僅作為report的報(bào)告池,還中轉(zhuǎn)了一些必要的配置文件,譬如規(guī)則文件等。
sendmail是必須的,每次測(cè)試結(jié)束之后發(fā)送的郵件是push Develop的唯一手段,也就是說(shuō),這個(gè)step是整個(gè)項(xiàng)目的臉面,有沒(méi)有效果全看sendmail做的是不是夠“觸目驚心”了。
我們要求所有的Develop每天必須定時(shí)檢查郵件,來(lái)獲知測(cè)試結(jié)果,在項(xiàng)目后期必須當(dāng)天解決bug,如果有任何延時(shí)必須上報(bào)pm以進(jìn)行資源調(diào)配,以保證項(xiàng)目按時(shí)發(fā)布高質(zhì)量的代碼。
于此同時(shí),將配備一個(gè)SPL去trigger并且push這一過(guò)程,給項(xiàng)目按時(shí)發(fā)布配備雙重保證。
那么Docker是如何使用到這套環(huán)境中的呢?
譬如本例中的heckstyle, 這是最普遍的java代碼風(fēng)格檢查工具,執(zhí)行命令如下:
java -jar /root/checkstyle-xxx.jar -c rule.xml -f xml /var/jenkins/src -o /root/result.xml
很簡(jiǎn)單一個(gè)命令,按照rule.xml定義的代碼規(guī)范,對(duì)/var/jenkins/src目錄下的源代碼進(jìn)行掃描,輸出的結(jié)果寫入/root/result.xml中。
在使用Docker之前,我們的做法是Jenkins 的一個(gè)job checkout代碼,然后在shell script 執(zhí)行這條java命令,把輸出的result.xml做為發(fā)布文件,給之后Jenkins的Checkstyle做為輸入,并生成Checkstyle的summary report,這兩個(gè)項(xiàng)目必須指定一個(gè)能共享的文件目錄,以便信息交換,明顯制約了項(xiàng)目部署。
這種做法在Docker出現(xiàn)之前,幾乎是唯一的實(shí)現(xiàn)方式。在用了Docker之后,我們看看會(huì)怎么做這個(gè)測(cè)試工作。
代碼的checkout
獲取rule.xml
運(yùn)行Checkstyle
把生成的Checkstyle的report上傳到report pool
以上四項(xiàng)操作都集成在docker里面,做成image.
Jenkins所要做的就是調(diào)用docker api接口,兩條命令:
curl -l –H xxxxxxxxxx http://server:port/containers/create?name=checkstyle curl -X POST http://server:port/containers/checkstyle/start
完了之后,checkstyle產(chǎn)生的report就會(huì)進(jìn)入report pool。
獲取 report:
curl -XGET http://server:port/checkstyle/reports/checkstyle_report.xml
生成Checkstyle 的 Trend graph。
這樣操作的優(yōu)點(diǎn)是顯而易見(jiàn)的。
Jenkins 的各項(xiàng)工具之間充分解耦,可以隨時(shí)部署隨時(shí)使用,不局限在某一個(gè)物理設(shè)備上
Docker做的標(biāo)準(zhǔn)工具,可以迅速的部署一套符合需求的測(cè)試流程
添加新的Jenkins工具不需要在Jenkins主機(jī)上安裝各種工具,破壞原有的結(jié)構(gòu),使用Docker的rest api可以輕松的實(shí)現(xiàn)各種工具的即插即用。
配置管理過(guò)程中使用Docker的優(yōu)勢(shì)還有很多,我這里只述及了很小的一部分。
在需要快速開發(fā)的互聯(lián)網(wǎng)時(shí)代,如何快速搭建一套軟件質(zhì)量保證的環(huán)境也是面臨的挑戰(zhàn)之一,通過(guò)Jenkins和Docker,我們能夠迅速搭建一套符合要求的測(cè)試流程,并給提供給Develop及時(shí)的反饋,推進(jìn)Develop對(duì)bug的Fix,提高Bug fix率從而提高代碼質(zhì)量。
有了這套系統(tǒng),連接Develop和Tester,相信能更好的push 軟件代碼質(zhì)量的提高,從而為快速部署和快速發(fā)布,為整個(gè)DevOps的流程打下堅(jiān)實(shí)的基礎(chǔ)。
原文作者來(lái)自 MaxLeap 團(tuán)隊(duì)_Service&Infra 成員:Kevin
原文鏈接:https://blog.maxleap.cn/archives/719
歡迎關(guān)注微信訂閱號(hào):從移動(dòng)到云端
歡迎加入我們的MaxLeap活動(dòng)qq群:555973817,我們將不定期做技術(shù)分享活動(dòng)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/26588.html
摘要:正文以下,我將闡述一下,怎么樣在多主機(jī)網(wǎng)絡(luò)中運(yùn)行。舉個(gè)例子,當(dāng)你在主機(jī)上運(yùn)行發(fā)現(xiàn)服務(wù)的時(shí)候,你可以這樣啟動(dòng)節(jié)點(diǎn)這個(gè)節(jié)點(diǎn)就會(huì)自己把自己注冊(cè)到發(fā)現(xiàn)服務(wù)中去,并且加入名為的集群中。 譯者前言 Percona 所維護(hù)的XtraDB 是mysql的一個(gè)分支,使用了性能比innodb更加出色的xtrodb驅(qū)動(dòng),XtraDB-Cluster產(chǎn)品,是其集群化的方案,方案內(nèi)容,請(qǐng)自行g(shù)oogle。最近X...
摘要:正文以下,我將闡述一下,怎么樣在多主機(jī)網(wǎng)絡(luò)中運(yùn)行。舉個(gè)例子,當(dāng)你在主機(jī)上運(yùn)行發(fā)現(xiàn)服務(wù)的時(shí)候,你可以這樣啟動(dòng)節(jié)點(diǎn)這個(gè)節(jié)點(diǎn)就會(huì)自己把自己注冊(cè)到發(fā)現(xiàn)服務(wù)中去,并且加入名為的集群中。 譯者前言 Percona 所維護(hù)的XtraDB 是mysql的一個(gè)分支,使用了性能比innodb更加出色的xtrodb驅(qū)動(dòng),XtraDB-Cluster產(chǎn)品,是其集群化的方案,方案內(nèi)容,請(qǐng)自行g(shù)oogle。最近X...
摘要:概述上一章講的是分離樣式,這一章講的是剩下的一些我常用的插件和上一章是沒(méi)有任何關(guān)系。環(huán)境搭建定義環(huán)境插件介紹這個(gè)插件用來(lái)定義環(huán)境變量的,直接定義在了下。安裝依賴添加資源修改配置打包其他更多配置請(qǐng)查閱關(guān)于資源源代碼 0x001 概述 上一章講的是分離樣式,這一章講的是剩下的一些我常用的插件,和上一章是沒(méi)有任何關(guān)系。 0x002 環(huán)境搭建 $ mkdir 0x0016-other-plug...
閱讀 3547·2019-08-30 12:58
閱讀 929·2019-08-29 16:37
閱讀 2802·2019-08-29 16:29
閱讀 3107·2019-08-26 12:18
閱讀 2371·2019-08-26 11:59
閱讀 3416·2019-08-23 18:27
閱讀 2789·2019-08-23 16:43
閱讀 3305·2019-08-23 15:23