2009 年 6 月份,John Allspaw 及 Paul Hammond 在速度大會 (Velocity) 上分享了在 Flickr 中如何通過加強 Dev(開發(fā)團隊)和 Ops(運維團隊)之間的協(xié)作,從而加快應(yīng)用部署頻率的演講 [2]。隨后,關(guān)于 Dev 和 Ops 之間協(xié)作的討論一直在 Twitter 上持續(xù)進行,當(dāng)年的 10 月份,在 Twitter 上首次出現(xiàn)了 DevOps( 開發(fā)運維一體化 ) 一詞 [1]。在隨后的幾年里,DevOps 不僅引起了工程界的大量關(guān)注和實踐,同時,也吸引了大量學(xué)術(shù)界人士的興趣。Gartner 2015 年所做的調(diào)查結(jié)果表明,目前已有 29% 的企業(yè)在使用 DevOps。圖一所示為 Gartner 對各 IT 技術(shù)發(fā)展熱度預(yù)測的研究,根據(jù)其研究,目前 DevOps 正處于其發(fā)展階段的高潮期。
圖 1. Gartner 關(guān)于各 IT 技術(shù)發(fā)展熱度的預(yù)測

DevOps,其主要目的就是通過消除開發(fā)部門與運維部門之間的壁壘,從而使得一個企業(yè)的 IT 組織能夠在敏捷地適應(yīng)市場變化的同時,將一個企業(yè)的業(yè)務(wù)能力通過創(chuàng)新性的解決方案快速地從 IT 部門的開發(fā)過程推向用戶。它主要利用了精益的思想 [4],通過消除 IT 部門整個產(chǎn)品交付流中所存在的浪費及障礙,從而達到快速交付的目的。
對于一個較大的組織或者企業(yè)來說,其 IT 部門有其多年形成的固有組織結(jié)構(gòu)、文化氛圍、開發(fā)及發(fā)布流程、基礎(chǔ)架構(gòu)及產(chǎn)品體系等,在這種情況下,試圖像新創(chuàng)的公司一樣,很快就將整個企業(yè)的 IT 組織轉(zhuǎn)型到 DevOps 上,顯然是不現(xiàn)實的,也是不可行的。在這個過程中,必定會面臨一定的困難與挑戰(zhàn)。
大型金融企業(yè)在軟件交付上通常面臨的挑戰(zhàn)
國內(nèi)金融企業(yè)主要的開發(fā)發(fā)布模式
對于國內(nèi)主要的金融企業(yè),雖然有部分企業(yè)已經(jīng)或者正在推行敏捷的開發(fā)方法,但是目前普遍采用的仍然是瀑布的開發(fā)方法(從立項、開發(fā)、測試到發(fā)布幾個階段順次執(zhí)行),并且主要是以項目為單位進行人力資源的組織和開發(fā)過程管理。
一個項目主要是實現(xiàn)一個或者若干個需求,由項目經(jīng)理主導(dǎo),組織若干開發(fā)人員進行開發(fā)(對于大的項目,則可能還會跨越多個大的開發(fā)部門,包含多個小的開發(fā)小組)。需求主要是由業(yè)務(wù)單位提出的。在具體執(zhí)行時,不同的業(yè)務(wù)單位都會提出不同的業(yè)務(wù)需求(不同的業(yè)務(wù)需求會成立不同的項目),而且從每個業(yè)務(wù)單位的角度來說,都會要求其所提出的需求具有絕對的優(yōu)先級,因此,在開發(fā)階段,就不可避免地需要并行進行多個項目的開發(fā)。項目雖然是多個,但是其背后所修改到的代碼及產(chǎn)品則可能是同一個,故而整個產(chǎn)品的交付過程自然而然就被分裂成了兩個階段:開發(fā)測試階段和投產(chǎn)階段。在開發(fā)測試階段,最主要的是以項目為單位進行開發(fā)測試以及部署(每個項目的代碼獨立部署),而在投產(chǎn)階段,雖然也是以項目為單位進行相關(guān)的流程管理,但是在具體發(fā)布時,則是以產(chǎn)品為單位進行部署安裝(不同項目中涉及到同一個產(chǎn)品的代碼合并到一起發(fā)布)。由于項目與產(chǎn)品兩個管理維度的切換,在實際的開發(fā)發(fā)布模式上,就主要演變出了如下三種模式:
按固定版本排期的開發(fā)模式
這是模式是按照一定的固定時間周期,統(tǒng)一將在此期間開發(fā)的所有項目代碼合并到一個版本中進行測試并集中發(fā)布到生產(chǎn)環(huán)境,按照時間周期的不同,有的稱為月度版本(即一個月度一個版本),有的稱為季度版本(即一個季度一個版本)。在這種模式之下,雖然開發(fā)過程是以項目為單位進行,但在真正的投產(chǎn)階段卻是以集中方式進行的,對于需要快速反饋響應(yīng)的需求,也必須等到整個版本發(fā)布的時候才能統(tǒng)一發(fā)布。
按項目排期的開發(fā)模式
在這種模式中,每個項目都會安排好自己的測試和發(fā)布到生產(chǎn)環(huán)境的日期,然后按照自己的開發(fā)計劃進行開發(fā)并發(fā)布。但是為了避免多個同時發(fā)布的項目重復(fù)執(zhí)行多次發(fā)布,并且為了合并對于同一個產(chǎn)品在不同項目上所被修改的代碼,對于在同一時間發(fā)布的項目,在發(fā)布前,會將多個項目的代碼或者二進制碼進行合并,然后一起發(fā)布。這種開發(fā)方式下,可以解決固定版本排期中,緊急需求無法快速發(fā)布的問題,但是同時所帶來的則是頻繁的生產(chǎn)環(huán)境發(fā)布,以及多個項目間的代碼沖突合并。