李正陽(yáng)
【摘? 要】系統(tǒng)研發(fā),是IT公司根據(jù)自身的業(yè)務(wù)情況以及用戶的相關(guān)需求,對(duì)業(yè)務(wù)不斷實(shí)現(xiàn)和迭代的過(guò)程。在這個(gè)過(guò)程中,代碼集成與交付方式影響了整個(gè)團(tuán)隊(duì)的工作進(jìn)度和效率,優(yōu)秀的持續(xù)集成與持續(xù)交付的相關(guān)技術(shù)可以使開(kāi)發(fā)人員實(shí)現(xiàn)自動(dòng)化管理,將精力集中到功能實(shí)現(xiàn)上,更快響應(yīng)市場(chǎng)變化。論文通過(guò)調(diào)研持續(xù)集成與持續(xù)交付的相關(guān)技術(shù),結(jié)合時(shí)下流行的DevOps概念及容器技術(shù),提出一種典型的實(shí)現(xiàn)方案,為系統(tǒng)研發(fā)效率的提升提供借鑒和參考。
【Abstract】System research and development is a process in which IT companies constantly realize and iterate the business according to their own business situation and the relevant needs of users. In this process, the way of code integration and delivery affects the work schedule and efficiency of the entire team. Excellent technologies related to continuous integration and continuous delivery enable developers to automate management, focus on functional realization, and respond to market changes more quickly. By investigating the technology related to continuous integration and continuous delivery, combining the current popular DevOps concept and container technology, the paper proposes a typical realization scheme to provide a reference for the improvement of system research and development efficiency.
【關(guān)鍵詞】系統(tǒng)研發(fā);持續(xù)集成;持續(xù)交付;DevOps;容器
【Keywords】system research and development; continuous integration; continuous delivery; DevOps; container
【中圖分類號(hào)】TP311.5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文獻(xiàn)標(biāo)志碼】A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文章編號(hào)】1673-1069(2021)03-0177-04
1 引言
近年來(lái),互聯(lián)網(wǎng)、IT行業(yè)蓬勃發(fā)展,極大地改變了中國(guó)人民的生活方式。中國(guó)的互聯(lián)網(wǎng),經(jīng)歷了三個(gè)時(shí)代,包括門戶時(shí)代、搜索社交時(shí)代,以及目前的大互聯(lián)網(wǎng)時(shí)代,可以說(shuō),每一個(gè)時(shí)代的產(chǎn)生或發(fā)展都對(duì)中國(guó)互聯(lián)網(wǎng)的歷史留下了深深的足跡,推動(dòng)了中國(guó)互聯(lián)網(wǎng)不斷實(shí)現(xiàn)創(chuàng)新與發(fā)展。
在目前的大互聯(lián)網(wǎng)時(shí)代,IT公司如雨后春筍般不斷涌入各行各業(yè),對(duì)人們衣、食、住、行的傳統(tǒng)模式不斷進(jìn)行創(chuàng)新和發(fā)展,而細(xì)分到每一個(gè)領(lǐng)域、每一個(gè)產(chǎn)品、每一個(gè)軟件、每一個(gè)功能,背后都是一個(gè)個(gè)IT團(tuán)隊(duì)進(jìn)行的系統(tǒng)研發(fā)、功能研發(fā),為用戶造就的基于互聯(lián)網(wǎng)模式的技術(shù)革新和功能革新。對(duì)于IT團(tuán)隊(duì)來(lái)說(shuō),一個(gè)產(chǎn)品從無(wú)到有的過(guò)程中,在各個(gè)方面、各個(gè)環(huán)節(jié)都需要不斷精進(jìn),從而不斷發(fā)展,不斷增加效益。
對(duì)于系統(tǒng)研發(fā)來(lái)說(shuō),項(xiàng)目集成和部署作為系統(tǒng)研發(fā)周期中重要的組成部分,得到了業(yè)界的廣泛關(guān)注。業(yè)界領(lǐng)導(dǎo)者認(rèn)為,持續(xù)集成與持續(xù)交付對(duì)于提升系統(tǒng)研發(fā)的效率尤為重要,因?yàn)槠髽I(yè)渴望縮短產(chǎn)品上市時(shí)間。持續(xù)集成和持續(xù)交付對(duì)于產(chǎn)品的質(zhì)量有著改善和提升的作用,同時(shí),也可以在一定程度上降低項(xiàng)目的時(shí)間成本以及空間成本,對(duì)于企業(yè)來(lái)講,可以使得企業(yè)在日益激烈的市場(chǎng)競(jìng)爭(zhēng)中得到優(yōu)勢(shì),在為用戶不斷提供優(yōu)質(zhì)服務(wù)的同時(shí)得到快速發(fā)展。
因此,本文基于系統(tǒng)研發(fā)環(huán)節(jié)中的痛點(diǎn)之一,即項(xiàng)目集成、部署與交付,對(duì)持續(xù)集成與持續(xù)交付相關(guān)內(nèi)容進(jìn)行介紹,并結(jié)合時(shí)下流行的DevOps概念及容器技術(shù),探索目前行業(yè)內(nèi)相關(guān)的技術(shù),并給出一種典型的實(shí)現(xiàn)方案,為系統(tǒng)研發(fā)效率的提升提供借鑒和參考。
2 DevOps與持續(xù)集成持續(xù)交付
2.1 DevOps
在介紹系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付之前,需要先引入DevOps的概念,以便理解持續(xù)集成與持續(xù)交付在系統(tǒng)研發(fā)中所處的位置。DevOps,即開(kāi)發(fā)(Development)和運(yùn)維(Operations)的組合,指兩個(gè)工種之間的協(xié)同工作(見(jiàn)圖1)。在傳統(tǒng)的系統(tǒng)研發(fā)流程中,開(kāi)發(fā)人員進(jìn)行軟件開(kāi)發(fā)、功能構(gòu)建、項(xiàng)目迭代,而運(yùn)維人員負(fù)責(zé)硬件搭建、軟件環(huán)境部署以及服務(wù)發(fā)布。原本流程各自獨(dú)立,但由于缺乏溝通導(dǎo)致產(chǎn)品和服務(wù)交付效率較低,于是DevOps應(yīng)運(yùn)而生,其旨在促進(jìn)軟件開(kāi)發(fā)工程師和基礎(chǔ)設(shè)施運(yùn)維工程師之間加強(qiáng)合作與溝通,共同組建基于自動(dòng)化工具的持續(xù)集成、持續(xù)交付流程,最終達(dá)到項(xiàng)目構(gòu)建、代碼測(cè)試、軟件發(fā)布的全流程的自動(dòng)化,從而使整個(gè)系統(tǒng)研發(fā)流程能夠更加及時(shí)、可靠以及穩(wěn)定。
通過(guò)對(duì)DevOps概念的解讀不難發(fā)現(xiàn),系統(tǒng)從實(shí)現(xiàn)功能到上線交付,需要團(tuán)隊(duì)中開(kāi)發(fā)人員與運(yùn)維人員的緊密配合,通過(guò)不斷的溝通合作,讓軟件發(fā)布更加高效,而系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付,需要引入DevOps,通過(guò)開(kāi)發(fā)與運(yùn)維的協(xié)同合作,促進(jìn)提升系統(tǒng)研發(fā)整體流程的可靠性與穩(wěn)定性。
DevOps的實(shí)施,可以使開(kāi)發(fā)工程師和運(yùn)維工程師加強(qiáng)交流與溝通,互相熟悉對(duì)方的工作流程、工作模式,進(jìn)而反思自己工作中的問(wèn)題和可以改進(jìn)的內(nèi)容,反饋到工作中,改善系統(tǒng)研發(fā)流程中存在的各種問(wèn)題,并通過(guò)自動(dòng)化思維的引入、自動(dòng)化工具的實(shí)現(xiàn),提高系統(tǒng)研發(fā)全流程的工作效率。近年來(lái)的研究數(shù)據(jù)表明,已經(jīng)率先引進(jìn)并發(fā)展DevOps概念的企業(yè),開(kāi)發(fā)工程師與運(yùn)維工程師在提升協(xié)作效能、實(shí)現(xiàn)自動(dòng)化流程后,可以將產(chǎn)品開(kāi)發(fā)的效率提升20%。
要想實(shí)現(xiàn)DevOps的核心理念,就需要實(shí)現(xiàn)系統(tǒng)研發(fā)的持續(xù)集成和持續(xù)交付。有別于傳統(tǒng)的開(kāi)發(fā)模式,DevOps將開(kāi)發(fā)、測(cè)試、部署作為一個(gè)單元的持續(xù)性的集成和交付,可以說(shuō)持續(xù)集成和持續(xù)交付,就是DevOps的核心理念。DevOps與傳統(tǒng)開(kāi)發(fā)模式的對(duì)比如圖2所示。
2.2 持續(xù)集成與持續(xù)交付
首先,對(duì)于持續(xù)集成與持續(xù)交付這兩個(gè)內(nèi)容的相關(guān)概念進(jìn)行介紹。
持續(xù)集成,英文縮寫為CI(Continuous Integration),在系統(tǒng)研發(fā)中,集成可以理解為對(duì)代碼進(jìn)行階段性的提交,進(jìn)行功能的整合和實(shí)現(xiàn),這個(gè)過(guò)程會(huì)伴隨著一些未知的問(wèn)題和錯(cuò)誤。而持續(xù)集成是一種系統(tǒng)研發(fā)的迭代,團(tuán)隊(duì)中的開(kāi)發(fā)人員通過(guò)一次又一次地將代碼上傳到代碼倉(cāng)庫(kù),進(jìn)行集成測(cè)試和功能驗(yàn)證,從而實(shí)現(xiàn)項(xiàng)目與產(chǎn)品的迭代,實(shí)現(xiàn)代碼零庫(kù)存積壓,不斷地改善和解決問(wèn)題,且每次提交都能通過(guò)自動(dòng)化測(cè)試進(jìn)行驗(yàn)證,從而使問(wèn)題盡早暴露和解決。
持續(xù)交付,英文縮寫為CD(Continuous Delivery),持續(xù)交付對(duì)于持續(xù)集成的概念來(lái)說(shuō)是一種補(bǔ)充以及擴(kuò)展,主要思想就是在自動(dòng)化測(cè)試通過(guò)后,將軟件及服務(wù)部署更新到產(chǎn)品環(huán)境,即持續(xù)交付的本質(zhì),就是為用戶及時(shí)地提供每個(gè)構(gòu)建成功的軟件、應(yīng)用及服務(wù)。
其次,綜合上述內(nèi)容可以看出,DevOps與CI/CD緊密相關(guān),我們可以認(rèn)為DevOps是理論,CI/CD是實(shí)踐,對(duì)于DevOps的概念來(lái)講,要實(shí)現(xiàn)開(kāi)發(fā)與運(yùn)維全流程的一體化,是需要實(shí)現(xiàn)CI/CD,通過(guò)自動(dòng)化工具來(lái)驅(qū)動(dòng)整個(gè)流程,最終實(shí)現(xiàn)流程自動(dòng)化(見(jiàn)圖3)。
通過(guò)持續(xù)集成和持續(xù)交付技術(shù)的實(shí)現(xiàn),可以真正實(shí)現(xiàn)代碼的零庫(kù)存管理,代碼越早推到線上,用戶就能越早用到,就可以提供更大的商業(yè)價(jià)值。反之,如果代碼不斷積壓,那么,項(xiàng)目及服務(wù)就會(huì)更少地得到市場(chǎng)的檢驗(yàn),同時(shí),代碼積壓會(huì)導(dǎo)致一個(gè)很嚴(yán)重的問(wèn)題,即代碼間交叉感染,隨之而來(lái)的是管理成本會(huì)越來(lái)越高??梢哉f(shuō)持續(xù)集成和持續(xù)交付技術(shù)對(duì)于如今競(jìng)爭(zhēng)壓力越來(lái)越大的IT企業(yè)至關(guān)重要。
3 開(kāi)源容器引擎Docker
在介紹CI/CD的具體實(shí)現(xiàn)流程之前,需要介紹虛擬化家族的一個(gè)重要工具——Docker,其作為實(shí)現(xiàn)DevOps最合適的工具之一,也是近年來(lái)非常流行的技術(shù)概念
3.1 Docker技術(shù)概念
Docker作為一個(gè)近年來(lái)大家早已耳熟能詳?shù)募夹g(shù)概念,因此,無(wú)須過(guò)多解釋其技術(shù)內(nèi)容,對(duì)于DevOps以及系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付來(lái)說(shuō),Docker可以作為所有服務(wù)的載體,在資源利用、服務(wù)隔離、啟動(dòng)效率等方面提供強(qiáng)有力的技術(shù)支撐。
Docker作為一個(gè)虛擬環(huán)境的容器,可以將開(kāi)發(fā)人員的代碼、運(yùn)行環(huán)境、配置文件共同打包并發(fā)布,無(wú)縫銜接持續(xù)集成持續(xù)交付的思路,其多平臺(tái)可移植性、沙箱機(jī)制對(duì)于開(kāi)發(fā)工程師及運(yùn)維人員來(lái)講可以說(shuō)非常友好。
3.2 Docker主要優(yōu)勢(shì)
通過(guò)相關(guān)技術(shù)概念,可以總結(jié)出Docker具有以下幾個(gè)方面的優(yōu)勢(shì):
資源利用:Docker與VMware等傳統(tǒng)虛擬化軟件不同,其運(yùn)行于操作系統(tǒng)層之上,對(duì)資源的彈性利用,內(nèi)存使用及存儲(chǔ)使用的優(yōu)化,使得其在資源利用方面具有得天獨(dú)厚的優(yōu)勢(shì)。
啟動(dòng)快速:Docker容器,其優(yōu)點(diǎn)之一,即直接在宿主內(nèi)核層運(yùn)行,所以不需要啟動(dòng)整個(gè)操作系統(tǒng),所以可以達(dá)到秒級(jí),甚至毫秒級(jí)的容器啟動(dòng)能力,可以很好地減少開(kāi)發(fā)、測(cè)試、部署的時(shí)間,提高團(tuán)隊(duì)的工作效率。
持續(xù)集成:上文提到其沙箱機(jī)制、容器打包機(jī)制與持續(xù)集成持續(xù)交付非常契合。
3.3 Docker與持續(xù)集成持續(xù)交付
上文介紹了Docker的一些基礎(chǔ)概念和優(yōu)勢(shì),下文對(duì)Docker在系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付中的作用和地位進(jìn)行介紹。
如圖4所示,除去下文介紹的Git、Jenkins等內(nèi)容,Docker在整個(gè)持續(xù)集成與持續(xù)交付中處于OS層和應(yīng)用層之間,向下兼容操作系統(tǒng)獲取系統(tǒng)資源,向上為系統(tǒng)研發(fā)的前中后臺(tái)提供各項(xiàng)服務(wù),其中,Docker Engine負(fù)責(zé)服務(wù)的承載和發(fā)布,Docker Registry負(fù)責(zé)本地鏡像的管理與復(fù)用。整個(gè)Docker位于系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付的底層,提供靈活快速、伸縮性強(qiáng)、可移植性強(qiáng)的服務(wù)支撐。
4 基于容器的持續(xù)集成與持續(xù)交付技術(shù)的實(shí)現(xiàn)
下文主要介紹系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付中一種基于Docker+GitLab+Jenkins全流程的實(shí)現(xiàn)路徑,體現(xiàn)CI/CD的實(shí)現(xiàn)思路。
4.1 CI/CD全流程模型
結(jié)合具體的工作實(shí)踐,下文介紹了一個(gè)典型的基于Docker等開(kāi)源工具實(shí)現(xiàn)的系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付的流程模型。
如圖5所示,流程從左上開(kāi)始,開(kāi)發(fā)人員每次在本地對(duì)項(xiàng)目進(jìn)行優(yōu)化更新后,將代碼傳至遠(yuǎn)程的代碼倉(cāng)庫(kù),通過(guò)事先部署完成的監(jiān)控系統(tǒng)監(jiān)聽(tīng)代碼倉(cāng)庫(kù)的變化,得到變化通知后,首先通知源碼獲取系統(tǒng)獲取最新的程序源碼,然后程序打包系統(tǒng)對(duì)最新的源碼進(jìn)行打包形成可執(zhí)行文件,最后通過(guò)部署系統(tǒng)部署到遠(yuǎn)程服務(wù)器上進(jìn)行實(shí)現(xiàn)。
部署成功后,通過(guò)微信接口實(shí)現(xiàn)的小程序,用微信推送給開(kāi)發(fā)人員,流程返回左上,實(shí)現(xiàn)業(yè)務(wù)閉環(huán)。全程從開(kāi)發(fā)人員一鍵提交代碼開(kāi)始到業(yè)務(wù)部署完成并收到通知,實(shí)現(xiàn)脫離人工的完全的自動(dòng)化。
4.2 CI/CD工具
4.2.1 GitLab
上文介紹的代碼倉(cāng)庫(kù),可以通過(guò)基于Git實(shí)現(xiàn)的用于倉(cāng)庫(kù)管理系統(tǒng)的開(kāi)源項(xiàng)目GitLab實(shí)現(xiàn)。GitLab是一種代碼管理的服務(wù),使用Git作為其核心技術(shù),具有Web服務(wù)的前端界面,并通過(guò)管理界面為程序員及管理者提供代碼倉(cāng)庫(kù)的創(chuàng)建、訪問(wèn)、上傳、更新服務(wù)。與GitHub相比,GitLab是本地的私有代碼倉(cāng)庫(kù),比起GitHub在CI/CD的網(wǎng)絡(luò)流程中更加快速,同時(shí),同樣具有瀏覽代碼、注釋等功能,所以在CI/CD中更受歡迎。
4.2.2 Jenkins
上文介紹的集監(jiān)控系統(tǒng)、源碼獲取系統(tǒng)、程序打包系統(tǒng)、部署系統(tǒng),通過(guò)Jenkins這個(gè)系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付的核心組件可以集成實(shí)現(xiàn)。Jenkins是一個(gè)非常流行的且功能異常強(qiáng)大的用于持續(xù)集成持續(xù)交付的可視化Web工具,可以說(shuō)是構(gòu)建CI/CD思路的最核心功能的工具,其開(kāi)發(fā)語(yǔ)言兼容性、代碼管理工具的兼容性都非常好,具有豐富的插件和開(kāi)放的接口開(kāi)發(fā)機(jī)制。
總體來(lái)說(shuō),Jenkins就是CI/CD流程中的“心臟”,可以接收開(kāi)發(fā)者提供的任何輸入,并為運(yùn)維人員提供方便可用的輸出,從而支撐項(xiàng)目組及開(kāi)發(fā)團(tuán)隊(duì)在系統(tǒng)研發(fā)中的持續(xù)部署、持續(xù)交付流程。
4.3 CI/CD實(shí)際工作流程
CI/CD的實(shí)際工作流程如下:
IT程序員進(jìn)行代碼的版本更新,通過(guò)綁定Git的開(kāi)發(fā)工具,將代碼更新提交到遠(yuǎn)程GitLab倉(cāng)庫(kù)中。通過(guò)Git的賬號(hào)與密碼的認(rèn)證,以及對(duì)應(yīng)的代碼倉(cāng)庫(kù)權(quán)限的判斷,同時(shí),滿足條件之后可以將更新后的代碼上傳到指定項(xiàng)目的指定分支。
代碼倉(cāng)庫(kù)接收到代碼的更新,會(huì)出現(xiàn)update時(shí)間的變化,以及在history中對(duì)應(yīng)小版本tag標(biāo)簽,在GitLab中也可以進(jìn)行分支的控制,如合并、回滾等操作。代碼更新后,等待Jenkins的SCM,即Source Code Management輪詢到代碼變化并拉取代碼。
通過(guò)Source Code Management設(shè)定輪詢時(shí)間,包括定時(shí)輪詢和循環(huán)輪詢。Jenkins的SCM輪詢到代碼倉(cāng)庫(kù)的變化,開(kāi)始拉取遠(yuǎn)程代碼,并進(jìn)行構(gòu)建。
Jenkins也是系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付流程的絕對(duì)核心,負(fù)責(zé)兼顧代碼變更的監(jiān)控、代碼的打包、代碼的傳輸?shù)裙δ堋?/p>
代碼構(gòu)建結(jié)束后,由Jenkins推送至服務(wù)器進(jìn)行上線,服務(wù)可以通過(guò)Docker進(jìn)行構(gòu)建,從而使得各個(gè)服務(wù)彼此獨(dú)立、互不影響。此外,還可以在Jenkins上通過(guò)綁定微信、郵件等手段對(duì)構(gòu)建結(jié)果進(jìn)行實(shí)時(shí)推送。
全流程從程序員提交代碼更新開(kāi)始,歷經(jīng)GitLab、Jenkins、Docker三大開(kāi)源工具,最終成功部署,代碼更新迭代,并將通知推送到微信或郵箱,完成系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付,實(shí)現(xiàn)了DevOps的基本思想。
5 結(jié)語(yǔ)
本文通過(guò)介紹DevOps、持續(xù)集成與持續(xù)交付、容器等概念與技術(shù),闡明了系統(tǒng)研發(fā)中持續(xù)集成與持續(xù)交付的重要意義,并在文中介紹了一種典型的基于容器的系統(tǒng)研發(fā)的持續(xù)集成與持續(xù)交付的實(shí)現(xiàn)方法。
【參考文獻(xiàn)】
【1】王玉梅.持續(xù)集成理論在軟件開(kāi)發(fā)中的應(yīng)用[J].數(shù)字通信世界,2020,1(1):222.
【2】王冶青.DevOps在企業(yè)信息化戰(zhàn)略中的應(yīng)用分析[J].信息系統(tǒng)工程,2020,10(1):113-114.
【3】劉晶晶,朱寅非.基于Docker引擎虛擬化技術(shù)的應(yīng)用研究[J].軟件,2020,10(1):1-4.