• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于流水線理念持續(xù)集成與持續(xù)交付平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)

      2020-04-20 10:46王俊牛亞運(yùn)
      軟件工程 2020年4期
      關(guān)鍵詞:流水線

      王俊 牛亞運(yùn)

      摘? 要:DevOps是近年來(lái)興起的軟件開(kāi)發(fā)理念,能夠有效提高開(kāi)發(fā)效率與版本質(zhì)量,持續(xù)集成與持續(xù)交付作為DevOps理念的最佳實(shí)踐,應(yīng)用廣泛。本文結(jié)合流水線的理念,設(shè)計(jì)并實(shí)現(xiàn)了持續(xù)集成與持續(xù)交付平臺(tái),通過(guò)觸發(fā)器匹配機(jī)制啟動(dòng)流水線,自動(dòng)執(zhí)行流水線中各階段定義的任務(wù),有效地支撐項(xiàng)目的快速迭代,提高了開(kāi)發(fā)效率,保證軟件穩(wěn)定、持續(xù)的構(gòu)建和發(fā)布,實(shí)現(xiàn)了持續(xù)集成持續(xù)交付的全流程應(yīng)用,為后續(xù)DevOps理念的研究及實(shí)踐提供了參考依據(jù)。

      關(guān)鍵詞:DevOps;流水線;持續(xù)集成;持續(xù)交付

      中圖分類號(hào):TP31? ? ?文獻(xiàn)標(biāo)識(shí)碼:A

      Abstract:DevOps is a software development concept that has emerged in recent years.It can effectively improve development efficiency and version quality.Continuous integration and continuous delivery are the best practices of the DevOps concept,which are widely used.This paper combines the concept of the pipeline to design and implement continuous integration and continuous delivery platform.The trigger matching mechanism is used to start the pipeline and automatically execute the tasks defined in each stage of the pipeline.This design effectively supports the rapid iteration of the project,improves the development efficiency,ensures the stable and continuous construction and release of the software,and realizes the continuous integration and continuous delivery of the whole process application,which provides a reference for the research and practice of the subsequent DevOps concepts.

      Keywords:DevOps;pipeline;continuous integration;continuous delivery

      1? ?引言(Introduction)

      DevOps是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)軟件開(kāi)發(fā)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障(QA)部門之間的溝通、協(xié)作與整合[1],其核心是持續(xù)集成與持續(xù)交付。在持續(xù)集成中,團(tuán)隊(duì)成員頻繁集成工作成果,每人每天至少集成一次也可多次,每次集成經(jīng)過(guò)自動(dòng)構(gòu)建的檢驗(yàn),以求在最短的時(shí)間內(nèi)發(fā)現(xiàn)集成錯(cuò)誤[2,3]。持續(xù)交付的核心思想則是通過(guò)創(chuàng)建可重復(fù)、可靠的操作過(guò)程,將軟件從概念變?yōu)楝F(xiàn)實(shí)[4]。持續(xù)交付流水線的搭建使得持續(xù)交付本身成為可能,將軟件交付的過(guò)程分成不同階段,每個(gè)階段旨在從不同的角度驗(yàn)證新特性的質(zhì)量以確認(rèn)新功能,防止可能發(fā)生的失誤給用戶造成的不良影響[5]。持續(xù)集成與持續(xù)交付繼承了優(yōu)秀的DevOps開(kāi)發(fā)理念,成為未來(lái)軟件工程重要的組成部分。

      2? 持續(xù)集成與持續(xù)交付平臺(tái)需求分析(Demand analysis of continuous integration and continuous delivery platform)

      軟件項(xiàng)目的目標(biāo)是開(kāi)發(fā)出可運(yùn)行、客戶滿意的軟件系統(tǒng)。傳統(tǒng)開(kāi)發(fā)存在Bug總是在最后才出現(xiàn)、越到項(xiàng)目后期問(wèn)題越難解決、軟件交付時(shí)機(jī)無(wú)法保障、程序經(jīng)常需要變更等問(wèn)題,影響項(xiàng)目的管理和開(kāi)發(fā)效率,為解決上述問(wèn)題,持續(xù)集成與持續(xù)交付平臺(tái)需要實(shí)現(xiàn)在開(kāi)發(fā)人員提交代碼后,開(kāi)發(fā)人員相互評(píng)審,評(píng)審?fù)ㄟ^(guò)后,服務(wù)器自動(dòng)更新代碼,編譯,運(yùn)行單元測(cè)試、功能測(cè)試、集成測(cè)試,進(jìn)行部署。軟件開(kāi)發(fā)人員通過(guò)觀察流水線,清楚的了解開(kāi)發(fā)中每個(gè)階段的任務(wù)狀態(tài),快速發(fā)現(xiàn)并解決問(wèn)題(編譯失敗、測(cè)試失敗等),減小系統(tǒng)發(fā)生錯(cuò)誤、不能在用戶環(huán)境中運(yùn)行、系統(tǒng)集成時(shí)涌現(xiàn)大量問(wèn)題的風(fēng)險(xiǎn)。從而使整個(gè)的項(xiàng)目進(jìn)度完全掌握,提高項(xiàng)目質(zhì)量,保證項(xiàng)目的持續(xù)穩(wěn)定交付。

      3? 持續(xù)集成與持續(xù)交付平臺(tái)設(shè)計(jì)概要(Design of continuous integration and continuous delivery platform)

      3.1? ?持續(xù)集成持續(xù)交付平臺(tái)的核心功能設(shè)計(jì)

      為構(gòu)建需求分析中完整的軟件開(kāi)發(fā)流水線,實(shí)現(xiàn)持續(xù)集成、自動(dòng)化測(cè)試、包管理等流水線軟件產(chǎn)品的交付過(guò)程,持續(xù)集成與持續(xù)交付平臺(tái)設(shè)計(jì)包含四大模塊:(1)入口配置模塊;(2)流水線配置模塊;(3)觸發(fā)器匹配模塊;(4)流程編排模塊。圖1為觸發(fā)器的核心功能模塊示意圖。

      3.2? ?持續(xù)集成與持續(xù)交付平臺(tái)運(yùn)行過(guò)程

      持續(xù)集成與持續(xù)交付平臺(tái)采用微服務(wù)的架構(gòu)方式,包含三個(gè)服務(wù),分別是主服務(wù)、流程處理服務(wù)和通知服務(wù),其中主服務(wù)中包含入口配置模塊和流水線配置模塊,流程處理服務(wù)包含觸發(fā)器匹配模塊和流程編排模塊,服務(wù)之間采用集成RestTemplate的方式互相調(diào)用對(duì)外暴露的接口,通過(guò)集成RabblitMQ消息隊(duì)列的方式進(jìn)行通信,保證了流水線運(yùn)行期間各個(gè)階段中任務(wù)的有序執(zhí)行;通知服務(wù)作為輔助服務(wù)實(shí)現(xiàn)了從流水線開(kāi)始執(zhí)行到結(jié)束執(zhí)行各個(gè)階段執(zhí)行狀態(tài)的通知功能。用戶首先根據(jù)入口配置規(guī)則填寫入口驗(yàn)證信息,驗(yàn)證是否能與第三平臺(tái)進(jìn)行可靠對(duì)接,之后配置流水線信息,流水線配置信息完成后,點(diǎn)擊觸發(fā)按鈕,此時(shí)主服務(wù)通過(guò)postEvent(Event event)方法向流程處理服務(wù)發(fā)送啟動(dòng)事件,流程處理服務(wù)接收到HTTP請(qǐng)求之后,對(duì)傳入的流水線配置信息進(jìn)行數(shù)據(jù)轉(zhuǎn)換,轉(zhuǎn)換為流程編排模塊可以處理的數(shù)據(jù)格式,流程處理服務(wù)中的啟動(dòng)流程監(jiān)聽(tīng)器監(jiān)聽(tīng)到啟動(dòng)消息后,流程編排引擎開(kāi)始執(zhí)行流水線中定義的任務(wù),最后任務(wù)執(zhí)行結(jié)束后,結(jié)束流程監(jiān)聽(tīng)器監(jiān)聽(tīng)到消息后將會(huì)結(jié)束流水線執(zhí)行。如圖2所示為持續(xù)集成與持續(xù)交付平臺(tái)運(yùn)行時(shí)序圖。

      4? 持續(xù)集成與持續(xù)交付平臺(tái)核心功能實(shí)現(xiàn)(Core function implementation)

      4.1? ?入口配置模塊的實(shí)現(xiàn)

      持續(xù)集成與持續(xù)交付平臺(tái)具備完成流水線完整功能的能力,必須要具備代碼管理與審閱功能、構(gòu)建和測(cè)試功能,以及包管理等功能,因此平臺(tái)需要支持無(wú)縫對(duì)接第三方平臺(tái),為此持續(xù)集成持續(xù)交付平臺(tái)設(shè)計(jì)了入口配置模塊。選用Gitlab作為代碼管理與評(píng)審平臺(tái),GitLab是由GitLabInc.開(kāi)發(fā),使用MIT許可證的基于網(wǎng)絡(luò)的Git倉(cāng)庫(kù)管理工具,使用Gitlab可以完美的實(shí)現(xiàn)不同操作人員協(xié)同開(kāi)發(fā)、互相評(píng)審的功能。選用Jenkins作為包構(gòu)建和測(cè)試工具,Jenkins是一個(gè)開(kāi)源的、提供友好操作界面的持續(xù)集成(CI)工具,主要用于持續(xù)、自動(dòng)的構(gòu)建/測(cè)試軟件項(xiàng)目、監(jiān)控外部任務(wù)的運(yùn)行。具有易用性高、易配置支持插件等特點(diǎn)。選用Nexus作為包管理平臺(tái),Nexus是一個(gè)強(qiáng)大的maven倉(cāng)庫(kù)管理器,它極大地簡(jiǎn)化了本地內(nèi)部倉(cāng)庫(kù)的維護(hù)和外部倉(cāng)庫(kù)的訪問(wèn),利用私服代理外部倉(cāng)庫(kù),消除了對(duì)外的重復(fù)構(gòu)件下載,降低帶寬的壓力,是一套開(kāi)箱即用的系統(tǒng),如表1所示,入口配置模塊中提供了對(duì)接GitLab、Jenkins、Nexus入口并進(jìn)行驗(yàn)證的方式。

      以對(duì)接Nexus包管理平臺(tái)為例,用戶在前端頁(yè)面填寫入口配置信息后,信息被保存到了入口配置模型(Endpoint)中,后臺(tái)控制層接收到前端發(fā)送的POST請(qǐng)求后,調(diào)用NexusConnectTest(Endpoint endpoint)方法,方法內(nèi)部利用Spring框架提供的RestTemplate將入口配置模型中保存的用戶名、密碼、Nexus倉(cāng)庫(kù)地址等信息封裝成一個(gè)HTTP請(qǐng)求并發(fā)送到Nexus服務(wù)器,Nexus服務(wù)器接收到HTTP請(qǐng)求后進(jìn)行解析驗(yàn)證是否認(rèn)證成功,根據(jù)認(rèn)證結(jié)果返回不同的響應(yīng)碼,進(jìn)而根據(jù)響應(yīng)碼來(lái)判斷對(duì)接Nexus包管理平臺(tái)是否成功。如下為對(duì)接驗(yàn)證Nexus包管理平臺(tái)的部分代碼實(shí)現(xiàn):

      4.2? ?流水線配置模塊

      持續(xù)集成持續(xù)交付平臺(tái)的流水線配置模塊中提供了定義完整流水線的功能,其定義的內(nèi)容包括主要包含四部分:(1)流水線配置信息,包括流水線的名稱、階段、觸發(fā)器等。一條流水線相當(dāng)于一次構(gòu)建任務(wù),里面可以包含多個(gè)流程,比如自動(dòng)構(gòu)建、自動(dòng)進(jìn)行單元測(cè)試、自動(dòng)進(jìn)行代碼檢查等流程等。(2)階段配置信息,包括每個(gè)階段的名稱、標(biāo)識(shí)、階段的構(gòu)建時(shí)間、執(zhí)行時(shí)間、狀態(tài)等。階段就是上面提到的流程,可以在一條流水線中定義多個(gè)階段,所有階段會(huì)按照順序運(yùn)行,即當(dāng)一個(gè)階段完成后,下一個(gè)階段才會(huì)開(kāi)始,只有當(dāng)所有階段成功完成后,該構(gòu)建任務(wù)(流水線)才算執(zhí)行成功,如果任何一個(gè)階段失敗,后面的就不會(huì)執(zhí)行,該構(gòu)建任務(wù)(流水線)失敗。(3)任務(wù)配置信息,包括任務(wù)名稱、任務(wù)所屬的階段、執(zhí)行時(shí)間、上下文環(huán)境等。任務(wù)表示某個(gè)階段里面執(zhí)行的工作,一個(gè)階段里面可以定義多個(gè)任務(wù),在相同階段中的任務(wù)可以并行執(zhí)行也可以串行執(zhí)行,執(zhí)行相同階段中的任務(wù)都執(zhí)行成功時(shí),該階段才會(huì)成功,如果任何一個(gè)任務(wù)失敗,那么該階段就失敗,即該條流水線失敗。(4)觸發(fā)器相關(guān)信息,包括觸發(fā)器的類型和名稱。流水線中可以定義多個(gè)觸發(fā)器并且支持多種觸發(fā)類型,通過(guò)觸發(fā)匹配機(jī)制接收觸發(fā)消息啟動(dòng)流水線。為了遵循數(shù)據(jù)庫(kù)設(shè)計(jì)的三范式要求,在保證三范式要求的前提下盡量保證松耦合,流水線配置模塊中定義的信息分為流水線配置信息表,如表2所示;階段配置信息表,如表3所示;任務(wù)配置信息表,如表4所示。

      4.3? ?觸發(fā)器匹配模塊

      持續(xù)集成與持續(xù)交付平臺(tái)支持手工觸發(fā)、定時(shí)觸發(fā)、事件驅(qū)動(dòng)三種觸發(fā)方式,手工觸發(fā)通過(guò)點(diǎn)擊前端展示的觸發(fā)按鈕調(diào)用startPipeline(String id, PipelineTrigger trigger)方法啟動(dòng)流水線;定時(shí)觸發(fā)通過(guò)定時(shí)任務(wù)線程輪詢觸發(fā)任務(wù)狀態(tài)并根據(jù)上下文信息啟動(dòng)流水線;事件觸發(fā)包括Gitlab代碼變更消息觸發(fā)、Jenkins構(gòu)建消息觸發(fā)、Nexus包管理平臺(tái)包更新觸發(fā)。不同的觸發(fā)方式設(shè)置了不同的觸發(fā)匹配機(jī)制。以事件觸發(fā)為例,Jenkins構(gòu)建消息觸發(fā)流水線執(zhí)行,當(dāng)Jenkins服務(wù)器上發(fā)生一次構(gòu)建的時(shí)候,持續(xù)集成與持續(xù)交付平臺(tái)主服務(wù)中的輪詢?nèi)蝿?wù)接收到構(gòu)建信息后,通過(guò)rabbitMQ消息隊(duì)列將該消息發(fā)送到流水線處理服務(wù)中的指定隊(duì)列中,隊(duì)列接收消息后執(zhí)行onJenkinsBuildComplete(String message)方法,該方法根據(jù)消息中包含的Endpoint入口信息和指定的job調(diào)用matchJenkinsTrigger(endPointID,jobName)方法匹配觸發(fā)器,最后進(jìn)入流程編排模塊完成流水線中定義的各個(gè)階段任務(wù)。如下為接收J(rèn)enkins構(gòu)建消息觸發(fā)的代碼實(shí)現(xiàn):

      4.4? ?流程編排模塊

      流程編排模塊用于執(zhí)行流水線階段中定義的各項(xiàng)任務(wù),是持續(xù)集成持續(xù)交付流水線的核心所在,本文選用開(kāi)源的Flowable流程引擎作為實(shí)現(xiàn)流程編排模塊的實(shí)現(xiàn)基礎(chǔ),F(xiàn)lowable是一個(gè)使用Jave編寫的輕量級(jí)業(yè)務(wù)流程引擎,使用Apache V2 license協(xié)議開(kāi)源,其以JAR形式發(fā)布使得Flowable可以輕易加入任何Java環(huán)境:Java SE、Tomcat、Jetty或Spring之類的servlet容器;JBoss或WebSphere之類的Java EE服務(wù)器等。默認(rèn)情況下,F(xiàn)lowable引擎的執(zhí)行文件是bpmn文件,文件中包含事件、順序流、網(wǎng)關(guān)、任務(wù)、子流程要素,在Flowable流程引擎執(zhí)行流水線之前,需要預(yù)先將流水線配置模塊中定義的流水線信息轉(zhuǎn)換為bpmn文件。Flowable流程引擎對(duì)外提供了org.flowable.engine.delegate.JavaDelegate接口及其execute方法,持續(xù)集成與持續(xù)交付平臺(tái)通過(guò)實(shí)現(xiàn)JavaDelegate接口并且為不同任務(wù)重寫不同的execute方法完成流水線中定義的各種任務(wù)。如下所示為重寫execute方法執(zhí)行Jenkins任務(wù)的部分代碼實(shí)現(xiàn):

      5? ?結(jié)論(Conclusion)

      本文基于軟件開(kāi)發(fā)的實(shí)際環(huán)境,設(shè)計(jì)并實(shí)現(xiàn)了持續(xù)集成持續(xù)交付平臺(tái),提供了可視化、可定制、自動(dòng)觸發(fā)的持續(xù)交付流水線,流水線中支持編譯構(gòu)建、代碼檢查、自動(dòng)化測(cè)試、部署、流水線控制等多種類型的任務(wù),用戶可以根據(jù)需求定義各種任務(wù),流水線階段中的任務(wù)支持串行執(zhí)行與并行執(zhí)行,支持了多種業(yè)務(wù)場(chǎng)景,流水線支持手工觸發(fā)和自動(dòng)觸發(fā),實(shí)現(xiàn)了流水線的自動(dòng)化執(zhí)行通過(guò)配置流水線的方式完成軟件開(kāi)發(fā)集成與交付過(guò)程,極大地縮短了從開(kāi)發(fā)、集成、測(cè)試、部署各個(gè)環(huán)節(jié)的時(shí)間,減少了重復(fù)性勞動(dòng),提高了產(chǎn)品質(zhì)量,加快了開(kāi)發(fā)效率。本文設(shè)計(jì)的持續(xù)集成與持續(xù)交付平臺(tái),完整的支撐了生產(chǎn)環(huán)境中軟件開(kāi)發(fā)的各種需求,為其他用戶或者研發(fā)團(tuán)隊(duì)搭建持續(xù)集成與持續(xù)交付平臺(tái)提供了設(shè)計(jì)參考依據(jù),推動(dòng)了DevOps理念的落地與實(shí)踐。

      參考文獻(xiàn)(References)

      [1] Haiqin WU,Liangmin WANG,Tao JIANG.Secure and efficient k-nearest neighbor query for location-based services in outsourced environments[J].Science China(Information Sciences),2018,61(03):231-233.

      [2] Mengual L,Marba?n O,Eibe S.Clustering-based location in wireless networks[J].Expert Systems with Applications,2010,37(9):6165-6175.

      [3] Ying Hu.Study on the key algorithms and framework design of intelligent campus education platform based on big data technology[J].Technical Bulletin,2017(15):63-69.

      [4] Jia Yanmei.Construction and application of intelligent campus in colleges and Uuniversities under the background of big data[C].Advances in Intelligent Systems and Computing,2019:866-872.

      [5] 陳敏,楊陽(yáng).基于Docker下DevOps系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)研究[J].信息與電腦(理論版),2019(11):97-98;101.

      作者簡(jiǎn)介:

      王? ?。?993-),男,碩士生.研究領(lǐng)域:智能制造,軟件開(kāi)發(fā).

      牛亞運(yùn)(1991-),男,碩士生.研究領(lǐng)域:軟件開(kāi)發(fā).

      猜你喜歡
      流水線
      Gen Z Migrant Workers Are Leaving the Assembly Line
      流水線
      基于PLC的飲料灌裝流水線設(shè)計(jì)
      基于自抗擾的工業(yè)流水線帶式輸送機(jī)穩(wěn)速控制
      一種基于協(xié)同進(jìn)化的流水線向Seru系統(tǒng)轉(zhuǎn)化方法
      流水線
      報(bào)廢汽車拆解半自動(dòng)流水線研究
      多層圖像疊加處理的低功耗自適應(yīng)流水線設(shè)計(jì)
      流水線生產(chǎn)殺死藝術(shù)
      汽車噴漆流水線的應(yīng)用與研究
      花莲县| 隆安县| 德格县| 佛学| 株洲县| 烟台市| 邯郸县| 炎陵县| 平凉市| 资溪县| 蚌埠市| 桑日县| 北宁市| 中方县| 宿松县| 鹿邑县| 洛南县| 穆棱市| 济源市| 水富县| 北海市| 乌什县| 锡林郭勒盟| 荣昌县| 且末县| 黄龙县| 保定市| 双辽市| 绥芬河市| 兴义市| 页游| 思南县| 福泉市| 凤冈县| 阜南县| 西贡区| 区。| 马龙县| 县级市| 耿马| 武山县|