內(nèi)容摘要:持續(xù)集成Continuous Integration(CI)和持續(xù)交付Continuous Delivery(CD)是提高團隊協(xié)同生產(chǎn)力的關鍵技術能岩。很多時候一個軟件發(fā)布后更新和維護是痛點,因為一個版本的迭代和升級往往不是平滑過渡的拢肆。但是在互聯(lián)網(wǎng)時代,跟不上產(chǎn)品迭代節(jié)奏往往就要走向失敗饥漫。在談完GIT和DevOps理念之后折砸,我們看看具體可以有那些工具可以幫助我們提高生產(chǎn)力。
1续誉、可持續(xù)的概念
在當今世界,特別是在科學研究方面初肉,新技術方法層出不窮酷鸦。但好的技術方法,如果不被人使用,不去做推廣臼隔,那就永遠都是小眾游戲嘹裂。習總書記曾經(jīng)說過:科學技術必須同社會發(fā)展相結(jié)合,學得再多摔握,束之高閣寄狼,只是一種獵奇,只是一種雅興氨淌,甚至當作奇技淫巧泊愧,那就不可能對現(xiàn)實社會產(chǎn)生作用。
有人說:“科研高大上盛正,生產(chǎn)用不上”删咱。面對科研成果沒法轉(zhuǎn)化的痛點問題越來越被重視。國家近年來一直期望通過政策引導豪筝,打破從基礎研究痰滋、應用研究到產(chǎn)業(yè)化的“死亡之谷”,促進科研成果產(chǎn)業(yè)化续崖。
我個人認為:地球科學技術要想服務社會敲街,必須通過IT驅(qū)動來加速新方法和數(shù)據(jù)的流轉(zhuǎn),提升使用價值严望,讓用戶對科研成果更有獲得感多艇。
接下來我們就進入主題,談談當科研成果推到倉庫里面像吻,后續(xù)還能干些啥墩蔓。近年來,基于云設施的互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布萧豆,已經(jīng)形成了一套標準流程,最重要的組成部分就是持續(xù)集成昏名。
持續(xù)集成的目的涮雷,就是讓產(chǎn)品可以快速迭代,同時還能保持高質(zhì)量轻局。它的核心措施是洪鸭,代碼集成到GIT倉庫之前,必須通過自動化測試仑扑。只要有一個測試用例失敗览爵,就不能集成。
持續(xù)交付指的是镇饮,頻繁地將軟件的新版本蜓竹,交付給質(zhì)量團隊或者用戶,以供評審。如果評審通過俱济,代碼就進入生產(chǎn)階段嘶是。
持續(xù)交付可以看作持續(xù)集成的下一步。它強調(diào)的是蛛碌,不管怎么更新聂喇,軟件是隨時隨地可以交付的。下圖是代碼推送到Github之后蔚携,通過工具可以幫你做的一系列工作:
圖中很多詞大家可能不認識希太,但是有些圖標應該熟悉吧。最左邊的小八爪魚就是Github的logo酝蜒,當push到github倉庫后誊辉,通過webhooks設置,可以讓你的項目通過既定測試和集成流程開展后續(xù)工作秕硝,沒問題后打包成docker容器芥映,再通過k8s(kubernetes)等容器編排工具分發(fā)到云上。
你不用擔心的是远豺,只要配置好奈偏,這后續(xù)一切都是自動的。解決了那些問題呢躯护?就是以前需要很多人力物力去測試惊来、集成等一系列費力不討好的工作,交給生產(chǎn)力工具去完成棺滞。如果你對圖1還不明白裁蚁,哪首先的就是要好好琢磨理解呦...
2、那些工具可以用
現(xiàn)在的CI/CD工具應該可以用眼花繚亂來形容继准,各大廠商說提供DevOps工具的廣告里面枉证,肯定涉及到到這方面的工作。知道CI/CD的概念和用好這些工具還是兩碼事移必,特別是具體到如何配置復雜的腳本室谚,根據(jù)不同語言和基礎設施來調(diào)試、運行崔泵,更是比較花費精力的秒赤。
但是大體上我覺得可以分為兩類,一種是需要你自己部署的憎瘸,一種是已經(jīng)在云上可以直接用的入篮。著名的Gitlab CI和Jenkins提供前者,部署到私有云中就可以直接用幌甘。而Travis和Azure Pipelines是可以直接在云上用的潮售,特別是Travis 和 Azure Pipeline 對于開源項目可以免費使用痊项。
個人覺得如果是科研還是直接用云上,它們都會構(gòu)建和測試饲做,免費給你提供虛擬機线婚、網(wǎng)絡帶寬和各種環(huán)境資源,還不用擔心穩(wěn)定性盆均,有啥不好呢塞弊?
3、 結(jié)合一個實例來看看
在我們團隊的GEOIST軟件包中也用到了上面兩個工具泪姨,請看下圖:
圖中最下面一排小標志游沿,就是項目中用到的一些技術,最左邊的是Travis肮砾,最右邊的是Azure Pipelines诀黍。綠色的提示信息代表當前項目的測試狀態(tài)(如果有問題會出現(xiàn)紅色提示)。要配置好這兩個工具仗处,需要在工程中使用yml文件進行配置眯勾,在geoist根目錄下你會發(fā)現(xiàn)有.travis.yml和azure-pipelines.yml兩個文件,這兩個文件里面你可以設置測試環(huán)境的一些要求和包依賴婆誓。
讓我們再看看吃环,如果點開AzurePipelines的圖標,直接會出現(xiàn)下面界面:
一般GIT的Push命令執(zhí)行后洋幻,根據(jù)項目要測試的內(nèi)容多少郁轻,幾分鐘就可以完成測試,根據(jù)yml中設置的內(nèi)容文留,每一階段的結(jié)果如圖4所示好唯。
我們這個項目中,僅針對python3.6環(huán)境進行了集成測試燥翅,通過后就直接發(fā)布到Azure的云上面去了骑篙,對于用戶來講下次打開瀏覽器的jupyter就可以開始使用最新版本啦!對于科研人員來講森书,算法寫好替蛉,git push后啥事也不用管了,是不是很方便呢拄氯?