內(nèi)容摘要:持續(xù)集成Continuous Integration(CI)和持續(xù)交付Continuous Delivery(CD)是提高團(tuán)隊(duì)協(xié)同生產(chǎn)力的關(guān)鍵技術(shù)。很多時(shí)候一個(gè)軟件發(fā)布后更新和維護(hù)是痛點(diǎn),因?yàn)橐粋€(gè)版本的迭代和升級往往不是平滑過渡的。但是在互聯(lián)網(wǎng)時(shí)代,跟不上產(chǎn)品迭代節(jié)奏往往就要走向失敗。在談完GIT和DevOps理念之后,我們看看具體可以有那些工具可以幫助我們提高生產(chǎn)力。

1、可持續(xù)的概念
在當(dāng)今世界,特別是在科學(xué)研究方面,新技術(shù)方法層出不窮。但好的技術(shù)方法,如果不被人使用,不去做推廣,那就永遠(yuǎn)都是小眾游戲。習(xí)總書記曾經(jīng)說過:科學(xué)技術(shù)必須同社會發(fā)展相結(jié)合,學(xué)得再多,束之高閣,只是一種獵奇,只是一種雅興,甚至當(dāng)作奇技淫巧,那就不可能對現(xiàn)實(shí)社會產(chǎn)生作用。
有人說:“科研高大上,生產(chǎn)用不上”。面對科研成果沒法轉(zhuǎn)化的痛點(diǎn)問題越來越被重視。國家近年來一直期望通過政策引導(dǎo),打破從基礎(chǔ)研究、應(yīng)用研究到產(chǎn)業(yè)化的“死亡之谷”,促進(jìn)科研成果產(chǎn)業(yè)化。
我個(gè)人認(rèn)為:地球科學(xué)技術(shù)要想服務(wù)社會,必須通過IT驅(qū)動來加速新方法和數(shù)據(jù)的流轉(zhuǎn),提升使用價(jià)值,讓用戶對科研成果更有獲得感。
接下來我們就進(jìn)入主題,談?wù)劗?dāng)科研成果推到倉庫里面,后續(xù)還能干些啥。近年來,基于云設(shè)施的互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布,已經(jīng)形成了一套標(biāo)準(zhǔn)流程,最重要的組成部分就是持續(xù)集成。
持續(xù)集成的目的,就是讓產(chǎn)品可以快速迭代,同時(shí)還能保持高質(zhì)量。它的核心措施是,代碼集成到GIT倉庫之前,必須通過自動化測試。只要有一個(gè)測試用例失敗,就不能集成。
持續(xù)交付指的是,頻繁地將軟件的新版本,交付給質(zhì)量團(tuán)隊(duì)或者用戶,以供評審。如果評審?fù)ㄟ^,代碼就進(jìn)入生產(chǎn)階段。
持續(xù)交付可以看作持續(xù)集成的下一步。它強(qiáng)調(diào)的是,不管怎么更新,軟件是隨時(shí)隨地可以交付的。下圖是代碼推送到Github之后,通過工具可以幫你做的一系列工作:

圖中很多詞大家可能不認(rèn)識,但是有些圖標(biāo)應(yīng)該熟悉吧。最左邊的小八爪魚就是Github的logo,當(dāng)push到github倉庫后,通過webhooks設(shè)置,可以讓你的項(xiàng)目通過既定測試和集成流程開展后續(xù)工作,沒問題后打包成docker容器,再通過k8s(kubernetes)等容器編排工具分發(fā)到云上。
你不用擔(dān)心的是,只要配置好,這后續(xù)一切都是自動的。解決了那些問題呢?就是以前需要很多人力物力去測試、集成等一系列費(fèi)力不討好的工作,交給生產(chǎn)力工具去完成。如果你對圖1還不明白,哪首先的就是要好好琢磨理解呦...
2、那些工具可以用
現(xiàn)在的CI/CD工具應(yīng)該可以用眼花繚亂來形容,各大廠商說提供DevOps工具的廣告里面,肯定涉及到到這方面的工作。知道CI/CD的概念和用好這些工具還是兩碼事,特別是具體到如何配置復(fù)雜的腳本,根據(jù)不同語言和基礎(chǔ)設(shè)施來調(diào)試、運(yùn)行,更是比較花費(fèi)精力的。
但是大體上我覺得可以分為兩類,一種是需要你自己部署的,一種是已經(jīng)在云上可以直接用的。著名的Gitlab CI和Jenkins提供前者,部署到私有云中就可以直接用。而Travis和Azure Pipelines是可以直接在云上用的,特別是Travis 和 Azure Pipeline 對于開源項(xiàng)目可以免費(fèi)使用。
個(gè)人覺得如果是科研還是直接用云上,它們都會構(gòu)建和測試,免費(fèi)給你提供虛擬機(jī)、網(wǎng)絡(luò)帶寬和各種環(huán)境資源,還不用擔(dān)心穩(wěn)定性,有啥不好呢?
3、 結(jié)合一個(gè)實(shí)例來看看
在我們團(tuán)隊(duì)的GEOIST軟件包中也用到了上面兩個(gè)工具,請看下圖:

圖中最下面一排小標(biāo)志,就是項(xiàng)目中用到的一些技術(shù),最左邊的是Travis,最右邊的是Azure Pipelines。綠色的提示信息代表當(dāng)前項(xiàng)目的測試狀態(tài)(如果有問題會出現(xiàn)紅色提示)。要配置好這兩個(gè)工具,需要在工程中使用yml文件進(jìn)行配置,在geoist根目錄下你會發(fā)現(xiàn)有.travis.yml和azure-pipelines.yml兩個(gè)文件,這兩個(gè)文件里面你可以設(shè)置測試環(huán)境的一些要求和包依賴。
讓我們再看看,如果點(diǎn)開AzurePipelines的圖標(biāo),直接會出現(xiàn)下面界面:

一般GIT的Push命令執(zhí)行后,根據(jù)項(xiàng)目要測試的內(nèi)容多少,幾分鐘就可以完成測試,根據(jù)yml中設(shè)置的內(nèi)容,每一階段的結(jié)果如圖4所示。

我們這個(gè)項(xiàng)目中,僅針對python3.6環(huán)境進(jìn)行了集成測試,通過后就直接發(fā)布到Azure的云上面去了,對于用戶來講下次打開瀏覽器的jupyter就可以開始使用最新版本啦!對于科研人員來講,算法寫好,git push后啥事也不用管了,是不是很方便呢?