持续交付
隨著微服務(wù)架構(gòu)與容器虛擬化技術(shù)的發(fā)展,持續(xù)集成與持續(xù)交付的概念又重新回到了大家的視野,越來(lái)越多的公司開(kāi)始使用持續(xù)集成的系統(tǒng)來(lái)解決頻繁發(fā)布帶來(lái)的質(zhì)量問(wèn)題;使用持續(xù)交付的工具來(lái)實(shí)現(xiàn)代碼在不同環(huán)境上的自動(dòng)部署。
持續(xù)交付的概念和產(chǎn)生
傳統(tǒng)軟件的開(kāi)發(fā)與交付的周期都很漫長(zhǎng),一款普通的企業(yè)軟件通常需要十幾個(gè)開(kāi)發(fā)人員,幾個(gè)月的時(shí)間來(lái)完成,從需求的分析、系統(tǒng)的設(shè)計(jì)、編寫測(cè)試用例、系統(tǒng)開(kāi)發(fā)、單元測(cè)試、組裝測(cè)試到交付調(diào)試。有條不紊的流程與規(guī)范像一輛綠皮火車下的枕木,穩(wěn)定而可靠的保證整個(gè)系統(tǒng)緩慢的推進(jìn),每一次交付、升級(jí),都需要提供基礎(chǔ)的硬件、軟件的環(huán)境、軟件的代碼、軟件的文檔與手冊(cè)。
還記得剛剛邁入軟件開(kāi)發(fā)行業(yè)的時(shí)候,跟隨公司的服務(wù)團(tuán)隊(duì),駐場(chǎng)交付產(chǎn)品,每一個(gè)駐場(chǎng)工程師都按照之前預(yù)演過(guò)好多遍的流程,對(duì)照著系統(tǒng)的部署手冊(cè),一步一步的組裝硬件,安裝軟件,稍有差池,就要按照對(duì)應(yīng)的應(yīng)急預(yù)案進(jìn)行回滾。開(kāi)始的時(shí)候覺(jué)得交付像一個(gè)神圣的儀式,將用智慧和汗水構(gòu)建成的軟件交付給客戶使用,是一種非常榮耀和值得驕傲的事情;后來(lái)越來(lái)越多次的產(chǎn)品交付讓我深深的感覺(jué)每一次交付都像分娩一樣痛苦,捫心自問(wèn)是否有簡(jiǎn)單更舒暢的流程可以將軟件交付給客戶呢?
?
要想快速的交付,首先要明白軟件交付過(guò)程中遇到的核心問(wèn)題是什么。總結(jié)成兩個(gè)詞“自動(dòng)”與“可靠”。自動(dòng)是一個(gè)很寬泛的詞匯,在軟件交付中代表著測(cè)試自動(dòng)化、交付自動(dòng)化、運(yùn)維自動(dòng)化等等,而可靠講的是每一次交付要保證是當(dāng)前的交付是穩(wěn)定的或可回滾到穩(wěn)定版本的。為了解決“自動(dòng)”與“可靠”的問(wèn)題,敏捷開(kāi)發(fā)鼻祖Martin Fowler提出了持續(xù)集成與持續(xù)交付的概念,它所描述的軟件開(kāi)發(fā),是從原始需求識(shí)別到最終產(chǎn)品部署到生產(chǎn)環(huán)境這個(gè)過(guò)程中,需求以小批量形式在團(tuán)隊(duì)的各個(gè)角色間順暢流動(dòng),能夠以較短地周期完成需求的小粒度頻繁交付。頻繁的交付周期帶來(lái)了更迅速的對(duì)軟件的反饋,并且在這個(gè)過(guò)程中,需求分析、產(chǎn)品的用戶體驗(yàn)和交互 設(shè)計(jì)、開(kāi)發(fā)、測(cè)試、運(yùn)維等角色密切協(xié)作,相比于傳統(tǒng)的瀑布式軟件團(tuán)隊(duì),更少浪費(fèi)。通過(guò)這種小步快跑的方式,將小功能快速迭代、驗(yàn)證、交付,通過(guò)自動(dòng)化的工具,將測(cè)試、部署、運(yùn)維自動(dòng)化,減少需求在軟件生命周期中流動(dòng)的時(shí)間。
持續(xù)交付工具鏈
但是前輩只給了我們先進(jìn)的思想,并沒(méi)有給出默認(rèn)的實(shí)現(xiàn)。不同的公司、不同的產(chǎn)品、不同的技術(shù)棧、不同的開(kāi)發(fā)與部署形態(tài)決定了持續(xù)集成與持續(xù)交付注定是因人而異的,大家不斷摸索什么樣的方式是持續(xù)集成與持續(xù)交付的最佳實(shí)踐。歸根結(jié)底,持續(xù)集成與持續(xù)交付的難點(diǎn)在于如何屏蔽不同語(yǔ)言、不同框架、不同系統(tǒng)之間的持續(xù)集成與持續(xù)交付流程的差異性。曾經(jīng)幻想過(guò)是否能有一種方式可以歸約軟件的交付,而這就是Martin Fowler留給我們的課后思考題-論如何實(shí)現(xiàn)持續(xù)集成與持續(xù)交付的流程標(biāo)準(zhǔn)化。
當(dāng)你問(wèn)十個(gè)哲學(xué)家什么是哲學(xué)的時(shí)候,你會(huì)得到十一種答案,因?yàn)槊總€(gè)人都有對(duì)哲學(xué)不同的理解,對(duì)于持續(xù)交付也一樣。個(gè)人選取了目前開(kāi)源社區(qū)中最流行和優(yōu)秀的開(kāi)源軟件,經(jīng)過(guò)改造后搭建了全開(kāi)源端到端交付流水線,這應(yīng)該也是目前各大互聯(lián)網(wǎng)公司使用最廣泛的方案。其中Jenkins作為業(yè)內(nèi)優(yōu)秀的的CI/CD工具,擔(dān)任整套了工具鏈的核心組織工作。
?
持續(xù)交付 VS Devops
Devops定義:
DevOps(Development和Operations的組合詞)是一種重視“軟件開(kāi)發(fā)人員(Dev)”和“IT運(yùn)維技術(shù)人員(Ops)”之間溝通合作的文化、運(yùn)動(dòng)或慣例。透過(guò)自動(dòng)化“軟件交付”和“架構(gòu)變更”的流程,來(lái)使得構(gòu)建、測(cè)試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。
DevOps的出現(xiàn)有其必然性。在軟件開(kāi)發(fā)生命周期中,遇到了兩次瓶頸。第一次瓶頸是在需求階段和開(kāi)發(fā)階段之間,針對(duì)不斷變化的需求,對(duì)軟件開(kāi)發(fā)者提出了高要求,后來(lái)出現(xiàn)了敏捷方法論,強(qiáng)調(diào)適應(yīng)需求、快速迭代、持續(xù)交付。第二個(gè)瓶頸是在開(kāi)發(fā)階段和構(gòu)建部署階段之間,大量完成的開(kāi)發(fā)任務(wù)可能阻塞在部署階段,影響交付,于是有了DevOps。
Devops三大原則:
1、基礎(chǔ)設(shè)施即代碼(Infrastructure as Code)
DeveOps的基礎(chǔ)是將重復(fù)的事情使用自動(dòng)化腳本或軟件來(lái)實(shí)現(xiàn),例如Docker(容器化)、Jenkins(持續(xù)集成)、Puppet(基礎(chǔ)架構(gòu)構(gòu)建)、Vagrant(虛擬化平臺(tái))等
2、持續(xù)交付(Continuous Delivery)
持續(xù)交付是在生產(chǎn)環(huán)境發(fā)布可靠的軟件并交付給用戶使用。而持續(xù)部署則不一定交付給用戶使用。涉及到2個(gè)時(shí)間,TTR(Time to Repair)修復(fù)時(shí)間,TTM(Time To Marketing)產(chǎn)品上線時(shí)間。要做到高效交付可靠的軟件,需要盡可能的減少這2個(gè)時(shí)間。部署可以有多種方式,比如藍(lán)綠部署、金絲雀部署等。
3、協(xié)同工作(Culture of Collaboration)
開(kāi)發(fā)者和運(yùn)維人員必須定期進(jìn)行密切的合作。開(kāi)發(fā)應(yīng)該把運(yùn)維角色理解成軟件的另一個(gè)用戶群體。協(xié)作有幾個(gè)的建議:1、自動(dòng)化(減少不必要的協(xié)作);2、小范圍(每次修改的內(nèi)容不宜過(guò)多,減少發(fā)布的風(fēng)險(xiǎn));3、統(tǒng)一信息集散地(如wiki,讓雙方能夠共享信息);4、標(biāo)準(zhǔn)化協(xié)作工具(比如jenkins)
持續(xù)交付和Devops的關(guān)系
devops(開(kāi)發(fā)到運(yùn)維)是另外一個(gè)現(xiàn)在很火的工程概念,和持續(xù)交付的關(guān)系很多時(shí)候讓人傻傻分不清楚。從概念上來(lái)說(shuō),DevOps更關(guān)注Ops(Operations), 持續(xù)交付更關(guān)注Dev (Development) 。他們的目標(biāo)都是解決相同的問(wèn)題,即加速軟件開(kāi)發(fā),減少軟件開(kāi)發(fā)到交付或上線的時(shí)間,并使開(kāi)發(fā)、測(cè)試、運(yùn)維幾個(gè)角色協(xié)作的更緊密。一般來(lái)說(shuō)個(gè)人傾向于兩者說(shuō)的是同一回事,它們只不過(guò)是一枚硬幣的正反面而已,在概念上并沒(méi)有什么爭(zhēng)議。
引用《持續(xù)交付》譯者喬梁的觀點(diǎn),細(xì)微的差別可能就是持續(xù)交付體現(xiàn)的是產(chǎn)品交付的完整過(guò)程,devops強(qiáng)調(diào)的是從開(kāi)發(fā)到運(yùn)維的交付,傳統(tǒng)的持續(xù)集成則更強(qiáng)調(diào)產(chǎn)品研發(fā)過(guò)程(開(kāi)發(fā)+測(cè)試)。
?
持續(xù)交付產(chǎn)品:
博客將會(huì)對(duì)這些產(chǎn)品一一介紹
- jenkins
- docker
- maven
- git
- jmeter?
- zabbix
- elk
- sonar
?
總結(jié)
- 上一篇: weka机器学习-01-weka简介及基
- 下一篇: 联想Y471A蓝牙功能启用