部署流水線
指一個應(yīng)用程序從構(gòu)建,部署,測試到發(fā)布整個過程的 自動化 實現(xiàn)

部署流水線的目標(biāo)
- 讓軟件從構(gòu)建,部署,測試到發(fā)布整個過程對所有人可見,促進合作
- 改善了反饋,讓我們能及早的發(fā)現(xiàn)并解決問題
- 能夠讓一個團隊通過完全自動化的過程在任意環(huán)境上部署和發(fā)布軟件的任意版本
常見的發(fā)布反模式:
手工部署軟件
由個人或者小組來分別實行,容易發(fā)生人為錯誤,依賴于部署專家,部署不可重復(fù)且不可靠,手工部署流程被寫在文檔里,但是一般文檔不能及時更新,不易于理解開發(fā)完成后向類生產(chǎn)環(huán)境中部署
開發(fā)團隊和執(zhí)行部署任務(wù)的人員之間協(xié)作少,開發(fā)測試與運維人員交流成本大生產(chǎn)環(huán)境的手工配置管理
運維團隊需要為每次發(fā)布準(zhǔn)備環(huán)境,系統(tǒng)無法回滾到之前部署的某個配置
自動化部署的威力
自動化的測試和部署以及全面的配置管理結(jié)合在一起,可以實現(xiàn)一鍵式軟件發(fā)布,使軟件發(fā)布能夠成為一個低風(fēng)險,頻繁,廉價,迅速且可預(yù)見的過程。就像是工業(yè)流水線上生產(chǎn)的零件一樣,可以確保次的生產(chǎn)規(guī)格相同,而且這個過程可以不斷重復(fù)。
頻繁自動化發(fā)布軟件的優(yōu)點:
頻繁發(fā)布軟件,使得軟件的各個版本差異較小,容易回滾,減少與發(fā)布相關(guān)的風(fēng)險,交付團隊可以及時得到反饋并作出應(yīng)對
配置管理
減少錯誤:在版本控制庫中盡可能的管理所有可能變動的內(nèi)容,比如配置文件,創(chuàng)建數(shù)據(jù)庫及其模式的腳本,構(gòu)建腳本,測試工具,甚至開發(fā)環(huán)境和操作系統(tǒng)的配置。
我們的經(jīng)驗是依賴于手工配置,但是配置參數(shù)都由手工配置管理難免會出現(xiàn)人為錯誤,而且很少有那種檢查防止能用于配置信息的驗證。所以將配置信息放入版本控制系統(tǒng)中,如果你不小心修改了配置信息,系統(tǒng)會作出提醒,因為配置改動導(dǎo)致軟件出現(xiàn)的問題難以查找。
持續(xù)集成
集成階段是軟件開發(fā)后期最不可預(yù)測,最不易管理的階段,集成頻率越低,集成時的工作越難開展。所以我們不能回避這個任務(wù),解決它的最好辦法就是頻繁地去做,事實上應(yīng)該每次提交修改后都做集成。持續(xù)集成會及時檢測到任何一次破壞已有系統(tǒng)或者不滿足客戶驗收測試的提交,堅持這個實踐,軟件會一直處于可用狀態(tài)。
所以持續(xù)集成就是不斷地將新的內(nèi)容更新到可用軟件中,并保證軟件的可運行,每一個改動或增加都要在較短的時間內(nèi)反映到軟件中。
理想的狀態(tài)
除了需要人為決定的事情外,其余所有的流程應(yīng)該都是自動化的。比如驗收測試,數(shù)據(jù)庫的升級降級,甚至網(wǎng)絡(luò)和防火墻的配置。
自動化發(fā)布流程就相當(dāng)于一個工具,你去干砍柴,拿了一把斧頭,如果你只是砍幾顆樹,那么這把斧頭就足夠用了,你完全不會考慮去很遠(yuǎn)的集市上弄一個電鋸,但是要砍一片樹林,無疑去弄個電鋸才是明智的選擇。況且自動化發(fā)布流程不會像電鋸一樣被損耗。
小結(jié)
提前做麻煩事,將讓你覺得痛苦的事反復(fù)的做,將大麻煩化小,就像一團麻,每天整理一點也不至于到最后無從下手。
及時的反饋對于軟件的開發(fā)至關(guān)重要,客戶能夠及時獲得可運行的軟件,并提出需要改進的點,開發(fā)團隊可以及時獲得反饋并作出改進。
軟件交付需要每個成員擁有高度的責(zé)任感,及時溝通交流解決問題,而不是相互指責(zé),遇到問題時客戶最關(guān)心的是盡快解決問題,而不是追查責(zé)任人。
疑問
- 現(xiàn)在常見的發(fā)布反模式:手工部署軟件,開發(fā)完成后向類生產(chǎn)環(huán)境中部署,生產(chǎn)環(huán)境的手工配置管理,這些反模式都存在一定的不足,現(xiàn)在的軟件開發(fā)中是根據(jù)具體實際的情況選擇部署方式嗎?具體在什么情況下選擇哪種方式呢?
- 配置管理:我們現(xiàn)在使用的GitHub能夠管理配置信息嗎?
- 對于不同的軟件來說部署流水線不同,怎么根據(jù)軟件的規(guī)模來判斷是否需要部署流水線?
- 部署工具是對于一個軟件特制的嗎?
- 對于軟件發(fā)布的具體流程不是特別清楚。