国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

王俊 牛亞運

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

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

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

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

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

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

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

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

3.2? ?持續(xù)集成與持續(xù)交付平臺運行過程

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

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

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

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

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

4.2? ?流水線配置模塊

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

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

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

4.4? ?流程編排模塊

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

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

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

參考文獻(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] 陳敏,楊陽.基于Docker下DevOps系統(tǒng)的設(shè)計與實現(xiàn)研究[J].信息與電腦(理論版),2019(11):97-98;101.

作者簡介:

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

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

猜你喜歡
流水線
Gen Z Migrant Workers Are Leaving the Assembly Line
流水線
基于PLC的飲料灌裝流水線設(shè)計
基于自抗擾的工業(yè)流水線帶式輸送機穩(wěn)速控制
一種基于協(xié)同進化的流水線向Seru系統(tǒng)轉(zhuǎn)化方法
流水線
報廢汽車拆解半自動流水線研究
多層圖像疊加處理的低功耗自適應(yīng)流水線設(shè)計
流水線生產(chǎn)殺死藝術(shù)
汽車噴漆流水線的應(yīng)用與研究