在當(dāng)下的數(shù)字化轉(zhuǎn)型浪潮中,其目標(biāo)之一便是找到一種新的工作方式,使組織能夠更高效和輕松地應(yīng)對快速的變化,同時以更快的速度向客戶交付更多價值。
CI/CD 是一種在應(yīng)用開發(fā)階段通過自動化的方式,頻繁向客戶交付應(yīng)用的方法,其核心概念是持續(xù)集成、持續(xù)交付和持續(xù)部署。CI/CD 可以讓持續(xù)的自動化與監(jiān)控貫穿整個生命周期,覆蓋從集成到測試再到交付與部署,與之相關(guān)聯(lián)的事務(wù)通常被統(tǒng)稱為“CI/CD 管道”,具體實施則由開發(fā)和運維團隊以敏捷開發(fā)的方式協(xié)作。
持續(xù)集成 CI
持續(xù)集成(CI)是支持迭代開發(fā)的重要概念,從 20 世紀 90 年代末開始流行,屬于開發(fā)人員的自動化流程。成功搭建的 CI 意味著應(yīng)用代碼會定期更新、測試并合并到共享存儲庫中。這種方案可以解決在一次開發(fā)中有太多應(yīng)用分支,從而導(dǎo)致相互沖突的問題。
現(xiàn)代應(yīng)用開發(fā)的目標(biāo)是讓多位開發(fā)人員同時處理同一應(yīng)用的不同功能。但如果企業(yè)有“合并日”計劃,即計劃在一天之內(nèi)合并所有分支源代碼,則可能造成工作繁瑣、耗時,而且需要手動完成所有工作。造成此困境的原因是,當(dāng)一個獨立工作的開發(fā)人員在對應(yīng)用進行更改時,可能也有其他開發(fā)人員在進行更改,這就會帶來沖突,而如果每個開發(fā)人員都有自定義的本地集成開發(fā)環(huán)境,而不是整個團隊基于云的 IDE 達成一致,那么問題會更嚴重。
基于此,持續(xù)集成 CI 可以有效改善上述問題。他可以幫助開發(fā)人員更頻繁地將代碼合并到共享分支或“主干”中去,一旦開發(fā)人員對應(yīng)用所做的更改被合并,系統(tǒng)就會通過自動構(gòu)建應(yīng)用并運行不同級別的自動化測試,來驗證這些更改,確保這些更改沒有對應(yīng)用造成破壞。這也意味著測試內(nèi)容會涵蓋從類和函數(shù),到組成整個應(yīng)用的不同模塊,如果自動化測試發(fā)現(xiàn)新代碼和現(xiàn)有代碼之間存在沖突,CI 則可以更加輕松快速地修復(fù)這些錯誤。
持續(xù)集成是一種基礎(chǔ)技術(shù),它可以幫助企業(yè)在實現(xiàn)目標(biāo)的道路上,盡早并且經(jīng)常性地發(fā)布功能,從而為業(yè)務(wù)創(chuàng)造價值。
持續(xù)交付、持續(xù)部署 CD
持續(xù)交付最早是敏捷方法中的一個概念,是將軟件交付過程從緩慢的節(jié)奏、較長的發(fā)布周期轉(zhuǎn)變?yōu)榭焖?、增量與迭代的方式的關(guān)鍵。有了這個概念,團隊便可確保開發(fā)的每個功能在任何時候都可以發(fā)布到生產(chǎn)環(huán)境中,借助一些自動化平臺和工具,只需要按下一個按鈕,就可以發(fā)布更改,無需等待滿場的測試和發(fā)布周期。
當(dāng)然,想要達成持續(xù)交付,產(chǎn)品開發(fā)團隊需要采用一些重要的技術(shù)與實踐,根據(jù)《數(shù)字化轉(zhuǎn)型:企業(yè)破局的 34 個錦囊》一書中傳授的技巧,這些技術(shù)包括:
構(gòu)建包括業(yè)務(wù)人員的更小的跨職能團隊。
將需求分節(jié)成更細粒度的、有價值的、可發(fā)布的獨立單元。
在“迭代”中工作,在開始下一個迭代之前,從開始到生產(chǎn)中完成一個小需求。
編寫完全自動化的測試,創(chuàng)建安全的網(wǎng)絡(luò)環(huán)境。這樣,短的發(fā)布周期就可以在沒有繁重的人工過程和工作的情況下得到適當(dāng)?shù)臏y試。
使用自動化技術(shù),以一致的方式在從開發(fā)到生產(chǎn)的所有環(huán)境中啟用“一鍵”部署。
將基礎(chǔ)設(shè)施“作為代碼”管理,以更容易地根據(jù)需要創(chuàng)建和重新創(chuàng)建環(huán)境,來消除瓶頸,實現(xiàn)可伸縮性和災(zāi)難恢復(fù)。
有了持續(xù)交付,團隊就可以確保在任何時候都能將開發(fā)的每個特性發(fā)布到生產(chǎn)環(huán)境中。
同時,CD 的另一個概念是指持續(xù)部署。對于一個成熟的 CI/CD 管道來說,最終階段的持續(xù)部署,是持續(xù)交付的延伸,持續(xù)部署可以自動將應(yīng)用發(fā)布到生產(chǎn)環(huán)境。持續(xù)部署在很大程度上需要依賴精心設(shè)計的測試自動化。
實際上,持續(xù)部署意味著開發(fā)人員對應(yīng)用的更改可能在更改完成之后的幾分鐘內(nèi)就生效,這更有利于持續(xù)接收和整合用戶反饋??偠灾?所有這些 CI/CD 的關(guān)聯(lián)步驟都有助于降低應(yīng)用的部署風(fēng)險,因此更便于頻繁發(fā)布對應(yīng)用的更改。
對于一個成熟的 CI/CD 管道來說,最后的階段是持續(xù)部署。作為持續(xù)交付——自動將生產(chǎn)就緒型構(gòu)建版本發(fā)布到代碼存儲庫——的延伸,持續(xù)部署可以自動將應(yīng)用發(fā)布到生產(chǎn)環(huán)境。由于在生產(chǎn)之前的管道階段沒有手動門控,因此持續(xù)部署在很大程度上都得依賴精心設(shè)計的測試自動化。
不過,在實施持續(xù)部署之前,還需要有自動化測試環(huán)節(jié),以適應(yīng) CI/CD 中的各種測試和發(fā)布階段。自動化測試可幫助實現(xiàn)持續(xù)交付,從而確保軟件質(zhì)量和安全,并提高代碼生產(chǎn)效率。
從 CI/CD 到 DevOps
2009 年左右,持續(xù)交付成為敏捷團隊的標(biāo)準(zhǔn)實踐,與此同時,另一種叫做 DevOps 的想法開始在開發(fā)者社區(qū)中流行開來。
在大多數(shù)技術(shù)組織中,軟件開發(fā)和運維是兩項各自獨立的活動。軟件系統(tǒng)投入生產(chǎn)后,會有一個專門的團隊做運維工作,包括管理和維護生產(chǎn)環(huán)境、軟件配置、監(jiān)視性能等等,并且處理生產(chǎn)過程中遇到的問題與處理用戶投訴等等。
而從敏捷開發(fā),到持續(xù)交付的出現(xiàn),再到 DevOps 概念的提出,其目的都是為促使企業(yè)更快、更頻繁地發(fā)布軟件。
近年來,許多以“解放開發(fā)者生產(chǎn)力”為宗旨的工具出現(xiàn),其本意都是希望讓開發(fā)人員從繁瑣的重復(fù)性編碼工作中解放出來,而將精力集中在更高難度的設(shè)計和規(guī)劃層面。從 DevOps 概念之中,新一代全自動軟件開發(fā)平臺正在普及。
近日,在有關(guān)基礎(chǔ)軟件黃金時代之下的新一代開發(fā)工具的討論之中,飛算 SoFlu 全自動軟件工程平臺頻頻出鏡。飛算云智總裁陳定瑋表示,飛算 SoFlu 全自動軟件工程平臺可以實現(xiàn)一次開發(fā)、到處部署,后續(xù)不與平臺本身強綁定,且整個平臺使用可視化的模式面向 Java 開發(fā),單從外表看與 BPM 模式類似,但內(nèi)在邏輯有很大不同,平臺上提供的每個組件都是一個技術(shù)點,類似于代碼塊。
飛算 SoFlu 全自動軟件工程平臺的出發(fā)點是想讓 DevOps 真正的落地,而實現(xiàn)“落地”,首先重點要解決的就是開發(fā)的問題, 包括開發(fā)的品質(zhì)、安全和效率等,再逐步解決測試和運維問題。
陳定瑋透露,飛算曾經(jīng)服務(wù)過一家國有背景的企業(yè),其主要需求是開發(fā)一個電商平臺,涵蓋商品推薦、下單、客服、秒殺等眾多單元。為了完成該平臺的研發(fā),該企業(yè)組建了一個數(shù)十人的研發(fā)團隊花費了一年左右,上線之后依舊出現(xiàn)了很多問題,比如功能無法滿足需求、系統(tǒng)穩(wěn)定性遭受質(zhì)疑、信息安全達不到要求,最重要的是無法在短期內(nèi)對上述問題進行修復(fù)。
在使用了飛算 SoFlu 全自動軟件工程平臺之后,該企業(yè)僅投入了五、六位研發(fā)人員在 45 天內(nèi),就基于飛算 SoFlu 全自動軟件工程平臺完成了開發(fā),且測試過程也表明平臺的穩(wěn)定性經(jīng)得起考驗,該電商平臺可以根據(jù)企業(yè)的后續(xù)需求獨立部署到任何平臺,所有數(shù)據(jù)企業(yè)均可自行存儲且平臺本身已經(jīng)將很多安全規(guī)范包含其中,保證了數(shù)據(jù)的安全。
不可否認,DevOps 的成功離不開這些平臺與工具的幫助,當(dāng)一個組織善用工具來改善自身的生產(chǎn)流程,將正確的內(nèi)容源源不斷交付至生產(chǎn)環(huán)境中,才能最有效地實現(xiàn)價值。