CODING X C-Life:DevOps 加速企業(yè)數(shù)智化
數(shù)字化開(kāi)始從抽象化、標(biāo)準(zhǔn)化走向智能化
2020 給全民普及了什么是線上化、數(shù)字化、智能化,也加速了企業(yè)的數(shù)字化轉(zhuǎn)型?!叭珨?shù)字化”時(shí)代,已經(jīng)不僅僅是簡(jiǎn)單粗放的數(shù)據(jù)采集、映射、抽象。 數(shù)字化開(kāi)始邁入高級(jí)階段——數(shù)據(jù)驅(qū)動(dòng)的智能化 :基于云管端 + AIoT 等為代表的新技術(shù)群落開(kāi)始大量涌現(xiàn),數(shù)智化企業(yè)思考的核心問(wèn)題轉(zhuǎn)向了如何以客戶運(yùn)營(yíng)為核心,通過(guò)智能化手段提高客戶全生命周期的體驗(yàn)。
作為物聯(lián)網(wǎng)大數(shù)據(jù)行業(yè)的排頭兵, 深圳數(shù)聯(lián)天下智能 科技 有限公司 (以下簡(jiǎn)稱數(shù)聯(lián)天下)傾力打造的 C-Life 大數(shù)據(jù)綜合計(jì)算服務(wù)平臺(tái),致力于為個(gè)人、行業(yè)、政府提供全周期、全鏈條、全維度、全方位的專(zhuān)業(yè)級(jí)運(yùn)營(yíng)顧問(wèn)式服務(wù)。依托著公司強(qiáng)大的研發(fā)投入與技術(shù)實(shí)力,數(shù)聯(lián)天下在智慧養(yǎng)老、智慧 健康 校園、智慧美業(yè)、智慧家庭、智慧酒店、智慧農(nóng)業(yè)、智慧水生態(tài)等多個(gè)智慧領(lǐng)域,打造了一批又一批的標(biāo)桿示范項(xiàng)目。
企業(yè)的敏捷性、適應(yīng)性、反脆弱性,決定其在這場(chǎng)數(shù)字化顛覆中的勝與負(fù)
在交付各個(gè)領(lǐng)域的智慧項(xiàng)目過(guò)程當(dāng)中,數(shù)聯(lián)天下的研發(fā)部門(mén)逐漸發(fā)現(xiàn)問(wèn)題:研發(fā)團(tuán)隊(duì)面對(duì)的是一個(gè)更加不確定、個(gè)性化、碎片化的市場(chǎng)需求。行業(yè)項(xiàng)目雖然存在著一定的通用性,但也因地制宜的存在大量定制化需求。如何讓個(gè)性化與規(guī)?;R頭并進(jìn)?多變的客戶需求帶動(dòng)了研發(fā)組織開(kāi)展與業(yè)務(wù)相適應(yīng)的調(diào)整。 通過(guò)研發(fā)流程數(shù)字化提升研發(fā)流程的敏捷性、適應(yīng)性、反脆弱性,數(shù)聯(lián)天下開(kāi)啟了研發(fā)提效之路 。
數(shù)聯(lián)天下研發(fā)團(tuán)隊(duì)和我們分享道:“客戶項(xiàng)目周期緊張,需求變化比較頻繁,開(kāi)發(fā)團(tuán)隊(duì)需要在短時(shí)間內(nèi)完成軟件開(kāi)發(fā)并發(fā)布上線。而在之前的研發(fā)流程當(dāng)中:發(fā)布流程長(zhǎng),審批環(huán)節(jié)多,發(fā)布節(jié)奏緩慢,開(kāi)發(fā)運(yùn)維之間沒(méi)有良好協(xié)作來(lái)提升發(fā)布效率。所以亟需打破跨部門(mén)之間的壁壘,減少開(kāi)發(fā)、測(cè)試、運(yùn)維之間的溝通環(huán)節(jié)、溝通成本。DevOps 是我們?cè)谳^短開(kāi)發(fā)周期內(nèi)開(kāi)發(fā)高質(zhì)量軟件的首選方法,希望通過(guò)使用 DevOps 平臺(tái) —— CODING 來(lái)提升客戶滿意度?!?/p>
區(qū)別于之前通過(guò)多個(gè)工具自建研發(fā)流程,數(shù)聯(lián)天下團(tuán)隊(duì)首先基于 CODING 的持續(xù)集成、制品庫(kù)、持續(xù)部署逐步提升交付帶寬,再將項(xiàng)目管理、研發(fā)數(shù)據(jù)管理等流程統(tǒng)一至 CODING ,漸進(jìn)式實(shí)現(xiàn)研發(fā)流程從需求提出到應(yīng)用部署的價(jià)值交付,從而讓研發(fā)團(tuán)隊(duì)各個(gè)角色基于統(tǒng)一平臺(tái)通力協(xié)作,按期保質(zhì)交付項(xiàng)目。
持續(xù)交付驅(qū)動(dòng)業(yè)務(wù)加速
在使用 CODING 的過(guò)程中,數(shù)聯(lián)天下研發(fā)團(tuán)隊(duì)遵循著循序漸進(jìn)的路線。首先基于 CODING 持續(xù)集成、制品庫(kù)、持續(xù)部署建立持續(xù)交付流水線。區(qū)別于自建 Jenkins 與 Nexus, CODING 的持續(xù)集成與制品庫(kù)開(kāi)箱即用 ,研發(fā)團(tuán)隊(duì)通過(guò)持續(xù)集成構(gòu)建好的 Docker 鏡像可以直接推送到 CODING 制品庫(kù)中,再通過(guò)持續(xù)部署拉取指定版本鏡像進(jìn)行部署。
CODING 持續(xù)集成在構(gòu)建腳本語(yǔ)法上全面兼容 Jenkins,支持?jǐn)?shù)聯(lián)天下無(wú)縫地遷移 Jenkins 的構(gòu)建到 CODING 中。并且支持 Docker 鏡像的構(gòu)建,在基礎(chǔ)功能上滿足了研發(fā)團(tuán)隊(duì)對(duì)構(gòu)建制品的遷移需求。
在使用上,CODING 比自建 Jenkins 要方便許多,打開(kāi)瀏覽器就可以使用,不需要繁瑣的機(jī)器配置、構(gòu)建環(huán)境搭建、軟件插件安裝。而且 CODING 提供了多地域境內(nèi)外構(gòu)建節(jié)點(diǎn),并優(yōu)化國(guó)內(nèi)訪問(wèn)海外主流鏡像鏈路,支持構(gòu)建任務(wù)中開(kāi)啟緩存,大大提升了構(gòu)建速度。在構(gòu)建資源的靈活性上,既支持?jǐn)?shù)聯(lián)天下使用 CODING 云主機(jī)進(jìn)行構(gòu)建,也支持?jǐn)?shù)聯(lián)天下將使用中的騰訊云機(jī)器設(shè)置為構(gòu)建資源。
在使用 CODING 制品庫(kù)之前,數(shù)聯(lián)天下團(tuán)隊(duì)基于開(kāi)源項(xiàng)目自建制品庫(kù),在使用自建私服制品庫(kù)常常遇到性能問(wèn)題或易用性問(wèn)題,比如一上傳大容量的 Docker 鏡像時(shí),自建的制品庫(kù)就常常服務(wù)不可用,導(dǎo)致后續(xù)一系列的版本發(fā)布受阻,使用 CODING 后這類(lèi)問(wèn)題就迎刃而解了。 CODING 制品庫(kù)是專(zhuān)為生產(chǎn)環(huán)境打造的企業(yè)級(jí)制品庫(kù) ,無(wú)論是制品庫(kù)的容量、分發(fā)效率都經(jīng)過(guò)產(chǎn)品團(tuán)隊(duì)精心優(yōu)化。數(shù)聯(lián)天下團(tuán)隊(duì)將所有制品推送至 CODING 制品庫(kù),利用 CODING 制品庫(kù)提供的版本策略、權(quán)限控制、安全掃描等能力對(duì)制品進(jìn)行了規(guī)范管理。
不僅僅是 Docker,CODING 制品庫(kù)提供了十多種主流制品類(lèi)型,包括 Helm、通用文件、npm、Maven、PyPI 等等,可以支持研發(fā)團(tuán)隊(duì)多樣化制品托管需求。同時(shí)制品庫(kù)提供的精細(xì)化的權(quán)限設(shè)置,支持每個(gè)制品庫(kù)設(shè)置項(xiàng)目?jī)?nèi)、團(tuán)隊(duì)內(nèi)、公開(kāi)的開(kāi)放范圍,針對(duì)多團(tuán)隊(duì)并行開(kāi)發(fā)的場(chǎng)景,數(shù)聯(lián)天下可以輕松地將通用組件設(shè)置為團(tuán)隊(duì)內(nèi)開(kāi)放,將項(xiàng)目獨(dú)有的制品設(shè)置為項(xiàng)目?jī)?nèi)可見(jiàn),既能加速公共制品在企業(yè)研發(fā)內(nèi)部的共享與流動(dòng),也能確保項(xiàng)目獨(dú)有制品的權(quán)限安全。
對(duì)于頻繁進(jìn)行商業(yè)交付的研發(fā)團(tuán)隊(duì),安全也是商業(yè)客戶關(guān)心問(wèn)題之一。CODING 制品庫(kù)除了解決數(shù)聯(lián)天下團(tuán)隊(duì)的制品托管問(wèn)題,還對(duì)制品的安全質(zhì)量進(jìn)行了規(guī)范。通過(guò)制品掃描設(shè)置質(zhì)量紅線標(biāo)準(zhǔn),杜絕問(wèn)題組件發(fā)布至生產(chǎn)環(huán)境,掃描方案還提供了詳細(xì)掃描記錄和缺陷統(tǒng)計(jì),方便研發(fā)團(tuán)隊(duì)快速修復(fù)。這在一定程度上提高了制品的安全性,減少了應(yīng)用在生產(chǎn)環(huán)境出現(xiàn)的安全漏洞問(wèn)題。
接下來(lái)就是打通持續(xù)交付的最后一環(huán)——持續(xù)部署。通過(guò)持續(xù)部署,研發(fā)團(tuán)隊(duì)可以自動(dòng)、頻繁地將軟件部署到各種生產(chǎn)環(huán)境,使軟件產(chǎn)品能夠快速地交付使用。
1. 清晰靈活的流程編排
數(shù)聯(lián)天下運(yùn)維團(tuán)隊(duì)首先根據(jù)測(cè)試流程、上線流程以及部署環(huán)境規(guī)劃好每個(gè)應(yīng)用的 部署流程 。針對(duì)開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、類(lèi)生產(chǎn)環(huán)境、生產(chǎn)環(huán)境分別創(chuàng)建不同的流程分支?;?CODING 持續(xù)部署,可以快速地編排出串行或者并行的部署流程:例如針對(duì)類(lèi)生產(chǎn)與生產(chǎn)環(huán)境,必須要在類(lèi)生產(chǎn)的集成測(cè)試(自動(dòng)化+人工)通過(guò)之后,才可以進(jìn)入生產(chǎn)環(huán)境發(fā)布;而多地域的生產(chǎn)環(huán)境發(fā)布,就可以并行部署,提高效率。
基于 CODING 持續(xù)部署 清晰靈活的流程編排,應(yīng)用所有的部署分支流程一目了然。
2. 人工審批加上自動(dòng)通知機(jī)制
針對(duì)過(guò)去運(yùn)維發(fā)布過(guò)程中的多環(huán)節(jié)、多審批、多等待的情況,數(shù)聯(lián)天下團(tuán)隊(duì)根據(jù)發(fā)布流程的級(jí)別差異將測(cè)試、產(chǎn)品經(jīng)理等角色加入審批環(huán)節(jié),配合自動(dòng)化部署過(guò)程和通知機(jī)制,解決了從前需要人工反復(fù)確認(rèn)部署環(huán)節(jié)的問(wèn)題;也解決了從前開(kāi)發(fā)人員只能等待運(yùn)維人員定時(shí)部署版本的難題,開(kāi)發(fā)和運(yùn)維人員都可以隨時(shí)隨地按需部署應(yīng)用。
每個(gè)環(huán)節(jié)的通知除了支持常見(jiàn)的站內(nèi)通知、企業(yè)微信、釘釘、Bearychat 等方式,還支持團(tuán)隊(duì)通過(guò) Webhook 的方式接入企業(yè)使用的其它協(xié)作工具,滿足團(tuán)隊(duì)的個(gè)性化通知需求。
3. 規(guī)范的制品版本規(guī)則
在項(xiàng)目緊張的開(kāi)發(fā)周期當(dāng)中,數(shù)聯(lián)天下的制品構(gòu)建地十分頻繁,制品數(shù)量也在急劇增長(zhǎng),其中包含了開(kāi)發(fā)自測(cè)的 snapshot 版本和正式轉(zhuǎn)測(cè)的版本。如何確保測(cè)試環(huán)境、生產(chǎn)環(huán)境等能夠始終選擇主干發(fā)布的穩(wěn)定版本,避免因?yàn)槭终`選到開(kāi)發(fā)自測(cè)版本?通過(guò)在持續(xù)部署中的制品分支策略制定所選制品的規(guī)則,杜絕以往人工選擇臨時(shí)分支版本導(dǎo)致的錯(cuò)誤情況。
4. 統(tǒng)一的部署控制臺(tái)
在數(shù)聯(lián)天下團(tuán)隊(duì)的日常應(yīng)用部署管理過(guò)程當(dāng)中,CODING 持續(xù)部署提供了以應(yīng)用為視角的控制臺(tái)。運(yùn)維人員可以對(duì)所有應(yīng)用的配置信息、基礎(chǔ)設(shè)施、資源分配、部署流程進(jìn)行全面管理,無(wú)需在各個(gè)項(xiàng)目視圖之中來(lái)回切換。這對(duì)于需要面對(duì)繁多項(xiàng)目的數(shù)聯(lián)天下研發(fā)團(tuán)隊(duì)來(lái)說(shuō), 統(tǒng)一的部署控制臺(tái)面板,大大提升了應(yīng)用部署管理效率。
在應(yīng)用部署完成后,就可以在 Kubernetes 集群面板中方便地檢查部署好的資源,包括集群內(nèi)資源的工作負(fù)載情況。一氣呵成的部署操作幫助運(yùn)維或者開(kāi)發(fā)人員一站式完成部署資源準(zhǔn)備、部署流程編排、應(yīng)用部署、部署后的檢查工作。
緊接著研發(fā)團(tuán)隊(duì)將代碼管理、項(xiàng)目管理遷移至 CODING 的代碼托管、項(xiàng)目協(xié)同中。告別了過(guò)去的 SVN 代碼管理,基于 CODING 代碼托管進(jìn)行 Git 式開(kāi)發(fā),基于代碼掃描與 Code Review 建立研發(fā)質(zhì)量的基線。切換到項(xiàng)目協(xié)同進(jìn)行項(xiàng)目管理后, 真正打通了從需求->代碼->制品->應(yīng)用的全部鏈路 ,數(shù)聯(lián)天下研發(fā)團(tuán)隊(duì)基于統(tǒng)一云平臺(tái)真正實(shí)現(xiàn)端到端的價(jià)值交付。和以前基于多個(gè)工具自建研發(fā)平臺(tái)的方式對(duì)比,統(tǒng)一研發(fā)管理平臺(tái)帶來(lái)的好處有:
基于 CODING 的 DevOps 實(shí)踐,數(shù)聯(lián)天下的交付帶寬達(dá)到了較大提升。DevOps 實(shí)踐給數(shù)聯(lián)天下的研發(fā)團(tuán)隊(duì)帶來(lái)的不僅僅是流程上、工具上的改變,也進(jìn)一步加深了團(tuán)隊(duì)的業(yè)務(wù)共識(shí)。所有角色都坐在了一起:測(cè)試、運(yùn)維、開(kāi)發(fā)、產(chǎn)品、項(xiàng)目管理等,研究如何基于統(tǒng)一平臺(tái)通力協(xié)作,按期保質(zhì)地交付項(xiàng)目,服務(wù)好客戶。
數(shù)據(jù)已經(jīng)成為生產(chǎn)的要素之一
研發(fā)數(shù)字化不僅僅是自動(dòng)化流程的搭建,更重要的是在數(shù)字化落地過(guò)程當(dāng)中,如何將有機(jī)串聯(lián)的研發(fā)環(huán)節(jié)發(fā)揮出 1 + 1 > 2 的效果?如何讓研發(fā)數(shù)據(jù)服務(wù)于研發(fā)?
目前數(shù)聯(lián)天下的研發(fā)團(tuán)隊(duì)已經(jīng)將研發(fā)全流程切換到 CODING,慢慢積累的研發(fā)數(shù)據(jù)也給研發(fā)管理帶來(lái)了新的指引。通過(guò)效能度量,可以清晰分析成員工作負(fù)載;通過(guò)儀表盤(pán)可以清晰看到代碼提交數(shù)、事項(xiàng)完成數(shù)、構(gòu)建次數(shù)、發(fā)布次數(shù)等等多個(gè)維度的數(shù)據(jù)展示。這些數(shù)據(jù)也將支撐著研發(fā)團(tuán)隊(duì)快速地調(diào)整和檢視以適應(yīng)更加多變的未來(lái)。
數(shù)聯(lián)天下研發(fā)團(tuán)隊(duì)負(fù)責(zé)人告訴我們:“最開(kāi)始選擇 CODING,因?yàn)?CODING 持續(xù)集成全面兼容 Jenkins 的持續(xù)集成服務(wù),支持 Java、Python、Node.js 等所有主流語(yǔ)言,并且支持 Docker 鏡像的構(gòu)建。這與公司現(xiàn)有的發(fā)布方式,架構(gòu)體系相吻合。在使用了一段時(shí)間后,不僅僅是持續(xù)集成,包括 CODING 制品庫(kù)、持續(xù)部署在內(nèi)的 DevOps 工具給我們的研發(fā)流程帶來(lái)不少提升,也期待 CODING 能夠在研發(fā)工具鏈上給我們帶來(lái)更多驚喜?!?/p>
在全面了解數(shù)聯(lián)天下的 DevOps 實(shí)施路徑之后,我們也發(fā)現(xiàn)企業(yè)的研發(fā)變革不是一蹴而就的,需要從流程上環(huán)環(huán)打通, 選擇一個(gè)遷移成本低、使用門(mén)檻低、功能靈活的一站式研發(fā)管理工具,能夠讓變革事半功倍。
我們欣喜地看到,數(shù)聯(lián)天下一直走在提升內(nèi)部效率的道路上,這家志在提升各行業(yè)數(shù)智化水平的企業(yè)全然擁抱了研發(fā)數(shù)字化,我們期待 C-Life 憑借著變革初心與極速交付能力,逐步成為智慧生活的強(qiáng)有力支撐平臺(tái)。在這場(chǎng)數(shù)字化顛覆中,CODING 也會(huì)堅(jiān)定地與研發(fā)團(tuán)隊(duì)站在一起,依托 DevOps、云原生、敏捷等研發(fā)利器,幫助各行各業(yè)改進(jìn)、提升并創(chuàng)新。