本發(fā)明涉及IT互聯(lián)網(wǎng)領(lǐng)域的軟件研發(fā)、產(chǎn)品交付、產(chǎn)品運維等領(lǐng)域,具體地指一種基于Docker的devops持續(xù)交付與自動化系統(tǒng)及方法。
背景技術(shù):
在IT互聯(lián)網(wǎng)技術(shù)領(lǐng)域,開發(fā)、測試和運維環(huán)境的統(tǒng)一化和標(biāo)準(zhǔn)化一直是技術(shù)人員的探索方向。Devops(Development和Operations的簡稱),中譯為開發(fā)運維自動化一體化,定義為是一種軟件過程,方法,文化,實踐,通過一條高度自動化的流水線來加強開發(fā)和其他IT職能部門之間的溝通和協(xié)作,更快速,高效和穩(wěn)定的實現(xiàn)環(huán)境搭建,軟件開發(fā),軟件測試,軟件質(zhì)量分析,產(chǎn)品相關(guān)文檔生成和產(chǎn)品交付的一種文化和趨勢。
DevOps有以下四個階段:簡單的自動化,CI與靜態(tài)Docker,增強與動態(tài)Docker,以及全面CI和自動化。第一個階段是使用了一些簡單的自動化工具完成版本更新發(fā)布;第二個階段是企業(yè)擁有了自己的CI,使用靜態(tài)模式、手動部署的Docker;第三個階段,對第二個階段做全方位地加強,包括很多細節(jié)比如系統(tǒng)架構(gòu),如何實現(xiàn)CI,如何實現(xiàn)自動化的測試,并且可以擁有一個動態(tài)的Docker部署;最后,在第四個階段就是一個全自動的階段。
目前大多數(shù)企業(yè)都處于在第一和第二階段,devops體系都比較初級,各個環(huán)節(jié)都需要人工干預(yù),IT企業(yè)都期盼有更好的解決方案,以實現(xiàn)不同的物理設(shè)備,不同的虛擬化類型,不同云計算平臺之間開發(fā)、測試和運維環(huán)境的統(tǒng)一化和標(biāo)準(zhǔn)化。
技術(shù)實現(xiàn)要素:
針對以上所述背景,本發(fā)明提供了一種基于Docker的devops持續(xù)交付與自動化系統(tǒng)及方法,重點解決不同的物理設(shè)備,不同的虛擬化類型,不同云計算平臺之間開發(fā)、測試和運維環(huán)境的統(tǒng)一化和標(biāo)準(zhǔn)化的問題。
為實現(xiàn)上述目的,本發(fā)明所設(shè)計的基于Docker的devops持續(xù)交付與自動化系統(tǒng),其特殊之處在于,所述系統(tǒng)基于Docker開發(fā)平臺實現(xiàn),包括開發(fā)環(huán)境、鏡像倉庫、測試環(huán)境和運維環(huán)境;
所述開發(fā)環(huán)境:用于計算機代碼的開發(fā)、復(fù)查、集成、編譯和版本控制,編譯完成的代碼自動存入所述鏡像倉庫中;
所述鏡像倉庫:用于以Docker鏡像的形式存儲計算機代碼;
所述測試環(huán)境:用于從所述鏡像倉庫拉取需要測試的Docker鏡像,并啟動為Docker容器,測試通過后打上Tag標(biāo)注并自動存入鏡像倉庫;
所述運維環(huán)境:用于從所述鏡像倉庫(2)拉取已打上Tag標(biāo)注的Docker鏡像,并運行為容器應(yīng)用。
進一步地,所述系統(tǒng)還包括容器鏡像管理器,所述容器鏡像管理器基于kubernetes工具實現(xiàn),用于管理鏡像倉庫、測試環(huán)境和運維環(huán)境中的Docker容器。
更進一步地,所述開發(fā)環(huán)境包括持續(xù)構(gòu)建平臺、代碼倉庫,所述持續(xù)構(gòu)建平臺基于Jenkins平臺實現(xiàn),用于自動拉取代碼倉庫中的代碼,自動編譯后存儲至鏡像倉庫。
更進一步地,所述鏡像倉庫中的Docker鏡像包括數(shù)據(jù)庫鏡像、應(yīng)用系統(tǒng)鏡像、定時任務(wù)系統(tǒng)鏡像、分布式管理鏡像和其他鏡像。
更進一步地,所述測試環(huán)境中的Docker容器包括數(shù)據(jù)庫測試容器、應(yīng)用系統(tǒng)測試容器和定時任務(wù)系統(tǒng)測試容器。
更進一步地,所述運維環(huán)境基于K8s平臺實現(xiàn),所述運維環(huán)境中的Docker容器包括數(shù)據(jù)庫生產(chǎn)容器、應(yīng)用系統(tǒng)生產(chǎn)容器、定時任務(wù)系統(tǒng)生產(chǎn)容器、消息列隊生產(chǎn)容器。
更進一步地,所述開發(fā)環(huán)境中還包括代碼質(zhì)量分析器,所述持續(xù)構(gòu)建平臺自動編譯代碼后,調(diào)用代碼質(zhì)量分析器,生成代碼質(zhì)量分析報告。
本發(fā)明還提出一種根據(jù)上述基于Docker的devops持續(xù)交付與自動化系統(tǒng)的方法,其特殊之處在于,包括如下步驟:
1)開發(fā)人員通提交計算機代碼,所述開發(fā)環(huán)境對計算機代碼自動集成、編譯并存儲至鏡像倉庫的Docker鏡像中,開發(fā)人員將對應(yīng)的Docker鏡像中的容器啟動來預(yù)覽的開發(fā)結(jié)果,如果確認已滿足預(yù)期,則將該Docker鏡像中推送到鏡像倉庫中進行存儲;
2)測試人員從所述鏡像倉庫中拉取需要測試的Docker鏡像,并啟動為Docker容器進行手動或者自動的功能性測試,完成測試后打上Tag標(biāo)注,并自動存入鏡像倉庫中;
3)運維人員將所述鏡像倉庫中被打上Tag標(biāo)注的Docker鏡像在運維環(huán)境中自動啟動為容器應(yīng)用,并遠程部署至位于客戶方的服務(wù)器,交付給客戶使用。
優(yōu)選地,所述步驟3)中交付給客戶使用以后,運維人員通過運維環(huán)境管理交付給客戶使用的容器應(yīng)用,管理方式包括統(tǒng)一資源監(jiān)控、資源調(diào)度、實時監(jiān)控。
優(yōu)選地,所述開發(fā)環(huán)境中還包括代碼質(zhì)量分析器,所述持續(xù)構(gòu)建平臺自動編譯代碼后,調(diào)用代碼質(zhì)量分析器,生成代碼質(zhì)量分析報告,其特征在于:所述持續(xù)構(gòu)建平臺自動編譯代碼后,所述代碼質(zhì)量分析器自動生成代碼質(zhì)量分析報告并通過郵件發(fā)送至開發(fā)人員。
本發(fā)明基于DevOps的四個階段,實現(xiàn)DevOps的四個技術(shù)基礎(chǔ)分別是:版本控制,環(huán)境抽象,全自動化測試以及完全持續(xù)部署。在沒有這四個基礎(chǔ)的準(zhǔn)備之下,DevOps就是空中樓閣。版本控制:指的是代碼的開發(fā),復(fù)查,版本控制,代碼集成等能夠在DevOps中更加自動化;抽象環(huán)境:是指開發(fā)的代碼可以匹配兼容各種環(huán)境,比如在一個Docker鏡像里,我們的代碼可以根據(jù)鏡像所處的不同環(huán)境,調(diào)取不同的環(huán)境變量如IP,域名,文件,存儲,密碼等;一個docker鏡像滿足多環(huán)境部署,配置獨立且動態(tài)化;全自動化測試:是指所有版本,變更與其他版本的兼容性都可以得到自動的測試;完全的持續(xù)集成:是指無論在什么時間,或者什么人做的變更,都會與當(dāng)前的版本代碼進行持續(xù)的兼容測試,以保證所有的變更都可以最終整合在一起,實現(xiàn)最終版本的發(fā)布并部署到各個環(huán)境中。
本發(fā)明的優(yōu)點包括:
1)本發(fā)明實現(xiàn)了開發(fā)、測試和運維環(huán)境的統(tǒng)一化和標(biāo)準(zhǔn)化,通過鏡像容器作為標(biāo)準(zhǔn)的交付件,可在開發(fā)、測試和生產(chǎn)環(huán)境上以容器來運行,最終實現(xiàn)三套環(huán)境上的應(yīng)用以及運行所依賴內(nèi)容的完全一致。
2)本發(fā)明解決底層基礎(chǔ)環(huán)境的異構(gòu)問題。基礎(chǔ)環(huán)境的多元化造成了從Dev到Ops過程中的阻力,而使用Docker主機可無視基礎(chǔ)環(huán)境的類型。不同的物理設(shè)備,不同的虛擬化類型,不同云計算平臺,只要是運行了Docker主機的環(huán)境,最終的應(yīng)用都會以容器為基礎(chǔ)來提供服務(wù)。
3)本發(fā)明具有易于構(gòu)建、遷移和部署的特點。Docker容器實現(xiàn)鏡像構(gòu)建的標(biāo)準(zhǔn)化和可復(fù)用,鏡像本身的分層機制也提高了鏡像構(gòu)建的效率。使用鏡像倉庫可以將構(gòu)建好的鏡像遷移到任意環(huán)境,而且環(huán)境的部署僅需要將靜態(tài)只讀的鏡像轉(zhuǎn)換為動態(tài)可運行的容器即可。
4)本發(fā)明具有輕量和高效的特點。和需要封裝操作系統(tǒng)的虛擬機相比,容器僅需要封裝應(yīng)用和應(yīng)用需要的依賴文件,實現(xiàn)輕量的應(yīng)用運行環(huán)境,且擁有比虛擬機更高的硬件資源利用率。
5)本發(fā)明實現(xiàn)了工具鏈的標(biāo)準(zhǔn)化和快速部署。將實現(xiàn)DevOps所需的多種工具或軟件進行Docker化后,可在任意環(huán)境實現(xiàn)一條或多條工具鏈的快速部署。
附圖說明
圖1為本發(fā)明基于Docker的devops持續(xù)交付與自動化系統(tǒng)的結(jié)構(gòu)框圖。
其中:開發(fā)環(huán)境1,持續(xù)構(gòu)建平臺11,代碼倉庫12,代碼質(zhì)量分析器13,生成的Sonar質(zhì)量分析報告14,鏡像倉庫2,數(shù)據(jù)庫鏡像21,應(yīng)用系統(tǒng)鏡像22,定時任務(wù)系統(tǒng)鏡像23,分布式管理鏡像24,緩存鏡像25,消息隊列鏡像26,其他鏡像27,測試環(huán)境3,數(shù)據(jù)庫測試容器31,應(yīng)用系統(tǒng)測試容器32,定時任務(wù)系統(tǒng)測試容器33,運維環(huán)境4,數(shù)據(jù)庫生產(chǎn)容器41,應(yīng)用系統(tǒng)生產(chǎn)容器42,定時任務(wù)系統(tǒng)生產(chǎn)容器43,消息列隊生產(chǎn)容器44,緩存鏡像45,容器鏡像管理器5。
具體實施方式
以下結(jié)合附圖和具體實施例對本發(fā)明作進一步的詳細描述。
如圖1所示,本發(fā)明一種基于Docker的devops持續(xù)交付與自動化系統(tǒng),基于Docker開發(fā)平臺實現(xiàn),包括開發(fā)環(huán)境1、鏡像倉庫2、測試環(huán)境3、運維環(huán)境4和容器鏡像管理器5。
開發(fā)環(huán)境1:包含開發(fā)人員客戶端的筆記本和服務(wù)端的一臺Docker主機,用于計算機代碼的開發(fā)、復(fù)查、集成、編譯和版本控制,編譯完成的代碼自動存入鏡像倉庫2中。開發(fā)環(huán)境1包括持續(xù)構(gòu)建平臺11、代碼倉庫12和代碼質(zhì)量分析器13,持續(xù)構(gòu)建平臺11基于Jenkins平臺實現(xiàn),用于自動拉取代碼倉庫12中的代碼,自動編譯后存儲至鏡像倉庫2。代碼倉庫基于GitLab工具實現(xiàn)。持續(xù)構(gòu)建平臺11自動編譯代碼后,調(diào)用代碼質(zhì)量分析器13,生成代碼質(zhì)量分析報告。代碼質(zhì)量分析器13基于Sonar工具實現(xiàn)。
鏡像倉庫2:用于以Docker鏡像的形式存儲計算機代碼。鏡像倉庫2中的Docker鏡像包括數(shù)據(jù)庫鏡像21、應(yīng)用系統(tǒng)鏡像22、定時任務(wù)系統(tǒng)鏡像23、分布式管理鏡像24和其他鏡像25。數(shù)據(jù)庫鏡像21包括Redis鏡像、MySQL鏡像、RoketMQ鏡像。應(yīng)用系統(tǒng)鏡像22可以是多個,例如:實時交易系統(tǒng)鏡像、醫(yī)院財務(wù)管理系統(tǒng)鏡像。分布式管理鏡像24基于Zookeeper工具實現(xiàn),用于管理放置于不同服務(wù)器的鏡像。
測試環(huán)境3:包含測試人員客戶端筆記本和服務(wù)端的一臺Docker主機,用于從鏡像倉庫2拉取需要測試的Docker鏡像,并啟動為Docker容器,測試通過后打上Tag標(biāo)注并自動存入鏡像倉庫2。測試環(huán)境3中的Docker容器包括數(shù)據(jù)庫測試容器31、應(yīng)用系統(tǒng)測試容器32和定時任務(wù)系統(tǒng)測試容器33。數(shù)據(jù)庫測試容器31可以有多個,例如包括MySQL容器。應(yīng)用系統(tǒng)測試容器32可以有多個,例如:實時交易系統(tǒng)容器、醫(yī)院財務(wù)系統(tǒng)容器。定時任務(wù)系統(tǒng)測試容器33用于實現(xiàn)在指定時間完成的自動上傳、下載、更新鏡像倉庫2中的Docker鏡像,例如,設(shè)定固定時間完成醫(yī)院財務(wù)系統(tǒng)與其他應(yīng)用系統(tǒng)之間的自動對賬。
運維環(huán)境4:包含運維人員客戶端筆記本和服務(wù)端的兩臺Docker主機構(gòu)建的K8S集群,并可以采用docker compose做服務(wù)編排。運維環(huán)境4用于從鏡像倉庫2拉取已打上Tag標(biāo)注的Docker鏡像,并運行為容器應(yīng)用。運維環(huán)境4基于K8s平臺實現(xiàn),運維環(huán)境4中的Docker容器包括數(shù)據(jù)庫生產(chǎn)容器41、應(yīng)用系統(tǒng)生產(chǎn)容器42、定時任務(wù)系統(tǒng)生產(chǎn)容器43、消息列隊生產(chǎn)容器44。
容器鏡像管理器5基于kubernetes工具實現(xiàn),用于管理鏡像倉庫2、測試環(huán)境3和運維環(huán)境4中的上百個Docker容器。
本發(fā)明根據(jù)上述基于Docker的devops持續(xù)交付與自動化系統(tǒng)的方法,包括如下步驟:
1)開發(fā)人員通過本地的代碼倉庫12客戶端向服務(wù)器端提交計算機代碼,開發(fā)環(huán)境1持續(xù)構(gòu)建平臺11對計算機代碼自動集成、編譯并存儲至鏡像倉庫2的Docker鏡像中,開發(fā)人員將對應(yīng)的Docker鏡像中的容器啟動來預(yù)覽的開發(fā)結(jié)果,如果確認已滿足預(yù)期,則將該Docker鏡像中推送到鏡像倉庫2中進行存儲。代碼質(zhì)量分析器13自動生成代碼質(zhì)量分析報告并通過郵件發(fā)送至開發(fā)人員。
2)測試人員登錄測試,測試人員從鏡像倉庫2中拉取需要測試的Docker鏡像,并啟動為Docker容器進行手動或者自動的功能性測試,完成測試后打上Tag標(biāo)注,并自動存入鏡像倉庫2中。
3)運維人員將鏡像倉庫2中被打上Tag標(biāo)注的Docker鏡像在運維環(huán)境4中自動啟動為容器應(yīng)用,并遠程部署至位于客戶方的服務(wù)器,交付給客戶使用。
交付給客戶使用以后,運維人員通過運維環(huán)境4管理交付給客戶使用的容器應(yīng)用,管理方式包括統(tǒng)一資源監(jiān)控、資源調(diào)度、實時監(jiān)控。
以上結(jié)合最佳實施例對本發(fā)明進行了描述,但本發(fā)明并不局限于以上揭示的實施例,而應(yīng)當(dāng)涵蓋各種根據(jù)本發(fā)明的本質(zhì)進行的修改、等效組合。
本說明書中未作詳細描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。