999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Git的持續(xù)構(gòu)建的研究與實(shí)現(xiàn)

2018-08-22 01:23:34顧利軍邱敏明
現(xiàn)代計(jì)算機(jī) 2018年22期
關(guān)鍵詞:頁(yè)面系統(tǒng)

顧利軍,邱敏明

(上海海事大學(xué)信息工程學(xué)院,上海 201804)

0 引言

在現(xiàn)代軟件開(kāi)發(fā)過(guò)程中,很多的軟件項(xiàng)目都是由不同的開(kāi)發(fā)人員負(fù)責(zé),每個(gè)開(kāi)發(fā)成員負(fù)責(zé)不同的功能模塊,在項(xiàng)目開(kāi)發(fā)結(jié)束之前,每個(gè)開(kāi)發(fā)人員只關(guān)心自己的工作,卻不了解項(xiàng)目的整體情況,自己開(kāi)發(fā)的模塊可以單獨(dú)的運(yùn)行工作,到最后項(xiàng)目集成為最終產(chǎn)品的時(shí)候,會(huì)產(chǎn)生一些意料不到的問(wèn)題,有的很難去修復(fù),有的不得不去重寫幾周或者幾個(gè)月之前寫的代碼,甚至有的開(kāi)發(fā)人員開(kāi)發(fā)的模塊會(huì)被全部否定而從零開(kāi)始,最嚴(yán)重的情況將導(dǎo)致整個(gè)項(xiàng)目的失敗。把項(xiàng)目的集成放到開(kāi)發(fā)周期的最后階段,將會(huì)花費(fèi)大量的時(shí)間去進(jìn)行集成工作,嚴(yán)重的bug處理會(huì)涉及到很多分支,給開(kāi)發(fā)人員的修復(fù)工作也帶來(lái)了很多麻煩,同時(shí)也充滿了風(fēng)險(xiǎn)和危險(xiǎn),并且往往會(huì)導(dǎo)致延遲交付,造成額外開(kāi)銷的后果,引起客戶的不滿。為了解決這樣的問(wèn)題,人們進(jìn)行了很多的探索,提出了“早集成,常集成”的集成策略,從最開(kāi)始的分階段構(gòu)建,到之后發(fā)展的日構(gòu)建,再到目前的持續(xù)集成(Continuous Integration,CI),持續(xù)集成的開(kāi)發(fā)方式從簡(jiǎn)單的形式上講就是一個(gè)能夠監(jiān)控版本控制系統(tǒng)變化的工具,只要檢測(cè)到程序有新的變更的時(shí)候,這個(gè)工具就會(huì)執(zhí)行一次構(gòu)建,自動(dòng)編譯和測(cè)試你的程序,并且可以隨時(shí)打包成可以交付的產(chǎn)品。如果在構(gòu)建的過(guò)程中出現(xiàn)了問(wèn)題,就會(huì)馬上通知開(kāi)發(fā)人員,開(kāi)發(fā)人員就會(huì)停下目前的開(kāi)發(fā)工作,著手去解決構(gòu)建過(guò)程中出現(xiàn)的問(wèn)題,防止到項(xiàng)目后期出現(xiàn)難以修復(fù)的難題,這樣的持續(xù)集成可以保證軟件在開(kāi)發(fā)的過(guò)程中始終處于一個(gè)“健康”的狀態(tài)。持續(xù)集成是一些基本的實(shí)踐。它不是軟件開(kāi)發(fā)中最耀眼的工作,但持續(xù)集成對(duì)于如今的復(fù)雜項(xiàng)目來(lái)說(shuō)是至關(guān)重要的,甚至項(xiàng)目負(fù)責(zé)人會(huì)把CI看成是軟件開(kāi)發(fā)的中心工作,因?yàn)樗ㄟ^(guò)每次代碼的變更執(zhí)行構(gòu)建,構(gòu)建的過(guò)程保證了軟件的健康。

本文基于日常多項(xiàng)目的實(shí)踐開(kāi)發(fā)管理經(jīng)驗(yàn),持續(xù)集成理論的研究以及對(duì)目前常見(jiàn)的持續(xù)集成工具的實(shí)踐探索,提出了一套基于Git的持續(xù)集成方案,搭建自己的CI系統(tǒng),從而解決項(xiàng)目開(kāi)發(fā)中的集成難題、增強(qiáng)項(xiàng)目的可見(jiàn)性。

1 持續(xù)集成的理論研究

1.1 持續(xù)集成的概念以及研究?jī)r(jià)值

持續(xù)集成的概念最早出現(xiàn)在極限編程作者M(jìn)artin Fowler的一篇文章《持續(xù)集成》中,持續(xù)集成是一種軟件開(kāi)發(fā)實(shí)踐,即開(kāi)發(fā)人員需要經(jīng)常性地對(duì)他們的工作進(jìn)行集成,每個(gè)開(kāi)發(fā)人員每天至少進(jìn)行一次集成工作,這樣每天就會(huì)發(fā)生很多次的集成。每次集成過(guò)程都會(huì)執(zhí)行并且執(zhí)行相關(guān)的自動(dòng)測(cè)試,這樣就能及時(shí)地發(fā)現(xiàn)軟件中存在的問(wèn)題。

持續(xù)集成的價(jià)值很高,一個(gè)完善的持續(xù)集成系統(tǒng)能夠減少項(xiàng)目風(fēng)險(xiǎn),一天進(jìn)行多次集成,有利于檢查項(xiàng)目缺陷,及時(shí)的修復(fù)可以保證軟件的健康;能夠減少項(xiàng)目活動(dòng)中代碼編譯、測(cè)試、打包、部署的重復(fù)工程,每次構(gòu)建都執(zhí)行相同的過(guò)程,減少重復(fù)勞動(dòng);能夠保證項(xiàng)目在任何時(shí)間都可以發(fā)布可部署的軟件,每次小的代碼改動(dòng)都會(huì)及時(shí)地與項(xiàng)目中其他的代碼進(jìn)行集成,及時(shí)發(fā)現(xiàn)問(wèn)題及時(shí)修復(fù),不采用CI的軟件開(kāi)發(fā)項(xiàng)目可能會(huì)等到最后交付的時(shí)候才會(huì)進(jìn)行集成及測(cè)試,可能會(huì)出現(xiàn)不可修復(fù)的缺陷,導(dǎo)致延遲發(fā)布或項(xiàng)目失敗;能夠增強(qiáng)項(xiàng)目的可見(jiàn)性,持續(xù)集成使得項(xiàng)目能夠隨時(shí)保證最新的數(shù)據(jù)來(lái)進(jìn)行決策,而沒(méi)有CI的項(xiàng)目通常需要開(kāi)發(fā)人員手動(dòng)收集信息,增加了工作負(fù)擔(dān)浪費(fèi)了很多寶貴的時(shí)間,使得項(xiàng)目進(jìn)程緩慢;最后持續(xù)集成還可以在團(tuán)隊(duì)中建立強(qiáng)大的產(chǎn)品信心,因?yàn)槊恳淮螛?gòu)建的結(jié)果都能讓開(kāi)發(fā)人員對(duì)項(xiàng)目的整體結(jié)構(gòu)做到心里有數(shù),如果沒(méi)有持續(xù)集成,開(kāi)發(fā)人員就不知道修改后的代碼會(huì)不會(huì)對(duì)整個(gè)項(xiàng)目造成影響,CI的及時(shí)構(gòu)建結(jié)果及時(shí)通知,讓開(kāi)發(fā)人員在開(kāi)發(fā)的過(guò)程中更有信心開(kāi)發(fā)出有品質(zhì)有保障的軟件產(chǎn)品。

1.2 現(xiàn)有集成工具的分析

目前軟件行業(yè)中使用較多的持續(xù)集成工具是Jenkins,Jenkins最開(kāi)始被稱Hudson,是一個(gè)用Java語(yǔ)言編寫的開(kāi)源的持續(xù)集成工具,被應(yīng)用于各種規(guī)模的團(tuán)隊(duì)用于各種語(yǔ)言和技術(shù)的項(xiàng)目中,例如Java、PHP、C#等,而且Jenkins有著豐富的開(kāi)源插件庫(kù),使得Jenkins的構(gòu)建功能比較健全。但是Jenkins也有很多不足的地方,首先是界面非常的不友好,頁(yè)面的有些部分要靠插件生成,使用不夠方便,經(jīng)常會(huì)讓人對(duì)插件的使用非常困惑,不知道其對(duì)應(yīng)的頁(yè)面部分在什么地方,這也許就是Jenkins當(dāng)初在開(kāi)發(fā)的時(shí)候所采用了Jelly頁(yè)面技術(shù)所帶來(lái)的局限性吧,同時(shí)插件也沒(méi)有中文解釋,只有部分英文資料,對(duì)于國(guó)內(nèi)的開(kāi)發(fā)者來(lái)說(shuō)使用有些困難,若從更深的角度講,在擴(kuò)展Jenkins的時(shí)候盡可能的使用插件會(huì)是更好的選擇,可是插件越多Jenkins的性能損耗就越大,這也是Jenkins陷入了難以走出的循環(huán)泥潭,開(kāi)發(fā)者需要選擇性能還是選擇擴(kuò)展的風(fēng)險(xiǎn)。另外Jenkins的build流程不夠清晰,甚至國(guó)內(nèi)有些軟件公司自己重寫了持續(xù)集成的管理頁(yè)面來(lái)調(diào)度Jenkins的build計(jì)劃,這已經(jīng)足夠說(shuō)明了使用流程不夠清晰這一點(diǎn)。

基于Jenkins的頁(yè)面不夠友好,插件使用不夠靈活方便,插件的增多帶來(lái)性能上的損耗以及構(gòu)建流程不夠清晰等這些缺陷,我們將開(kāi)始設(shè)計(jì)自己的CI系統(tǒng)方案,最終實(shí)現(xiàn)方便使用靈活配置且能夠滿足日常構(gòu)建的持續(xù)構(gòu)建系統(tǒng)。

2 持續(xù)構(gòu)建系統(tǒng)的方案設(shè)計(jì)與實(shí)現(xiàn)

2.1 持續(xù)構(gòu)建系統(tǒng)的組成部分及構(gòu)建流程

圖1 持續(xù)構(gòu)建系統(tǒng)的組成部分以及構(gòu)建流程

持續(xù)集成系統(tǒng)的基本要素有開(kāi)發(fā)人員、Git版本控制系統(tǒng)、持續(xù)集成構(gòu)建系統(tǒng)、多語(yǔ)言構(gòu)建工具以及構(gòu)建結(jié)果的反饋組成,這些組成部分之間相互配合共同完成從版本變化到自動(dòng)構(gòu)建,再到構(gòu)建結(jié)果的反饋,從而形成完整的構(gòu)建過(guò)程。持續(xù)集成的應(yīng)用場(chǎng)景開(kāi)始于開(kāi)發(fā)人員向版本控制庫(kù)提交變更代碼,由版本控制庫(kù)Git的Hook腳本向持續(xù)集成系統(tǒng)發(fā)出變更通知,然后持續(xù)集成系統(tǒng)從Git版本庫(kù)中檢出項(xiàng)目代碼的最新版本,繼而觸發(fā)持續(xù)集成系統(tǒng)進(jìn)行構(gòu)建。圖1展示了持續(xù)集成系統(tǒng)的基本組成部分和構(gòu)建流程。

2.2 持續(xù)構(gòu)建系統(tǒng)的方案設(shè)計(jì)

基于持續(xù)集成的基本理論以及多種語(yǔ)言項(xiàng)目的探究與實(shí)踐,提出了以下的持續(xù)構(gòu)建系統(tǒng)的設(shè)計(jì)方案,如圖2所示。

持續(xù)集成構(gòu)建系統(tǒng)中,我們選擇Git作為版本控制系統(tǒng),Git是近年來(lái)最流行的軟件之一,它的去中心化架構(gòu)以及源碼變更交換的速度被很多開(kāi)發(fā)者青睞。在Git的眾多優(yōu)點(diǎn)中,最有用的一點(diǎn)莫過(guò)于它的靈活性。通過(guò)“hooks”(鉤子)系統(tǒng),開(kāi)發(fā)者可以指定Git在不同事件、不同動(dòng)作下執(zhí)行特定的腳本。該系統(tǒng)中主要利用了Git中的鉤子系統(tǒng),當(dāng)開(kāi)發(fā)者向Git倉(cāng)庫(kù)提交變更的代碼的時(shí)候,觸發(fā)Git的hooks系統(tǒng),執(zhí)行鉤子腳本,繼而引發(fā)該項(xiàng)目進(jìn)行構(gòu)建。

圖2 持續(xù)集成構(gòu)建系統(tǒng)

如果是第一次進(jìn)行構(gòu)建時(shí),要執(zhí)行創(chuàng)建構(gòu)建項(xiàng)目,進(jìn)入到構(gòu)建配置頁(yè)面,進(jìn)行項(xiàng)目配置,包括項(xiàng)目名稱、項(xiàng)目類型、構(gòu)建工具、是否清掉舊的構(gòu)建歷史、是否測(cè)試、是否部署等等配置選項(xiàng)。構(gòu)建配置好后點(diǎn)擊保存,數(shù)據(jù)提交到后臺(tái)后將會(huì)被序列化保存到xml文件中。一切工作準(zhǔn)備好以后,點(diǎn)擊構(gòu)建,持續(xù)集成系統(tǒng)就會(huì)立刻執(zhí)行構(gòu)建流程,最后將構(gòu)建的結(jié)果顯示到集成構(gòu)建系統(tǒng)的Web頁(yè)面上,同時(shí)本地服務(wù)器也會(huì)保存構(gòu)建項(xiàng)目的最近一次的構(gòu)建結(jié)果,這樣每個(gè)開(kāi)發(fā)人員都可以查看集成構(gòu)建的信息。

2.3 持續(xù)構(gòu)建系統(tǒng)中的關(guān)鍵技術(shù)與實(shí)現(xiàn)

(1)構(gòu)建項(xiàng)目配置中項(xiàng)目類型的自動(dòng)檢出

傳統(tǒng)的CI服務(wù)器中構(gòu)建項(xiàng)目的配置頁(yè)面無(wú)法檢測(cè)出項(xiàng)目類型,都需要手動(dòng)配置,而且在配置的時(shí)候都不清楚本地環(huán)境中是否支持該種類型項(xiàng)目的構(gòu)建,即本地是否安裝了相應(yīng)的構(gòu)建工具。我們?cè)O(shè)計(jì)的持續(xù)構(gòu)建系統(tǒng)在設(shè)計(jì)之初就對(duì)現(xiàn)有的構(gòu)建工具做了大量的調(diào)研,將目前軟件行業(yè)常用的構(gòu)建工具進(jìn)行了分析,發(fā)現(xiàn)不同的構(gòu)建工具都有不同的構(gòu)建配置文件,這些配置文件都有固定的命名規(guī)則或后綴名,根據(jù)命名或后綴名,我們就可以判斷該項(xiàng)目是有哪種構(gòu)建工具構(gòu)建的。如果本地環(huán)境中沒(méi)有安裝構(gòu)建工具,系統(tǒng)也會(huì)有相應(yīng)的提醒功能。圖3展示了項(xiàng)目類型自動(dòng)檢出的簡(jiǎn)單流程。

圖3 項(xiàng)目類型自動(dòng)檢測(cè)

(2)調(diào)用構(gòu)建工具執(zhí)行構(gòu)建

構(gòu)建工具都是通過(guò)執(zhí)行shell命令執(zhí)行相應(yīng)的構(gòu)建操作,該系統(tǒng)是基于Java語(yǔ)言開(kāi)發(fā)的,因此我們調(diào)查研究了如何在Java環(huán)境里執(zhí)行shell命令,發(fā)現(xiàn)Java API中封裝了一個(gè)Runtime的類,該類封裝了操作系統(tǒng)的運(yùn)行時(shí)的環(huán)境,每個(gè)Java程序都有一個(gè)Runtime類實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接,其API中有一個(gè)方法exec(String command),該方法能夠在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令。我們通過(guò)讀取構(gòu)建配置里的配置參數(shù)將其轉(zhuǎn)換成相應(yīng)構(gòu)建工具中的構(gòu)建命令,后臺(tái)程序中將路徑信息path與構(gòu)建命令拼接作為參數(shù),將其傳入到exec方法,即可執(zhí)行構(gòu)建過(guò)程,如String command=path+"mvn compile";Runtime.get-Runtime().exec(command);便可完成對(duì)MAVEN類型的項(xiàng)目進(jìn)行編譯構(gòu)建,構(gòu)建的結(jié)果會(huì)返回到Web頁(yè)面進(jìn)行展示,同時(shí)也會(huì)將構(gòu)建結(jié)果序列化到本地進(jìn)行保存,保證其他人都可以查看集成構(gòu)建信息。

(3)本地部署與遠(yuǎn)程部署

由于不同語(yǔ)言的項(xiàng)目部署情況也不同,而且部署在自動(dòng)構(gòu)建部分屬于可選部分,目前我們?cè)谂渲庙?yè)面提供了一個(gè)Execute shell的輸入文本框,支持編寫自動(dòng)部署的腳本,待構(gòu)建完成后執(zhí)行自動(dòng)部署的操作,如果輸入內(nèi)容為空,默認(rèn)不執(zhí)行部署。

3 系統(tǒng)構(gòu)建結(jié)果展示

持續(xù)構(gòu)建系統(tǒng)采用Java Web開(kāi)發(fā)技術(shù),整體架構(gòu)為JSP+Bootstrap+Spring MVC+Spring技術(shù),運(yùn)行服務(wù)器為Tomcat。首先點(diǎn)擊創(chuàng)建一個(gè)構(gòu)建項(xiàng)目,設(shè)置項(xiàng)目構(gòu)建任務(wù)名稱,配置參數(shù)等,然后點(diǎn)擊保存、構(gòu)建,以Maven搭建的一個(gè)Web項(xiàng)目為例,構(gòu)建結(jié)果如圖4所示。

圖4 Maven類型項(xiàng)目的構(gòu)建結(jié)果

最后,構(gòu)建的結(jié)果是BUILD SUCCESS,實(shí)現(xiàn)預(yù)期的構(gòu)建效果。

4 結(jié)語(yǔ)

本文對(duì)持續(xù)集成的理論進(jìn)行了研究,分析了持續(xù)集成的基本組成部分及構(gòu)建流程,并對(duì)目前流行的持續(xù)集成工具Jenkins進(jìn)行了介紹,分析了不足的地方,在此研究學(xué)習(xí)的基礎(chǔ)之上,提出了基于Git的持續(xù)集成方案,設(shè)計(jì)并開(kāi)發(fā)了集成構(gòu)建系統(tǒng),該系統(tǒng)集成了前端模塊化打包方案webpack,并集成了多種語(yǔ)言的打包工具,能夠支持前后端打包一體化以及多語(yǔ)言項(xiàng)目的構(gòu)建,省去了Jenkins繁瑣的插件配置,優(yōu)化了構(gòu)建流程。此系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)由于時(shí)間有限,并考慮到自動(dòng)化測(cè)試復(fù)雜性,以及不同語(yǔ)言項(xiàng)目的部署也沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),我們提出的持續(xù)集成方案在這兩個(gè)方面沒(méi)有做太多的研究,提供了支持編寫部署腳本來(lái)進(jìn)行部署,后續(xù)會(huì)對(duì)不同語(yǔ)言項(xiàng)目的部署進(jìn)行分類設(shè)計(jì)不同的部署方案來(lái)代替部署腳本。

猜你喜歡
頁(yè)面系統(tǒng)
微信群聊總是找不到,打開(kāi)這個(gè)開(kāi)關(guān)就好了
大狗熊在睡覺(jué)
Smartflower POP 一體式光伏系統(tǒng)
刷新生活的頁(yè)面
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
基于PowerPC+FPGA顯示系統(tǒng)
半沸制皂系統(tǒng)(下)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
同一Word文檔 縱橫頁(yè)面并存
主站蜘蛛池模板: 免费在线a视频| 国产精品成人第一区| 麻豆国产精品| 国产剧情一区二区| 国产剧情无码视频在线观看| 亚洲区第一页| 91蜜芽尤物福利在线观看| 日韩精品无码不卡无码| 亚洲伦理一区二区| 福利视频一区| 色综合国产| 成人年鲁鲁在线观看视频| 秋霞一区二区三区| 亚洲欧美国产五月天综合| 色哟哟国产精品| 亚洲国语自产一区第二页| 欧美翘臀一区二区三区| 日韩福利视频导航| 特级精品毛片免费观看| 亚洲精品777| 亚洲无码高清一区| 国产成人亚洲毛片| 香蕉网久久| 亚洲精品第一页不卡| 欧美va亚洲va香蕉在线| 97超碰精品成人国产| 97se亚洲综合在线天天| 97成人在线视频| 最新日本中文字幕| 久99久热只有精品国产15| 99视频有精品视频免费观看| 日韩精品欧美国产在线| 亚洲区一区| 国产精品美女网站| 女人天堂av免费| 无码一区中文字幕| 日韩成人在线网站| 国产成年女人特黄特色毛片免| 亚洲视频色图| 亚洲无码高清一区二区| 国产成人欧美| 伊人五月丁香综合AⅤ| 国产成人欧美| 欧美乱妇高清无乱码免费| 99在线国产| 久久无码高潮喷水| 国产好痛疼轻点好爽的视频| 伊人久久大线影院首页| 久久香蕉国产线看观看精品蕉| 国内精品视频| 国产亚卅精品无码| 青青热久麻豆精品视频在线观看| 91久久夜色精品国产网站| 制服丝袜一区| 老司机久久99久久精品播放| 国产h视频免费观看| 欧美日韩免费观看| 美女视频黄频a免费高清不卡| 欧美激情视频一区二区三区免费| 国产男人的天堂| 国产精品人莉莉成在线播放| 中国一级特黄视频| 麻豆AV网站免费进入| 成人毛片免费在线观看| 91精品国产情侣高潮露脸| 婷婷午夜影院| 国产精品私拍在线爆乳| 九色国产在线| 欧美精品在线看| a天堂视频| 亚洲精品无码久久毛片波多野吉| 精品天海翼一区二区| a在线亚洲男人的天堂试看| 国产亚洲欧美在线视频| 狠狠色丁婷婷综合久久| 成人在线第一页| 亚洲精选无码久久久| 丁香六月激情综合| 朝桐光一区二区| 亚洲一区二区三区香蕉| 日韩在线观看网站| 99视频只有精品|